Changelog¶
Here you can see the full list of changes between each Flask-Restless release. Numbers following a pound sign (#) refer to GitHub issues.
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.15.1¶
Released on January 2, 2015.
Version 0.15.0¶
Released on October 30, 2014.
- #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 Custom queries)
Version 0.14.2¶
Released on September 2, 2014.
Version 0.14.1¶
Released on August 26, 2014.
Version 0.14.0¶
Released on August 12, 2014.
- 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 return 204 No Content if something is actuall 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.
Version 0.13.1¶
Released on April 21, 2014.
- #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 Universal preprocessors and postprocessors.
- Allows specifying which primary key to use when creating endpoint URLs.
- Requires SQLAlchemy version 0.8 or greater.
- #17: use Flask’s
flask.Request.json
to parse incoming JSON requests. - #29: replace custom
jsonify_status_code
function with built-in support forreturn jsonify(), status_code
style return statements (new in Flask 0.9). - #51: Use mimerender to render dictionaries to JSON format.
- #247: adds support for making POST requests to dictionary-like association proxies.
- #249: returns 404 Not Found if a search reveals no matching results.
- #254: returns 404 Not Found if no related field exists for a request with a related field in the URL.
- #256: makes search parameters available to postprocessors for GET and PATCH requests that access multiple resources.
- #263: Adds Python 3.3 support; drops Python 2.5 support.
- #267: Adds compatibility for legacy Microsoft Internet Explorer versions 8 and 9.
- #270: allows the
query
attribute on models to be a callable. - #282: order responses by primary key if no order is specified.
- #284: catch
DataError
andProgrammingError
exceptions when bad data are sent to the server. - #286: speed up paginated responses by using optimized count() function.
- #293: allows
sqlalchemy.Time
fields in JSON responses.
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
andany
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 toAPIManager.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 toassert
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 initializingAPIManager
; 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 addedmax_results_per_page
keyword argument toAPIManager.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
andexclude
functionality to theviews._to_dict()
function. - Added
exclude_columns
keyword argument toAPIManager.create_api()
. - #79: attempted to access attribute of
None
in constructor ofAPIManager
. - #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
inviews._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
toREADME.md
when runningpip bundle foobar Flask-Restless
. - Separated API blueprint creation from registration, using
APIManager.create_api()
andAPIManager.create_api_blueprint()
. - Added support for pure SQLAlchemy in addition to Flask-SQLAlchemy.
- #74: Added
post_form_preprocessor
keyword argument toAPIManager.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/separate_endpoints.py
, showing how to create separate API endpoints for a single model. - Added
include_columns
keyword argument tocreate_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 theflask_restless.search
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 tocreate_api()
to allow user provided names in URLs. - Added
allow_patch_many
keyword argument tocreate_api()
to allow enabling or disabling the PATCH many functionality. - Disable the PATCH many functionality by default.