Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pin eve to latest version 2.2.0 #1540

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

pyup-bot
Copy link
Collaborator

This PR pins eve to the latest release 2.2.0.

Changelog

2.2

------------

Released on Mar 14, 2023.
- Fix: deprecation warnings in Python 3.12 (`1526`_)
- Fix: the distribution package should not include the test suite (`1506`_)
- Python 3.12 support.
- Python 3.11 support.
- Python 3.9 dropped.
- Python 3.8 dropped.
- .readthedocs.yml upgraded to V2.

.. _`1526`: https://github.com/pyeve/eve/issues/1526
.. _`1506`: https://github.com/pyeve/eve/issues/1506

2.1.0

--------------

Released on Mar 14, 2023.

New
~~~

- Ability to customize the pagination limit on a per-resource basis (`1498`_)

Fixed
~~~~~

- Flask 2.2+ support (`1497`_)
- CI test runs fail with ``mongo: command not found`` on Ubuntu 22.04 (`1499`_)

.. _`1499`: https://github.com/pyeve/eve/issues/1499
.. _`1498`: https://github.com/pyeve/eve/issues/1498
.. _`1497`: https://github.com/pyeve/eve/issues/1497

2.0.4

--------------

Released on Nov 10, 2022.

Fixed
~~~~~

- Comparison of incompatible types (`1492`_)
- Python 3 updates, and some refactoring (`1493`_)

.. _`1492`: https://github.com/pyeve/eve/issues/1492
.. _`1493`: https://github.com/pyeve/eve/pull/1493

2.0.3

--------------

Released on Nov 2, 2022.

Fixed
~~~~~

- Malformed ``LAST_UPDATED`` field (`1490`_)

.. _`1490`: https://github.com/pyeve/eve/issues/1490

2.0.2

--------------

Released on Sep 23, 2022.

Fixed
~~~~~

- Fix: etag generation fails if ``uuidRepresentation`` is not set in MONGO_OPTIONS (`1486`_)

.. _`1486`: https://github.com/pyeve/eve/issues/1486

2.0.1

--------------

Released on Sep 7, 2022.

Fixed
~~~~~

- ``MONGO_URI`` username, password, and authSource are not parsed correctly (`1478`_)
- Lock Flask dependency to version 2.1 (`1485`_)
- Fix documentation typos (`1481`_)
- Only build Python 3 wheels.

.. _`1485`: https://github.com/pyeve/eve/issues/1485
.. _`1478`: https://github.com/pyeve/eve/issues/1478
.. _`1481`: https://github.com/pyeve/eve/pull/1481

2.0

------------

Released on Jun 8, 2022.

Breaking
~~~~~~~~
Starting from this release, Eve supports Python 3.7 and above.

- Drop Python 2 (`1440`_)
- Drop Python 3.5 (`1440`_, `1438`_)
- Drop Python 3.6 (`1440`_)

.. _`1440`: https://github.com/pyeve/eve/issues/1440
.. _`1438`: https://github.com/pyeve/eve/pull/1438

New
~~~

- Add Python 3.9 support (`1437`_)
- Add Python 3.10 support (`1440`_)
- ``MONGO_OPTIONS`` acquires a new ``uuidRepresentation`` setting, with ``standard`` as its default value. This is needed by PyMongo 4+ in order to seamlessly process eventual ``uuid`` values. See `PyMongo documentation`_ for details (`1461`_, `1464`_).


.. _`1444`: https://github.com/pyeve/eve/pull/1444
.. _`PyMongo documentation`: https://github.com/pyeve/eve/pull/1438

Fixed
~~~~~

- AttributeError: module 'werkzeug.utils' has no attribute 'escape' (`1474`_)
- Starting with Werkzeug 2.1, HATEOAS links are relative instead of absolute (`1475`_)
- Eve doesn't work with latest PyMongo (v4) (`1461`_, `1464`_)
- Fix 500 error with empty token/bearer (`1456`_)
- Do not return related fields if field is a empty list (`1441`_)
- PyMongo 3.12+ supports keys that include dotted fields (`1466`_)
- Pin pymongo version in dependencies (`1461`_)
- Prepare for Python 3 switch (`1445`_)
- Update docs and tests regarding pagination of empty resources (`1463`_)
- Fix fork link in contributing info (`1447`_)
- Tutorial mistake on custom IDs values with UUIDs (`1451`_)
- Documentation typos (`1462`_, `1469`_)
- Switch to GitHub Actions from Travis CI (`1439`_, `1444`_)

.. _`1469`: https://github.com/pyeve/eve/pull/1469
.. _`1475`: https://github.com/pyeve/eve/issues/1475
.. _`1474`: https://github.com/pyeve/eve/issues/1474
.. _`1451`: https://github.com/pyeve/eve/issues/1451
.. _`1464`: https://github.com/pyeve/eve/issues/1464
.. _`1461`: https://github.com/pyeve/eve/issues/1461
.. _`1439`: https://github.com/pyeve/eve/pull/1439
.. _`1437`: https://github.com/pyeve/eve/pull/1437
.. _`1456`: https://github.com/pyeve/eve/pull/1456
.. _`1463`: https://github.com/pyeve/eve/pull/1463
.. _`1462`: https://github.com/pyeve/eve/pull/1462
.. _`1466`: https://github.com/pyeve/eve/issues/1466
.. _`1447`: https://github.com/pyeve/eve/pull/1447
.. _`1445`: https://github.com/pyeve/eve/pull/1445
.. _`1441`: https://github.com/pyeve/eve/pull/1441

