All Versions
23
Latest Version
Avg Release Cycle
73 days
Latest Release
-

Changelog History
Page 2

  • v1.1 Changes

    February 07, 2020

    πŸš€ Released on February 7, 2020.

    πŸ†• New

    - ``MONGO_QUERY_WHITELIST`` and ``mongo_query_whitelist``. A list of extra Mongo
      query operators to allow besides the official list of allowed operators.
      Defaults to ``[]``. (`#1351`_)
    
    πŸ›  Fixed
    
    • Starup crash with Werkzeug 1.0 (#1359_)
    • πŸ‘ $eq is missing from supported query operators (#1351_)
    • Documentation typos (#1348, #1350)

    .. _#1359: https://github.com/pyeve/eve/issues/1359 .. _#1351: https://github.com/pyeve/eve/issues/1351 .. _#1350: https://github.com/pyeve/eve/pull/1350 .. _#1348: https://github.com/pyeve/eve/issues/1348

  • v1.0.1 Changes

    January 26, 2020

    πŸš€ Released on January 26, 2020.

    • πŸ›  Fix: Mixing foreign and local object ids breaks querying (#1345_)

    .. _#1345: https://github.com/pyeve/eve/issues/1345

  • v1.0 Changes

    December 19, 2019

    πŸš€ Released on December 19, 2019.

    πŸ†• New

    - πŸ‘· Python 3.8 added to CI matrix (`#1326`_)
    - ⬇️ Drop support for Python 3.4 (`#1297`_)
    - ``unique_within_resource`` validation rule. Enforces the uniqueness of an
      attribute only at API resource level, contrasting with the ``unique`` rule
      that enforces uniqueness at database collection level (`#1291`_)
    - βž• Add doc8 to dev-requirements (`#1343`_)
    
    .. _`#1343`: https://github.com/pyeve/eve/issues/1343
    .. _`#1326`: https://github.com/pyeve/eve/issues/1326
    .. _`#1297`: https://github.com/pyeve/eve/issues/1297
    .. _`#1291`: https://github.com/pyeve/eve/issues/1291
    
    πŸ›  Fixed
    
    • πŸ“Œ Pin to Cerberus < 2.0 (#1342_)
    • 500 error when PATCH or PUT are performed on Mongo 4.2 and _id is included with payload (#1341_)
    • πŸ’… Minor style improvements and 2 test fixes (#1330_)
    • Werkzeug 0.15.4 crashes with Python 3.8 (#1325_)
    • Curl request in projection examples do not work (#1298_)
    • ⚑️ Update installation instructions (#1303_)
    • πŸ’₯ (breaking) Delete on empty resource returns 404, should return 204 (#1299_)
    • MONGO_REPLICA_SET ignored (#1302_)
    • Documentation typo (#1293, #1315, #1322, #1324, #1327_)
    • 🌲 Flask 1.1.1 breaks test_logging_info test (#1296_)
    • πŸš€ Display the full release number on Eve frontpage.
    • ⚑️ Update link to EveGenie repository. New maintainer: David Zisky.

    .. _#1342: https://github.com/pyeve/eve/issues/1342 .. _#1341: https://github.com/pyeve/eve/issues/1341 .. _#1330: https://github.com/pyeve/eve/pull/1330 .. _#1327: https://github.com/pyeve/eve/pull/1327 .. _#1325: https://github.com/pyeve/eve/pull/1325 .. _#1324: https://github.com/pyeve/eve/pull/1324 .. _#1322: https://github.com/pyeve/eve/pull/1322 .. _#1315: https://github.com/pyeve/eve/pull/1315 .. _#1298: https://github.com/pyeve/eve/issues/1298 .. _#1303: https://github.com/pyeve/eve/pull/1303 .. _#1299: https://github.com/pyeve/eve/issues/1299 .. _#1302: https://github.com/pyeve/eve/issues/1302 .. _#1296: https://github.com/pyeve/eve/issues/1296 .. _#1293: https://github.com/pyeve/eve/issues/1293

  • v0.9.2 Changes

    June 14, 2019

    πŸš€ Released on June 14, 2019.

    πŸ›  Fixed

    
    
    - πŸ‘ Geo queries lack support for the ``$minDistance`` mongo operator (`#1281`_)
    - Lookup argument does not get passed to ``pre_<event>`` hook with certain
      resource urls (`#1283`_)
    - 0️⃣ PUT requests doesn't set default values for fields that have one defined
      (`#1280`_)
    - PATCH crashes when normalizing default fields (`#1275`_, `#1274`_)
    - The condition that avoids returning ``X-Total-Count`` when counting is
      disabled also filters out the case where the resource is empty and count is
      0 (`#1279`_)
    - First example of Eve use doesn't really work (`#1277`_)
    
    .. _`#1283`: https://github.com/pyeve/eve/issues/1283
    .. _`#1281`: https://github.com/pyeve/eve/issues/1281
    .. _`#1280`: https://github.com/pyeve/eve/issues/1280
    .. _`#1277`: https://github.com/pyeve/eve/issues/1277
    .. _`#1275`: https://github.com/pyeve/eve/issues/1275
    .. _`#1274`: https://github.com/pyeve/eve/issues/1274
    .. _`#1279`: https://github.com/pyeve/eve/issues/1279
    
  • v0.9.1 Changes

    May 22, 2019

    πŸš€ Released on May 22, 2019.

    πŸ†• New

    - ``NORMALIZE_ON_PATCH`` switches normalization on patch requests (`#1234`_)
    
    πŸ›  Fixed
    
    • Document count broken with concurrent requests (#1271_)
    • Document count broken when embedded resources are requested (#1268_)
    • If ignore_fields contains a nested field, document is mutated (#1266_)
    • Crash with Werzeug >= 0.15.3 (#1267_)
    • πŸ›  Fix crash when trying to ignore a nested field that doesn't exist (#1263_)

    πŸ‘Œ Improved

    - Remove unsupported ``transparent_schema_rules`` option from docs (`#1264`_)
    - ⬆️ Bump (and pin) Wekzeug to 0.15.4 (`#1267`_)
    - Quickstart: a better ``MONGO_AUTH_SOURCE`` explanation (`#1168`_)
    
    πŸ’₯ Breaking Changes
    

    No known breaking changes for the standard framework user. However, if you are consuming the developer API:

    • Be aware that io.base.DataLayer.find() signature has changed and an optional perform_count argument has been added. The method return value is now a tuple (cursor, count); cursor is the query result as before while count is the document count, which is expected to have a consistent value when perform_count = True.

    .. _#1271: https://github.com/pyeve/eve/issues/1271 .. _#1268: https://github.com/pyeve/eve/issues/1268 .. _#1168: https://github.com/pyeve/eve/issues/1168 .. _#1266: https://github.com/pyeve/eve/pull/1266 .. _#1234: https://github.com/pyeve/eve/issues/1234 .. _#1267: https://github.com/pyeve/eve/issues/1267 .. _#1263: https://github.com/pyeve/eve/pull/1263 .. _#1264: https://github.com/pyeve/eve/issues/1264

  • v0.9 Changes

    April 11, 2019

    πŸš€ Released on April 11, 2019.

    πŸ’₯ Breaking changes

    - ⬆️ Werkzeug v0.15.1+ is required. You want to upgrade, otherwise your Eve
      environment is likely to break. For the full story, see `#1245`_ and
      `#1251`_.
    
    πŸ†• New
    ~~~
    - πŸ‘ HATEOAS support added to aggregation results (`#1208`_)
    - ``on_fetched_diffs`` event hooks (`#1224`_)
    - πŸ‘Œ Support for Mongo 3.6+ ``$expr`` query operator.
    - πŸ‘Œ Support for Mongo 3.6+ ``$center`` query operator.
    
    πŸ›  Fixed
    ~~~~~
    - Insertion failure when replacing unknown field with dbref value (`#1255`_,
      `#1257`_)
    - ``max_results=1`` should be honored on aggregation endpoints (`#1250`_)
    - 0️⃣ PATCH incorrectly normalizes default values in subdocuments (`#1234`_)
    - Unauthorized Exception not working with Werkzeug >= 15.0 (`#1245`_, `#1251`_)
    - Embedded documents not being sorted correctly (`#1217`_)
    - Eve crashes on malformed sort parameters (`#1248`_)
    - Insertion failure when replacing a same document containing dbref (`#1216`_)
    - Datasource projection is not respected for POST requests (`#1189`_)
    - Soft delete removes ``auth_field`` from document (`#1188`_)
    - On Mongo 3.6+, we don't return 400 'immutable field' on PATCH and PUT
      (`#1243`_)
    - Expecting JSON response for rate limit exceeded scenario (`#1227`_)
    - Multiple concurrent patches to the same record, from different processes,
      should result in at least one patch failing with a 412 error (Precondition
      Failed) (`#1231`_)
    - Embedding only does not follow ``data_relation.field`` (`#1069`_)
    - πŸ”— HATEOAS ``_links`` seems to get an extra ``&version=diffs`` (`#1228`_)
    - Do not alter ETag when performing an oplog_push (`#1206`_)
    - CORS response headers missing for media endpoint (`#1197`_)
    - πŸ”– Warning: Unexpected keys present on black: ``python_version`` (`#1244`_)
    - πŸ—„ UserWarning: JSON setting is deprecated. Use RENDERERS instead (`#1241`_).
    - πŸ—„ DeprecationWarning: decodestring is deprecated, use decodebytes (`#1242`_)
    - πŸ—„ DeprecationWarning: count is deprecated. Use Collection.count_documents
      instead (`#1202`_)
    - Documentation typos (`#1218`_, `#1240`_)
    
    πŸ‘Œ Improved
    ~~~~~~~~
    - πŸ“¦ Eve package is now distributed as a Python wheel (`#1260`_)
    - Bump Werkzeug version to v0.15.1+ (`#1245`_, `#1251`_)
    - ⬆️ Bump PyMongo version to v3.7+ (`#1202`_)
    - πŸ‘· Python 3.7 added to the CI matrix (`#1199`_)
    - Option to omit the aggregation stage when its parameter is empty/unset
      (`#1209`_)
    - HATEOAS: now the ``_links`` dictionary may have a ``related`` dictionary
      inside, and each key-value pair yields the related links for a data relation
      field (`#1204`_)
    - πŸ‘ XML renderer now supports data field tag attributes such as ``href`` and
      ``title`` (`#1204`_)
    - πŸ“œ Make the parsing of ``req.sort`` and ``req.where`` easily reusable by moving
      their logic to dedicated methods (`#1194`_)
    - βž• Add a "Python 3 is highly preferred" note on the homepage (`#1198`_)
    - ⬇️ Drop sphinx-contrib-embedly when building docs.
    
    .. _`#1260`: https://github.com/pyeve/eve/issues/1260
    .. _`#1208`: https://github.com/pyeve/eve/issues/1208
    .. _`#1257`: https://github.com/pyeve/eve/issues/1257
    .. _`#1255`: https://github.com/pyeve/eve/issues/1255
    .. _`#1250`: https://github.com/pyeve/eve/issues/1250
    .. _`#1234`: https://github.com/pyeve/eve/issues/1234
    .. _`#1251`: https://github.com/pyeve/eve/pull/1251
    .. _`#1245`: https://github.com/pyeve/eve/pull/1245
    .. _`#1217`: https://github.com/pyeve/eve/pull/1217
    .. _`#1248`: https://github.com/pyeve/eve/issues/1248
    .. _`#1234`: https://github.com/pyeve/eve/issues/1234
    .. _`#1216`: https://github.com/pyeve/eve/issues/1216
    .. _`#1244`: https://github.com/pyeve/eve/issues/1244
    .. _`#1189`: https://github.com/pyeve/eve/issues/1189
    .. _`#1188`: https://github.com/pyeve/eve/issues/1188
    .. _`#1198`: https://github.com/pyeve/eve/issues/1198
    .. _`#1199`: https://github.com/pyeve/eve/issues/1199
    .. _`#1243`: https://github.com/pyeve/eve/issues/1243
    .. _`#1241`: https://github.com/pyeve/eve/issues/1241
    .. _`#1242`: https://github.com/pyeve/eve/issues/1242
    .. _`#1202`: https://github.com/pyeve/eve/issues/1202
    .. _`#1240`: https://github.com/pyeve/eve/issues/1240
    .. _`#1227`: https://github.com/pyeve/eve/issues/1227
    .. _`#1231`: https://github.com/pyeve/eve/issues/1231
    .. _`#1069`: https://github.com/pyeve/eve/issues/1069
    .. _`#1224`: https://github.com/pyeve/eve/pull/1224
    .. _`#1228`: https://github.com/pyeve/eve/pull/1228
    .. _`#1218`: https://github.com/pyeve/eve/pull/1218
    .. _`#1209`: https://github.com/pyeve/eve/issues/1209
    .. _`#1206`: https://github.com/pyeve/eve/issues/1206
    .. _`#1204`: https://github.com/pyeve/eve/pull/1204
    .. _`#1194`: https://github.com/pyeve/eve/pull/1194
    .. _`#1197`: https://github.com/pyeve/eve/issues/1197
    
  • v0.8.1 Changes

    October 04, 2018

    πŸš€ Released on October 4, 2018.

    πŸ†• New

    - βž• Add support for Mongo ``$centerSphere`` query operator (`#1181`_)
    - ``NORMALIZE_DOTTED_FIELDS``. If ``True``, dotted fields are parsed and
      processed as subdocument fields. If ``False``, dotted fields are left
      unparsed and unprocessed and the payload is passed to the underlying
      data-layer as-is. Please note that with the default Mongo layer, setting this
      to ``False`` will result in an error. Defaults to ``True``. (`#1173`_)
    - ``normalize_dotted_fields``. Endpoint-level override
      for ``NORMALIZE_DOTTED_FIELDS``. (`#1173`_)
    
    πŸ›  Fixed
    
    • mongo_indexes: "OperationFailure" when changing the keys of an existing index (#1180_)
    • v0.8: "OperationFailure" performing MongoDB full text searches (#1176_)
    • "AttributeError" on Python 2.7 when obsolete JSON or XML settings are used (#1175_).
    • "TypeError argument of type 'NoneType' is not iterable" error when using document embedding in conjuction with soft deletes (#1120_)
    • allow_unknown validation rule fails with nested dict fields (#1163_)
    • ⚑️ Updating a field with a nullable data relation fails when value is null (#1159_)
    • "cerberus.schema.SchemaError" when VALIDATE_FILTERS = True. (#1154_)
    • Serializers fails when array of types is in schema. (#1112_)
    • Replace the broken make audit shortcut with make check, add the command to CONTRIBUTING.rst it was missing. (#1144_)

    πŸ‘Œ Improved

    - πŸ‘• Perform lint checks and fixes on staged files, as a pre-commit hook.
      (`#1157`_)
    - πŸ‘• On CI, perform linting checks first. If linting checks are successful,
      execute the test suite on the whole matrix. (`#1156`_)
    - πŸ’… Reformat code to match Black code-style. (`#1155`_)
    - πŸ‘‰ Use ``simplejson`` everywhere in the codebase. (`#1148`_)
    - Install a bot that flags and closes stale issues/pull requests. (`#1145`_)
    - Only set the package version in ``__init__.py``. (`#1142`_)
    
    πŸ“„ Docs
    ~~~~
    - Typos (`#1183`_, `#1184`_, `#1185`_)
    - Add ``MONGO_AUTH_SOURCE`` to Quickstart. (`#1168`_)
    - πŸ›  Fix Sphinx-embedly error when embedding speakerdeck.com slide deck (`#1158`_)
    - πŸ›  Fix broken link to the Postman app. (`#1150`_)
    - ⚑️ Update obsolete PyPI link in docs sidebar. (`#1152`_)
    - πŸ“„ Only display the version number on the docs homepage. (`#1151`_)
    - πŸ›  Fix documentation builds on Read the Docs. (`#1147`_)
    - Add a ``ISSUE_TEMPLATE.md`` GitHub template file. (`#1146`_)
    - πŸ‘Œ Improve changelog format to reduce noise and increase readability. (`#1143`_)
    
    .. _`#1185`: https://github.com/pyeve/eve/pull/1185
    .. _`#1184`: https://github.com/pyeve/eve/pull/1184
    .. _`#1183`: https://github.com/pyeve/eve/pull/1183
    .. _`#1181`: https://github.com/pyeve/eve/issues/1181
    .. _`#1180`: https://github.com/pyeve/eve/issues/1180
    .. _`#1176`: https://github.com/pyeve/eve/issues/1176
    .. _`#1175`: https://github.com/pyeve/eve/issues/1175
    .. _`#1173`: https://github.com/pyeve/eve/issues/1173
    .. _`#1168`: https://github.com/pyeve/eve/issues/1168
    .. _`#1142`: https://github.com/pyeve/eve/issues/1142
    .. _`#1143`: https://github.com/pyeve/eve/issues/1143
    .. _`#1144`: https://github.com/pyeve/eve/issues/1144
    .. _`#1145`: https://github.com/pyeve/eve/issues/1145
    .. _`#1146`: https://github.com/pyeve/eve/issues/1146
    .. _`#1147`: https://github.com/pyeve/eve/issues/1147
    .. _`#1148`: https://github.com/pyeve/eve/issues/1148
    .. _`#1151`: https://github.com/pyeve/eve/issues/1151
    .. _`#1152`: https://github.com/pyeve/eve/issues/1152
    .. _`#1150`: https://github.com/pyeve/eve/issues/1150
    .. _`#1112`: https://github.com/pyeve/eve/issues/1112
    .. _`#1154`: https://github.com/pyeve/eve/issues/1154
    .. _`#1155`: https://github.com/pyeve/eve/issues/1155
    .. _`#1156`: https://github.com/pyeve/eve/issues/1156
    .. _`#1157`: https://github.com/pyeve/eve/issues/1157
    .. _`#1158`: https://github.com/pyeve/eve/issues/1158
    .. _`#1159`: https://github.com/pyeve/eve/issues/1159
    .. _`#1163`: https://github.com/pyeve/eve/issues/1163
    .. _`#1120`: https://github.com/pyeve/eve/issues/1120
    
  • v0.8 Changes

    May 10, 2018

    πŸš€ Released on May 10, 2018.

    .. note::

    Make sure you read the :ref:`Breaking Changes <breaking_changes>` section below.
    
    • πŸ†• New: support for partial media requests. Clients can request partial file downloads by adding a Range header to their media request (#1050).
    • πŸ†• New: Renderer classes. RENDERER allows to change enabled renderers. Defaults to ['eve.render.JSONRenderer', 'eve.render.XMLRenderer']. You can create your own renderer by subclassing eve.render.Renderer. Each renderer should set valid mime attr and have .render() method implemented. Please note that at least one renderer must always be enabled (#1092).
    • βœ‚ New: on_delete_resource_originals fired when soft deletion occurs (#1030_).
    • New: before_aggregation and after_aggregation event hooks allow to attach custom callbacks to aggregation endpoints_ (#1057_).
    • New: JSON_REQUEST_CONTENT_TYPES or supported JSON content types. Useful when you need support for vendor-specific json types. Please note: responses will still carry the standard application/json type. Defaults to ['application/json'] (#1024_).
    • πŸ†• New: when the media endpoint is enabled, the default authentication class will be used to secure it. (#1083; #1049).
    • New: MERGE_NESTED_DOCUMENTS. If True, updates to nested fields are merged with the current data on PATCH. If False, the updates overwrite the current data. Defaults to True (#1140_).
    • πŸ†• New: support for MongoDB decimal type bson.decimal128.Decimal128 (#1045_).
    • πŸ†• New: Support for Feature and FeatureCollection GeoJSON objects (#769_).
    • πŸ†• New: Add support for MongoDB $box geo query operator (#1122_).
    • New: ALLOW_CUSTOM_FIELDS_IN_GEOJSON allows custom fields in GeoJSON (#1004_).
    • πŸ†• New: Add support for MongoDB $caseSensitive and $diactricSensitive query operators (#1126_).
    • πŸ†• New: Add support for MongoDB bitwise query operators $bitsAllClear, $bitsAllSet, $bitsAnyClear, $bitsAnySet (#1053_).
    • New: support for MONGO_AUTH_MECHANISM and MONGO_AUTH_MECHANISM_PROPERTIES.
    • New: MONGO_DBNAME can now be used in conjuction with MONGO_URI. Previously, if MONGO_URI was missing the database name, an exception would be rised (#1037_).
    • πŸ›  Fix: OPLOG skipped even if OPLOG = True (#1074_).
    • πŸ›  Fix: Cannot define default projection and request specific field. (#1036_).
    • Fix: VALIDATE_FILTERS and ALLOWED_FILTERS do not work with sub-document fields. (#1123_).
    • πŸ›  Fix: Aggregation query parameter does not replace keys in the lists (#1025_).
    • πŸ›  Fix: serialization bug that randomly skips fields if "x_of" is encountered (#1042_)
    • πŸ›  Fix: PUT behavior with User Restricted Resource Access. Ensure that, under every circumstance, users are unable to overwrite items owned by other users (#1130_).
    • πŸ›  Fix: Crash with Cerberus 1.2 (#1137_).
    • Fix documentation typos (#1114, #1102)
    • πŸ›  Fix: broken documentation links to Cerberus validation rules.
    • πŸ›  Fix: add sphinxcontrib-embedly to dev-requirements.txt.
    • πŸ›  Fix: Removed OrderedDict dependency; use OrderedDict from backport_collections instead (#1070_).
    • 🐎 Performance improved on retrieving a list of embedded documents (#1029_).
    • πŸ”¨ Dev: Refactor index creation. We now have a new eve.io.mongo.ensure_mongo_indexes() function which ensures that eventual mongo_indexes defined for a resource are created on the active database. The function can be imported and invoked, for example in multi-db workflows where a db is activated based on the authenticated user performing the request (via custom auth classes).
    • πŸ— Dev: Add a Makefile with shortcuts_ for testing, docs building, and development install.
    • βœ… Dev: Switch to pytest as the standard testing tool.
    • Dev: Drop requiments.txt and dev-requirements.txt. Use pip install -e .[dev|tests|docs] instead.
    • βœ… Tests: finally acknowledge the existence of modern APIs for both Mongo and Python (get rid of most deprecation warnings).
    • πŸ”„ Change: Support for Cerberus 1.0+ (#776_).
    • πŸ”„ Change: JSON and XML settings are deprecated and will be removed in a future update. Use RENDERERS instead (#1092_).
    • Flask dependency set to >=1.0 (#1111_).
    • PyMongo dependency set to >=3.5.
    • Events dependency set to >=v0.3.
    • ⬇️ Drop Flask-PyMongo dependency, use custom code instead (#855_).
    • πŸ“„ Docs: Comprehensive rewrite of the How to contribute_ page.
    • πŸ“„ Docs: Drop the testing page; merge its contents with How to contribute_.
    • πŸ“„ Docs: Add link to the Eve course_. It was authored by the project author, and it is hosted by TalkPython Training.
    • πŸ“„ Docs: code snippets are now Python 3 compatibile (Pahaz Blinov).
    • Dev: Delete and cleanup of some unnecessary code.
    • ⚑️ Dev: after the latest update (May 4th) travis-ci would not run tests on Python 2.6.
    • βœ… Dev: all branches are now tested on travis-ci. Previously, only 'master' was being tested.
    • βœ… Dev: fix insidious bug in tests.methods.post.TestPost class.

    πŸ’₯ .. _breaking_changes:

    πŸ’₯ Breaking Changes

    - πŸ‘ Python 2.6 and Python 3.3 are no longer supported (`#1129`_).
    - Eve now relies on `Cerberus`_ 1.1+  (`#776`_). It allows for many new
      powerful validation and trasformation features (like `schema registries`_),
      improved performance and, in general, a more streamlined API. It also brings
      some notable breaking changes.
    
        - ``keyschema`` was renamed to ``valueschema``, and ``propertyschema`` to
          ``keyschema``.
        - A PATCH on a document which misses a field having a default value will
          now result in setting this value, even if the field was not provided in
          the PATCH's payload.
        - Error messages for ``keyschema`` are now returned as dictionary. Example:
          ``{'a_dict': {'a_field': "value does not match regex '[a-z]+'"}}``.
        - Error messages for type validations are `different now`_.
        - It is no longer valid to have a field with ``default = None`` and
          ``nullable = False`` (see
          *patch.py:test_patch_nested_document_nullable_missing*).
        - And more. A complete list of breaking changes  is available here_. For
          detailed upgrade instructions, see Cerberus `upgrade notes`_. An in-depth
          analysis of changes made to the codebase (useful if you wrote a custom
          validator which needs to be upgraded) is available with `this commit
          message`_.
        - Special thanks to Dominik Kellner and Brad P. Crochet for the amazing job
          done on this upgrade.
    
    - Config setting ``MONGO_AUTHDBNAME`` renamed into ``MONGO_AUTH_SOURCE`` for
      naming consistency with PyMongo.
    - Config options ``MONGO_MAX_POOL_SIZE``, ``MONGO_SOCKET_TIMEOUT_MS``,
      ``MONGO_CONNECT_TIMEOUT_MS``, ``MONGO_REPLICA_SET``,
      ``MONGO_READ_PREFERENCE`` removed. Use ``MONGO_OPTIONS`` or ``MONGO_URI``
      instead.
    - Be aware that ``DELETE`` on sub-resource endpoint will now only delete the
      documents matching endpoint semantics. A delete operation on
      ``people/51f63e0838345b6dcd7eabff/invoices`` will delete all documents
      matching the followig query: ``{'contact_id': '51f63e0838345b6dcd7eabff'}``
      (`#1010`_).
    
    .. _#1140: https://github.com/pyeve/eve/pull/1140
    .. _#1111: https://github.com/pyeve/eve/issues/1111
    .. _#1129: https://github.com/pyeve/eve/issues/1129
    .. _#1057: https://github.com/pyeve/eve/issues/1057
    .. _#1137: https://github.com/pyeve/eve/issues/1137
    .. _#1122: https://github.com/pyeve/eve/issues/1122
    .. _#1050: https://github.com/pyeve/eve/pull/1050
    .. _#1130: https://github.com/pyeve/eve/pull/1130
    .. _#1074: https://github.com/pyeve/eve/issues/1074
    .. _#1036: https://github.com/pyeve/eve/issues/1036
    .. _#1128: https://github.com/pyeve/eve/pull/1128
    .. _#1126: https://github.com/pyeve/eve/pull/1126
    .. _#1123: https://github.com/pyeve/eve/issues/1123
    .. _#1102: https://github.com/pyeve/eve/pull/1102
    .. _#1114: https://github.com/pyeve/eve/pull/1114
    .. _#1092: https://github.com/pyeve/eve/pull/1092
    .. _#1083: https://github.com/pyeve/eve/issues/1083
    .. _#1049: https://github.com/pyeve/eve/issues/1049
    .. _#1053: https://github.com/pyeve/eve/issues/1053
    .. _#1070: https://github.com/pyeve/eve/pull/1070
    .. _#1045: https://github.com/pyeve/eve/issues/1045
    .. _#1042: https://github.com/pyeve/eve/pull/1042
    .. _#1030: https://github.com/pyeve/eve/pull/1030
    .. _#1037: https://github.com/pyeve/eve/issues/1037
    .. _#1029: https://github.com/pyeve/eve/issues/1029
    .. _#1024: https://github.com/pyeve/eve/issues/1024
    .. _#769: https://github.com/pyeve/eve/issues/769
    .. _#1004: https://github.com/pyeve/eve/issues/1004
    .. _#776: https://github.com/pyeve/eve/issues/776
    .. _#855: https://github.com/pyeve/eve/issues/855
    .. _#1010: https://github.com/pyeve/eve/issues/1010
    .. _#1025: https://github.com/pyeve/eve/issues/1025
    .. _Cerberus: http://python-cerberus.org
    πŸ“„ .. _`schema registries`: http://docs.python-cerberus.org/en/stable/schemas.html#registries
    ⬆️ .. _`different now`: http://docs.python-cerberus.org/en/stable/upgrading.html#data-types
    πŸ“„ .. _here: http://docs.python-cerberus.org/en/stable/changelog.html#breaking-changes
    ⬆️ .. _`upgrade notes`: http://python-cerberus.org/en/stable/upgrading.html
    .. _`this commit message`: https://github.com/pyeve/eve/pull/1001/commits/1110f807b478efa9f13ad1d217d22ceaa2a9e42d
    .. _`partial media requests`: http://python-eve.org/features.html#partial-media-downloads
    .. _`custom callbacks to aggregation endpoints`: http://python-eve.org/features.html#aggregation-event-hooks
    .. _`Renderer classes`: http://python-eve.org/features.html#rendering
    .. _`makefile with shortcuts`: http://python-eve.org/contributing.html#make-targets
    .. _`How to contribute`: http://python-eve.org/contributing.html
    .. _`Eve course`: https://training.talkpython.fm/courses/explore_eve/eve-building-restful-mongodb-backed-apis-course
    
    πŸ”– Version 0.7.10
    ~~~~~~~~~~~~~~
    
    πŸš€ Released on July 15, 2018.
    
    - πŸ›  Fix: Pin Flask-PyMongo dependency to avoid crash with Flask-PyMongo 2.
      Closes #1172.
    
    πŸ”– Version 0.7.9
    ~~~~~~~~~~~~~
    
    πŸš€ Released on May 10, 2018
    
    - πŸ—„ Python 2.6 and Python 3.3 are deprecated. Closes #1129.
    
    πŸ”– Version 0.7.8
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 7 February, 2018
    
    - πŸ›  Fix: breaking syntax error in v0.7.7
    
    πŸ”– Version 0.7.7
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 7 February, 2018
    
    - πŸ›  Fix: geo queries now properly support ``$geometry`` and ``$maxDistance``
      operators. Closes #1103.
    
    πŸ”– Version 0.7.6
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 14 January, 2018
    
    - πŸ‘Œ Improve query parsing robustness.
    
    πŸ”– Version 0.7.5
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 4 December, 2017
    
    - πŸ›  Fix: A query was not fully traversed in the sanitization. Therefore the
      blacklist for mongo wueries could be bypassed, allowing for dangerous
      ``$where`` queries (Moritz Schneider).
    
    πŸ”– Version 0.7.4
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 24 May, 2017
    
    - Fix: ``post_internal`` fails when using ``URL_PREFIX`` or ``API_VERSION``.
      Closes #810.
    
    πŸ”– Version 0.7.3
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 3 May, 2017
    
    - πŸ‘€ Eve and Cerberus are now collaboratively funded projects, see:
      https://nicolaiarocci.com/eve-and-cerberus-funding-campaign/
    - πŸ›  Fix: Internal resource, oplog enabled: a ``*_internal`` method defined in
      ``OPLOG_METHODS`` triggers keyerror (Einar Huseby).
    - Dev: use official Alabaster theme instead of custom fork.
    - πŸ›  Fix: docstrings typos (Martin Fous).
    - πŸ“„ Docs: explain that ``ALLOW_UNKNOWN`` can also be used to expose the whole
      document as found in the database, with no explicit validation schema.
      Addresses #995.
    - πŸ“„ Docs: add Eve-Healthcheck to extensions list (Luis Fernando Gomes).
    
    πŸ”– Version 0.7.2
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 6 March, 2017
    
    - πŸ›  Fix: Validation exceptions are returned in ``doc_issues['validator
      exception']`` across all edit methods (POST, PUT, PATCH). Closes #994.
    - πŸ›  Fix: When there is ``MONGO_URI`` defined it will be used no matter if the
      resource is using a prefix or not (Petr JaΕ‘ek).
    - πŸ“„ Docs: Add code snippet with an example of how to implement a simple list of
      items that supports both list-level and item-level CRUD operations (John
      Chang).
    
    πŸ”– Version 0.7.1
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 14 February, 2017
    
    - πŸ›  Fix: "Cannot create a consistent method resolution order" on Python 3.5.2 and
      3.6 since Eve 0.7. Closes #984.
    
    - πŸ“„ Docs: update README with svg bade (Sobolev Nikita).
    - πŸ“„ Docs: fix typo and dead link to Nicola's website (Dominik Kellner).
    
    - 0️⃣ ``develop`` branch has been dropped. ``master`` is now the default project
      branch.
    
    πŸ”– Version 0.7
    ~~~~~~~~~~~
    
    πŸš€ Released on 6 February, 2017
    
    - πŸ†• New: Add Python 3.6 as a supported interpreter.
    
    - New: ``OPTIMIZE_PAGINATION_FOR_SPEED``. Set this to ``True`` to improve
      pagination performance. When optimization is active no count operation, which
      can be slow on large collections, is performed on the database. This does
      have a few consequences. Firstly, no document count is returned. Secondly,
      ``HATEOAS`` is less accurate: no last page link is available, and next page
      link is always included, even on last page. On big collections, switching
      this feature on can greatly improve performance. Defaults to ``False``
      (slower performance; document count included; accurate ``HATEOAS``). Closes
      #944 and #853.
    
    
    - πŸ†• New: ``Location`` header is returned on ``201 Created`` POST responses. If
      will contain the URI to the created document. If bulk inserts are enabled,
      only the first document URI is returned. Closes #795.
    
    - πŸ†• New: Pretty printing.You can pretty print the response by specifying a query
      parameter named ``?pretty`` (Hasan Pekdemir).
    
    - New: ``AUTO_COLLAPSE_MULTI_KEYS``. If set to ``True``, multiple values sent
      with the same key, submitted using the ``application/x-www-form-urlencoded``
      or ``multipart/form-data`` content types, will automatically be converted to
      a list of values. When using this together with ``AUTO_CREATE_LISTS`` it
      becomes possible to use lists of media fields. Defaults to ``False``. Closes
      #932 (Conrad Burchert).
    
    - New: ``AUTO_CREATE_LISTS``. When submitting a non ``list`` type value for
      a field with type ``list``, automatically create a one element list before
      running the validators. Defaults to ``False`` (Conrad Burchert).
    
    - πŸ†• New: Flask-PyMongo compatibility for for ``MONGO_CONNECT`` config setting
      (Massimo Scamarcia).
    
    - πŸ†• New: Add Python 3.5 as a supported interpreter (Mattias Lundberg).
    
    - πŸ†• New: ``MONGO_OPTIONS`` allows MongoDB arguments to be passed to the
      MongoClient object. Defaults to ``{}`` (Massimo Scamarcia).
    
    - New: Regexes are allowed by setting ``X_DOMAINS_RE`` values. This allows CORS
      to support websites with dynamic ranges of subdomains. Closes #660 and #974.
    
    - New: If ``ENFORCE_IF_MATCH`` option is active, then all requests are expected
      to include the ``If-Match`` or they will be rejected (same as old behavior).
      However, if ``ENFORCE_IF_MATCH`` is disabled, then client determines whether
      request is conditional. When ``If-Match`` is included, then request is
      conditional, otherwise the request is processed with no conditional checks.
      Closes #657 (Arthur Burkart).
    
    - πŸ†• New: Allow old document versions to be cache validated using ETags (Nick
      Park).
    
    - πŸ†• New: Support weak ETags, commonly applied by servers transmitting gzipped
      content (Nick Park).
    
    - New: ``on_oplog_push`` event is fired when OPLOG is about to be updated.
      Callbacks receive two arguments: ``resource`` (resource name) and ``entries``
      (list of oplog entries which are about to be written).
    
    - πŸ†• New: optional ``extra`` field is available for OPLOG entries. Can be updated
      by callbacks hooked to the new ``on_oplog_push`` event.
    
    - πŸ†• New: OPLOG audit now include the username or token when available. Closes
      #846.
    
    - New ``get_internal`` and ``getitem_internal`` functions can be used for
      internal GET calls. These methods are not rate limited, authentication is not
      checked and pre-request events are not raised.
    
    - πŸ†• New: Add support for MongoDB ``DBRef`` fields (Roman Gavrilov).
    
    - New: ``MULTIPART_FORM_FIELDS_AS_JSON``. In case you are submitting your
      resource as ``multipart/form-data`` all form data fields will be submitted as
      strings, breaking any validation rules you might have on the resource fields.
      If you want to treat all submitted form data as JSON strings you will have to
      activate this setting. Closes #806 (Stratos Gerakakis).
    
    - πŸ†• New: Support for MongoDB Aggregation Framework. Endpoints can respond with
      aggregation results. Clients can optionally influence aggregation
      results by using the new ``aggregate`` option: ``aggregate={"$year": 2015}``.
    
    - πŸ†• New: Flask views (``@app.route``) can now set ``mongo_prefix`` via Flask's
      ``g`` object: ``g.mongo_prefix = 'MONGO2'`` (Gustavo Vargas).
    
    - πŸ†• New: Query parameters not recognised by Eve are now returned in HATEOAS URLs
      (Mugur Rus).
    
    - πŸ”„ New: ``OPLOG_CHANGE_METHODS`` is a list of HTTP methods which operations will
      include changes into the OpLog (mmizotin).
    
    - πŸ”„ Change: Return ``428 Precondition Required`` instead of a generic ``403
      Forbidden`` when the ``If-Match`` request header is missing (Arnau Orriols).
    
    - πŸ”„ Change: ETag response header now conforms to RFC 7232/2.3 and is surrounded
      by double quotes. Closes #794.
    
    - πŸ›  Fix: Better locating of ``settings.py``. On startup, if settings flag is
      omitted in constructor, Eve will try to locate file named settings.py, first
      in the application folder and then in one of the application's subfolders.
      You can choose an alternative filename/path, just pass it as an argument when
      you instantiate the application. If the file path is relative, Eve will try
      to locate it recursively in one of the folders in your sys.path, therefore
      you have to be sure that your application root is appended to it. This is
      useful, for example, in testing environments, when settings file is not
      necessarily located in the root of your application. Closes #820 (Mario
      Kralj).
    
    - πŸ›  Fix: Versioning does not work with User Restricted Resource Access. Closes
      #967 (Kris Lambrechts)
    
    - Fix: ``test_create_indexes()`` typo. Closes 960.
    
    - πŸ›  Fix: fix crash when attempting to modify a document ``_id`` on MongoDB 3.4
      (Giorgos Margaritis)
    
    - πŸ›  Fix: improve serialization of boolean values. Closes #947 (NotSpecial).
    
    - πŸ›  Fix: fix intermittently failing test. Closes #934 (Conrad Burchert).
    
    - πŸ›  Fix: Multiple, fast (within a 1 second window) and neutral (no actual
      changes) PATCH requests should not raise ``412 Precondition Failed``.
      Closes #920.
    
    - πŸ›  Fix: Resource titles are not properly escaped during the XML rendering of the
      root document (Kris Lambrechts).
    
    - πŸ›  Fix: ETag request headers which conform to RFC 7232/2.3 (double quoted value)
      are now properly processed. Addresses #794.
    
    - πŸ›  Fix: Deprecation warning from Flask. Closes #898 (George Lestaris).
    
    - πŸ›  Fix: add Support serialization on lists using anyof, oneof, allof, noneof.
      Closes #876 (Carles Bruguera).
    
    - πŸ›  Fix: update security example snippets to match with current API (Stanislav
      Filin).
    
    - πŸ›  Fix: ``notifications.py`` example snippet crashes due to lack of ``DOMAIN``
      setting (Stanislav Filin).
    
    - πŸ“„ Docs: clarify documentation for custom validators: Cerberus dependency is
      still pinned to version 0.9.2. Upgrade to Cerberus 1.0+ is planned with v0.8.
      Closes #796.
    - πŸ“„ Docs: remove the deprecated ``--ditribute`` virtualenv option (Eugene
      Prikazchikov).
    - πŸ“„ Docs: add date and subdocument fields filtering examples. Closes #924.
    - πŸ“„ Docs: add Eve-Neo4j to the extensions page (Rodrigo Rodriguez).
    - πŸ“„ Docs: stress that alternate backends are supported via community extensions.
    - πŸ“„ Docs: clarify that Redis is an optional dependency (Mateusz Łoskot).
    
    - ⚑️ Update license to 2017. Closes #955.
    - ⚑️ Update: Flask 0.12. Closes #945, #904 and #963.
    - ⚑️ Update: PyMongo 3.4 is now required. Closes #964.
    
    πŸ”– Version 0.6.4
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 8 June, 2016
    
    - πŸ›  Fix: Cannot serialize data when a field that has a ``valueschema`` that is of
      ``dict`` type. Closes #874.
    - πŸ›  Fix: Authorization header bearer tokens not parsed correctly. Closes #866
      (James Stewart).
    - πŸ›  Fix: TokenAuth prevents base64 decoding of Tokens. Closes #840.
    - πŸ›  Fix: If datasource source is specified no fields are included by default.
      Closes #842.
    
    - πŸ“„ Docs: streamline Quickstart guide. Closes #868.
    - πŸ“„ Docs: fix broken link in Installation page. Closes #861.
    - πŸ“„ Docs: Resource configuration doesn't mention ``versioning`` override. Closes
      #845.
    
    πŸ”– Version 0.6.3
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 16 March, 2016
    
    - πŸ›  Fix: Since 0.6.2, static projections are not honoured. Closes #837.
    
    
    πŸ”– Version 0.6.2
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 14 March, 2016
    
    - πŸ›  Fix: ``Access-Control-Allow-Max-Age`` should actually be
      ``Access-Control-Max-Age``. Closes #829.
    - πŸ›  Fix: ``unique`` validation rule is checked against soft deleted documents.
      Closes #831.
    - πŸ›  Fix: Mongo does not allow ``$`` and ``.`` in field names. Apply this
      validation in schemas and dict fields. Closes #780.
    - πŸ›  Fix: Remove "ensure uniqueness of (custom) id fields" feature. Addresses
      #788.
    - πŸ›  Fix: ``409 Conflict`` not reported since upgrading to PyMongo 3. Closes #680.
    - πŸ›  Fix: when a document is soft deleted, the OPLOG `_updated` field is not the
      time of the deletion but the time of the previous last update (Cyril
      Bonnard).
    - πŸ›  Fix: TokenAuth. When the tokens are passed as "Authorization: " or
      "Authorization: Token " headers, werkzeug does not recognize them as valid
      authorization header, therefore the ``request.authorization`` field is empty
      (Luca Di Gaspero).
    - πŸ›  Fix: ``SCHEMA_ENDPOINT`` does not work when schema has lambda function as
      ``coerce`` rule. Closes #790.
    - πŸ›  Fix: CORS pre-flight requests malfunction on ``SCHEMA_ENDPOINT`` endpoint
      (Valerie Coffman).
    - πŸ›  Fix: do not attempt to parse ``number`` values as strings when they are
      numerical (Nick Park).
    - Fix: the ``__init__.py`` ``ITEM_URL`` does not match default_settings.py.
      Closes #786 (Ralph Smith).
    - βœ‚ Fix: startup crash when both ``SOFT_DELETE`` and ``ALLOW_UNKNOWN`` are
      enabled. Closes #800.
    - πŸ›  Fix: Serialize inside ``of`` and ``of_type`` rules new in Cerberus 0.9.
      Closes #692 (Arnau Orriols).
    - Fix: In ``put_internal`` Validator is not set when ``skip_validation`` is
      ``true`` (Wei Guan).
    - Fix: In ``patch_internal`` Validator is not set when ``skip_validation`` is
      ``true`` (Stratos Gerakakis).
    - πŸ›  Fix: Add missing serializer for fields of type ``number`` (Arnau Orriols).
    - πŸ›  Fix: Skip any null value from serialization (Arnau Orriols).
    - πŸ›  Fix: When ``SOFT_DELETE`` is active an exclusive ``datasource.projection``
      causes a ``500`` error. Closes #752.
    
    - ⚑️ Update: PyMongo 3.2 is now required.
    - ⚑️ Update: Flask-PyMongo 0.4+ is now required.
    - ⚑️ Update: Werkzeug up to 0.11.4 is now required
    - πŸ”„ Change: simplejson v3.8.2 is now required.
    
    - πŸ“„ Docs: fix some typos (Manquer, Patrick Decat).
    - πŸ“„ Docs: add missing imports to authentication docs (Hamdy)
    - ⚑️ Update license to 2016 (Prayag Verma)
    
    πŸ”– Version 0.6.1
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 29 October, 2015
    
    - πŸ†• New: ``BULK_ENABLED`` enables/disables bulk insert. Defaults to ``True``
      (Julian Hille).
    - πŸ†• New: ``VALIDATE_FILTERS`` enables/disables validating of query filters
      against resource schema. Closes #728 (Stratos Gerakakis).
    - New: ``TRANSPARENT_SCHEMA_RULES`` enables/disables schema validation globally
      and ``transparent_schema_rules`` per resource (Florian Rathgeber).
    - New: ``ALLOW_OVERRIDE_HTTP_METHOD`` enables/disables support for overriding
      request methods with ``X-HTTP-Method-Override`` headers (Julian Hille).
    
    - πŸ›  Fix: flake8 fails on Python 3. Closes #747 (Simon SchΓΆnfeld).
    - πŸ›  Fix: recursion for dotted field normalization (Matt Tucker).
    - πŸ›  Fix: dependendencies on sub-document fields always return 422. Closes #706.
    - Fix: invoking ``post_internal`` with ``skpi_validation = True`` causes
      a ``422`` response. Closes #726.
    - πŸ›  Fix: explict inclusive datasource projection is ignored. Closes #722.
    
    - βœ… Dev: fix rate limiting tests so they don't occasionally fail.
    - βœ… Dev: make sure connections opened by test suite are properly closed on
      teardown.
    - ⚑️ Dev: use middleware to parse overrides and eventually update request method
      (Julian Hille).
    - ⚑️ Dev: optimize versioning by building specific versions without deepcopying
      the root document (Nick Park).
    - Dev: ``_client_projection`` method has been moved up from the mongo layer to
      the base DataLayer class. It is now available for other data layers
      implementations, such as Eve-SQLAlchemy (GonΓ©ri Le Bouder).
    
    - πŸ“„ Docs: add instructions for installing dependencies and building docs (Florian
      Rathgeber).
    - πŸ“„ Docs: fix link to contributing guidelines (Florian Rathgeber).
    - πŸ“„ Docs: fix some typos (Stratos Gerakakis, Julian Hille).
    - πŸ“„ Docs: add Eve-Swagger to Extensions page.
    - πŸ“„ Docs: fix broken link to Mongo's capped collections (Nathan Reynolds).
    
    
    πŸ”– Version 0.6
    ~~~~~~~~~~~
    
    πŸš€ Released on 28 September, 2015
    
    - πŸ†• New: support for embedding simple ObjectId fields: you can now use the
      ``data_relation`` rule on them (GonΓ©ri Le Bouder).
    - πŸ†• New: support for multiple layers of embedding (GonΓ©ri Le Bouder).
    - πŸ†• New: ``SCHEMA_ENDPOINT`` allows resource schema to be returned from an API
      endpoint (Nick Park).
    - πŸ†• New: HATEOAS links can be customized from within callback functions (Magdas
      Adrian).
    - πŸ†• New: ``_INFO``: string value to include an info section, with the given INFO
      name, at the Eve homepage (suggested value ``_info``). The info section will
      include Eve server version and API version (API_VERSION, if set).  ``None``
      otherwise, if you do not want to expose any server info. Defaults to ``None``
      (Stratos Gerakakis).
    - πŸ†• New: ``id_field`` sets a field used to uniquely identify resource items
      within the database. Locally overrides ``ID_FIELD`` (Dominik Kellner).
    - New: ``UPSERT_ON_PUT`` allows document creation on PUT if the document does
      not exist. Defaults to ``True``. See below for details.
    - πŸ†• New: PUT attempts to create a document if it does not exist. The URL endpoint
      will be used as ``ID_FIELD`` value (if ``ID_FIELD`` is included with the
      payload, it will be ignored). Normal validation rules apply. The response
      will be a ``201 Created`` on successful creation. Response payload will be
      identical the one you would get by performing a single document POST to the
      resource endpoint. Set ``UPSET_ON_PUT`` to ``False`` to disable this
      behaviour, and get a ``404`` instead.  Closes #634.
    - New: POST accepts documents which include ``ID_FIELD`` (``_id``) values. This
      is in addition to the old behaviour of auto-generating ``ID_FIELD`` values
      when the submitted document does not contain it. Please note that, while you
      can add ``ID_FIELD`` to the schema (previously not allowed), you don't really
      have to, unless its type is different from the ``ObjectId`` default. This
      means that in most cases you can start storing ``ID_FIELD``-included
      documents right away, without making any changes.
    - πŸ†• New: Log MongoDB and HTTP methods exceptions (Sebastien Estienne).
    - πŸ†• New: Enhanced Logging.
    - New: ``VALIDATION_ERROR_AS_LIST``. If ``True`` even single field errors will
      be returned in a list. By default single field errors are returned as strings
      while multiple field errors are bundled in a list. If you want to standardize
      the field errors output, set this setting to ``True`` and you will always get
      a list of field issues. Defaults to ``False``. Closes #536.
    - πŸ†• New: ``STANDARD_ERRORS`` is a list of HTTP codes that will be served with the
      canonical API response format, which includes a JSON body providing both
      error code and description. Addresses #586.
    - πŸ†• New: ``anyof`` validation rule allows you to list multiple sets of rules to
      validate against.
    - πŸ†• New: ``alloff`` validation rule, same as ``anyof`` except that all rule
      collections in the list must validate.
    - πŸ†• New: ``noneof`` validation rule. Same as ``anyof`` except that it requires no
      rule collections in the list to validate.
    - πŸ†• New: ``oneof`` validation rule. Same as ``anyof`` except that only one rule
      collections in the list can validate.
    - πŸ†• New: ``valueschema`` validation rules replaces the now deprecated
      ``keyschema`` rule.
    - πŸ†• New: ``propertyschema`` is the counterpart to ``valueschema`` that validates
      the keys of a dict.
    - πŸ†• New: ``coerce`` validation rule. Type coercion allows you to apply a callable
      to a value before any other validators run.
    - πŸ†• New: ``MONGO_AUTHDBNAME`` allows to specify a MongoDB authorization database.
      Defaults to ``None`` (David Wood).
    - πŸ†• New: ``remove`` method in Mongo data layer now returns the deletion status or
      ``None`` if write acknowledgement is disabled (Mayur Dhamanwala).
    - New: ``unique_to_user`` validation rule allows to validate that a field value
      is unique to the user. Different users can share the same value for the
      field. This is useful when User Restricted Resource Access is enabled on an
      endpoint. If URRA is not active on the endpoint, this rule behaves like
      ``unique``. Closes #646.
    - New: ``MEDIA_BASE_URL`` allows to set a custom base URL to be used when
      ``RETURN_MEDIA_AS_URL`` is active (Henrique Barroso).
    - πŸ†• New: ``SOFT_DELETE`` enables soft deletes when set to ``True`` (Nick Park.)
    - πŸ†• New: ``mongo_indexes`` allows for creation of MongoDB indexes at application
      launch (Pau Freixes.)
    - πŸ†• New: clients can opt out of default embedded fields:
      ``?embedded={"author":0}`` would cause the embedded author not to be included
      with response payload. (Tobias Betz.)
    - πŸ†• New: CORS: Support for ``X-ALLOW-CREDENTIALS`` (Cyprien Pannier.)
    - πŸ†• New: Support for dot notation in POST, PATCH and PUT methods. Be aware that,
      for PATCH and PUT, if dot notation is used even on just one field, the whole
      sub-document will be replaced. So if this document is stored:
    
      ``{"name": "john", "location": {"city": "New York", "address": "address"}}``
    
      A PATCH like this:
    
        ``{"location.city": "Boston"}``
    
      (which is exactly equivalent to:)
    
        ``{"location": {"city": "a nested city"}}``
    
      Will update the document to:
    
      ``{"name": "john", "location": {"city": "Boston"}}``
    
    - πŸ†• New: JSONP Support (Tim Jacobi.)
    - πŸ†• New: Support for multiple MongoDB databases and/or servers.
    
      - ``mongo_prefix`` resource setting allows overriding of the default
        ``MONGO`` prefix used when retrieving MongoDB settings from configuration.
        For example, set a resource ``mongo_prefix`` to ``MONGO2`` to read/write
        from the database configured with that prefix in your settings file
        (``MONGO2_HOST``, ``MONGO2_DBNAME``, etc.)
      - ``set_mongo_prefix()`` and ``get_mongo_prefix()`` have been added to
        ``BasicAuth`` class and derivates. These can be used to arbitrarily set
        the target database depending on the token/client performing the request.
    
      Database connections are cached in order to not to loose performance. Also,
      this change only affects the MongoDB engine, so extensions currently
      targetting other databases should not need updates (they will not inherit
      this feature however.)
    - New: Enable ``on_pre_GET`` hook for HEAD requests (Daniel Lytkin.).
    - πŸ†• New: Add ``X-Total-Count`` header for collection GET/HEAD requests (Daniel
      Lytkin.).
    - New: ``RETURN_MEDIA_AS_URL``, ``MEDIA_ENDPOINT`` and ``MEDIA_URL`` allow for
      serving files at a dedicated media endpoint while urls are returned in
      document media fields (Daniel Lytkin.)
    - New: ``etag_ignore_fields``. Resource setting with a list of fields belonging
      to the schema that won't be used to compute the ETag value. Defaults to
      ``None`` (Olivier Carrère.)
    
    - πŸ”„ Change: when HATEOAS is off the home endpoint will respond with ``200 OK``
      instead of ``404 Not Found`` (Stratos Gerakakis).
    - πŸ”„ Change: PUT does not return ``404`` if a document URL does not exist. It will
      attempt to create the document instead. Set ``UPSET_ON_PUT`` to ``False`` to
      disable this behaviour and get a ``404`` instead.
    - πŸ”„ Change: A PATCH including an ``ID_FIELD`` field which value is different than
      the original will get a ``400 Bad Request``, along with an explanation in the
      message body that the field is immutable. Previously, it would get an
      ``unknown field`` validation error.
    
    - Dev: Improve GET perfomance on large versioned documents (Nick Park.)
    - Dev: The ``MediaStorage`` base class now accepts the active resource as an
      argument for its methods. This allows data-layers to avoid resorting to the
      Flask request object to determine the active resource. To preserve backward
      compatibility the new ``resource`` argument defaults to ``None`` (Magdas
      Adrian).
    - Dev: The Mongo data-layer is not dependant on the Flask request object
      anymore. It will still fallback to it if the ``resource`` argument is
      ``None``. Closes #632. (Magdas Adrian).
    
    - πŸ›  Fix: store versions in the same mongo collection when ``datasource`` is used
      (Magdas Adrian).
    - πŸ›  Fix: Update ``serialize`` to gracefully handle non-dictionary values in dict
      type fields (Nick Park).
    - πŸ›  Fix: changes to the ``updates`` argument, applied by callbacks hooked to the
      ``on_updated`` event, were not persisted to the database (Magdas Adrian).
      Closes #682.
    - πŸ›  Fix: Changes applied to the ``updates`` argument``on_updated`` returns the
      whole updated document. Previously, it was only returning the updates sent
      with the request. Closes #682.
    - πŸ›  Fix: Replace the Cerberus rule ``keyschema``, now deprecated, with the new
      ``propertyschema`` (Julian Hille).
    - πŸ›  Fix: some error message are not filtered out of debug mode anymore, as they
      are useful for users and do not leak information. Closes #671 (Sebastien
      Estienne).
    - πŸ›  Fix: reinforce Content-Type Header handling to avoid possible crash when it
      is missing (Sebastien Estienne).
    - πŸ›  Fix: some schema errors were not being reported as SchemaError exceptions.
      A more generic 'DOMAIN missing or wrong' message was returned instead.
    - πŸ›  Fix: When versioning is enabled on a resource with a custom ID_FIELD,
      versioning documents will inherit their ID from the versioned document,
      making any update of the document result in a DuplicateKeyError (Matthieu
      Prat).
    - πŸ›  Fix: Filter validation fails to validate query selectors that contain a value
      of the list data-type, which is not a list of sub-queries. See #674 (Matthieu
      Prat).
    - Fix: ``_validate_dependencies`` always returns ``None``.
    - πŸ›  Fix: ``412 Precondition Failed`` does not return a JSON body. Closes #661.
    - πŸ›  Fix: ``embedded_fields`` may point on a field that come from another embedded
      document. For example, ``['a.b.c', 'a.b', 'a']`` (GonΓ©ri Le Bouder).
    - πŸ›  Fix: add handling of sub-resource resolving for PUT method (Olivier Poitrey).
    - πŸ›  Fix: ``dependencies`` rule would mistakenly validate documents when target
      fields happened to also have a ``default``Β value.
    - πŸ›  Fix: According to RFC2617 the separator should be (=) instead of (:). This
      caused at least Chrome not to prompt user for the credentials, and not to
      send the Authorization header even when credentials were in the url (Samuli
      Tuomola).
    - πŸ›  Fix: make sure ``unique`` validation rule is consistent between HTTP methods.
      A field value must be unique within the datasource, regardless of the user
      who created it. Closes #646.
    - πŸ›  Fix: OpLog domain entry is not created if ``OPLOG_ENDPOINT`` is ``None``.
      Closes #628.
    - πŸ›  Fix: Do not overwrite ``ID_FIELD`` as it is not a sub resource. See #641 for
      details (Olivier Poitrey).
    - πŸ›  Fix: ETag computation crash when non-standard json serializers are used
      (Kevin Roy.)
    - πŸ›  Fix: Remove duplicate item in Mongo operators list. Closes #619.
    - βœ… Fix: Versioning: invalidate cache when ``_latest_version`` changes in
      versioned doc (Nick Park.)
    - πŸ›  Fix: snippet in account management tutorial (xgddsg.)
    - Fix: ``MONGO_REPLICA_SET`` and other significant Flask-PyMongo settings have
      been added to the documentation. Closes #615.
    - πŸ›  Fix: Serialization of lists of lists (Nick Park.)
    - πŸ›  Fix: Make sure ``original`` is not modified during ``PATCH``. Closes #611
      (Petr JaΕ‘ek.)
    - πŸ›  Fix: Route parameters are applied to new documents before they are validated.
      This ensures that documents with required fields will be populated before
      they are validated. Addresses #354. (Matthew Ellison.)
    - πŸ›  Fix: ``GridFSMediaStorage`` does not save filename. Closes #605 (Sam Luu).
    - πŸ›  Fix: Reinforce GeoJSON validation (Joakim Uddholm.)
    - πŸ›  Fix: Geopoint coordinates do not accept integers. Closes #591 (Joakim
      Uddholm.)
    - πŸ›  Fix: OpLog enabled makes PUT return wrong Etag. Closes #590.
    
    - ⚑️ Update: Cerberus 0.9.2 is now required.
    - ⚑️ Update: PyMongo 2.8 is now required (which in turn supports MongoDB 3.0)
    
    πŸ”– Version 0.5.3
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 17 March, 2015.
    
    - πŸ›  Fix: Support for Cerberus 0.8.1.
    - πŸ›  Fix: Don't block on first field serialization exception. Closes #568.
    - πŸ›  Fix: Ignore read-only fields in ``PUT`` requests when their values aren't
      changed compared to the stored document (Bjorn Andersson.)
    
    - πŸ“„ Docs: replace ``file`` with ``media`` type. Closes #566.
    
    πŸ”– Version 0.5.2
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 23 Feb, 2015.
    Codename: 'Giulia'.
    
    - πŸ›  Fix: hardening of database concurrency checks. See #561 (Olivier CarrΓ¨re.)
    - πŸ›  Fix: ``PATCH`` and ``PUT`` do not include Etag header (Marcus Cobden.)
    - πŸ›  Fix: endpoint-level authentication crash when a callable is passed. Closes
      #558.
    - πŸ›  Fix: serialization of ``keyschema`` fields with ``objetid`` values. Closes
      #525.
    - πŸ›  Fix: typos in schema rules might lead to arbitrary payloads being validated
      (Emmanuel Leblond.)
    - πŸ›  Fix: ObjectId value in ID field of type string (Jaroslav Semančík.)
    - πŸ›  Fix: User Restricted Resource Access does not work with HMAC Auth classes.
    - πŸ›  Fix: Crash when ``embedded`` is used on subdocument with a missing field
      (Emmanuel Leblond.)
    
    - πŸ“„ Docs: add ``MONGO_URI`` as an alternative to other MongoDB connection
      options. Closes #551.
    
    - πŸ”„ Change: Werkzeug 0.10.1 is now required.
    - ⚑️ Change: ``DataLayer`` API methods ``update()`` and ``replace()`` have a new
      ``original`` argument.
    
    πŸ”– Version 0.5.1
    ~~~~~~~~~~~~~
    
    πŸš€ Released on 16 Jan, 2015.
    
    - πŸ›  Fix: dependencies with value checking seem broken (#547.)
    - πŸ›  Fix: documentation typo (Marc Abramowitz.)
    - πŸ›  Fix: pretty url for regex with a colon in the expression (Magdas Adrian.)
    
    πŸ”– Version 0.5
    ~~~~~~~~~~~
    
    πŸš€ Released on 12 Jan, 2015.
    
    - πŸ†• New: Operations Log (http://python-eve.org/features#operations-log.)
    - πŸ†• New: GeoJSON (http://python-eve.org/features.html#geojson) (Juan Madurga.)
    - πŸ†• New: Internal Resources (http://python-eve.org/features#internal-resources) (Magdas Adrian.)
    - πŸ†• New: Support for multiple origins when using CORS (Josh Villbrandt, #532.)
    - πŸ†• New: Regexes are stripped out of HATEOAS urls when present. You now get
      ``games/<game_id>/images`` where previously you would get
      ``games/<regex('[a-f0-9]{24}'):game_id>/images``). Closes #466.
    - New: ``JSON_SORT_KEYS`` enables JSON key sorting (Matt Creenan).
    - πŸ†• New: Add the current query string to the self link for responses with
      multiple documents. Closes #464 (Jen Montes).
    - πŸ†• New: When document versioning is on, add ``?version=<version_num>`` to
      HATEOAS self links. Also adds pagination links for ``?version=all`` and
      ``?version=diffs`` requests when the number exceeds the max results.
      Partially addresses #475 (Jen Montes).
    - πŸ†• New: ``QUERY_WHERE`` allows to set the query parameter key for filters.
      Defaults to ``where``.
    - πŸ†• New: ``QUERY_SORT`` allows to set the query parameter key for sorting.
      Defaults to ``sort``.
    - πŸ†• New: ``QUERY_PAGE`` allows to set the query parameter key for pagination.
      Defaults to ``page``.
    - πŸ†• New: ``QUERY_PROJECTION`` allows to set the query parameter key for
      projections. Defaults to ``projection``.
    - New: ``QUERY_MAX_RESULTS`` allows to set the query parameter key for max
      results. Defaults to ``max_results``.
    - πŸ†• New: ``QUERY_EMBEDDED`` allows to set the query parameter key embedded
      documents. Defaults to ``embedded``.
    - πŸ†• New: Fire ``on_fetched`` events for ``version=all`` requests (Jen Montes).
    - πŸ†• New: Support for CORS ``Access-Control-Expose-Headers`` (Christian Henke).
    - πŸ†• New: ``post_internal()`` can be used for intenral post calls. This method is
      not rate limited, authentication is not checked and pre-request events are
      not raised (Magdas Adrian).
    - πŸ†• New: ``put_internal()`` can be used for intenral PUT calls. This method is
      not rate limited, authentication is not checked and pre-request events are
      not raised (Kevin Funk).
    - πŸ†• New: ``patch_internal()`` can be used for intenral PATCH calls. This method
      is not rate limited, authentication is not checked and pre-request events are
      not raised (Kevin Funk).
    - πŸ†• New: ``delete_internal()`` can be used for intenral DELETE calls. This method
      is not rate limited, authentication is not checked and pre-request events are
      not raised (Kevin Funk).
    - πŸ†• New: Add an option to ``_internal`` methods to skip payload validation
      (Olivier Poitrey).
    - πŸ†• New: Comma delimited sort syntax in queries. The MongoDB data layer now also
      supports queries like ``?sort=lastname,-age``. Addresses #443.
    - πŸ†• New: Add extra 4xx response codes for proper handling. Only ``405`` Method
      not allowed, ``406`` Not acceptable, ``409`` Conflict, and ``410`` Gone have
      been added to the list (Kurt Doherty).
    - πŸ†• New: Add serializers for integer and float types (Grisha K.)
    - πŸ†• New: dev-requirements.txt added to the repo.
    - πŸ†• New: Embedding of documents by references located in any subdocuments. For
      example, query ``embedded={"user.friends":1}`` will return a document with
      "user" and all his "friends" embedded, but only if ``user`` is a subdocument
      and ``friends`` is a list of references (Dmitry Anoshin).
    - πŸ†• New: Allow mongoengine to work properly with cursor counts (Johan Bloemberg)
    - πŸ†• New: ``ALLOW_UNKNOWN`` allows unknown fields to be read, not only written as
      before. Closes #397 and #250.
    - New: ``VALIDATION_ERROR_STATUS`` allows setting of the HTTP status code to
      use for validation errors. Defaults to ``422`` (Olivier Poitrey).
    - πŸ†• New: Support for sub-document projections. Fixes #182 (Olivier Poitrey).
    - πŸ†• New: Return ``409 Conflict`` on pymongo ``DuplicateKeyError`` for ``POST``
      requests, as already happens with ``PUT`` requests (Matt Creenan, #537.)
    
    - πŸ”„ Change: ``DELETE`` returns ``204 NoContent`` on a successful delete.
    - πŸ”„ Change: SERVER_NAME removed as it is not needed anymore.
    - πŸ”„ Change: URL_PROTOCOL removed as it is not needed anymore.
    - πŸ”„ Change: HATEOAS links are now relative to the API root. Closes #398 #401.
    - πŸ”„ Change: If-Modified-Since has been disabled on resource (collections)
      endpoints. Same functionality is available with a ``?where={"_udpated":
      {"$gt": "<RFC1123 date>"}}`` request. The OpLog also allows retrieving
      detailed changes happened at any endpoint, deleted documents included.
      Closes #334.
    - πŸ”„ Change: etags are now persisted with the documents. This ensures that etags
      are consistent across queries, even when projection queries are issued.
      Please note that etags will only be stored along with new documents created
      and/or edited via API methods (POST/PUT/PATCH). Documents inserted by other
      means and those stored with v0.4 and below will keep working as previously:
      their etags will be computed on-the-fly and you will get still be getting
      inconsistent etags when projection queries are issued. Closes #369.
    - πŸ”„ Change: XML item, meta and link nodes are now ordered. Closes #441.
    - πŸ”„ Change: ``put`` method signature for ``MediaStorage`` base class has been
      updated. ``filemame`` is now optional. Closes #414.
    - πŸ”„ Change: CORS behavior to be compatible with browsers (Chrome). Eve is now
      echoing back the contents of the Origin header if said content is whitelisted
      in X_DOMAINS. This also safer as it avoids exposing internal server
      configuration. Closes #408. This commit was carefully handcrafed on a flight
      to EuroPython 2014.
    - πŸ”„ Change: Specify a range of dependant package versions. #379 (James Stewart).
    - πŸ”„ Change: Cerberus 0.8 is now required.
    - πŸ”„ Change: pymongo v2.7.2 is now required.
    - πŸ”„ Change: simplejson v3.6.5 is now required.
    - ⚑️ Change: update ``dev-requirements.txt`` to most recent tools available.
    
    - πŸ›  Fix: add ``README.rst`` to ``MANIFEST.in`` (Niall Donegan.)
    - πŸ›  Fix: ``LICENSE`` variable in ``setup.py`` should be "shortstring". Closes
      #540 (Niall Donegan.)
    - πŸ›  Fix: ``PATCH`` on fields with original value of ``None`` (Marcus Cobden,
      #534).
    - πŸ›  Fix: Fix impossible version ranges in setup.py (Marcus Cobden, #531.)
    - πŸ›  Fix: Bug with expanding lists of roles, compromising authorization (Mikael
      Berg, #527)
    - πŸ›  Fix: ``PATCH`` on subdocument fields does not overwrite the whole
      subdocument anymore. Closes #519.
    - πŸ›  Fix: Added support for validation on field attribute with type list (Jorge
      Morales).
    - πŸ›  Fix: Fix a serialization bug with integer and float when value is
      0 (Olivier Poitrey).
    - πŸ›  Fix: Custom ID fields tutorial: if custom ID fields are being used, then
      MongoDB/Eve won't be able to create them automatically as it does with the
      `ObjectId` default type. Closes #511.
    - πŸ›  Fix: Dependencies with default values were reported as missing if omitted.
      Closes #353.
    - πŸ›  Fix: Dependencies always fails on PATCH if dependent field isn't part of
      the update. #363.
    - πŸ›  Fix: client projections work when ``allow_unknown`` is active. Closes #497.
    - πŸ›  Fix: datasource projections are active when ``allow_unknown`` is active.
      closes #497.
    - πŸ›  Fix: Properly serialize nullable floats and integers. Closes #469.
    - πŸ›  Fix: ``_mongotize()`` turns non-ObjectId strings (but not unicode) into
      ObjectIds. Closes #508 (Or Neeman).
    - πŸ›  Fix: Fix validation of read-only fields inside dicts. Closes #474 (Arnau
      Orriols).
    - πŸ›  Fix: Parent and collection links follow the scheme described in #475 (Jen
      Montes).
    - πŸ›  Fix: Ignore read-only fields in ``PATCH`` requests when their values aren't
      changed compared to the stored document. Closes #479.
    - πŸ›  Fix: Allow ``EVE_SETTINGS`` envvar to be used exclusively. Previously,
      a settings file in the working directory was always required. Closes #461.
    - πŸ›  Fix: exception when trying to set nullable media field to null (Daniel
      Lytkin)
    - πŸ›  Fix: Add missing ``$options`` and ``$list`` MongoDB operators to the
      allowed list (Jaroslav Semančík).
    - πŸ›  Fix: Get document when it is missing embedded media. In case you try to
      embedd a document which has media fields and that document has been deleted,
      you would get an error (Petr JaΕ‘ek).
    - πŸ›  Fix: fix additional lookup regex in  RESTful Account Management tutorial
      (Ashley Roach).
    - πŸ›  Fix: ``utils.weak_date`` always returns a RFC-1123 date (Petr JaΕ‘ek).
    - πŸ›  Fix: Can't embed a ressource with a custom _id (non ObjectId). Closes #427.
    - πŸ›  Fix: Do not follow DATE_FORMAT for HTTP headers. Closes #429 (Olivier
      Poitrey).
    - πŸ›  Fix: Fix app initialization with resource level versioning #409 (SebastiΓ‘n
      MagrΓ­).
    - πŸ›  Fix: KeyError when trying to use embedding on a field that is missing from
      document. It was fixed earlier in #319, but came back again after new
      embedding mechanism (Daniel Lytkin).
    - πŸ›  Fix: Support for list of strings as default value for fields (hansotronic).
    - πŸ›  Fix: Media fields are now properly returned even in embedded documents.
      Closes #305.
    - πŸ›  Fix: auth in domain configuration can be either a callable or a class
      instance (Gino Zhang).
    - πŸ›  Fix: Schema definition: a default value of [] for a list causes IndexError.
      Closes #417.
    - πŸ›  Fix: Close file handles in setup.py (Harro van der Klauw)
    - πŸ›  Fix: Querying a collection should always return pagination information (even
      when no data is being returned). Closes #415.
    - πŸ›  Fix: Recursively validate the whole query string.
    - πŸ›  Fix: If the data layer supports a list of allowed query operators, take
      them into consideration when validating a query string. Closes #388.
    - πŸ›  Fix: Abort with 400 if unsupported query operators are used. Closes #387.
    - πŸ›  Fix: Return the error if a blacklisted MongoDB operator is used in a query
      (debug mode).
    - πŸ›  Fix: Invalid sort syntax raises 500 instead of 400. Addresses #378.
    - πŸ›  Fix: Fix serialization when `type` is missing in schema. #404 (Jaroslav
      Semančík).
    - πŸ›  Fix: When PUTting or PATCHing media fields, they would not be properly
      replaced as needed (Stanislav Heller).
    - Fix: ``test_get_sort_disabled`` occasional failure.
    - πŸ›  Fix: A POST with an empty array leads to a server crash. Now returns a 400
      error isntead and ensure the server won't crash in case of mongo invalid
      operations (Olivier Poitrey).
    - πŸ›  Fix: PATCH and PUT don't respect flask.abort() in a pre-update event. Closes
      #395 (Christopher Larsen).
    - πŸ›  Fix: Validating keyschema rules would cause a TypeError since 0.4. Closes
      pyeve/cerberus#48.
    - πŸ›  Fix: Crash if client projection is not a dict #390 (Olivier Poitrey).
    - πŸ›  Fix: Server crash in case of invalid "where" syntax #386 (Olivier Poitrey).
    
    
    πŸ”– Version 0.4
    ~~~~~~~~~~~
    
    πŸš€ Released on 20 June, 2014.
    
    - [new] You can now start the app without any resource defined and use
      ``app.register_resource`` later as needed (Petr JaΕ‘ek).
    - [new] Data layer is now usable outside request context, for example within
      a Celery task where there's no request context (Petr JaΕ‘ek).
    - [new][change] Add pagination info to get results whatever the HATEOAS status.
      Closes #355 (Olivier Poitrey).
    - πŸ“œ [new] Ensure all errors return a parseable body (JSON or XML). Closes #365
      (Olivier Poitrey).
    - [new] Apply sub-request route's params to the created document if matching
      the schema, e.g. a POST on ``/people/1234…/invoices`` will set the
      ``contact_id`` field to 1234… so created invoice is automatically associated
      with the parent resource (Olivier Poitrey).
    - [new] Allow some more HTTP errors (403 and 404) to be thrown from db hooks
      (Olivier Poitrey).
    - [new] ``ALLOWED_READ_ROLES``. A list of allowed `roles` for resource
      endpoints with GET and OPTIONS methods (Olivier Poitrey).
    - [new] ``ALLOWED_WRITE_ROLES``. A list of allowed `roles` for resource
      endpoints with POST, PUT and DELETE methods (Olivier Poitrey).
    - [new] ``ALLOWED_ITEM_READ_ROLES``. A list of allowed `roles` for item
      endpoints with GET and OPTIONS methods (Olivier Poitrey).
    - [new] ``ALLOWED_ITEM_WRITE_ROLES``. A list of allowed `roles` for item
      endpoints with PUT, PATCH and DELETE methods (Olivier Poitrey).
    - [new] 'dependencies' validation rule.
    - [new] 'keyschema' validation rule.
    - [new] 'regex' validation rule.
    - [new] 'set' as a core data type.
    - [new] 'min' and 'max' now apply to floats and numbers too.
    - [new] File Storage. ``EXTENDED_MEDIA_INFO`` allows a list of meta fields
      (file properties) to forward from the file upload driver (Ben Demaree).
    - πŸ‘ [new] Python 3.4 is now supported.
    - 0️⃣ [new] Support for default values in documents with more than one level of
      data (Javier Gonel).
    - [new] Ability to send entire document in write responses. ``BANDWITH_SAVER``
      aka Coherence Mode (Josh Villbrandt).
    - [new] ``on_pre_<METHOD>`` events expose the `lookup` dictionary which allows
      for setting up dynamic database lookups on both resource and item endpoints.
    - πŸ‘» [new] Return a 400 response on pymongo DuplicateKeyError, with exception
      message if debug mode is on (boosh).
    - βœ… [new] PyPy officially supported and tested (Javier Gonel).
    - πŸ‘ [new] tox support (Javier Gonel).
    - [new] Post database events (Javier Gonel). Addresses #272.
    - [new] Versioned Documents (Josh Villbrandt). Closes #224.
    - [new] Python trove classifiers added to setup.py.
    - [new] Client projections are also honored at item endpoints.
    - [new] validate that ID_FIELD is not set as a resource ``auth_field``.
      Addresses #266.
    - πŸ— [new] ``URL_PROTOCOL`` defines the HTTP protocol used when building HATEOAS
      links. Defaults to ``''`` for relative paths (Junior Vidotti).
    - βœ‚ [new] ``on_delete_item`` and ``on_deleted_item`` is raised on DELETE requests
      sent to document endpoints. Addresses #232.
    - βœ‚ [new] ``on_delete_resource`` and ``on_deleted_resource`` is raised on DELETE
      requests sent to resource endpoints. Addresses #232.
    - ⚑️ [new] ``on_update`` is raised on PATCH requests, when a document is about to
      be updated on the database. Addresses #232.
    - [new] ``on_replace`` is raised on PUT requests, when a document is about to
      be replaced on the database. Addresses #232.
    - [new] ``auth`` constructor argument accepts either a class instance or
      a callable. Closes #248.
    
    - [change] Cerberus 0.7.2 is now required.
    - [change] Jinja2 2.7.3 is now required.
    - [change] Werkzeug 0.9.6 is now required.
    - [change] simplejson 3.5.2 is now required.
    - [change] itsdangerous 0.24 is now required. Addresses #378.
    - [change] Events 0.2.1 is now required.
    - [change] MarkupSafe 0.23 is now required.
    - [change] For bulk and non-bulk inserts, response status now always either 201
      when everything was ok or 400 when something went wrong. For bulk inserts, if
      at least one document doesn't validate, the whole request is rejected, and
      none of the documents are inserted into the database. Additionnaly, this
      commit adopts the same response format as collections: responses are always
      a dict with a ``_status`` field at its root and an eventual ``_error`` object
      if ``_status`` is ``ERR`` to comply with #366. Documents status are stored in
      the ``_items`` field (Olivier Poitrey).
    - [change] Callbacks get whole json response on ``on_fetched``. This allows for
      callbacks functions to alter the whole payload, even when HATEOAS is enabled
      and ``_items`` and ``_links`` metafields are present.
    - [change] ``on_insert`` is not raised anymore on PUT requests (replaced by
      above mentioned ``on_replace``).
    - [change] ``auth.request_auth_value`` is no more. Yay. See below.
    - [change] ``auth.set_request_auth_value()`` allows to set the ``auth_field``
      value for the current request.
    - [change] ``auth.get_request_auth_value()`` allows to retrieve the
      ``auth_field`` value for the current request.
    - ⚑️ [change] ``on_update(ed)`` and ``on_replace(ed)`` callbacks now receive both
      the original document and the updates (Jaroslav Semančík).
    - [change] Review event names (Javier Gonel).
    
    - [fix] return 500 instead of 404 if CORS is enabled. Closes #381.
    - [fix] Crash on GET requests on resource endpoints when ID_FIELD is missing on
      one or more documents. Closes #351.
    - [fix] Cannot change a nullable objectid type field to contain null. Closes
      #341.
    - πŸ”§ [fix] HATEOAS links as business unit values even when regexes are configured
      for the endpoint.
    - πŸ“š [fix] Documentation improvements (Jen Montes).
    - πŸ‘» [fix] KeyError exception was raised when field specified in schema as
      embeddable was missing in a particular document (Jaroslav Semančík).
    - πŸ‘€ [fix] Tests on HEAD requests would very occasionally fail. See #316.
    - [change] PyMongo 2.7.1 is now required.
    - [fix] Automatic fields such as ``DATE_CREATD`` and ``DATE_CREATED`` are
      correctly handled in client projections (Josh Villbrandt). Closes #282.
    - πŸš€ [fix] Make codebase compliant with latest PEP8/flake8 release (Javier Gonel).
    - [fix] If you had a media field, and set datasource projection to 0 for that
      field, the media would not be deleted. Closes #284.
    - βœ… [fix] tests cleanup (Javier Gonel).
    - βœ… [fix] tests now run on any system without needing to set ``ulimit`` to
      a higher value (Javier Gonel).
    - [fix] media files: don't try to delete a field that does not exist (Taylor
      Brown).
    - πŸ— [fix] Occasional KeyError while building ``_media`` helper dict. See #271
      (Alexander Hendorf).
    - [fix] ``If-Modified-Since`` misbehaviour when a datasource filter is set.
      Closes #258.
    - [fix] Trouble serializing list of dicts. Closes #265 and #244.
    - [fix] ``HATEOAS`` item links are now coherent actual endpoint URL even when
      natural immutable keys are used in URLs (Junior Vidotti). Closes #256.
    - [fix] Replaced ``ID_FIELD`` by ``item_lookup_field`` on self link.
      item_lookup_field will default to ``ID_FIELD`` if blank.
    
    πŸ”– Version 0.3
    ~~~~~~~~~~~
    
    πŸš€ Released on 14 February, 2014.
    
    - [fix] Serialization of sub-documents (Hannes Tiede). Closes #244.
    - [new] ``X_MAX_AGE`` allows to configure CORS Access-Control-Max-Age (David
      Buchmann).
    - [fix] ``GET`` with ``If-Modified-Since`` on list endpoint returns incorrect
      304 if resource is empty. Closes #243.
    - [change] ``POST`` will return ``201 Created`` if at least one document was
      accepted for insertion; ``200 OK`` otherwise (meaning the request was
      accepted and processed). It is still client's responsability to parse the
      response payload to check if any document did not pass validation. Addresses
      #201 #202 #215.
    - [new] ``number`` data type. Allows both integers and floats as field values.
    - [fix] Using primary keys other than _id. Closes #237.
    - βœ… [fix] Add tests for ``PUT`` when User Restricted Resource Access is active.
    - πŸ›  [fix] Auth field not set if resource level authentication is set. Fixes #231.
    - [fix] RateLimit check was occasionally failing and returning a 429 (John
      Deng).
    - [change] Jinja2 2.7.2 is now required.
    - [new] media files (images, pdf, etc.) can be uploaded as ``media`` document
      fields. When a document is requested, eventual media files will be returned
      as Base64 strings. Upload is done via ``POST``, ``PUT`` and ``PATCH`` using
      the ``multipart/form-data`` content-type. For optmized performance, by
      default files are stored in GridFS, however custom ``MediaStorage`` classes
      can be provided to support alternative storage systems. Clients and API
      maintainers can exploit the projections feature to include/exclude media
      fields from requests. For example, a request like
      ``/url/<id>?projection={"image": 0}`` will return the document without the
      image field. Also, while setting a resource ``datasource`` it is possible to
      explicitly exclude media fields from standard responses (clients will need to
      explicitly add them to the payload with ``?projection={"image": 1}``).
    - [new] ``media`` type for schema fields.
    - [new] ``media`` application argument. Allows to specify a media storage class
      to be used to store media files. Defaults to ``GridFSMediaStorage``.
    - [new] ``GridFSMediaStorage`` class. Stores files into GridFS.
    - [new] ``MediaStorage`` class provides a standardized API for storing files,
      along with a set of default behaviors that all other storage systems can
      inherit or override as necessary.
    - πŸ‘ [new] ``file`` data type support and validation for resource schema.
    - πŸ‘ [new] ``multipart/form-data`` content-type is now supported for requests.
    - πŸ‘ [fix] Field exclusion (``?projection={"fieldname": 0}``) now supported in
      client projections. Remember, mixing field inclusion and exclusion is still
      not supported by MongoDB.
    - [fix] ``URL_PREFIX`` and ``API_VERSION`` are correctly reported in HATOEAS
      links.
    - [fix] ``DELETE`` on sub-resources should only delete documents referenced by
      the parent. Closes #212.
    - [fix] ``DELETE`` on a resource endpoint honors User-Restricted Resource
      Access. Closes #213.
    - 0️⃣ [new] ``JSON`` allows to enable/disable JSON responses. Defaults to ``True``
      (JSON enabled).
    - 0️⃣ [new] ``XML`` allows to enable/disable XML responses. Defaults to ``True``
      (XML enabled).
    - πŸ”— [fix] XML properly honors ``_LINKS`` and ``_ITEMS`` settings.
    - [fix] return all document fields when resource schema is empty.
    - βœ… [new] pytest.ini for pytest support.
    - βœ… [fix] All tests should now run with nose and pytest. Closes #209.
    - [new] ``query_objectid_as_string`` resource setting. Defaults to ``False``.
      Addresses #207.
    - 0️⃣ [new] ``ETAG`` allows to customize the etag field. Defaults to ``_etag``.
    - πŸ‘€ [change] ``etag`` is now ``_etag`` in all default response payloads (see
      above).
    - 0️⃣ [change] ``STATUS`` defaults to '_status'.
    - 0️⃣ [change] ``ISSUES`` defaults to '_issues'.
    - 0️⃣ [change] ``DATE_CREATED`` defaults to '_created'. Upgrade existing
      collections by running ``db.<collection>.update({}, { $rename: { "created":
      "_created" } }, { multi: true })`` in the mongo shell. If an index exists on
      the field, drop it and create a new one using the new field name.
    - ⚑️ [change] ``LAST_UPDATED`` defaults to '_updated'. Upgrade existing
      collections by running ``db.<collection>.update({}, { $rename: { "updated":
      "_updated" } }, { multi: true })`` in the mongo shell. If an index exists on
      the field, drop it and create a new one usung the new field name.
    - πŸ›° [change] Exclude ``etag`` from both response payload and headers if
      concurrency control is disabled (``IF_MATCH`` = ``False``). Closes #205.
    - ⚑️ [fix] Custom ``ID_FIELD`` would fail on update/insert methods. Fixes #203
      (Jaroslav Semančík).
    - [change] GET: when If-Modified-Since header is present, either no documents
      (304) or all documents (200) are sent per the HTTP spec. Original behavior
      can be achieved with:
      ``/resource?where={"updated":{"$gt":"if-modified-since-date"}}`` (Josh
      Villbrandt).
    - [change] Validation errors are now reported as a dictionary with offending
      fields as keys and issues descriptions as values.
    - [change] Cerberus v0.6 is now required.
    
    πŸ”– Version 0.2
    ~~~~~~~~~~~
    
    πŸš€ Released on 30 November, 2013.
    
    - πŸ”§ [new] Sub-Resources. It is now possible to configure endpoints such as:
      ``/companies/<company_id>/invoices``. Also, the corresponding item endpoints,
      such as ``/companies/<company_id>/invoices/<invoice_id>``, are available. All
      CRUD operations on these endpoints are allowed. Closes 156.
    - [new] ``resource_title`` allows to customize the endpoint title (HATEOAS).
    - [new][dev] ``extra`` cursor property, when present, will be added to ``GET``
      responses (with same key). This feature can be used by Eve extensions to
      inject proprietary data into the response stream (Petr JaΕ‘ek).
    - [new] ``IF_MATCH`` allows to disable checks for ETag matches on edit, replace
      and delete requests. If disabled, requests without an If-Match header will be
      honored without returning a 403 error. Defaults to True (enabled by default).
    - 0️⃣ [new] ``LINKS`` allows to customize the links field. Default to '_links'.
    - 0️⃣ [new] ``ITEMS`` allows to customize the items field. Default to '_items'.
    - 0️⃣ [new] ``STATUS`` allows to customize the status field. Default to 'status'.
    - 0️⃣ [new] ``ISSUES`` allows to customize the issues field. Default to 'issues'.
    - [new] Handling custom ID fields tutorial.
    - [new] A new ``json_encoder`` initialization argument is available. It allows
      to pass custom JSONEncoder or eve.io.BaseJSONEncoder to the Eve instance.
    - [new] A new ``url_converters`` initialization argument is available. It
      allows to pass custom Flask url converters to the Eve constructor.
    - [new] ID_FIELD fields can now be of arbitrary types, not only ObjectIds.
      Thanks to Kelvin Hammond for contributing to this one.  Closes #136.
    - [new] ``pre_<method>`` and ``pre_<method>_<resource>`` event hooks are now
      available. They are raised when a request is received and before processing
      it. The resource involved and the Flask request object are returned to the
      callback function (dccrazyboy).
    - 0️⃣ [new] ``embedded_fields`` activates default Embedded Resource Serialization
      on a list of selected document fields. Eventual embedding requests by clients
      will be processed along with default embedding. In order for default
      embedding to work, the field must be defined as embeddable, and embedding
      must be active for the resource (with help from Christoph Witzany).
    - 0️⃣ [new] ``default_sort`` option added to the ``datasource`` resource setting.
      It allows to set default sorting for the endpoint. Default sorting will be
      overriden by a client request that happens to include a ``?sort`` argument
      within the query string (with help from Christoph Witzany).
    - [new] You can now choose to provide custom settings as a Python dictionary.
    - [new] New method ``Eve.register_resource()`` for registering new resource
      after initialization of Eve object. This is needed for simpler initialization
      API of all ORM/ODM extensions (Stanislav Heller).
    - [change] Rely on Flask endpoints to map urls to resources.
    - πŸ‘ [change] For better consistency with new ``pre_<method>`` hooks,
      ``on_<method>`` event hooks have been renamed to ``on_post_<method>``.
    - [change] Custom authentication classes can now be set at endpoint level. When
      set, an endpoint-level auth class will override the eventual global level
      auth class.  Authentication docs have been updated (and greatly revised)
      accordingly.  Closes #89.
    - [change] JSON encoding is now handled at the DataLayer level allowing for
      specialized, granular, data-aware encoding. Also, since the JSON encoder is
      now a class attribute, extensions can replace the pre-defined data layer
      encoder with their own implementation. Closes #102.
    - ⚑️ [fix] HMAC example and docs updated to align with new hmac in Python 2.7.3,
      which is only accepting bytes string. Closes #199.
    - [fix] Properly escape leaf values in XML responses (Florian Rathgeber).
    - 0️⃣ [fix] A read-only field with a default value would trigger a validation error
      on POST and PUT methods.
    
    πŸ”– Version 0.1.1
    ~~~~~~~~~~~~~
    
    πŸš€ Released on October 31th, 2013.
    
    - βœ‚ DELETE now uses the original document ID_FIELD when issuing the delete
      command to the underlying data layer (Xavi Cubillas).
    - Embedded Resource Serialization also available at item endpoints
      (``/invoices/<id>/?embedded={'person':1}``),
    - πŸ‘€ ``collection`` (used when setting up a data relation, see Embedded Resource
      Serialization) has been renamed to ``resource`` in order to avoid confusion
      between the Eve schema and underlying MongoDB collections.
    - Nested endpoints. Endpoints with deep paths like ``/contacts/overseas`` can
      now function in conjuction with top-level endpoints (``/contacts``).
      Endpoints are completely independent: each can allow item lookups
      (``/contacts/<id>`` and ``contacts/overseas/<id>``) and different access
      methods. Previously, while you could have complex urls, you could not get
      nested endpoints to work properly.
    - πŸ‘ PyMongo 2.6.3 is now supported.
    - 🚚 item-id wrappers have been removed from POST/PATCH/PUT requests and
      responses. Requests for single document insertion/edition are now performed
      by just submitting the relevant document. Bulk insert requests are performed
      by submitting a list of documents. The response to bulk requests is a list
      itself in which every list item contains the state of the corresponding
      request document. Please note that this is a breaking change. Also be aware
      that when the request content-type is ``x-www-form-urlencoded``, single
      document insert is performed. Closes #139.
    - ObjectId are properly serialized on POST/PATCH/PUT methods.
    - Queries on ObjectId and datetime values in nested documents.
    - ``auth.user_id`` renamed to ``auth.request_auth_value`` for better
      consistency with the ``auth_field`` setting. Closes #132 (Ryan Shea).
    - 0️⃣ Same behavior as Flask, SERVER_NAME now defaults to None. It allows much
      easier development on distant machine that may changes IP (Ronan Delacroix).
    
    - πŸ‘ CORS support was not available for ``additional_lookup`` urls (Petr JaΕ‘ek.)
    - 0️⃣ 'default' field values that could be assimilated to ``None`` (0, None, "")
      would be ignored.
    - POST and PUT would fail with 400 if there was no auth class while
      ``auth_field`` was set for a resource.
    - πŸ›  Fix order of string arguments in exception message in
      flaskapp.validate_schema() (Roy Smith).
    
    πŸ”– Version 0.1
    ~~~~~~~~~~~
    
    πŸš€ Released on September 30th, 2013.
    
    - ``PUT`` method for completely replace a document while keeping the same
      unique identifier. Closes #96.
    - Embedded Resource Serialization. If a document field is referencing
      a document in another resource, clients can request the referenced document
      to be embedded within the requested document (Bryan Cattle).  Closes #68.
    - πŸ‘ "No trailing slash" URLs are now supported. Closes #118.
    - HATEOAS is now optional and can be disabled both at global and resource
      level.
    - πŸ‘ ``X-HTTP-Method-Override`` supported for all HTTP Methods. Closes #95.
    - HTTP method is now passed into ``authenticate()`` and ``check_auth()`` (Ken
      Carpenter). Closes #90 .
    - Cleanup and hardening of User-Restricted Resource Access Edit (Bryan Cattle).
    - ⚑️ Account Management tutorial updated to reflect the event hooks naming update
      introduced in v0.0.9.
    - πŸ”¨ Some more Python 3 refactoring (Dong Wei Ming).
    - πŸ‘ Events 0.2.0 is now supported.
    - πŸ‘ PyMongo 2.6.2 is now supported.
    - πŸ‘ Cerberus 0.4.0 is now supported.
    
    - Item ``GET`` on documents with non-existent 'created' field (because
      stored outside of API context) were not returning a default value for the
      field.
    - ⚑️ Edits on documents with non-existent 'created' or 'updated' fields
      (because stored outside of the API context) were returning ``412 Precondition
      Failed``. Closes #123.
    - ``on_insert`` is raised when a ``PUT`` (replace action) is about to be
      performed. Closes #120.
    - 🏁 Installation on Windows with Python 3 was returning encoding errors.
    - πŸ›  Fixed #99: malformed XML render when href includes forbidden URI/URL chars.
    - πŸ›  Fixed a bug introduced with 0.0.9 and Python 3 support. Filters (``?where``)
      on datetime values were not working when running on Python 2.x.
    - πŸ›  Fixed some typos and minor grammatical errors all across the documentation
      (Ken Carpenter, Jean Boussier, Kracekumar, Francisco Corrales Morales).
    
    πŸ”– Version 0.0.9
    ~~~~~~~~~~~~~
    
    πŸš€ Released on August 29, 2013
    
    - πŸ‘ PyMongo 2.6 is now supported.
    - ``FILTERS`` boolean replaced by ``ALLOWED_FILTERS`` list which allows for
      explicit whitelisting of filter-enabled fields (Bryan Cattle). Closes #78.
    - Custom user ids for User-Restricted Resource Access, allowing for more
      flexibility and token revocation with token-based authentication. Closes #73.
    - πŸ‘‰ ``AUTH_USERNAME_FIELD`` renamed to ``AUTH_FIELD``.
    - πŸ‘‰ ``auth_username_field`` renamed to ``auth_field``.
    - πŸ‘ BasicAuth and subclasses now support ``user_id`` property.
    - ⚑️ Updated the event hooks naming system to be more robuts and consistent.
      Closes #80.
    - To emphasize the fact that they are tied to a method, all ``on_<method>``
      hooks now have ``<method>`` in uppercase.
    - ``on_getting`` hook renamed to ``on_fetch_resource``.
    - ``on_getting_<resource>`` hook renamed to ``on_fetch_resource_<resource>``
    - ``on_getting_item`` hook renamed to ``on_fetch_item``.
    - ``on_getting_item_<item_title>`` hook renamed to
      ``on_fetch_item_<item_title>``.
    - ``on_posting`` hook renamed to ``on_insert``.
    - Datasource  projections always include automatic fields (``ID_FIELD``,
      ``LAST_UPDATED``, ``DATE_CREATED``). Closes #85.
    - πŸ‘‰ Public HTTP methods now override `auth_username_field` Edit. Closes #70
      (Bryan Cattle).
    - Response date fields are now using GMT instead of UTC. Closes #83.
    - πŸ– Handle the case of 'additional_lookup' field being an integer. If this is the
      case you can omit the 'url' key, as it will be ignored, and the integer value
      correctly parsed.
    - More informative HTTP error messages. Some more informative error messages
      have been added for HTTP 400/3/12 and 500 errors. The error messages only
      show if DEBUG==True (Bryan Cattle).
    - ``on_getting(resource, documents)`` is now ``on_getting_resource(resource,
      documents)``; ``on_getting_<resource>(documents) is now known as
      ``on_getting_resource_<resource>(documents)`` (Ryan Shea).
    - Added a new event hook: ``on_getting_item_<title>(_id, document)`` (Ryan
      Shea).
    - πŸ‘‰ Allow ``auth_username_field`` to be set to ``ID_FIELD`` (Bryan Cattle).
    - πŸ‘ Python 3.3 is now supported.
    - πŸ‘ Flask 0.10.1 is now supported.
    - πŸ‘ Werkzeug 0.9.4 is now supported.
    - ⚑️ Copyright finally updated to 2013.
    
    πŸ”– Version 0.0.8
    ~~~~~~~~~~~~~
    
    πŸš€ Released on July 25th 2013.
    
    - βœ… Only run RateLimiting tests if redis-py is installed and redis-server is
      running.
    - πŸ‘ CORS ``Access-Control-Allow-Headers`` header support (Garrin Kimmell).
    - πŸ‘ CORS ``OPTIONS`` support for resource and items endpoints (Garrin Kimmell).
    - ``float`` is now available as a data-type in the schema definition ruleset.
    - ``nullable`` field schema rule is now available. If ``True`` the field value
      can be set to null. Defaults to ``False``.
    - v0.3.0 of Cerberus is now a requirement.
    - ``on_getting``, ``on_getting_<resource>`` and ``on_getting_item`` event
      hooks. These events are raised when documents have just been read from the
      database and are about to be sent to the client. Registered callback
      functions can eventually manipulate the documents as needed. Please be aware
      that ``last_modified`` and ``etag`` headers will always be consistent with
      the state of the documents on the database (they  won't be updated to reflect
      changes eventually applied by the callback functions). Closes #65.
    - πŸ‘‰ Documentation fix: ``AUTH_USERFIELD_NAME`` renamed to ``AUTH_USERNAME_FIELD``
      (Julien Barbot).
    - Responses to GET requests for resource endpoints now include a ``last`` item
      in the `_links` dictionary. The value is a link to the last page available.
      The item itself is only provided if pagination is enabled and the page being
      requested isn't the last one. Closes #62.
    - It is now possible to set the MongoDB write concern level at both global
      (``MONGO_WRITE_CONCERN``) and endpoint (``mongo_write_concern``) levels. The
      value is a dictionary with all valid MongoDB write_concern settings (w,
      wtimeout, j and fsync) as keys. ``{'w': 1}`` is the default, which is also
      MongoDB's default setting.
    - βœ… ``TestMininal`` class added to the test suite. This will allow to start the
      building of the tests for an application based on Eve, by subclassing the
      TestMinimal class (Daniele Pizzolli).
    
    πŸ”– Version 0.0.7
    ~~~~~~~~~~~~~
    
    πŸš€ Released on June 18th 2013.
    
    - πŸš€ Pinned Werkzeug requirement to v0.8.3 to avoid issues with the latest release
      which breaks backward compatibility (actually a Flask 0.9 requirements issue,
      which backtracked to Eve).
    - πŸ‘Œ Support for Rate Limiting on all HTTP methods. Closes #58. Please note: to
      successfully execute the tests in 'eve.tests.methods.ratelimit.py`, a running
      redis server is needed.
    - ``utils.request_method`` internal helper function added, which allowed  for
      some nice code cleanup (DRY).
    - 0️⃣ Setting the default 'field' value would not happen if a 'data_relation' was
      nested deeper than the first schema level. Fixes #60.
    - Support for ``EXTRA_RESPONSE_FIELDS``. It is now possible to configure a list
      of additonal document fields that should be provided with POST responses.
      Normally only automatically handled fields (``ID_FIELD``, ``LAST_UPDATED``,
      ``DATE_CREATED``, ``etag``) are included in POST payloads.
      ``EXTRA_RESPONSE_FIELDS`` is a global setting that will apply to all resource
      endpoint . Defaults to ``[]``, effectively disabling the feature.
      ``extra_response_fields`` is a local resource setting and will override
      ``EXTRA_RESPONSE_FIELDS`` when present.
    - ``on_posting`` and ``on_posting_<resource>`` event hooks. ``on_posting`` and
      ``on_posting_<resource>`` events are raised when documents are about to be
      stored. Among other things this allows callback functions to arbitrarily
      update the documents being inserted. ``on_posting(resource, documents)`` is
      raised on every successful POST while ``on_posting_<resource>(documents)`` is
      only raised when <resource> is being updated. In both circumstances events
      will be raised only if at least one document passed validation and is going
      to be inserted.
    - πŸ›° Flask native ``request.json`` is now used when decoding request payloads.
    - *resource* argument added to Authorization classes. The ``check_auth()``
      method of all classes in the ``eve.auth`` package (``BasicAuth``,
      ``HMACAuth``, ``TokenAuth``) now supports the *resource* argument. This
      allows subclasses to eventually build their custom authorization logic around
      the resource being accessed.
    - ``MONGO_QUERY_BLACKLIST`` option added. Allows to blacklist mongo query
      operators that should not be allowed in resource queries (``?where=``).
      Defaults to ['$where', '$regex']. Mongo Javascript operators are disabled by
      default as they might be used as vectors for injection attacks. Javascript
      queries also tend to be slow and generally can be easily replaced with the
      (very rich) Mongo query dialect.
    - 0️⃣ ``MONGO_HOST`` defaults to 'localhost'.
    - 0️⃣ ``MONGO_PORT`` defaults to 27017.
    - πŸ‘Œ Support alternative hosts/ports for the test suite (Paul Doucet).
    
    πŸ”– Version 0.0.6
    ~~~~~~~~~~~~~
    
    πŸš€ Released on May 13th 2013.
    
    - πŸ“œ Content-Type header now properly parsed when additional arguments are
      included (Ondrej SlintΓ‘k).
    - Only fields defined in the resource schema are now returned from the
      database. Closes #52.
    - 0️⃣ Default ``SERVER_NAME`` is now set to ``127.0.0.1:5000``.
    - πŸ‘‰ ``auth_username_field`` is honored even when there is no query in the request
      (Thomas Sileo).
    - πŸ›° Pagination links in XML payloads are now properly escaped. Fixes #49.
    - πŸ‘ HEAD requests supported. Closes #48.
    - Event Hooks. Each time a GET, POST, PATCH, DELETE method has been executed,
      both global ``on_<method>`` and resource-level ``on_<method>_<resource>``
      events will be raised. You can subscribe to these events with multiple
      callback functions. Callbacks will receive the original flask.request object
      and the response payload as arguments.
    - πŸ“œ Proper ``max_results`` handling in ``eve.utils.parse_request``, refactored
      tests (Tomasz Jezierski).
    - Projections. Projections are conditional queries where the client dictates
      which fields should be returned by the API (Nicolas Bazire).
    - ``ALLOW_UNKNOWN`` option, and the corresponding ``allow_options`` local
      setting, allow for a less strict schema validation. Closes #34.
    - ETags are now provided with POST responses. Closes #36.
    - 🐎 PATCH performance improvement: ETag is now computed in memory; performing an
      extra database lookup is not needed anymore.
    - πŸ”¨ Bulk Inserts on the database. POST method heavily refactored to take
      advantage of MongoDB native support for Bulk Inserts. Please note: validation
      constraints are checked against the database, and not between the payload
      documents themselves. This causes an interesting corner case: in the event of
      a multiple documents payload where two or more documents carry the same value
      for a field where the ``unique`` constraint is set, the payload will validate
      successfully, as there are no duplicates in the database (yet). If this is an
      issue, the client can always send the documents once at a time for insertion,
      or validate locally before submitting the payload to the API.
    - Responses to document GET requests now include the ETag in both the header
      and the payload. Closes #29.
    - ``methods`` settings keyword renamed to ``resource_methods`` for coherence
      with the global ``RESOURCE_METHODS`` (Nicolas Carlier).
    
    πŸ”– Version 0.0.5
    ~~~~~~~~~~~~~
    
    πŸš€ Released on April 11th 2013.
    
    - πŸ›  Fixed an issue that apparently caused the test suite to only run successfully
      on the dev box. Thanks Chronidev for reporting this.
    - Referential integrity validation via the new ``data_relation`` schema
      keyword.  Closes #25.
    - πŸ‘Œ Support for ``Content-Type: application/json`` for POST and PATCH methods.
      Closes #28.
    - πŸ‘‰ User-restricted resource access. Works in conjunction with Authentication.
      When enabled, users can only read/update/delete resource items created by
      themselves. Can be switched on and off at global level via the
      ``AUTH_USERFIELD_NAME`` keywork, or at single resource endpoints with the
      user_userfield_name keyword (the latter will override the former). The
      keyword contains the actual name of the field used to store the username of
      the user who created the resource item. Defaults to '', which disables the
      feature (Thomas Sileo).
    - ``PAGING_LIMIT`` keyword setting renamed to ``PAGINATION_LIMIT`` for better
      coherency with the new ``PAGINATION`` keyword. This could break backward
      compatibility in some cases.
    - 0️⃣ ``PAGING_DEFAULT`` keyword settings renamed to ``PAGINATION_DEFAULT`` for
      better coherence with the new ``PAGINATION`` keyword. This could break
      backward compatibility in some cases.
    - ``ITEM_CACHE_CONTROL`` removed as it seems unnecessary at the moment.
    - βž• Added an example on how to handle events to perform custom actions. Closes
      #23 and #22.
    - ``eve.validation_schema()`` now collects offending items and returns all of
      them into the exception message. Closes #24.
    - Filters (``?where=``), sorting (``?sort=``) and pagination (``?page=10``) can
      now be be disabled at both global and endpoint level. Closes #7.
    - πŸ‘ CORS (Cross-Origin Resource Sharing) support. The new ``X-DOMAINS`` keywords
      allows API maintainers to specify which domains are allowed to perform CORS
      requests. Allowed values are: None, a list of domains, or '*' for a wide-open
      API. Closes #1.
    - HMAC (Hash Message Authentication Code) based Autentication.
    - Token Based Authentication, a variation of Basic Authentication. Closes #20.
    - 🚚 Orphan function removed (``eve.methods.get.standard_links`` ).
    - ``DATE_CREATED`` and ``LAST_UPDATED`` fields now show default values for
      documents created outside the API context. Fixes #18.
    
    πŸ”– Version 0.0.4
    ~~~~~~~~~~~~~
    
    πŸš€ Released on February 25th 2013.
    
    - Consistent ETag computation between runs/instances. Closes #16.
    - πŸ‘Œ Support for Basic Authentication (RFC2617).
    - πŸ‘Œ Support for fine-tuning authentication with ``PUBLIC_METHODS`` and
      ``PUBLIC_ITEM_METHODS``. By default, access is restricted to *all* endpoints,
      for *all* HTTP verbs (methods), effectively locking down the whole API.
    - πŸ‘Œ Supporto for role-based access control with ``ALLOWED_ROLES`` and
      ``allowed_roles``.
    - πŸ‘Œ Support for all standard Flask initialization parameters.
    - πŸ‘Œ Support for default values in resource fields. The new ``default`` keyword
      can now be used when defining a field rule set.  Please note: currently
      default values are supported only for main document fields. Default values
      for fields in embedded documents will be ignored.
    - Multiple API endpoints can now target the same database collection. For
      example now you can set both ``/admins/`` and ``/users/`` to read and write
      from the same collection on the db, *people*.  The new ``datasource`` setting
      allows to explicitly link API resources to database collections. It is
      a dictionary with two allowed keys: *source* and *filter*. *source* dictates
      the database collection consumed by the resource.  *filter* is the underlying
      query, applied by the API when retrieving and validating data for the
      resource.  Previously, the resource name would dictate the linked datasource
      (and of course you could not have two resources with the same name). This
      remains the default behaviour: if you omit the ``datasource`` setting for
      a resource, its name will be used to determine the database collection.
    - It is now possibile to set predefined db filters for each resource.
      Predefined filters run on top of user queries (GET requests with ``where``
      clauses) and standard conditional requests (``If-Modified-Since``, etc.)
      Please note that datasource filters are applied on GET, PATCH and DELETE
      requests. If your resource allows for POST requests (document insertions),
      then you will probably want to set the validation rules accordingly (in our
      example, 'username' should probably be a required field).
    - 🚚 JSON-Datetime dependency removed.
    - πŸ‘Œ Support for Cerberus v0.0.3 and later.
    - πŸ‘Œ Support for Flask-PyMongo v0.2.0 and later.
    - Repeated XML requests to the same endpoint could occasionally return an
      Internal Server Error (Fixes #8).
    
    πŸ”– Version 0.0.3
    ~~~~~~~~~~~~~
    
    πŸš€ Released on January 22th 2013.
    
    - XML rendering love. Lots of love.
    - JSON links are always wrapped in a ``_links`` dictionary. Key values match
      the relation between the item being represented and the linked resource.
    - 🚚 Streamlined JSON responses. Superflous ``response`` root key has been removed
      from JSON payloads. GET requests to resource endpoints: items are now wrapped
      with an ``_items`` list. GET requests to item endpoints: item is now at root
      level, with no wrappers around it.
    - πŸ‘Œ Support for API versioning through the new API_VERSION configuration setting.
    - πŸ“œ Boolean values in request forms are now correctly parsed.
    - βœ… Tests now run under Python 2.6.
    
    
    πŸ”– Version 0.0.2
    ~~~~~~~~~~~~~
    
    πŸš€ Released on November 27th 2012.
    
    - πŸ›  Homepage/api entry point resource links fixed. They had bad 'href'
      tags which also caused XML validation issues when processing responses
      (especially when accessing the API via browser).
    - πŸ”– Version number in 'Server' response headers.
    - βž• Added support for DELETE at resource endpoints. Expected behavior:
      will delete all items in the collection. Disabled by default.
    - πŸ‘ :class:`eve.io.mongo.Validator` now supports :class:`~cerberus.Validator`
      signature, allowing for further subclassing.
    
    πŸ”– Version 0.0.1
    ~~~~~~~~~~~~~
    
    πŸš€ Released on November 20th 2012.
    
    - πŸš€ First public preview release.
    
  • v0.7.10

    July 15, 2018
  • v0.7.9

    May 10, 2018