kinto 20.1.0__tar.gz → 20.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinto might be problematic. Click here for more details.
- {kinto-20.1.0 → kinto-20.2.0}/PKG-INFO +3 -2
- {kinto-20.1.0 → kinto-20.2.0}/constraints.txt +4 -4
- {kinto-20.1.0 → kinto-20.2.0}/docs/requirements.txt +1 -1
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/__init__.py +15 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/memory.py +4 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/__init__.py +30 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/testing.py +33 -0
- kinto-20.2.0/kinto/plugins/admin/VERSION +1 -0
- kinto-20.2.0/kinto/plugins/admin/build/VERSION +1 -0
- kinto-20.1.0/kinto/plugins/admin/build/assets/index-Bq62Gei8.js → kinto-20.2.0/kinto/plugins/admin/build/assets/index-DwFOt8-z.js +66 -66
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/index.html +1 -1
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/PKG-INFO +3 -2
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/SOURCES.txt +1 -1
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_storage.py +1 -0
- kinto-20.1.0/kinto/plugins/admin/VERSION +0 -1
- kinto-20.1.0/kinto/plugins/admin/build/VERSION +0 -1
- {kinto-20.1.0 → kinto-20.2.0}/.dockerignore +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/CONTRIBUTING.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/dependabot.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/release.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/workflows/labels.yaml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/workflows/publish.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/workflows/scheduled.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.github/workflows/test.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.gitignore +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/.readthedocs.yaml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/CHANGELOG.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/CONTRIBUTORS.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/Dockerfile +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/LICENSE +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/Makefile +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/README.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/SECURITY.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/SUPPORT.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/app.wsgi +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/constraints.in +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docker-compose.yml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/_static/piwik.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/_static/theme_overrides.css +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/_templates/footer.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/_templates/indexcontent.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/_templates/layout.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-delete-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-delete-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-get-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-get-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-head-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-patch-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-post-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_details-put-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-delete-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-delete-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-get-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-get-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-patch-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-post-list.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/_status-put-object.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/accounts.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/admin.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/authentication.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/backoff.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/batch.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/buckets.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/collections.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/deprecation.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/errors.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/filtering.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/flush.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/groups.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/history.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/openapi.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/openid.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/pagination.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/permissions.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/records.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/selecting_fields.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/sorting.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/timestamps.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/1.x/utilities.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/api/versioning.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/changelog.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/commandline.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/community.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/concepts.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/conf.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/configuration/good-practices.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/configuration/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/configuration/production.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/configuration/settings.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/_static/theme_overrides.css +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/api.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/cache.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/decorators.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/errors.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/glossary.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/images/cliquet-base.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/images/cliquet-mozilla.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/notifications.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/permission.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/quickstart.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/rationale.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/resource.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/storage.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/testing.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/utils.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/core/viewsets.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/faq.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/alwaysdata-button.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/architecture.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/color-formatter.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/concepts-general.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/concepts-permissions.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/heroku-button.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/kinto-logo.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/kinto-logo.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-admin.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-attachment.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-community.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-history.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-javascript.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-jsonschema.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-multiapps.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-permissions.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-python.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-selfhostable.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/logo-synchronisation.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/overview-deployonce-selfhost.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/overview-features.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/overview-synchronisation.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/overview-use-cases.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/scalingo-button.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/sequence-storage.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/sync-both.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/sync-newest.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/images/sync-oldest.svg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/kinto-admin.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/overview.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/troubleshooting.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/custom-id-generator.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/first-steps.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/index.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/install.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/notifications-custom.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/permission-setups.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/permissions.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/synchronisation.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/docs/tutorials/write-plugin.rst +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/__main__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/authorization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/config/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/config/kinto.tpl +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/contribute.json +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/authentication.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/authorization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/memcached.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/memory.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/postgresql/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/postgresql/schema.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cache/testing.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/cors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/pyramidhook.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/renderer.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/resource.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/service.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/util.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/validators/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/validators/_colander.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice/validators/_marshmallow.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/converters/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/converters/exceptions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/converters/parameters.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/converters/schema.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/swagger.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/templates/index.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/templates/index_script_template.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/util.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/cornice_swagger/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/decorators.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/events.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/initialization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/listeners/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/metrics.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/openapi.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/memory.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/postgresql/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/postgresql/schema.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/permission/testing.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/resource/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/resource/model.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/resource/schema.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/resource/viewset.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/schema.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/scripts.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/statsd.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/exceptions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/generators.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/client.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/migrator.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/pool.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/postgresql/schema.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/storage/utils.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/testing.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/utils.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/batch.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/heartbeat.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/hello.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/openapi.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/core/views/version.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/events.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/accounts/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/accounts/authentication.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/accounts/scripts.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/accounts/utils.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/accounts/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/README.md +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/asn1-EdZsLKOL.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/index-Cs7JVwIg.css +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/javascript-qCveANmP.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/mllike-CXdrOF99.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/sql-D0XecflT.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/build/assets/ttcn-cfg-B9xdYoR4.js +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/public/help.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/admin/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/default_bucket/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/flush.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/history/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/history/listener.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/history/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/openid/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/openid/utils.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/openid/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/prometheus.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/plugins/statsd.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/schema_validation.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/admin.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/buckets.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/collections.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/contribute.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/groups.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/permissions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto/views/records.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/dependency_links.txt +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/entry_points.txt +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/requires.txt +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/kinto.egg-info/top_level.txt +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/pyproject.toml +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/scripts/pull-kinto-admin.sh +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/setup.cfg +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/browser.ini +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/browser.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/listeners.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_base.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_cache_expires.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_events.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_filter.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_model.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_object.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_object_permissions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_pagination.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_partial_response.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_preconditions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_schema.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_sort.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_sync.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_views_cors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/resource/test_viewset.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/support.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_authentication.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_authorization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_cache.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_decorators.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_deprecation.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_initialization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_listeners.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_logging.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_metrics.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_openapi.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_permission.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_schema.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_scripts.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_storage_migrations.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_storage_pool.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_utils.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_batch.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_heartbeat.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_hello.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_openapi.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_postgresql.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/test_views_transaction.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/testapp/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/testapp/static/index.html +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/testapp/views.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/core/testplugin/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/functional.ini +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/functional.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/support.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_plugins.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_resources.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_responses_buckets.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_responses_collections.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_responses_errors.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_responses_groups.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_responses_records.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/openapi/test_validation.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/__init__.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_accounts.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_admin.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_default_bucket.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_flush.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_history.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_openid.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_prometheus.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/plugins/test_statsd.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/support.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_authorization.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_config.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_configuration/test.ini +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_init.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_main.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_admin.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_buckets.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_collections.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_collections_cache.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_contribute.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_disable_default.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_groups.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_hello.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_metrics.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_objects_permissions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_permissions.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_records.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_schema_collection.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_schema_group.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_schema_record.py +0 -0
- {kinto-20.1.0 → kinto-20.2.0}/tests/test_views_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: kinto
|
|
3
|
-
Version: 20.
|
|
3
|
+
Version: 20.2.0
|
|
4
4
|
Summary: Kinto Web Service - Store, Sync, Share, and Self-Host.
|
|
5
5
|
Author-email: Mozilla Services <developers@kinto-storage.org>
|
|
6
6
|
License: Copyright 2012 - Mozilla Foundation
|
|
@@ -70,6 +70,7 @@ Provides-Extra: dev
|
|
|
70
70
|
Requires-Dist: build; extra == "dev"
|
|
71
71
|
Requires-Dist: ruff; extra == "dev"
|
|
72
72
|
Requires-Dist: twine; extra == "dev"
|
|
73
|
+
Dynamic: license-file
|
|
73
74
|
|
|
74
75
|
Kinto
|
|
75
76
|
=====
|
|
@@ -73,7 +73,7 @@ markupsafe==2.1.4
|
|
|
73
73
|
# via werkzeug
|
|
74
74
|
msgpack==1.0.7
|
|
75
75
|
# via bravado-core
|
|
76
|
-
newrelic==10.
|
|
76
|
+
newrelic==10.8.0
|
|
77
77
|
# via -r constraints.in
|
|
78
78
|
packaging==23.2
|
|
79
79
|
# via
|
|
@@ -88,7 +88,7 @@ plaster==1.1.2
|
|
|
88
88
|
# pyramid
|
|
89
89
|
plaster-pastedeploy==1.0.1
|
|
90
90
|
# via pyramid
|
|
91
|
-
playwright==1.
|
|
91
|
+
playwright==1.51.0
|
|
92
92
|
# via -r constraints.in
|
|
93
93
|
pluggy==1.5.0
|
|
94
94
|
# via pytest
|
|
@@ -149,7 +149,7 @@ rpds-py==0.17.1
|
|
|
149
149
|
# via
|
|
150
150
|
# jsonschema
|
|
151
151
|
# referencing
|
|
152
|
-
ruff==0.
|
|
152
|
+
ruff==0.11.2
|
|
153
153
|
# via -r constraints.in
|
|
154
154
|
sentry-sdk==2.8.0
|
|
155
155
|
# via -r constraints.in
|
|
@@ -162,7 +162,7 @@ six==1.16.0
|
|
|
162
162
|
# rfc3339-validator
|
|
163
163
|
soupsieve==2.5
|
|
164
164
|
# via beautifulsoup4
|
|
165
|
-
sqlalchemy==2.0.
|
|
165
|
+
sqlalchemy==2.0.39
|
|
166
166
|
# via
|
|
167
167
|
# -r constraints.in
|
|
168
168
|
# sentry-sdk
|
|
@@ -87,6 +87,21 @@ class StorageBase:
|
|
|
87
87
|
"""
|
|
88
88
|
raise NotImplementedError
|
|
89
89
|
|
|
90
|
+
def all_resources_timestamps(self, resource_name):
|
|
91
|
+
"""Get the highest timestamp of every objects in this `resource_name` for
|
|
92
|
+
each `parent_id`.
|
|
93
|
+
|
|
94
|
+
.. note::
|
|
95
|
+
|
|
96
|
+
This should take deleted objects into account.
|
|
97
|
+
|
|
98
|
+
:param str resource_name: the resource name.
|
|
99
|
+
|
|
100
|
+
:returns: the latest timestamp of the resource by `parent_id`.
|
|
101
|
+
:rtype: dict[str, int]
|
|
102
|
+
"""
|
|
103
|
+
raise NotImplementedError
|
|
104
|
+
|
|
90
105
|
def create(
|
|
91
106
|
self,
|
|
92
107
|
resource_name,
|
|
@@ -153,6 +153,10 @@ class Storage(MemoryBasedStorage):
|
|
|
153
153
|
raise exceptions.ReadonlyError(message=error_msg)
|
|
154
154
|
return self.bump_and_store_timestamp(resource_name, parent_id)
|
|
155
155
|
|
|
156
|
+
@synchronized
|
|
157
|
+
def all_resources_timestamps(self, resource_name):
|
|
158
|
+
return {k: v[resource_name] for k, v in self._timestamps.items() if resource_name in v}
|
|
159
|
+
|
|
156
160
|
def bump_and_store_timestamp(
|
|
157
161
|
self, resource_name, parent_id, obj=None, modified_field=None, last_modified=None
|
|
158
162
|
):
|
|
@@ -247,6 +247,36 @@ class Storage(StorageBase, MigratorMixin):
|
|
|
247
247
|
|
|
248
248
|
return obj.last_epoch
|
|
249
249
|
|
|
250
|
+
def all_resources_timestamps(self, resource_name):
|
|
251
|
+
query = """
|
|
252
|
+
WITH existing_timestamps AS (
|
|
253
|
+
-- Timestamp of latest object by parent_id.
|
|
254
|
+
(
|
|
255
|
+
SELECT parent_id, MAX(last_modified) AS last_modified
|
|
256
|
+
FROM objects
|
|
257
|
+
WHERE resource_name = :resource_name
|
|
258
|
+
GROUP BY parent_id
|
|
259
|
+
)
|
|
260
|
+
-- Timestamp of resources without sub-objects.
|
|
261
|
+
UNION
|
|
262
|
+
(
|
|
263
|
+
SELECT parent_id, last_modified
|
|
264
|
+
FROM timestamps
|
|
265
|
+
WHERE resource_name = :resource_name
|
|
266
|
+
)
|
|
267
|
+
)
|
|
268
|
+
SELECT parent_id, MAX(as_epoch(last_modified)) AS last_modified
|
|
269
|
+
FROM existing_timestamps
|
|
270
|
+
GROUP BY parent_id
|
|
271
|
+
ORDER BY last_modified DESC
|
|
272
|
+
"""
|
|
273
|
+
with self.client.connect(readonly=True) as conn:
|
|
274
|
+
result = conn.execute(sa.text(query), dict(resource_name=resource_name))
|
|
275
|
+
rows = result.fetchmany(self._max_fetch_size + 1)
|
|
276
|
+
|
|
277
|
+
results = {r[0]: r[1] for r in rows}
|
|
278
|
+
return results
|
|
279
|
+
|
|
250
280
|
@deprecate_kwargs({"collection_id": "resource_name", "record": "obj"})
|
|
251
281
|
def create(
|
|
252
282
|
self,
|
|
@@ -783,6 +783,39 @@ class TimestampsTest:
|
|
|
783
783
|
after = self.storage.resource_timestamp(**self.storage_kw)
|
|
784
784
|
self.assertTrue(before < after)
|
|
785
785
|
|
|
786
|
+
def test_all_timestamps_by_parent_id(self):
|
|
787
|
+
self.storage.create(obj={"id": "main"}, resource_name="bucket", parent_id="")
|
|
788
|
+
self.storage.create(obj={"id": "cid1"}, resource_name="collection", parent_id="/main")
|
|
789
|
+
self.storage.create(obj={"id": "cid2"}, resource_name="collection", parent_id="/main")
|
|
790
|
+
self.storage.create(obj={}, resource_name="record", parent_id="/main/cid2")
|
|
791
|
+
self.storage.create(obj={}, resource_name="record", parent_id="/main/cid2")
|
|
792
|
+
|
|
793
|
+
self.assertEqual(
|
|
794
|
+
{
|
|
795
|
+
"": self.storage.resource_timestamp(resource_name="bucket", parent_id=""),
|
|
796
|
+
},
|
|
797
|
+
self.storage.all_resources_timestamps(resource_name="bucket"),
|
|
798
|
+
)
|
|
799
|
+
self.assertEqual(
|
|
800
|
+
{
|
|
801
|
+
"/main": self.storage.resource_timestamp(
|
|
802
|
+
resource_name="collection", parent_id="/main"
|
|
803
|
+
),
|
|
804
|
+
},
|
|
805
|
+
self.storage.all_resources_timestamps(resource_name="collection"),
|
|
806
|
+
)
|
|
807
|
+
self.assertEqual(
|
|
808
|
+
{
|
|
809
|
+
"/main/cid1": self.storage.resource_timestamp(
|
|
810
|
+
resource_name="record", parent_id="/main/cid1"
|
|
811
|
+
),
|
|
812
|
+
"/main/cid2": self.storage.resource_timestamp(
|
|
813
|
+
resource_name="record", parent_id="/main/cid2"
|
|
814
|
+
),
|
|
815
|
+
},
|
|
816
|
+
self.storage.all_resources_timestamps(resource_name="record"),
|
|
817
|
+
)
|
|
818
|
+
|
|
786
819
|
@skip_if_ci
|
|
787
820
|
def test_timestamps_are_unique(self): # pragma: no cover
|
|
788
821
|
obtained = []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.7.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.7.0
|