Metadata-Version: 2.1
Name: kinto-changes
Version: 3.2.0
Summary: Plug Kinto notifications to a collection endpoint.
Home-page: https://github.com/kinto/kinto-changes
Author: Mozilla Services
Author-email: services-dev@mozilla.com
License: Apache License (2.0)
Keywords: kinto changes notification
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Requires-Dist: kinto (>=10.0.0)

Kinto Changes
=============

.. image:: https://img.shields.io/travis/Kinto/kinto-changes.svg
        :target: https://travis-ci.org/Kinto/kinto-changes

.. image:: https://img.shields.io/pypi/v/kinto-changes.svg
        :target: https://pypi.python.org/pypi/kinto-changes

.. image:: https://coveralls.io/repos/Kinto/kinto-changes/badge.svg?branch=master
        :target: https://coveralls.io/r/Kinto/kinto-changes

**kinto-changes** shows the list of collection timestamps, allowing to poll changes
on several collections with one HTTP request.


Install
-------

::

    pip install kinto-changes

Setup
-----

In the `Kinto <http://kinto.readthedocs.io/>`_ settings:

.. code-block :: ini

    kinto.includes = kinto_changes

    # List of buckets/collections to show:
    kinto.changes.resources = /buckets/settings
                              /buckets/blocklists/collections/certificates


Cache Control
'''''''''''''

Like `cache control in Kinto collections <https://kinto.readthedocs.io/en/stable/api/1.x/collections.html#collection-caching>`_, it is possible to configure ``Cache-Control`` headers via some settings:

.. code-block:: ini

    kinto.monitor.changes.record_cache_expires_seconds = 60

If cache busting query parameters then responses can be cached more agressively.
If the setting below is set then a different cache control expiration will be set:

.. code-block:: ini

    kinto.monitor.changes.record_cache_maximum_expires_seconds = 3600


Advanced options
''''''''''''''''

**host**

The changes entries will have a ``host`` attribute, that can be used to
distinguish changes from several Kinto instances.

.. code-block :: ini

    kinto.changes.http_host = website.domain.tld

By default, it will rely on the global setting ``kinto.http_host``.


**_since sanetizing**

When reaching the monitor/changes collection, if the provided ``_since`` query parameter
is too old, we redirect the clients to the full list of changes (ie. without ``_since``).

Set this setting to control the maximum age allowed. Set to ``-1`` to disable redirection.

.. code-block :: ini

    kinto.changes.since_max_age_days = 21


Endpoints
---------

* ``GET /v1/buckets/monitor/collections/changes/records``.

Returns the list of timestamps.

* ``GET /v1/buckets/{bid}/collections/{cid}/changeset?_expected={timestamp}``.

Returns the following response for the collection:

- ``changes``: list of records, optionnally filtered with ``?_since="{timestamp}"``
- ``metadata``: collection attributes
- ``timestamp``: records timestamp

Note: the ``_expected={}`` querystring parameter is mandatory but can contain any
arbitrary value (used for cache busting).


Changelog
=========

3.2.0 (2020-11-20)
------------------

**New features**

- Add filtering support in monitor/changes changeset endpoint


3.1.2 (2020-09-30)
------------------

**Bug fixes**

- Fix crash when collection is unknown and backend running in readonly mode


3.1.1 (2020-09-28)
------------------

**Bug fixes**

- Bypass storage when redirecting on old ``_since``


3.1.0 (2020-09-22)
------------------

**New features**

- Redirect clients whose ``?_since`` value is too old (21 days by default)
- Add support for monitor/changes in changeset endpoints (fixes #173)

**Bug fixes**

- Fix validation rule for ``_since`` query parameter


3.0.2 (2020-06-02)
------------------

**Bug fixes**

- Include tombstones in changeset endpoint (fixes #175)


3.0.1 (2020-05-26)
------------------

- Sort changes explicitly by `last_modified` descending

3.0.0 (2020-04-20)
------------------

**Breaking changes**

- Switch changeset timestamp from ETag to integer (#168)


2.2.0 (2020-03-26)
------------------

**New features**

- Add changeset endpoint (#154)

**Bug fixes**

- Fix crash with ``If-None-Match: *`` (fixes #158)


2.1.1 (2019-12-23)
------------------

**Bug fixes**

- Use explicit resource timestamp from DB instead of event payload


2.1.0 (2019-02-20)
------------------

**New feature**

- Send ``Cache-Control`` headers if cache busting query parameters or concurrency control request headers are sent (#66)

2.0.0 (2019-01-15)
------------------

**Breaking changes**

- Requires Kinto >= 12


1.3.0 (2018-10-15)
------------------

**New feature**

- Add ability to configure cache control headers (#47)


1.2.1 (2018-09-17)
------------------

**Bug fixes**

- Don't do anything during a ``migrate`` command (fixes #43).


1.2.0 (2018-09-06)
------------------

**New feature**

- Events are now generated on the monitor/changes collection (#41).


1.1.1 (2018-04-17)
------------------

**Internal changes**

- Get rid of six


1.1.0 (2017-11-16)
------------------

**Breaking changes**

- Upgrade to Kinto 7


**Bug fixes**

- Disable reify to always get the most accurate timestamp. (#36)


1.0.0 (2017-02-14)
------------------

**Bug fixes**

- Accessing the monitoring collection when no changes occured don't fail anymore (fixes #23)
- The timestamps shown in the monitoring endpoint are now **exactly equal** (never superior anymore)
  to the timestamps of the monitored collections.

**Breaking changes**

* The change endpoint **location is now hard-coded** (``/buckets/monitor/collections/changes/records``)
  and cannot be configured.
* The permissions principals cannot be specified anymore.
  The change endpoint is now **always public**.
* The ``monitor`` bucket and ``changes`` collection are not required anymore and
  are not created anymore.
* ``POST`` and ``DELETE`` are not supported on the changes endpoint anymore.
* Individual entries (eg. ``/buckets/monitor/collections/changes/records/{id}``)
  cannot be accessed anymore.
* The listener was dropped. Configuration must be changed:

Before:

.. code-block :: ini

    kinto.event_listeners = changes
    kinto.event_listeners.changes.use = kinto_changes.listener
    kinto.event_listeners.changes.http_host = website.domain.tld
    kinto.event_listeners.changes.collections = /buckets/settings
                                                /buckets/blocklists/collections/certificates

Now:

.. code-block :: ini

    kinto.changes.http_host = website.domain.tld
    kinto.changes.resources = /buckets/settings
                              /buckets/blocklists/collections/certificates


0.5.0 (2017-01-16)
------------------

- Do not force the timestamp of monitored entries (#27)


0.4.0 (2016-11-07)
------------------

- Add the plugin version in the capability (#20)
- Add collections in the capability (#18)
- Add a specific setting to override global ``http_host`` value (#24)

0.3.0 (2016-05-19)
------------------

- Update to ``kinto.core`` for compatibility with Kinto 3.0. This
  release is no longer compatible with Kinto < 3.0, please upgrade!


0.2.0 (2016-04-25)
------------------

- Addition of the changes capability

0.1.0 (2015-12-22)
------------------

- Initial code.
- Bucket and collection name configuration.
- Changes read permissions configuration.
- Selection of buckets and collections to follow configuration.