1.1.5

-------------

Released on January 25, 2021.

Fixed
~~~~~

- Nested unique field validation still don't work (`1435`_)
- Documentation: corrected variable name (`1426`_)
- Versioning: support for dynamic datasources (`1423`_)
- Disable MD5 support in GridFS, as it is deprecated (`1410`_)
- Demo application has been terminated by Heroku. Dropped any reference to it.

.. _`1435`: https://github.com/pyeve/eve/issues/1435
.. _`1426`: https://github.com/pyeve/eve/pull/1426
.. _`1423`: https://github.com/pyeve/eve/issues/1423
.. _`1410`: https://github.com/pyeve/eve/issues/1410

1.1.4

-------------

Released on October 22, 2020.

Fixed
~~~~~

- Error raised when using ``embedded`` with nested dict (`1416`_)
- Expose media endpoint only if ``RETURN_MEDIA_AS_URL`` is set to ``True`` (`1415`_)
- Use ``**mongo_options`` in ``with_options`` (`1413`_)

.. _`1416`: https://github.com/pyeve/eve/issues/1416
.. _`1415`: https://github.com/pyeve/eve/pull/1415
.. _`1413`: https://github.com/pyeve/eve/issues/1413

1.1.3

-------------

Released on September 19, 2020.

Fixed
~~~~~

- Fix: Race condition in PATCH on newly created documents with clustered mongo (`1411`_)

.. _`1411`: https://github.com/pyeve/eve/issues/1411

1.1.2

-------------

Released on July 9, 2020.

Fixed
~~~~~

- Add missed condition when projection is disabled per domain (`1398`_)
- Removed unnecessary comprehension (`1391`_)

.. _`1398`: https://github.com/pyeve/eve/pull/1398
.. _`1391`: https://github.com/pyeve/eve/pull/1391

1.1.1

-------------

Released on May 10, 2020.

Fixed
~~~~~

- Disabling ``merge_nested_documents`` breaks versioning on PATCH (`1389`_)
- Tests failing with Flask 1.1.2 (`1378`_)
- ``BANDWIDTH_SAVER`` no longer works with ``resolve_resource_projection`` (`1338`_)
- ``unique_within_resource`` rule used in resources without datasource filter (`1368`_)
- dicts without ``schema`` rule are broken since ``b8d8fcd`` (`1366`_)
- 403 Forrbidden added to ``STANDARD_ERRORS`` (`1362`_)
- ``unique`` constraint doesn't work when inside of a dict or a list (`1360`_)
- Documentation typos (`1375`_)

.. _`1389`: https://github.com/pyeve/eve/issues/1389
.. _`1378`: https://github.com/pyeve/eve/pull/1378
.. _`1375`: https://github.com/pyeve/eve/pull/1375
.. _`1338`: https://github.com/pyeve/eve/issues/1338
.. _`1368`: https://github.com/pyeve/eve/pull/1368
.. _`1366`: https://github.com/pyeve/eve/pull/1366
.. _`1362`: https://github.com/pyeve/eve/pull/1362
.. _`1360`: https://github.com/pyeve/eve/issues/1360

1.1

-----------

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

1.0.1

-------------

Released on January 26, 2020.

- Fix: Mixing foreign and local object ids breaks querying (`1345`_)

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

1.0

-----------

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

0.9.2

-------------

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`_)
- 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

0.9.1

-------------

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

0.9

-----------

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`_)
- 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

0.8.1

-------------

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

0.8

-----------

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

0.7.10

~~~~~~~~~~~~~~

Released on July 15, 2018.

- Fix: Pin Flask-PyMongo dependency to avoid crash with Flask-PyMongo 2.
Closes 1172.

0.7.9

~~~~~~~~~~~~~

Released on May 10, 2018

- Python 2.6 and Python 3.3 are deprecated. Closes 1129.

0.7.8

~~~~~~~~~~~~~

Released on 7 February, 2018

- Fix: breaking syntax error in v0.7.7

0.7.7

~~~~~~~~~~~~~

Released on 7 February, 2018

- Fix: geo queries now properly support ``$geometry`` and ``$maxDistance``
operators. Closes 1103.

0.7.6

~~~~~~~~~~~~~

Released on 14 January, 2018

- Improve query parsing robustness.

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).

0.7.4

~~~~~~~~~~~~~

Released on 24 May, 2017

- Fix: ``post_internal`` fails when using ``URL_PREFIX`` or ``API_VERSION``.
Closes 810.

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).

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).

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).

- ``develop`` branch has been dropped. ``master`` is now the default project
branch.

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.

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.

0.6.3

~~~~~~~~~~~~~

Released on 16 March, 2016

- Fix: Since 0.6.2, static projections are not honoured. Closes 837.

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)

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).

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)

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.

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.

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.)

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 c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant