kinto 19.2.0__tar.gz → 19.3.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-19.2.0 → kinto-19.3.0}/.github/workflows/test.yml +1 -3
- {kinto-19.2.0 → kinto-19.3.0}/Dockerfile +2 -2
- {kinto-19.2.0/kinto.egg-info → kinto-19.3.0}/PKG-INFO +3 -3
- {kinto-19.2.0 → kinto-19.3.0}/README.rst +1 -1
- {kinto-19.2.0 → kinto-19.3.0}/constraints.txt +11 -9
- {kinto-19.2.0 → kinto-19.3.0}/docs/conf.py +0 -3
- {kinto-19.2.0 → kinto-19.3.0}/docs/requirements.txt +3 -3
- {kinto-19.2.0 → kinto-19.3.0}/kinto/__init__.py +1 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/__init__.py +1 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/initialization.py +57 -7
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/metrics.py +37 -1
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/utils.py +8 -0
- kinto-19.3.0/kinto/plugins/admin/VERSION +1 -0
- kinto-19.3.0/kinto/plugins/admin/build/VERSION +1 -0
- kinto-19.3.0/kinto/plugins/admin/build/assets/index-BKIg2XW8.js +165 -0
- kinto-19.2.0/kinto/plugins/admin/build/assets/index-vylaZGUr.css → kinto-19.3.0/kinto/plugins/admin/build/assets/index-D8oiN37x.css +1 -1
- kinto-19.2.0/kinto/plugins/admin/build/assets/javascript-upQ8KtFH.js → kinto-19.3.0/kinto/plugins/admin/build/assets/javascript-iSgyE4tI.js +1 -1
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/build/index.html +2 -2
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/prometheus.py +56 -20
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/statsd.py +13 -1
- {kinto-19.2.0 → kinto-19.3.0/kinto.egg-info}/PKG-INFO +3 -3
- {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/SOURCES.txt +13 -12
- {kinto-19.2.0 → kinto-19.3.0}/pyproject.toml +1 -1
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_views.py +4 -5
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_initialization.py +53 -13
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_prometheus.py +31 -9
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_statsd.py +15 -0
- kinto-19.3.0/tests/test_views_metrics.py +45 -0
- kinto-19.2.0/kinto/plugins/admin/VERSION +0 -1
- kinto-19.2.0/kinto/plugins/admin/build/VERSION +0 -1
- kinto-19.2.0/kinto/plugins/admin/build/assets/index-iVTdxamX.js +0 -175
- {kinto-19.2.0 → kinto-19.3.0}/.dockerignore +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/CONTRIBUTING.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/dependabot.yml +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/release.yml +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/workflows/labels.yaml +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.github/workflows/publish.yml +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/.gitignore +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/CHANGELOG.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/CONTRIBUTORS.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/LICENSE +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/Makefile +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/SECURITY.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/SUPPORT.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/app.wsgi +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/constraints.in +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/contribute.json +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docker-compose.yml +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/_static/piwik.js +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/_static/theme_overrides.css +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/footer.html +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/indexcontent.html +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/layout.html +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-delete-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-delete-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-get-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-get-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-head-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-patch-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-post-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-put-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-delete-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-delete-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-get-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-get-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-patch-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-post-list.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-put-object.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/accounts.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/admin.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/authentication.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/backoff.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/batch.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/buckets.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/collections.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/deprecation.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/errors.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/filtering.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/flush.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/groups.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/history.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/openapi.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/openid.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/pagination.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/permissions.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/quotas.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/records.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/selecting_fields.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/sorting.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/timestamps.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/utilities.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/api/versioning.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/changelog.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/commandline.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/community.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/concepts.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/good-practices.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/production.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/settings.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/_static/theme_overrides.css +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/api.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/cache.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/decorators.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/errors.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/glossary.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/images/cliquet-base.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/images/cliquet-mozilla.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/notifications.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/permission.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/quickstart.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/rationale.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/resource.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/storage.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/testing.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/utils.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/core/viewsets.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/faq.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/alwaysdata-button.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/architecture.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/color-formatter.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/concepts-general.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/concepts-permissions.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/heroku-button.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/kinto-logo.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/kinto-logo.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-admin.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-attachment.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-community.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-demos.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-history.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-indexing.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-javascript.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-jsonschema.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-livesync.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-multiapps.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-offline.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-permissions.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-python.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-quotas.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-selfhostable.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-signature.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-synchronisation.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-deployonce-selfhost.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-features.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-synchronisation.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-use-cases.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/scalingo-button.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/sequence-storage.png +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-both.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-newest.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-oldest.svg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/kinto-admin.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/overview.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/troubleshooting.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/app-examples.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/authentication-github.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/client-side-encryption.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/custom-id-generator.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/first-steps.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/index.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/install.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/notifications-custom.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/notifications-websockets.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/permission-setups.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/permissions.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/synchronisation.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/write-plugin.rst +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/__main__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/authorization.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/config/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/config/kinto.tpl +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/authentication.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/authorization.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/memcached.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/memory.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/postgresql/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/postgresql/schema.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/testing.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/decorators.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/errors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/events.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/listeners/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/openapi.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/memory.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/schema.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/testing.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/model.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/schema.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/viewset.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/schema.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/statsd.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/exceptions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/generators.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/memory.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/client.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrator.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/pool.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/schema.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/testing.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/utils.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/testing.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/batch.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/errors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/heartbeat.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/hello.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/openapi.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/version.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/events.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/authentication.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/mails.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/utils.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/views/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/views/validation.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/README.md +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/__init__.py +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/asn1-8gHclKtu.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/asn1-CGOzndHr.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/clojure-plf_rynZ.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/css-tpsEXL3H.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/logo-FQUYikj1.png → /kinto-19.3.0/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/mllike-ilm95jrV.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/mllike-C_8OmSiT.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/python-xljIYvii.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/rpm-cddeyEgF.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/sql-3IaSLchm.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/sql-C4g8LzGK.js +0 -0
- /kinto-19.2.0/kinto/plugins/admin/build/assets/ttcn-cfg-9oMIyPXS.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/ttcn-cfg-BIkV9KBc.js +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/public/help.html +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/views.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/default_bucket/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/flush.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/listener.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/views.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/utils.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/views.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/listener.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/utils.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/schema_validation.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/admin.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/buckets.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/collections.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/contribute.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/groups.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/permissions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto/views/records.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/dependency_links.txt +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/entry_points.txt +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/requires.txt +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/top_level.txt +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/scripts/pull-kinto-admin.sh +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/setup.cfg +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/browser.ini +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/browser.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/listeners.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_base.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_cache_expires.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_events.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_filter.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_model.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_object.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_object_permissions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_pagination.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_partial_response.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_preconditions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_schema.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_sort.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_sync.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_views_cors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_viewset.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/support.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_authentication.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_authorization.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_cache.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_decorators.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_deprecation.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_errors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_listeners.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_logging.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_metrics.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_openapi.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_permission.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_schema.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage_migrations.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage_pool.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_utils.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_batch.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_errors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_heartbeat.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_hello.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_openapi.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_postgresql.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_transaction.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/static/index.html +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/views.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/core/testplugin/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/functional.ini +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/functional.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/support.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_plugins.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_resources.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_buckets.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_collections.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_errors.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_groups.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_records.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_validation.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/__init__.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_accounts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_admin.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_default_bucket.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_flush.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_history.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_openid.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_quotas.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/support.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_authorization.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_config.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_configuration/test.ini +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_init.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_main.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_scripts.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_admin.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_buckets.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_collections.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_collections_cache.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_contribute.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_disable_default.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_groups.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_hello.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_objects_permissions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_permissions.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_records.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_collection.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_group.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_record.py +0 -0
- {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_version.py +0 -0
|
@@ -32,10 +32,8 @@ jobs:
|
|
|
32
32
|
runs-on: ubuntu-latest
|
|
33
33
|
strategy:
|
|
34
34
|
matrix:
|
|
35
|
-
pyenv: [
|
|
35
|
+
pyenv: [py39, py310, py311, py312, py312-raw]
|
|
36
36
|
include:
|
|
37
|
-
- pyenv: py38
|
|
38
|
-
python-version: "3.8"
|
|
39
37
|
- pyenv: py39
|
|
40
38
|
python-version: "3.9"
|
|
41
39
|
- pyenv: py310
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Mozilla Kinto server
|
|
2
|
-
FROM python:3.10-bullseye
|
|
2
|
+
FROM python:3.10-bullseye AS python-builder
|
|
3
3
|
RUN python -m venv /opt/venv
|
|
4
4
|
ARG KINTO_VERSION=1
|
|
5
5
|
ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_KINTO=${KINTO_VERSION} \
|
|
@@ -36,4 +36,4 @@ WORKDIR /app
|
|
|
36
36
|
USER app
|
|
37
37
|
|
|
38
38
|
# Run database migrations and start the kinto server
|
|
39
|
-
CMD kinto migrate --ini $KINTO_INI && kinto start --ini $KINTO_INI --port $PORT
|
|
39
|
+
CMD ["sh", "-c", "kinto migrate --ini $KINTO_INI && kinto start --ini $KINTO_INI --port $PORT"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: kinto
|
|
3
|
-
Version: 19.
|
|
3
|
+
Version: 19.3.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
|
|
@@ -21,10 +21,10 @@ Project-URL: Repository, https://github.com/Kinto/kinto
|
|
|
21
21
|
Keywords: web,sync,json,storage,services
|
|
22
22
|
Classifier: Programming Language :: Python
|
|
23
23
|
Classifier: Programming Language :: Python :: 3
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.9
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.10
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
28
28
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
29
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
30
30
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
@@ -114,7 +114,7 @@ Kinto is a minimalist JSON storage service with synchronisation and sharing abil
|
|
|
114
114
|
Requirements
|
|
115
115
|
------------
|
|
116
116
|
|
|
117
|
-
* **Python**: 3.
|
|
117
|
+
* **Python**: 3.9+
|
|
118
118
|
* **Backends**: In-memory (development), PostgreSQL 9.5+ (production)
|
|
119
119
|
|
|
120
120
|
Contributors
|
|
@@ -44,8 +44,10 @@ execnet==2.0.2
|
|
|
44
44
|
# via pytest-cache
|
|
45
45
|
fqdn==1.5.1
|
|
46
46
|
# via jsonschema
|
|
47
|
-
greenlet==3.
|
|
48
|
-
# via
|
|
47
|
+
greenlet==3.1.1
|
|
48
|
+
# via
|
|
49
|
+
# playwright
|
|
50
|
+
# sqlalchemy
|
|
49
51
|
hupper==1.12
|
|
50
52
|
# via pyramid
|
|
51
53
|
idna==3.7
|
|
@@ -79,7 +81,7 @@ markupsafe==2.1.4
|
|
|
79
81
|
# via werkzeug
|
|
80
82
|
msgpack==1.0.7
|
|
81
83
|
# via bravado-core
|
|
82
|
-
newrelic==10.
|
|
84
|
+
newrelic==10.2.0
|
|
83
85
|
# via -r constraints.in
|
|
84
86
|
packaging==23.2
|
|
85
87
|
# via
|
|
@@ -94,13 +96,13 @@ plaster==1.1.2
|
|
|
94
96
|
# pyramid
|
|
95
97
|
plaster-pastedeploy==1.0.1
|
|
96
98
|
# via pyramid
|
|
97
|
-
playwright==1.
|
|
99
|
+
playwright==1.48.0
|
|
98
100
|
# via -r constraints.in
|
|
99
101
|
pluggy==1.5.0
|
|
100
102
|
# via pytest
|
|
101
103
|
prometheus-client==0.21.0
|
|
102
104
|
# via -r constraints.in
|
|
103
|
-
psycopg2==2.9.
|
|
105
|
+
psycopg2==2.9.10
|
|
104
106
|
# via -r constraints.in
|
|
105
107
|
pyee==12.0.0
|
|
106
108
|
# via playwright
|
|
@@ -161,7 +163,7 @@ rpds-py==0.17.1
|
|
|
161
163
|
# via
|
|
162
164
|
# jsonschema
|
|
163
165
|
# referencing
|
|
164
|
-
ruff==0.
|
|
166
|
+
ruff==0.7.1
|
|
165
167
|
# via -r constraints.in
|
|
166
168
|
sentry-sdk==2.8.0
|
|
167
169
|
# via -r constraints.in
|
|
@@ -175,7 +177,7 @@ six==1.16.0
|
|
|
175
177
|
# rfc3339-validator
|
|
176
178
|
soupsieve==2.5
|
|
177
179
|
# via beautifulsoup4
|
|
178
|
-
sqlalchemy==2.0.
|
|
180
|
+
sqlalchemy==2.0.36
|
|
179
181
|
# via
|
|
180
182
|
# -r constraints.in
|
|
181
183
|
# sentry-sdk
|
|
@@ -212,7 +214,7 @@ venusian==3.1.0
|
|
|
212
214
|
# via
|
|
213
215
|
# cornice
|
|
214
216
|
# pyramid
|
|
215
|
-
waitress==3.0.
|
|
217
|
+
waitress==3.0.1
|
|
216
218
|
# via
|
|
217
219
|
# -r constraints.in
|
|
218
220
|
# webtest
|
|
@@ -224,7 +226,7 @@ webob==1.8.8
|
|
|
224
226
|
# webtest
|
|
225
227
|
webtest==3.0.0
|
|
226
228
|
# via -r constraints.in
|
|
227
|
-
werkzeug==3.0.
|
|
229
|
+
werkzeug==3.0.6
|
|
228
230
|
# via -r constraints.in
|
|
229
231
|
zope-deprecation==5.0
|
|
230
232
|
# via pyramid
|
|
@@ -24,10 +24,7 @@ __HERE__ = os.path.dirname(os.path.abspath(__file__))
|
|
|
24
24
|
on_rtd = os.environ.get("READTHEDOCS", None) == "True"
|
|
25
25
|
|
|
26
26
|
if not on_rtd: # only import and set the theme if we're building docs locally
|
|
27
|
-
import sphinx_rtd_theme
|
|
28
|
-
|
|
29
27
|
html_theme = "sphinx_rtd_theme"
|
|
30
|
-
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
|
31
28
|
|
|
32
29
|
# otherwise, readthedocs.io uses their theme by default, so no need to specify
|
|
33
30
|
# it
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
Sphinx==
|
|
2
|
-
sphinx_rtd_theme==
|
|
1
|
+
Sphinx==8.1.3
|
|
2
|
+
sphinx_rtd_theme==3.0.1
|
|
3
3
|
docutils==0.20.1
|
|
4
4
|
sphinxcontrib-httpdomain==1.8.1
|
|
5
5
|
sphinx-github-changelog==1.4.0
|
|
@@ -9,4 +9,4 @@ webtest==3.0.1
|
|
|
9
9
|
cornice==6.1.0
|
|
10
10
|
pyramid==2.0.2
|
|
11
11
|
python-rapidjson==1.20
|
|
12
|
-
SQLAlchemy==2.0.
|
|
12
|
+
SQLAlchemy==2.0.36
|
|
@@ -431,6 +431,9 @@ def setup_logging(config):
|
|
|
431
431
|
def setup_metrics(config):
|
|
432
432
|
settings = config.get_settings()
|
|
433
433
|
|
|
434
|
+
# Register a no-op metrics service by default.
|
|
435
|
+
config.registry.registerUtility(metrics.NoOpMetricsService(), metrics.IMetricsService)
|
|
436
|
+
|
|
434
437
|
# This does not fully respect the Pyramid/ZCA patterns, but the rest of Kinto uses
|
|
435
438
|
# `registry.storage`, `registry.cache`, etc. Consistency seems more important.
|
|
436
439
|
config.registry.__class__.metrics = property(
|
|
@@ -449,9 +452,6 @@ def setup_metrics(config):
|
|
|
449
452
|
def on_app_created(event):
|
|
450
453
|
config = event.app
|
|
451
454
|
metrics_service = config.registry.metrics
|
|
452
|
-
if not metrics_service:
|
|
453
|
-
logger.warning("No metrics service registered.")
|
|
454
|
-
return
|
|
455
455
|
|
|
456
456
|
metrics.watch_execution_time(metrics_service, config.registry.cache, prefix="backend")
|
|
457
457
|
metrics.watch_execution_time(metrics_service, config.registry.storage, prefix="backend")
|
|
@@ -471,15 +471,65 @@ def setup_metrics(config):
|
|
|
471
471
|
def on_new_response(event):
|
|
472
472
|
request = event.request
|
|
473
473
|
metrics_service = config.registry.metrics
|
|
474
|
-
|
|
475
|
-
|
|
474
|
+
|
|
475
|
+
try:
|
|
476
|
+
endpoint = utils.strip_uri_prefix(request.path)
|
|
477
|
+
except UnicodeDecodeError as e:
|
|
478
|
+
# This `on_new_response` callback is also called when a HTTP 400
|
|
479
|
+
# is returned because of an invalid UTF-8 path. We still want metrics.
|
|
480
|
+
endpoint = str(e)
|
|
476
481
|
|
|
477
482
|
# Count unique users.
|
|
478
483
|
user_id = request.prefixed_userid
|
|
479
484
|
if user_id:
|
|
480
485
|
# Get rid of colons in metric packet (see #1282).
|
|
481
|
-
user_id = user_id.
|
|
482
|
-
metrics_service.count("users", unique=user_id)
|
|
486
|
+
auth, user_id = user_id.split(":")
|
|
487
|
+
metrics_service.count("users", unique=[("auth", auth), ("userid", user_id)])
|
|
488
|
+
|
|
489
|
+
# Add extra labels to metrics, based on fields extracted from the request matchdict.
|
|
490
|
+
metrics_matchdict_fields = aslist(settings["metrics_matchdict_fields"])
|
|
491
|
+
# Turn the `id` field of object endpoints into `{resource}_id` (eg. `mushroom_id`, `bucket_id`)
|
|
492
|
+
enhanced_matchdict = dict(request.matchdict or {})
|
|
493
|
+
try:
|
|
494
|
+
enhanced_matchdict[request.current_resource_name + "_id"] = enhanced_matchdict.get(
|
|
495
|
+
"id", ""
|
|
496
|
+
)
|
|
497
|
+
except AttributeError:
|
|
498
|
+
# Not on a resource.
|
|
499
|
+
pass
|
|
500
|
+
metrics_matchdict_labels = [
|
|
501
|
+
(field, enhanced_matchdict.get(field, "")) for field in metrics_matchdict_fields
|
|
502
|
+
]
|
|
503
|
+
|
|
504
|
+
# Count served requests.
|
|
505
|
+
metrics_service.count(
|
|
506
|
+
"request_summary",
|
|
507
|
+
unique=[
|
|
508
|
+
("method", request.method.lower()),
|
|
509
|
+
("endpoint", endpoint),
|
|
510
|
+
("status", str(request.response.status_code)),
|
|
511
|
+
]
|
|
512
|
+
+ metrics_matchdict_labels,
|
|
513
|
+
)
|
|
514
|
+
|
|
515
|
+
try:
|
|
516
|
+
current = utils.msec_time()
|
|
517
|
+
duration = current - request._received_at
|
|
518
|
+
metrics_service.observe(
|
|
519
|
+
"request_duration",
|
|
520
|
+
duration,
|
|
521
|
+
labels=[("endpoint", endpoint)] + metrics_matchdict_labels,
|
|
522
|
+
)
|
|
523
|
+
except AttributeError: # pragma: no cover
|
|
524
|
+
# Logging was not setup in this Kinto app (unlikely but possible)
|
|
525
|
+
pass
|
|
526
|
+
|
|
527
|
+
# Observe response size.
|
|
528
|
+
metrics_service.observe(
|
|
529
|
+
"request_size",
|
|
530
|
+
len(request.response.body or b""),
|
|
531
|
+
labels=[("endpoint", endpoint)] + metrics_matchdict_labels,
|
|
532
|
+
)
|
|
483
533
|
|
|
484
534
|
# Count authentication verifications.
|
|
485
535
|
if hasattr(request, "authn_type"):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import types
|
|
2
2
|
|
|
3
|
-
from zope.interface import Interface
|
|
3
|
+
from zope.interface import Interface, implementer
|
|
4
4
|
|
|
5
5
|
from kinto.core import utils
|
|
6
6
|
|
|
@@ -16,13 +16,47 @@ class IMetricsService(Interface):
|
|
|
16
16
|
Watch execution time.
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
|
+
def observe(self, key, value, labels=[]):
|
|
20
|
+
"""
|
|
21
|
+
Observe a give `value` for the specified `key`.
|
|
22
|
+
"""
|
|
23
|
+
|
|
19
24
|
def count(key, count=1, unique=None):
|
|
20
25
|
"""
|
|
21
26
|
Count occurrences. If `unique` is set, overwrites the counter value
|
|
22
27
|
on each call.
|
|
28
|
+
|
|
29
|
+
`unique` should be of type ``list[tuple[str,str]]``.
|
|
23
30
|
"""
|
|
24
31
|
|
|
25
32
|
|
|
33
|
+
class NoOpTimer:
|
|
34
|
+
def __call__(self, f):
|
|
35
|
+
@utils.safe_wraps(f)
|
|
36
|
+
def _wrapped(*args, **kwargs):
|
|
37
|
+
return f(*args, **kwargs)
|
|
38
|
+
|
|
39
|
+
return _wrapped
|
|
40
|
+
|
|
41
|
+
def __enter__(self):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
def __exit__(self, *args, **kwargs):
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@implementer(IMetricsService)
|
|
49
|
+
class NoOpMetricsService:
|
|
50
|
+
def timer(self, key):
|
|
51
|
+
return NoOpTimer()
|
|
52
|
+
|
|
53
|
+
def observe(self, key, value, labels=[]):
|
|
54
|
+
pass
|
|
55
|
+
|
|
56
|
+
def count(self, key, count=1, unique=None):
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
|
|
26
60
|
def watch_execution_time(metrics_service, obj, prefix="", classname=None):
|
|
27
61
|
"""
|
|
28
62
|
Decorate all methods of an object in order to watch their execution time.
|
|
@@ -49,6 +83,8 @@ def listener_with_timer(config, key, func):
|
|
|
49
83
|
def wrapped(*args, **kwargs):
|
|
50
84
|
metrics_service = config.registry.metrics
|
|
51
85
|
if not metrics_service:
|
|
86
|
+
# This only happens if `kinto.core.initialization.setup_metrics` is
|
|
87
|
+
# not listed in the `initialization_sequence` setting.
|
|
52
88
|
return func(*args, **kwargs)
|
|
53
89
|
# If metrics are enabled, monitor execution time of listeners.
|
|
54
90
|
with metrics_service.timer(key):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import collections.abc as collections_abc
|
|
2
|
+
import functools
|
|
2
3
|
import hashlib
|
|
3
4
|
import hmac
|
|
4
5
|
import os
|
|
@@ -541,3 +542,10 @@ def apply_json_patch(obj, ops):
|
|
|
541
542
|
raise ValueError(e)
|
|
542
543
|
|
|
543
544
|
return result
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def safe_wraps(wrapper, *args, **kwargs):
|
|
548
|
+
"""Safely wraps partial functions."""
|
|
549
|
+
while isinstance(wrapper, functools.partial):
|
|
550
|
+
wrapper = wrapper.func
|
|
551
|
+
return functools.wraps(wrapper, *args, **kwargs)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.4.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.4.1
|