Here you can see the full list of changes between each Flask-Restless release. Numbers following a pound sign (#) refer to GitHub issues.


As of version 0.6, Flask-Restless supports both pure SQLAlchemy and Flask-SQLAlchemy models. Before that, it supported only Elixir models.

Version 0.12.1

Released on December 1, 2013.

  • #222: on POST and PATCH requests, recurse into nested relations to get or create instances of related models.
  • #246: adds pysqlite to test requirements.
  • #260: return a single object when making a GET request to a relation sub-URL.
  • #264: all methods now execute postprocessors after setting headers.
  • #265: convert strings to dates in related models when making POST requests.

Version 0.12.0

Released on August 8, 2013.

  • #188: provides metadata as well as normal data in JSONP responses.
  • #193: allows DELETE requests to related instances.
  • #215: removes Python 2.5 tests from Travis configuration.
  • #216: don’t resolve Query objects until pagination function.
  • #217: adds missing indices in format string.
  • #220: fix bug when checking attributes on a hybrid property.
  • #227: allows client to request that the server use the current date and/or time when setting the value of a field.
  • #228 (as well as #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 415 Unsupported Media Type response.
  • Responses now have Content-Type: application/json.
  • #180: allow more expressive has and any searches.
  • #195: convert UUID objects to strings when converting an instance of a model to a dictionary.
  • #202: allow setting hybrid properties with expressions and setters.
  • #203: adds the include_methods keyword argument to APIManager.create_api(), which allows JSON responses to include the result of calling arbitrary methods of instances of models.
  • #204, 205: allow parameters in Content-Type header.

Version 0.10.1

Released on May 8, 2013.

  • #115: change assertEqual() methods to assert statements in tests.
  • #184, #186: Switch to nose for testing.
  • #197: documents technique for adding filters in processors when there are none initially.

Version 0.10.0

Released on April 30, 2013.

  • #2: adds basic GET access to one level of relationship depth for models.
  • #113: interpret empty strings for date fields as None objects.
  • #115: use Python’s built-in assert statements for testing
  • #128: allow disjunctions when filtering search queries.
  • #130: documentation and examples now more clearly show search examples.
  • #135: added support for hybrid properties.
  • #139: remove custom code for authentication in favor of user-defined pre- and postprocessors (this supercedes the fix from #154).
  • #141: relax requirement for version of python-dateutil to be not equal to 2.0 if using Python version 2.6 or 2.7.
  • #146: preprocessors now really execute before other code.
  • #148: adds support for SQLAlchemy association proxies.
  • #154 (this fix is irrelevant due to #139): authentication function now may raise an exception instead of just returning a Boolean.
  • #157: POST requests now receive a response containing all fields of the created instance.
  • #162: allow pre- and postprocessors to indicate that no change has occurred.
  • #164, #172, and #173: PATCH requests update fields on related instances.
  • #165: fixed bug in automatic exposing of URLs for related instances.
  • #170: respond with correct HTTP status codes when a query for a single instance results in none or multiple instances.
  • #174: allow dynamically loaded relationships for automatically exposed URLs of related instances.
  • #176: get model attribute instead of column name when getting name of primary key.
  • #182: allow POST requests that set hybrid properties.
  • #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.
  • #116: handle requests which raise IntegrityError.

Version 0.9.2

Released on February 4, 2013.

  • #82, #134, #136: added request pre- and postprocessors.
  • #120: adds support for JSON-P callbacks in GET requests.

Version 0.9.1

Released on January 17, 2013.

  • #126: fix documentation build failure due to bug in a dependency.
  • #127: added “ilike” query operator.

Version 0.9.0

Released on January 16, 2013.

  • Removed ability to provide a Session class when initializing 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.
  • #105: added ability to set a list of related model instances on a model.
  • #107: server responds with an error code when a PATCH or POST request specifies a field which does not exist on the model.
  • #108: dynamically loaded relationships should now be rendered correctly by the views._to_dict() function regardless of whether they are a list or a single object.
  • #109: use sphinxcontrib-issuetracker to render links to GitHub issues in documentation.
  • #110: enable results_per_page query parameter for clients, and added max_results_per_page keyword argument to APIManager.create_api().
  • #114: fix bug where string representations of integers were converted to integers.
  • #117: allow adding related instances on PATCH requests for one-to-one relationships.
  • #123: PATCH requests to instances which do not exist result in a 404 Not Found response.

Version 0.8.0

Released on November 19, 2012.

  • #94: views._to_dict() should return a single object instead of a list when resolving dynamically loaded many-to-one relationships.
  • #104: added num_results key to paginated JSON responses.

Version 0.7.0

Released on October 9, 2012.

  • Added working include and exclude functionality to the views._to_dict() function.
  • Added exclude_columns keyword argument to APIManager.create_api().
  • #79: attempted to access attribute of None in constructor of APIManager.
  • #83: allow POST requests with one-to-one related instances.
  • #86: allow specifying include and exclude for related models.
  • #91: correctly handle POST requests to nullable DateTime columns.
  • #93: Added a total_pages mapping to the JSON response.
  • #98: GET requests to the function evaluation endpoint should not have a data payload.
  • #101: exclude in 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 README to when running pip bundle foobar Flask-Restless.
  • Separated API blueprint creation from registration, using APIManager.create_api() and APIManager.create_api_blueprint().
  • Added support for pure SQLAlchemy in addition to Flask-SQLAlchemy.
  • #74: Added post_form_preprocessor keyword argument to APIManager.create_api().
  • #77: validation errors are now correctly handled on 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 examples/, showing how to create separate API endpoints for a single model.
  • Added include_columns keyword argument to 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 module and corrected documentation about how function evaluation works.
  • Added allow_functions keyword argument to create_api().
  • Fixed bug where we weren’t allowing PUT requests in create_api().
  • Added collection_name keyword argument to create_api() to allow user provided names in URLs.
  • Added allow_patch_many keyword argument to create_api() to allow enabling or disabling the PATCH many functionality.
  • Disable the PATCH many functionality by default.

Version 0.3

Released on March 4, 2012.

  • Initial release in Flask extension format.