Changelog History
Page 1
-
v1.0.0.b2 Changes
๐ This is a beta release; these changes will appear in the 1.0.0 release.
๐ Not yet released.
- ๐ Eliminates all documentation build warnings for bad references.
- ๐ Changes serialization/deserialization to class-based implementation instead of a function-based implementation. This also adds support for serialization of heterogeneous collections.
- โ Removes
mimerender
_ as a dependency. - :issue:
7
: allows filtering before function evaluation. - :issue:
49
: deserializers now expect a complete JSON API document. - :issue:
200
: be smarter about determining thecollection_name
for polymorphic models defined with single-table inheritance. - :issue:
253
: don't assign to callable attributes of models. - :issue:
268
: adds top-level endpoint that exposes API schema. - ๐ :issue:
479
: removes duplicate (and sometimes conflicting) :http:header:Content-Type
header in responses. - :issue:
481,488
: added negation (not
) operator for search. - ๐ :issue:
492
: support JSON API recommended "simple" filtering. - :issue:
508
: flush the session before postprocessors, and commit after. - โก๏ธ :issue:
534
: when updating a resource, give a clearer error message if the resource ID in the JSON document is not a JSON string. - ๐ :issue:
536
: adds support for single-table inheritance. - ๐ :issue:
540
: correctly support models that don't have a column named "id". - ๐จ :issue:
545
: refactors implementation of :class:.DefaultDeserializer
so that it is easier for subclasses to override different subprocedures. - ๐ :issue:
546
: adds support for joined table inheritance. - :issue:
548
: requests can now use theAccept: */*
header. - ๐ :issue:
559
: fixes bug that stripped attributes with JSON API reserved names (like "type") when deserializing resources. - โ
:issue:
583
: fixes failing tests when using simplejson. - :issue:
590
: allows user to specify a custom operator for filters. - ๐ :issue:
599
: fixesunicode
bug using :func:!urlparse.urljoin
with thefuture
_ library in resource serialization. - ๐ :issue:
625
: adds schema metadata to root endpoint. - :issue:
626
: allows the client to request case-insensitive sorting.
.. _future: http://python-future.org/
-
v1.0.0.b1 Changes
April 14, 2016๐ This is a beta release; these changes will appear in the 1.0.0 release.
๐ Released on April 2, 2016.
- ๐ :issue:
255
: adds support for filtering by PostgreSQL network operators. - :issue:
257
: ensures additional attributes specified by the user actually exist on the model. - :issue:
363
(partial solution): don't useCOUNT
on requests that don't require pagination. - ๐ :issue:
404
: Major overhaul of Flask-Restless to support JSON API. - Increases minimum version requirement for
python-dateutil
to be strictly greater than 2.2 to avoid parsing bug. - :issue:
331,415
: documents the importance of URL encoding when using thelike
operator to filter results. - :issue:
376
: add anot_like
operator for filter objects. - :issue:
431
: adds aurl_prefix
keyword argument to the :class:.APIManager
constructor, so one can specify a URL prefix once for all created APIs. - :issue:
449
: roll back the session on any SQLAlchemy error, not just a few. - :issue:
432,462
: alias relation names when sorting by multiple attributes on a relationship. - :issue:
436,453
: use__table__.name
instead of__tablename__
to infer the collection name for the SQLAlchemy model. - :issue:
440,475
: uses the serialization function provided at the time of invoking :meth:.APIManager.create_api
to serialize each resource correctly, depending on its type. - :issue:
474
: include license files in built wheel for distribution. - :issue:
501
: allows empty string forurl_prefix
keyword argument to :meth:.APIManager.create_api
. - :issue:
476
: use the primary key provided at the time of invoking :meth:.APIManager.create_api
to build resource urls in responses.
Older versions
.. note::
As of version 0.13.0, Flask-Restless supports Python 2.6, 2.7, and 3. Before that, it supported Python 2.5, 2.6, and 2.7.
.. note::
As of version 0.6, Flask-Restless supports both pure SQLAlchemy and Flask-SQLAlchemy models. Before that, it supported only Elixir models.
๐ Version 0.17.0
๐ Released on February 17, 2015. - Corrects bug to allow delayed initialization of multiple Flask applications. - :issue:`167`: allows custom serialization/deserialization functions. - :issue:`198`: allows arbitrary Boolean expressions in search query filters. - :issue:`226`: allows creating APIs before initializing the Flask application object. - :issue:`274`: adds the :func:`.url_for` function for computing URLs from models. - ๐ :issue:`379`: improves datetime parsing in search requests. - ๐ :issue:`398`: fixes bug where DELETE_SINGLE processors were not actually used. - :issue:`400`: disallows excluding a primary key on a :http:method:`POST` request. ๐ Version 0.16.0
๐ Released on February 3, 2015.
- โ :issue:
237
: allows bulk delete of model instances via theallow_delete_many
keyword argument. - :issue:
313,389
: :meth:.APIManager.init_app
now can be correctly used to initialize multiple Flask applications. - :issue:
327,391
: allows ordering searches by fields on related instances. - :issue:
353
: allows search queries to specifygroup_by
directives. - :issue:
365
: allows preprocessors to specify return values on :http:method:get
requests. - :issue:
385
: makes theinclude_methods
keywords argument respect model properties.
๐ Version 0.15.1
๐ Released on January 2, 2015. - :issue:`367`: catch :exc:`sqlalchemy.exc.IntegrityError`, :exc:`sqlalchemy.exc.DataError`, and :exc:`sqlalchemy.exc.ProgrammingError` exceptions in all view methods. - :issue:`374`: import :class:`sqlalchemy.schema.Column` from :mod:`!sqlalchemy` directly, instead of :mod:`!sqlalchemy.sql.schema`. ๐ Version 0.15.0
๐ Released on October 30, 2014.
- ๐ป :issue:
320
: detect settable hybrid properties instead of raising an exception. - :issue:
350
: allows exclude/include columns to be specified as SQLAlchemy column objects in addition to strings. - โช :issue:
356
: rollback the SQLAlchemy session on a failed :http:method:patch
request. - ๐ :issue:
368
: adds missing documentation on using custom queries (see :ref:customqueries
)
๐ Version 0.14.2
๐ Released on September 2, 2014. - ๐ :issue:`351,355`: fixes bug in getting related models from a model with hybrid properties. ๐ Version 0.14.1
๐ Released on August 26, 2014.
- ๐ :issue:
210
: lists some related projects in the documentation. - ๐ :issue:
347
: adds automated build testing for PyPy 3. - โ :issue:
354
: renamesis_deleted
towas_deleted
when providing keyword arguments to postprocessor for :http:method:delete
method in order to match documentation.
๐ Version 0.14.0
๐ Released on August 12, 2014. - ๐ Fixes bug where primary key specified by user was not being checked in some :http:method:`post` requests and some search queries. - :issue:`223`: documents CORS example. - :issue:`280`: don't expose raw SQL in responses on database errors. - โ :issue:`299`: show error message if search query tests for ``NULL`` using comparison operators. - :issue:`315`: check for query object being ``None``. - :issue:`324`: :http:method:`delete` should only return :http:statuscode:`204` if something is actuall deleted. - ๐ :issue:`325`: support ``null`` inside ``has`` search operators. - โ :issue:`328`: enable automatic testing for Python 3.4. - :issue:`333`: enforce limit in :func:`!flask_restless.views.helpers.count`. - โก๏ธ :issue:`338`: catch validation exceptions when attempting to update relations. - :issue:`339`: use user-specified primary key on :http:method:`patch` requests. - :issue:`344`: correctly encodes Unicode fields in responses. ๐ Version 0.13.1
๐ Released on April 21, 2014.
- ๐ :issue:
304
: fixes mimerender bug due to how Python 3.4 handles decorators.
๐ Version 0.13.0
๐ Released on April 6, 2014. - ๐ Allows universal preprocessors or postprocessors; see :ref:`universal`. - ๐ Allows specifying which primary key to use when creating endpoint URLs. - Requires SQLAlchemy version 0.8 or greater. - ๐ :issue:`17`: use Flask's :attr:`flask.Request.json` to parse incoming JSON requests. - :issue:`29`: replace custom ``jsonify_status_code`` function with built-in support for ``return jsonify(), status_code`` style return statements (new in Flask 0.9). - :issue:`51`: Use `mimerender`_ to render dictionaries to JSON format. - ๐ :issue:`247`: adds support for making :http:method:`post` requests to dictionary-like association proxies. - :issue:`249`: returns :http:statuscode:`404` if a search reveals no matching results. - :issue:`254`: returns :http:statuscode:`404` if no related field exists for a request with a related field in the URL. - :issue:`256`: makes search parameters available to postprocessors for :http:method:`get` and :http:method:`patch` requests that access multiple resources. - ๐ :issue:`263`: Adds Python 3.3 support; drops Python 2.5 support. - :issue:`267`: Adds compatibility for legacy Microsoft Internet Explorer versions 8 and 9. - :issue:`270`: allows the ``query`` attribute on models to be a callable. - :issue:`282`: order responses by primary key if no order is specified. - :issue:`284`: catch ``DataError`` and ``ProgrammingError`` exceptions when bad data are sent to the server. - โก๏ธ :issue:`286`: speed up paginated responses by using optimized count() function. - :issue:`293`: allows :class:`sqlalchemy.types.Time` fields in JSON responses. .. _mimerender: https://mimerender.readthedocs.io ๐ Version 0.12.1
๐ Released on December 1, 2013.
- :issue:
222
: on :http:method:post
and :http:method:patch
requests, recurse into nested relations to get or create instances of related models. - โ
:issue:
246
: addspysqlite <https://pypi.python.org/pypi/pysqlite>
_ to test requirements. - :issue:
260
: return a single object when making a :http:method:get
request to a relation sub-URL. - :issue:
264
: all methods now execute postprocessors after setting headers. - :issue:
265
: convert strings to dates in related models when making :http:method:post
requests.
๐ Version 0.12.0
๐ Released on August 8, 2013. - ๐ :issue:`188`: provides metadata as well as normal data in JSONP responses. - :issue:`193`: allows :http:method:`delete` requests to related instances. - ๐ง :issue:`215`: removes Python 2.5 tests from Travis configuration. - :issue:`216`: don't resolve Query objects until pagination function. - :issue:`217`: adds missing indices in format string. - :issue:`220`: fix bug when checking attributes on a hybrid property. - :issue:`227`: allows client to request that the server use the current date and/or time when setting the value of a field. - ๐ :issue:`228` (as well as :issue:`212,218,231`): fixes issue due to a module removed from Flask version 0.10. ๐ Version 0.11.0
๐ Released on May 18, 2013.
- Requests that require a body but don't have
Content-Type: application/json
will cause a :http:statuscode:415
response. - Responses now have
Content-Type: application/json
. - :issue:
180
: allow more expressivehas
andany
searches. - :issue:
195
: convert UUID objects to strings when converting an instance of a model to a dictionary. - :issue:
202
: allow setting hybrid properties with expressions and setters. - :issue:
203
: adds theinclude_methods
keyword argument to :meth:.APIManager.create_api
, which allows JSON responses to include the result of calling arbitrary methods of instances of models. - :issue:
204
, 205: allow parameters inContent-Type
header.
๐ Version 0.10.1
๐ Released on May 8, 2013. - โ :issue:`115`: change ``assertEqual()`` methods to ``assert`` statements in tests. - โ :issue:`184,186`: Switch to `nose <http://nose.readthedocs.org>`_ for testing. - :issue:`197`: documents technique for adding filters in processors when there are none initially. ๐ Version 0.10.0
๐ Released on April 30, 2013.
- :issue:
2
: adds basic :http:method:get
access to one level of relationship depth for models. - :issue:
113
: interpret empty strings for date fields asNone
objects. - โ
:issue:
115
: use Python's built-in assert statements for testing - :issue:
128
: allow disjunctions when filtering search queries. - ๐ :issue:
130
: documentation and examples now more clearly show search examples. - ๐ :issue:
135
: added support for hybrid properties. - ๐ :issue:
139
: remove custom code for authentication in favor of user-defined pre- and postprocessors (this supercedes the fix from :issue:154
). - :issue:
141
: relax requirement for version ofpython-dateutil <http://labix.org/python-dateutil>
_ to be not equal to 2.0 if using Python version 2.6 or 2.7. - :issue:
146
: preprocessors now really execute before other code. - โ
:issue:
148
: adds support for SQLAlchemyassociation proxies <http://docs.sqlalchemy.org/en/latest/orm/extensions/associationproxy.html>
_. - :issue:
154
(this fix is irrelevant due to :issue:139
): authentication function now may raise an exception instead of just returning a Boolean. - :issue:
157
: :http:method:post
requests now receive a response containing all fields of the created instance. - :issue:
162
: allow pre- and postprocessors to indicate that no change has occurred. - โก๏ธ :issue:
164,172,173
: :http:method:patch
requests update fields on related instances. - ๐ :issue:
165
: fixed bug in automatic exposing of URLs for related instances. - :issue:
170
: respond with correct HTTP status codes when a query for a single instance results in none or multiple instances. - :issue:
174
: allow dynamically loaded relationships for automatically exposed URLs of related instances. - :issue:
176
: get model attribute instead of column name when getting name of primary key. - :issue:
182
: allow :http:method:post
requests that set hybrid properties. - ๐ฒ :issue:
152
: adds some basic server-side logging for exceptions raised by views.
๐ Version 0.9.3
๐ Released on February 4, 2013. - ๐ Fixes incompatibility with Python 2.5 try/except syntax. - :issue:`116`: handle requests which raise :exc:`~sqlalchemy.exc.IntegrityError`. ๐ Version 0.9.2
๐ Released on February 4, 2013.
- :issue:
82,134,136
: added request pre- and postprocessors. - ๐ :issue:
120
: adds support for JSON-P callbacks in :http:method:get
requests.
๐ Version 0.9.1
๐ Released on January 17, 2013. - ๐ :issue:`126`: fix documentation build failure due to bug in a dependency. - :issue:`127`: added "ilike" query operator. ๐ Version 0.9.0
๐ Released on January 16, 2013.
- โ Removed ability to provide a :class:
~sqlalchemy.orm.session.Session
class when initializing :class:.APIManager
; provide an instance of the class instead. - ๐ Changes some dynamically loaded relationships used for testing and in examples to be many-to-one instead of the incorrect one-to-many. Versions of SQLAlchemy after 0.8.0b2 raise an exception when the latter is used.
- :issue:
105
: added ability to set a list of related model instances on a model. - :issue:
107
: server responds with an error code when a :http:method:patch
or :http:method:post
request specifies a field which does not exist on the model. - :issue:
108
: dynamically loaded relationships should now be rendered correctly by the :func:!views._to_dict
function regardless of whether they are a list or a single object. - :issue:
109
: usesphinxcontrib-issuetracker
_ to render links to GitHub issues in documentation. - :issue:
110
: enableresults_per_page
query parameter for clients, and addedmax_results_per_page
keyword argument to :meth:.APIManager.create_api
. - :issue:
114
: fix bug where string representations of integers were converted to integers. - :issue:
117
: allow adding related instances on :http:method:patch
requests for one-to-one relationships. - :issue:
123
: :http:method:patch
requests to instances which do not exist result in a :http:statuscode:404
response.
โ .. _sphinxcontrib-issuetracker: https://sphinxcontrib-issuetracker.readthedocs.org/en/latest
๐ Version 0.8.0
๐ Released on November 19, 2012. - :issue:`94`: :func:`!views._to_dict` should return a single object instead of a list when resolving dynamically loaded many-to-one relationships. - :issue:`104`: added ``num_results`` key to paginated JSON responses. ๐ Version 0.7.0
๐ Released on October 9, 2012.
- โ Added working
include
andexclude
functionality to the :func:!views._to_dict
function. - Added
exclude_columns
keyword argument to :meth:.APIManager.create_api
. - :issue:
79
: attempted to access attribute ofNone
in constructor of :class:.APIManager
. - :issue:
83
: allow :http:method:post
requests with one-to-one related instances. - :issue:
86
: allow specifying include and exclude for related models. - :issue:
91
: correctly handle :http:method:post
requests to nullable :class:~sqlalchemy.types.DateTime
columns. - :issue:
93
: Added atotal_pages
mapping to the JSON response. - :issue:
98
: :http:method:get
requests to the function evaluation endpoint should not have a data payload. - :issue:
101
:exclude
in :func:!views._to_dict
function now correctly excludes requested fields from the returned dictionary.
๐ Version 0.6
๐ Released on June 20, 2012. - โ Added support for accessing model instances via arbitrary primary keys, instead of requiring an integer column named ``id``. - โ Added example which uses curl as a client. - โ Added support for pagination of responses. - ๐ Fixed issue due to symbolic link from :file:`README` to :file:`README.md` when running ``pip bundle foobar Flask-Restless``. - ๐จ Separated API blueprint creation from registration, using :meth:`.APIManager.create_api` and :meth:`.APIManager.create_api_blueprint`. - โ Added support for pure SQLAlchemy in addition to Flask-SQLAlchemy. - :issue:`74`: Added ``post_form_preprocessor`` keyword argument to :meth:`.APIManager.create_api`. - :issue:`77`: validation errors are now correctly handled on :http:method:`PATCH` requests. ๐ Version 0.5
๐ Released on April 10, 2012.
- Dual-licensed under GNU AGPLv3+ and 3-clause BSD license.
- โ Added capturing of exceptions raised during field validation.
- โ Added :file:
examples/separate_endpoints.py
, showing how to create separate API endpoints for a single model. - Added
include_columns
keyword argument to :meth:.APIManager.create_api
method to allow users to specify which columns of the model are exposed in the API. - ๐ Replaced Elixir with Flask-SQLAlchemy. Flask-Restless now only supports Flask-SQLAlchemy.
๐ Version 0.4
๐ Released on March 29, 2012. - โ Added Python 2.5 and Python 2.6 support. - ๐ Allow users to specify which HTTP methods for a particular API will require authentication and how that authentication will take place. - โ Created base classes for test cases. - ๐ Moved the ``evaluate_functions`` function out of the :mod:`!flask_restless.search` module and corrected documentation about how function evaluation works. - Added `allow_functions` keyword argument to :meth:`.APIManager.create_api`. - ๐ Fixed bug where we weren't allowing PUT requests in :meth:`.APIManager.create_api`. - Added ``collection_name`` keyword argument to :meth:`.APIManager.create_api` to allow user provided names in URLs. - Added ``allow_patch_many`` keyword argument to :meth:`.APIManager.create_api` to allow enabling or disabling the PATCH many functionality. - 0๏ธโฃ Disable the PATCH many functionality by default. ๐ Version 0.3
๐ Released on March 4, 2012.
- ๐ Initial release in Flask extension format.
- ๐ :issue:
-
v0.17.0 Changes
April 14, 2016- Corrects bug to allow delayed initialization of multiple Flask applications.
- #167: allows custom serialization/deserialization functions.
- #198: allows arbitrary Boolean expressions in search query filters.
- #226: allows creating APIs before initializing the Flask application object.
- #274: adds the
url_for
function for computing URLs from models. - ๐ #379: improves datetime parsing in search requests.
- ๐ #398: fixes bug where DELETE_SINGLE processors were not actually used.
- #400: disallows excluding a primary key on a
POST
request.
-
v0.16.0 Changes
April 14, 2016- โ #237: allows bulk delete of model instances via the
allow_delete_many
keyword argument. - #313, #389:
APIManager.init_app
now can be correctly used to
๐ initialize multiple Flask applications. - #327, #391: allows ordering searches by fields on related instances.
- #353: allows search queries to specify
group_by
directives. - #365: allows preprocessors to specify return values on
get
requests. - #385: makes the
include_methods
keywords argument respect model properties.
- โ #237: allows bulk delete of model instances via the
-
v0.15.1 Changes
April 14, 2016 -
v0.15.0 Changes
April 14, 2016- ๐ป #320: detect settable hybrid properties instead of raising an exception.
- #350: allows exclude/include columns to be specified as SQLAlchemy column
objects in addition to strings. - โช #356: rollback the SQLAlchemy session on a failed
patch
request. - ๐ #368: adds missing documentation on using custom queries (see
๐ the "Custom queries" section of the documentation)
-
v0.14.2 Changes
April 14, 2016 -
v0.14.1 Changes
April 14, 2016 -
v0.14.0 Changes
April 14, 2016- ๐ Fixes bug where primary key specified by user was not being checked in some
POST
requests and some search queries. - #223: documents CORS example.
- #280: don't expose raw SQL in responses on database errors.
- โ
#299: show error message if search query tests for
NULL
using comparison
operators. - #315: check for query object being
None
. - #324:
DELETE
should only return204
if
something is actually deleted. - ๐ #325: support
null
insidehas
search operators. - โ #328: enable automatic testing for Python 3.4.
- #333: enforce limit in
helpers.count
. - โก๏ธ #338: catch validation exceptions when attempting to update relations.
- #339: use user-specified primary key on
PATCH
requests. - #344: correctly encodes Unicode fields in responses.
- ๐ Fixes bug where primary key specified by user was not being checked in some
-
v0.13.1 Changes
April 14, 2016- ๐ #304: fixes mimerender bug due to how Python 3.4 handles decorators.