kinto 18.1.1__tar.gz → 19.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-18.1.1/kinto.egg-info → kinto-19.2.0}/PKG-INFO +3 -2
- {kinto-18.1.1 → kinto-19.2.0}/README.rst +1 -1
- {kinto-18.1.1 → kinto-19.2.0}/constraints.in +1 -0
- {kinto-18.1.1 → kinto-19.2.0}/constraints.txt +19 -27
- {kinto-18.1.1 → kinto-19.2.0}/docs/configuration/production.rst +2 -7
- {kinto-18.1.1 → kinto-19.2.0}/docs/configuration/settings.rst +126 -84
- {kinto-18.1.1 → kinto-19.2.0}/docs/requirements.txt +5 -5
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/__init__.py +1 -1
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/initialization.py +82 -53
- kinto-19.2.0/kinto/core/metrics.py +57 -0
- kinto-19.2.0/kinto/core/statsd.py +1 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/testing.py +5 -1
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/history/__init__.py +5 -6
- kinto-19.2.0/kinto/plugins/prometheus.py +150 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/quotas/__init__.py +5 -6
- {kinto-18.1.1/kinto/core → kinto-19.2.0/kinto/plugins}/statsd.py +16 -21
- {kinto-18.1.1 → kinto-19.2.0/kinto.egg-info}/PKG-INFO +3 -2
- {kinto-18.1.1 → kinto-19.2.0}/kinto.egg-info/SOURCES.txt +6 -1
- {kinto-18.1.1 → kinto-19.2.0}/kinto.egg-info/requires.txt +1 -0
- {kinto-18.1.1 → kinto-19.2.0}/pyproject.toml +1 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_events.py +23 -5
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_initialization.py +113 -48
- kinto-19.2.0/tests/core/test_metrics.py +49 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/functional.ini +1 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_history.py +18 -16
- kinto-19.2.0/tests/plugins/test_prometheus.py +120 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_quotas.py +18 -15
- kinto-19.2.0/tests/plugins/test_statsd.py +61 -0
- kinto-18.1.1/tests/core/test_statsd.py +0 -120
- {kinto-18.1.1 → kinto-19.2.0}/.dockerignore +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/CONTRIBUTING.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/dependabot.yml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/release.yml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/workflows/labels.yaml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/workflows/publish.yml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.github/workflows/test.yml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/.gitignore +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/CHANGELOG.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/CONTRIBUTORS.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/Dockerfile +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/LICENSE +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/Makefile +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/SECURITY.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/SUPPORT.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/app.wsgi +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/contribute.json +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docker-compose.yml +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/_static/piwik.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/_static/theme_overrides.css +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/_templates/footer.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/_templates/indexcontent.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/_templates/layout.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-delete-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-delete-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-get-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-get-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-head-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-patch-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-post-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_details-put-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-delete-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-delete-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-get-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-get-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-patch-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-post-list.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/_status-put-object.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/accounts.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/admin.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/authentication.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/backoff.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/batch.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/buckets.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/collections.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/deprecation.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/errors.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/filtering.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/flush.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/groups.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/history.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/openapi.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/openid.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/pagination.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/permissions.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/quotas.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/records.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/selecting_fields.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/sorting.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/timestamps.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/1.x/utilities.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/api/versioning.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/changelog.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/commandline.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/community.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/concepts.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/conf.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/configuration/good-practices.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/configuration/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/_static/theme_overrides.css +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/api.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/cache.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/decorators.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/errors.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/glossary.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/images/cliquet-base.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/images/cliquet-mozilla.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/notifications.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/permission.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/quickstart.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/rationale.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/resource.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/storage.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/testing.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/utils.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/core/viewsets.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/faq.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/alwaysdata-button.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/architecture.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/color-formatter.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/concepts-general.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/concepts-permissions.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/heroku-button.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/kinto-logo.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/kinto-logo.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-admin.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-attachment.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-community.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-demos.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-history.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-indexing.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-javascript.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-jsonschema.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-livesync.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-multiapps.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-offline.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-permissions.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-python.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-quotas.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-selfhostable.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-signature.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/logo-synchronisation.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/overview-deployonce-selfhost.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/overview-features.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/overview-synchronisation.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/overview-use-cases.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/scalingo-button.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/sequence-storage.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/sync-both.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/sync-newest.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/images/sync-oldest.svg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/kinto-admin.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/overview.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/troubleshooting.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/app-examples.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/authentication-github.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/client-side-encryption.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/custom-id-generator.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/first-steps.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/index.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/install.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/notifications-custom.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/notifications-websockets.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/permission-setups.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/permissions.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/synchronisation.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/docs/tutorials/write-plugin.rst +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/__main__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/authorization.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/config/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/config/kinto.tpl +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/authentication.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/authorization.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/memcached.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/memory.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/postgresql/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/postgresql/schema.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/cache/testing.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/decorators.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/errors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/events.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/listeners/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/openapi.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/memory.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/postgresql/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/postgresql/schema.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/permission/testing.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/resource/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/resource/model.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/resource/schema.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/resource/viewset.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/schema.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/exceptions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/generators.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/memory.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/client.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/migrator.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/pool.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/postgresql/schema.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/testing.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/storage/utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/batch.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/errors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/heartbeat.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/hello.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/openapi.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/core/views/version.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/events.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/authentication.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/mails.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/views/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/accounts/views/validation.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/README.md +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/VERSION +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/VERSION +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/asn1-8gHclKtu.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/clojure-plf_rynZ.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/css-tpsEXL3H.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/index-iVTdxamX.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/index-vylaZGUr.css +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/javascript-upQ8KtFH.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/logo-FQUYikj1.png +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/mllike-ilm95jrV.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/python-xljIYvii.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/rpm-cddeyEgF.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/sql-3IaSLchm.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/assets/ttcn-cfg-9oMIyPXS.js +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/build/index.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/public/help.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/admin/views.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/default_bucket/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/flush.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/history/listener.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/history/views.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/openid/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/openid/utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/openid/views.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/quotas/listener.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/quotas/scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/plugins/quotas/utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/schema_validation.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/admin.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/buckets.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/collections.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/contribute.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/groups.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/permissions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto/views/records.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto.egg-info/dependency_links.txt +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto.egg-info/entry_points.txt +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/kinto.egg-info/top_level.txt +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/scripts/pull-kinto-admin.sh +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/setup.cfg +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/browser.ini +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/browser.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/listeners.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_base.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_cache_expires.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_filter.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_model.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_object.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_object_permissions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_pagination.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_partial_response.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_preconditions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_schema.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_sort.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_sync.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_views.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_views_cors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/resource/test_viewset.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/support.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_authentication.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_authorization.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_cache.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_decorators.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_deprecation.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_errors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_listeners.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_logging.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_openapi.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_permission.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_schema.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_storage.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_storage_migrations.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_storage_pool.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_utils.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_batch.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_errors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_heartbeat.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_hello.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_openapi.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_postgresql.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/test_views_transaction.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/testapp/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/testapp/static/index.html +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/testapp/views.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/core/testplugin/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/functional.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/support.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_plugins.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_resources.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_responses_buckets.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_responses_collections.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_responses_errors.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_responses_groups.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_responses_records.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/openapi/test_validation.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/__init__.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_accounts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_admin.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_default_bucket.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_flush.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/plugins/test_openid.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/support.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_authorization.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_config.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_configuration/test.ini +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_init.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_main.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_scripts.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_admin.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_buckets.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_collections.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_collections_cache.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_contribute.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_disable_default.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_groups.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_hello.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_objects_permissions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_permissions.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_records.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_schema_collection.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_schema_group.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_schema_record.py +0 -0
- {kinto-18.1.1 → kinto-19.2.0}/tests/test_views_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: kinto
|
|
3
|
-
Version:
|
|
3
|
+
Version: 19.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
|
|
@@ -61,6 +61,7 @@ Requires-Dist: newrelic; extra == "monitoring"
|
|
|
61
61
|
Requires-Dist: sentry-sdk[sqlalchemy]; extra == "monitoring"
|
|
62
62
|
Requires-Dist: statsd; extra == "monitoring"
|
|
63
63
|
Requires-Dist: werkzeug; extra == "monitoring"
|
|
64
|
+
Requires-Dist: prometheus-client; extra == "monitoring"
|
|
64
65
|
Provides-Extra: test
|
|
65
66
|
Requires-Dist: bravado; extra == "test"
|
|
66
67
|
Requires-Dist: pytest; extra == "test"
|
|
@@ -79,7 +80,7 @@ Kinto
|
|
|
79
80
|
|coc| |gitter| |readthedocs| |pypi| |ci| |main-coverage|
|
|
80
81
|
|
|
81
82
|
.. |coc| image:: https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-blue.svg
|
|
82
|
-
:target: https://github.com/Kinto/kinto/blob/main/CODE_OF_CONDUCT.md
|
|
83
|
+
:target: https://github.com/Kinto/kinto/blob/main/.github/CODE_OF_CONDUCT.md
|
|
83
84
|
:alt: Code of conduct
|
|
84
85
|
|
|
85
86
|
.. |gitter| image:: https://badges.gitter.im/Kinto/kinto.svg
|
|
@@ -4,7 +4,7 @@ Kinto
|
|
|
4
4
|
|coc| |gitter| |readthedocs| |pypi| |ci| |main-coverage|
|
|
5
5
|
|
|
6
6
|
.. |coc| image:: https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-blue.svg
|
|
7
|
-
:target: https://github.com/Kinto/kinto/blob/main/CODE_OF_CONDUCT.md
|
|
7
|
+
:target: https://github.com/Kinto/kinto/blob/main/.github/CODE_OF_CONDUCT.md
|
|
8
8
|
:alt: Code of conduct
|
|
9
9
|
|
|
10
10
|
.. |gitter| image:: https://badges.gitter.im/Kinto/kinto.svg
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file is autogenerated by pip-compile with Python 3.
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.12
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
5
|
# pip-compile --output-file=constraints.txt --strip-extras constraints.in
|
|
@@ -10,15 +10,15 @@ attrs==23.2.0
|
|
|
10
10
|
# via
|
|
11
11
|
# jsonschema
|
|
12
12
|
# referencing
|
|
13
|
-
bcrypt==4.
|
|
13
|
+
bcrypt==4.2.0
|
|
14
14
|
# via -r constraints.in
|
|
15
15
|
beautifulsoup4==4.12.3
|
|
16
16
|
# via webtest
|
|
17
17
|
bravado-core==6.1.1
|
|
18
18
|
# via -r constraints.in
|
|
19
|
-
build==1.2.
|
|
19
|
+
build==1.2.2.post1
|
|
20
20
|
# via -r constraints.in
|
|
21
|
-
certifi==
|
|
21
|
+
certifi==2024.7.4
|
|
22
22
|
# via
|
|
23
23
|
# requests
|
|
24
24
|
# sentry-sdk
|
|
@@ -40,16 +40,12 @@ coverage==7.4.0
|
|
|
40
40
|
# via pytest-cov
|
|
41
41
|
dockerflow==2024.4.2
|
|
42
42
|
# via -r constraints.in
|
|
43
|
-
exceptiongroup==1.2.0
|
|
44
|
-
# via pytest
|
|
45
43
|
execnet==2.0.2
|
|
46
44
|
# via pytest-cache
|
|
47
45
|
fqdn==1.5.1
|
|
48
46
|
# via jsonschema
|
|
49
47
|
greenlet==3.0.3
|
|
50
|
-
# via
|
|
51
|
-
# playwright
|
|
52
|
-
# sqlalchemy
|
|
48
|
+
# via playwright
|
|
53
49
|
hupper==1.12
|
|
54
50
|
# via pyramid
|
|
55
51
|
idna==3.7
|
|
@@ -70,7 +66,7 @@ jsonpointer==2.4
|
|
|
70
66
|
# jsonschema
|
|
71
67
|
jsonref==1.1.0
|
|
72
68
|
# via bravado-core
|
|
73
|
-
jsonschema==4.
|
|
69
|
+
jsonschema==4.23.0
|
|
74
70
|
# via
|
|
75
71
|
# -r constraints.in
|
|
76
72
|
# bravado-core
|
|
@@ -83,7 +79,7 @@ markupsafe==2.1.4
|
|
|
83
79
|
# via werkzeug
|
|
84
80
|
msgpack==1.0.7
|
|
85
81
|
# via bravado-core
|
|
86
|
-
newrelic==
|
|
82
|
+
newrelic==10.1.0
|
|
87
83
|
# via -r constraints.in
|
|
88
84
|
packaging==23.2
|
|
89
85
|
# via
|
|
@@ -98,13 +94,15 @@ plaster==1.1.2
|
|
|
98
94
|
# pyramid
|
|
99
95
|
plaster-pastedeploy==1.0.1
|
|
100
96
|
# via pyramid
|
|
101
|
-
playwright==1.
|
|
97
|
+
playwright==1.47.0
|
|
102
98
|
# via -r constraints.in
|
|
103
99
|
pluggy==1.5.0
|
|
104
100
|
# via pytest
|
|
101
|
+
prometheus-client==0.21.0
|
|
102
|
+
# via -r constraints.in
|
|
105
103
|
psycopg2==2.9.9
|
|
106
104
|
# via -r constraints.in
|
|
107
|
-
pyee==
|
|
105
|
+
pyee==12.0.0
|
|
108
106
|
# via playwright
|
|
109
107
|
pyproject-hooks==1.0.0
|
|
110
108
|
# via build
|
|
@@ -121,7 +119,7 @@ pyramid-multiauth==1.0.2
|
|
|
121
119
|
# via -r constraints.in
|
|
122
120
|
pyramid-tm==2.5
|
|
123
121
|
# via -r constraints.in
|
|
124
|
-
pytest==8.
|
|
122
|
+
pytest==8.3.3
|
|
125
123
|
# via
|
|
126
124
|
# -r constraints.in
|
|
127
125
|
# pytest-cache
|
|
@@ -163,9 +161,9 @@ rpds-py==0.17.1
|
|
|
163
161
|
# via
|
|
164
162
|
# jsonschema
|
|
165
163
|
# referencing
|
|
166
|
-
ruff==0.
|
|
164
|
+
ruff==0.6.9
|
|
167
165
|
# via -r constraints.in
|
|
168
|
-
sentry-sdk==
|
|
166
|
+
sentry-sdk==2.8.0
|
|
169
167
|
# via -r constraints.in
|
|
170
168
|
simplejson==3.19.2
|
|
171
169
|
# via bravado-core
|
|
@@ -177,7 +175,7 @@ six==1.16.0
|
|
|
177
175
|
# rfc3339-validator
|
|
178
176
|
soupsieve==2.5
|
|
179
177
|
# via beautifulsoup4
|
|
180
|
-
sqlalchemy==2.0.
|
|
178
|
+
sqlalchemy==2.0.35
|
|
181
179
|
# via
|
|
182
180
|
# -r constraints.in
|
|
183
181
|
# sentry-sdk
|
|
@@ -186,13 +184,7 @@ statsd==4.0.1
|
|
|
186
184
|
# via -r constraints.in
|
|
187
185
|
swagger-spec-validator==3.0.3
|
|
188
186
|
# via bravado-core
|
|
189
|
-
|
|
190
|
-
# via
|
|
191
|
-
# build
|
|
192
|
-
# coverage
|
|
193
|
-
# pyproject-hooks
|
|
194
|
-
# pytest
|
|
195
|
-
transaction==4.0
|
|
187
|
+
transaction==5.0
|
|
196
188
|
# via
|
|
197
189
|
# -r constraints.in
|
|
198
190
|
# pyramid-mailer
|
|
@@ -224,15 +216,15 @@ waitress==3.0.0
|
|
|
224
216
|
# via
|
|
225
217
|
# -r constraints.in
|
|
226
218
|
# webtest
|
|
227
|
-
webcolors==
|
|
219
|
+
webcolors==24.6.0
|
|
228
220
|
# via jsonschema
|
|
229
|
-
webob==1.8.
|
|
221
|
+
webob==1.8.8
|
|
230
222
|
# via
|
|
231
223
|
# pyramid
|
|
232
224
|
# webtest
|
|
233
225
|
webtest==3.0.0
|
|
234
226
|
# via -r constraints.in
|
|
235
|
-
werkzeug==3.0.
|
|
227
|
+
werkzeug==3.0.4
|
|
236
228
|
# via -r constraints.in
|
|
237
229
|
zope-deprecation==5.0
|
|
238
230
|
# via pyramid
|
|
@@ -220,19 +220,14 @@ In the configuration of the CDN service, you should also:
|
|
|
220
220
|
Monitoring
|
|
221
221
|
----------
|
|
222
222
|
|
|
223
|
-
In order to enable monitoring features
|
|
223
|
+
In order to enable monitoring features (eg. *Prometheus* or *StatsD*), install
|
|
224
224
|
extra requirements:
|
|
225
225
|
|
|
226
226
|
::
|
|
227
227
|
|
|
228
228
|
make install-monitoring
|
|
229
229
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
.. code-block :: ini
|
|
233
|
-
|
|
234
|
-
# StatsD
|
|
235
|
-
kinto.statsd_url = udp://carbon.server:8125
|
|
230
|
+
See :ref:`settings section <monitoring-with-prometheus>` for the configuration aspects.
|
|
236
231
|
|
|
237
232
|
Counters
|
|
238
233
|
::::::::
|
|
@@ -301,21 +301,86 @@ hello view <api-utilities>`.
|
|
|
301
301
|
# kinto.http_host = production.server.com:7777
|
|
302
302
|
|
|
303
303
|
|
|
304
|
+
.. _configuration-plugins:
|
|
305
|
+
|
|
306
|
+
Plugins
|
|
307
|
+
=======
|
|
308
|
+
|
|
309
|
+
It is possible to extend the default Kinto behaviors by using "plugins".
|
|
310
|
+
|
|
311
|
+
The list of plugins to load at startup can be specified in the settings, as a
|
|
312
|
+
list of Python modules:
|
|
313
|
+
|
|
314
|
+
.. code-block:: ini
|
|
315
|
+
|
|
316
|
+
kinto.includes = kinto.plugins.default_bucket
|
|
317
|
+
kinto.plugins.history
|
|
318
|
+
kinto.plugins.admin
|
|
319
|
+
kinto-attachment
|
|
320
|
+
custom-myplugin
|
|
321
|
+
|
|
322
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
323
|
+
| Built-in plugins | What does it do? |
|
|
324
|
+
+=======================================+==========================================================================+
|
|
325
|
+
| ``kinto.plugins.accounts`` | It allows users to sign-up and authenticate using username and password |
|
|
326
|
+
| | (:ref:`more details <api-accounts>`). |
|
|
327
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
328
|
+
| ``kinto.plugins.admin`` | It is a Web admin UI to manage data from a Kinto server. |
|
|
329
|
+
| | (:ref:`more details <kinto-admin>`). |
|
|
330
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
331
|
+
| ``kinto.plugins.default_bucket`` | It enables a personal bucket ``default``, where collections are created |
|
|
332
|
+
| | implicitly (:ref:`more details <buckets-default-id>`). |
|
|
333
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
334
|
+
| ``kinto.plugins.flush`` | Adds an endpoint to completely remove all data from the database backend |
|
|
335
|
+
| | for testing/staging purposes. (:ref:`more details <api-flush>`). |
|
|
336
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
337
|
+
| ``kinto.plugins.history`` | It tracks every action performed on objects within a bucket |
|
|
338
|
+
| | (:ref:`more details <api-history>`). |
|
|
339
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
340
|
+
| ``kinto.plugins.openid`` | It allows to authenticate users using OpenID Connect from Google, |
|
|
341
|
+
| | Microsoft, Auth0, etc. (:ref:`more details <api-openid>`). |
|
|
342
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
343
|
+
| ``kinto.plugins.quotas`` | It allows to limit storage per collection size, number of records, etc. |
|
|
344
|
+
| | (:ref:`more details <api-quotas>`). |
|
|
345
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
346
|
+
| ``kinto.plugins.prometheus`` | Send metrics about backend duration, authentication, endpoints hits, .. |
|
|
347
|
+
| | (:ref:`more details <monitoring-with-prometheus>`). |
|
|
348
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
349
|
+
| ``kinto.plugins.statsd`` | Send metrics about backend duration, authentication, endpoints hits, .. |
|
|
350
|
+
| | (:ref:`more details <monitoring-with-statsd>`). |
|
|
351
|
+
+---------------------------------------+--------------------------------------------------------------------------+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
There are `many available packages`_ in the Pyramid ecosystem, and it is straightforward to build one,
|
|
355
|
+
since the specified module must just define an ``includeme(config)`` function.
|
|
356
|
+
|
|
357
|
+
.. _many available packages: https://github.com/ITCase/awesome-pyramid
|
|
358
|
+
|
|
359
|
+
See `our list of community plugins <https://github.com/Kinto/kinto/wiki/Plugins>`_.
|
|
360
|
+
|
|
361
|
+
See also: :ref:`tutorial-write-plugin` for more in-depth informations on how
|
|
362
|
+
to create your own plugin.
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
Pluggable components
|
|
366
|
+
::::::::::::::::::::
|
|
367
|
+
|
|
368
|
+
:term:`Pluggable <pluggable>` components can be substituted from configuration files,
|
|
369
|
+
as long as the replacement follows the original component API.
|
|
370
|
+
|
|
371
|
+
.. code-block:: ini
|
|
372
|
+
|
|
373
|
+
kinto.logging_renderer = your_log_renderer.CustomRenderer
|
|
374
|
+
|
|
375
|
+
This is the simplest way to extend *Kinto*, but will be limited to its
|
|
376
|
+
existing components (cache, storage, log renderer, ...).
|
|
377
|
+
|
|
378
|
+
In order to add extra features, including external packages is the way to go!
|
|
379
|
+
|
|
380
|
+
|
|
304
381
|
Logging and Monitoring
|
|
305
382
|
======================
|
|
306
383
|
|
|
307
|
-
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
308
|
-
| Setting name | Default | What does it do? |
|
|
309
|
-
+========================+========================================+==========================================================================+
|
|
310
|
-
| kinto.statsd_backend | ``kinto.core.statsd`` | The Python **dotted** location of the StatsD module that should be used |
|
|
311
|
-
| | | for monitoring. Useful to plug custom implementations like Datadog™. |
|
|
312
|
-
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
313
|
-
| kinto.statsd_prefix | ``kinto`` | The prefix to use when sending data to statsd. |
|
|
314
|
-
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
315
|
-
| kinto.statsd_url | ``None`` | The fully qualified URL to use to connect to the statsd host. e.g. |
|
|
316
|
-
| | | ``udp://localhost:8125`` |
|
|
317
|
-
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
318
|
-
|
|
319
384
|
Standard Logging
|
|
320
385
|
::::::::::::::::
|
|
321
386
|
|
|
@@ -425,109 +490,86 @@ Or the equivalent environment variables:
|
|
|
425
490
|
The application sends an event on startup (mainly for setup check).
|
|
426
491
|
|
|
427
492
|
|
|
428
|
-
|
|
429
|
-
::::::::::::::::::::::
|
|
493
|
+
.. _monitoring-with-prometheus:
|
|
430
494
|
|
|
431
|
-
|
|
495
|
+
Monitoring with Prometheus
|
|
496
|
+
::::::::::::::::::::::::::
|
|
432
497
|
|
|
433
|
-
|
|
498
|
+
Requires the ``prometheus-client`` package (installed with ``kinto[monitoring]``).
|
|
434
499
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
kinto.statsd_url = udp://localhost:8125
|
|
438
|
-
# kinto.statsd_prefix = kinto-prod
|
|
500
|
+
Prometheus metrics can be enabled with (disabled by default):
|
|
439
501
|
|
|
502
|
+
.. code-block:: ini
|
|
440
503
|
|
|
441
|
-
|
|
442
|
-
:::::::::::::::::::::::::
|
|
504
|
+
kinto.includes = kinto.plugins.prometheus
|
|
443
505
|
|
|
444
|
-
|
|
506
|
+
Metrics can then be crawled from the ``/__metrics__`` endpoint.
|
|
445
507
|
|
|
446
|
-
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
447
|
-
| Setting name | Default | What does it do? |
|
|
448
|
-
+=======================+==========+==========================================================================+
|
|
449
|
-
| kinto.newrelic_config | ``None`` | Location of the newrelic configuration file. |
|
|
450
|
-
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
451
|
-
| kinto.newrelic_env | ``dev`` | The environment the server runs into |
|
|
452
|
-
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
453
508
|
|
|
454
|
-
|
|
509
|
+
.. _monitoring-with-statsd:
|
|
455
510
|
|
|
456
|
-
|
|
511
|
+
Monitoring with StatsD
|
|
512
|
+
::::::::::::::::::::::
|
|
457
513
|
|
|
458
|
-
|
|
459
|
-
kinto.newrelic_env = prod
|
|
514
|
+
Requires the ``statsd`` package.
|
|
460
515
|
|
|
516
|
+
.. note::
|
|
461
517
|
|
|
462
|
-
|
|
518
|
+
Only one of *Prometheus* and *StatsD* can be enabled. It will take precedence and the other one will be ignored.
|
|
463
519
|
|
|
464
|
-
|
|
465
|
-
|
|
520
|
+
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
521
|
+
| Setting name | Default | What does it do? |
|
|
522
|
+
+========================+========================================+==========================================================================+
|
|
523
|
+
| kinto.statsd_backend | ``kinto.core.statsd`` | The Python **dotted** location of the StatsD module that should be used |
|
|
524
|
+
| | | for monitoring. Useful to plug custom implementations like Datadog™. |
|
|
525
|
+
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
526
|
+
| kinto.statsd_prefix | ``kinto`` | The prefix to use when sending data to statsd. |
|
|
527
|
+
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
528
|
+
| kinto.statsd_url | ``None`` | The fully qualified URL to use to connect to the statsd host. e.g. |
|
|
529
|
+
| | | ``udp://host:8125`` |
|
|
530
|
+
+------------------------+----------------------------------------+--------------------------------------------------------------------------+
|
|
466
531
|
|
|
467
|
-
It is possible to extend the default Kinto behaviors by using "plugins".
|
|
468
532
|
|
|
469
|
-
|
|
470
|
-
list of Python modules:
|
|
533
|
+
StatsD metrics can be enabled with (disabled by default):
|
|
471
534
|
|
|
472
535
|
.. code-block:: ini
|
|
473
536
|
|
|
474
|
-
kinto.
|
|
475
|
-
|
|
476
|
-
kinto.plugins.admin
|
|
477
|
-
kinto-attachment
|
|
478
|
-
custom-myplugin
|
|
537
|
+
kinto.statsd_url = udp://host:8125
|
|
538
|
+
# kinto.statsd_prefix = kinto-prod
|
|
479
539
|
|
|
480
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
481
|
-
| Built-in plugins | What does it do? |
|
|
482
|
-
+=======================================+==========================================================================+
|
|
483
|
-
| ``kinto.plugins.accounts`` | It allows users to sign-up and authenticate using username and password |
|
|
484
|
-
| | (:ref:`more details <api-accounts>`). |
|
|
485
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
486
|
-
| ``kinto.plugins.admin`` | It is a Web admin UI to manage data from a Kinto server. |
|
|
487
|
-
| | (:ref:`more details <kinto-admin>`). |
|
|
488
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
489
|
-
| ``kinto.plugins.default_bucket`` | It enables a personal bucket ``default``, where collections are created |
|
|
490
|
-
| | implicitly (:ref:`more details <buckets-default-id>`). |
|
|
491
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
492
|
-
| ``kinto.plugins.flush`` | Adds an endpoint to completely remove all data from the database backend |
|
|
493
|
-
| | for testing/staging purposes. (:ref:`more details <api-flush>`). |
|
|
494
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
495
|
-
| ``kinto.plugins.history`` | It tracks every action performed on objects within a bucket |
|
|
496
|
-
| | (:ref:`more details <api-history>`). |
|
|
497
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
498
|
-
| ``kinto.plugins.openid`` | It allows to authenticate users using OpenID Connect from Google, |
|
|
499
|
-
| | Microsoft, Auth0, etc. (:ref:`more details <api-openid>`). |
|
|
500
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
501
|
-
| ``kinto.plugins.quotas`` | It allows to limit storage per collection size, number of records, etc. |
|
|
502
|
-
| | (:ref:`more details <api-quotas>`). |
|
|
503
|
-
+---------------------------------------+--------------------------------------------------------------------------+
|
|
504
540
|
|
|
541
|
+
StatsD can also be enabled at the *uWSGI* level:
|
|
505
542
|
|
|
506
|
-
|
|
507
|
-
since the specified module must just define an ``includeme(config)`` function.
|
|
543
|
+
.. code-block:: ini
|
|
508
544
|
|
|
509
|
-
|
|
545
|
+
[uwsgi]
|
|
510
546
|
|
|
511
|
-
|
|
547
|
+
# ...
|
|
512
548
|
|
|
513
|
-
|
|
514
|
-
|
|
549
|
+
enable-metrics = true
|
|
550
|
+
plugin = dogstatsd
|
|
551
|
+
stats-push = dogstatsd:host:8125,kinto.{{ $deployment }}
|
|
515
552
|
|
|
516
553
|
|
|
517
|
-
|
|
518
|
-
|
|
554
|
+
Monitoring with New Relic
|
|
555
|
+
:::::::::::::::::::::::::
|
|
519
556
|
|
|
520
|
-
|
|
521
|
-
as long as the replacement follows the original component API.
|
|
557
|
+
Requires the ``newrelic`` package.
|
|
522
558
|
|
|
523
|
-
|
|
559
|
+
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
560
|
+
| Setting name | Default | What does it do? |
|
|
561
|
+
+=======================+==========+==========================================================================+
|
|
562
|
+
| kinto.newrelic_config | ``None`` | Location of the newrelic configuration file. |
|
|
563
|
+
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
564
|
+
| kinto.newrelic_env | ``dev`` | The environment the server runs into |
|
|
565
|
+
+-----------------------+----------+--------------------------------------------------------------------------+
|
|
524
566
|
|
|
525
|
-
|
|
567
|
+
New Relic can be enabled (disabled by default):
|
|
526
568
|
|
|
527
|
-
|
|
528
|
-
existing components (cache, storage, log renderer, ...).
|
|
569
|
+
.. code-block:: ini
|
|
529
570
|
|
|
530
|
-
|
|
571
|
+
kinto.newrelic_config = /location/of/newrelic.ini
|
|
572
|
+
kinto.newrelic_env = prod
|
|
531
573
|
|
|
532
574
|
|
|
533
575
|
.. _configuration-authentication:
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
Sphinx==7.
|
|
1
|
+
Sphinx==7.4.4
|
|
2
2
|
sphinx_rtd_theme==2.0.0
|
|
3
3
|
docutils==0.20.1
|
|
4
4
|
sphinxcontrib-httpdomain==1.8.1
|
|
5
|
-
sphinx-github-changelog==1.
|
|
5
|
+
sphinx-github-changelog==1.4.0
|
|
6
6
|
kinto
|
|
7
7
|
mock==5.1.0
|
|
8
|
-
webtest==3.0.
|
|
8
|
+
webtest==3.0.1
|
|
9
9
|
cornice==6.1.0
|
|
10
10
|
pyramid==2.0.2
|
|
11
|
-
python-rapidjson==1.
|
|
12
|
-
SQLAlchemy==2.0.
|
|
11
|
+
python-rapidjson==1.20
|
|
12
|
+
SQLAlchemy==2.0.35
|
|
@@ -66,8 +66,8 @@ DEFAULT_SETTINGS = {
|
|
|
66
66
|
"kinto.core.initialization.setup_authentication",
|
|
67
67
|
"kinto.core.initialization.setup_backoff",
|
|
68
68
|
"kinto.core.initialization.setup_sentry",
|
|
69
|
-
"kinto.core.initialization.setup_statsd",
|
|
70
69
|
"kinto.core.initialization.setup_listeners",
|
|
70
|
+
"kinto.core.initialization.setup_metrics",
|
|
71
71
|
"kinto.core.events.setup_transaction_hook",
|
|
72
72
|
),
|
|
73
73
|
"event_listeners": "",
|
|
@@ -21,7 +21,7 @@ from pyramid.security import NO_PERMISSION_REQUIRED
|
|
|
21
21
|
from pyramid.settings import asbool, aslist
|
|
22
22
|
from pyramid_multiauth import MultiAuthenticationPolicy, MultiAuthPolicySelected
|
|
23
23
|
|
|
24
|
-
from kinto.core import cache, errors, permission, storage, utils
|
|
24
|
+
from kinto.core import cache, errors, metrics, permission, storage, utils
|
|
25
25
|
from kinto.core.events import ACTIONS, ResourceChanged, ResourceRead
|
|
26
26
|
|
|
27
27
|
|
|
@@ -334,51 +334,13 @@ def setup_sentry(config):
|
|
|
334
334
|
|
|
335
335
|
|
|
336
336
|
def setup_statsd(config):
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
config.registry.statsd = client
|
|
346
|
-
|
|
347
|
-
client.watch_execution_time(config.registry.cache, prefix="backend")
|
|
348
|
-
client.watch_execution_time(config.registry.storage, prefix="backend")
|
|
349
|
-
client.watch_execution_time(config.registry.permission, prefix="backend")
|
|
350
|
-
|
|
351
|
-
# Commit so that configured policy can be queried.
|
|
352
|
-
config.commit()
|
|
353
|
-
policy = config.registry.queryUtility(IAuthenticationPolicy)
|
|
354
|
-
if isinstance(policy, MultiAuthenticationPolicy):
|
|
355
|
-
for name, subpolicy in policy.get_policies():
|
|
356
|
-
client.watch_execution_time(subpolicy, prefix="authentication", classname=name)
|
|
357
|
-
else:
|
|
358
|
-
client.watch_execution_time(policy, prefix="authentication")
|
|
359
|
-
|
|
360
|
-
def on_new_response(event):
|
|
361
|
-
request = event.request
|
|
362
|
-
|
|
363
|
-
# Count unique users.
|
|
364
|
-
user_id = request.prefixed_userid
|
|
365
|
-
if user_id:
|
|
366
|
-
# Get rid of colons in metric packet (see #1282).
|
|
367
|
-
user_id = user_id.replace(":", ".")
|
|
368
|
-
client.count("users", unique=user_id)
|
|
369
|
-
|
|
370
|
-
# Count authentication verifications.
|
|
371
|
-
if hasattr(request, "authn_type"):
|
|
372
|
-
client.count(f"authn_type.{request.authn_type}")
|
|
373
|
-
|
|
374
|
-
# Count view calls.
|
|
375
|
-
service = request.current_service
|
|
376
|
-
if service:
|
|
377
|
-
client.count(f"view.{service.name}.{request.method}")
|
|
378
|
-
|
|
379
|
-
config.add_subscriber(on_new_response, NewResponse)
|
|
380
|
-
|
|
381
|
-
return client
|
|
337
|
+
# It would be pretty rare to find users that have a custom ``kinto.initialization_sequence`` setting.
|
|
338
|
+
# But just in case, warn that it will be removed in next major.
|
|
339
|
+
warnings.warn(
|
|
340
|
+
"``setup_statsd()`` is now deprecated. Use ``kinto.core.initialization.setup_metrics()`` instead.",
|
|
341
|
+
DeprecationWarning,
|
|
342
|
+
)
|
|
343
|
+
setup_metrics(config)
|
|
382
344
|
|
|
383
345
|
|
|
384
346
|
def install_middlewares(app, settings):
|
|
@@ -466,6 +428,75 @@ def setup_logging(config):
|
|
|
466
428
|
config.add_subscriber(on_new_response, NewResponse)
|
|
467
429
|
|
|
468
430
|
|
|
431
|
+
def setup_metrics(config):
|
|
432
|
+
settings = config.get_settings()
|
|
433
|
+
|
|
434
|
+
# This does not fully respect the Pyramid/ZCA patterns, but the rest of Kinto uses
|
|
435
|
+
# `registry.storage`, `registry.cache`, etc. Consistency seems more important.
|
|
436
|
+
config.registry.__class__.metrics = property(
|
|
437
|
+
lambda reg: reg.queryUtility(metrics.IMetricsService)
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
def deprecated_registry(self):
|
|
441
|
+
warnings.warn(
|
|
442
|
+
"``config.registry.statsd`` is now deprecated. Use ``config.registry.metrics`` instead.",
|
|
443
|
+
DeprecationWarning,
|
|
444
|
+
)
|
|
445
|
+
return self.metrics
|
|
446
|
+
|
|
447
|
+
config.registry.__class__.statsd = property(deprecated_registry)
|
|
448
|
+
|
|
449
|
+
def on_app_created(event):
|
|
450
|
+
config = event.app
|
|
451
|
+
metrics_service = config.registry.metrics
|
|
452
|
+
if not metrics_service:
|
|
453
|
+
logger.warning("No metrics service registered.")
|
|
454
|
+
return
|
|
455
|
+
|
|
456
|
+
metrics.watch_execution_time(metrics_service, config.registry.cache, prefix="backend")
|
|
457
|
+
metrics.watch_execution_time(metrics_service, config.registry.storage, prefix="backend")
|
|
458
|
+
metrics.watch_execution_time(metrics_service, config.registry.permission, prefix="backend")
|
|
459
|
+
|
|
460
|
+
policy = config.registry.queryUtility(IAuthenticationPolicy)
|
|
461
|
+
if isinstance(policy, MultiAuthenticationPolicy):
|
|
462
|
+
for name, subpolicy in policy.get_policies():
|
|
463
|
+
metrics.watch_execution_time(
|
|
464
|
+
metrics_service, subpolicy, prefix="authentication", classname=name
|
|
465
|
+
)
|
|
466
|
+
else:
|
|
467
|
+
metrics.watch_execution_time(metrics_service, policy, prefix="authentication")
|
|
468
|
+
|
|
469
|
+
config.add_subscriber(on_app_created, ApplicationCreated)
|
|
470
|
+
|
|
471
|
+
def on_new_response(event):
|
|
472
|
+
request = event.request
|
|
473
|
+
metrics_service = config.registry.metrics
|
|
474
|
+
if not metrics_service:
|
|
475
|
+
return
|
|
476
|
+
|
|
477
|
+
# Count unique users.
|
|
478
|
+
user_id = request.prefixed_userid
|
|
479
|
+
if user_id:
|
|
480
|
+
# Get rid of colons in metric packet (see #1282).
|
|
481
|
+
user_id = user_id.replace(":", ".")
|
|
482
|
+
metrics_service.count("users", unique=user_id)
|
|
483
|
+
|
|
484
|
+
# Count authentication verifications.
|
|
485
|
+
if hasattr(request, "authn_type"):
|
|
486
|
+
metrics_service.count(f"authn_type.{request.authn_type}")
|
|
487
|
+
|
|
488
|
+
# Count view calls.
|
|
489
|
+
service = request.current_service
|
|
490
|
+
if service:
|
|
491
|
+
metrics_service.count(f"view.{service.name}.{request.method}")
|
|
492
|
+
|
|
493
|
+
config.add_subscriber(on_new_response, NewResponse)
|
|
494
|
+
|
|
495
|
+
# While statsd is deprecated, we include its plugin by default for retro-compability.
|
|
496
|
+
if settings["statsd_url"]:
|
|
497
|
+
config.include("kinto.plugins.statsd")
|
|
498
|
+
|
|
499
|
+
|
|
469
500
|
class EventActionFilter:
|
|
470
501
|
def __init__(self, actions, config):
|
|
471
502
|
actions = ACTIONS.from_string_list(actions)
|
|
@@ -518,11 +549,9 @@ def setup_listeners(config):
|
|
|
518
549
|
listener_mod = config.maybe_dotted(module_value)
|
|
519
550
|
listener = listener_mod.load_from_config(config, prefix)
|
|
520
551
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
key = f"listeners.{name}"
|
|
525
|
-
listener = statsd_client.timer(key)(listener.__call__)
|
|
552
|
+
wrapped_listener = metrics.listener_with_timer(
|
|
553
|
+
config, f"listeners.{name}", listener.__call__
|
|
554
|
+
)
|
|
526
555
|
|
|
527
556
|
# Optional filter by event action.
|
|
528
557
|
actions_setting = prefix + "actions"
|
|
@@ -548,11 +577,11 @@ def setup_listeners(config):
|
|
|
548
577
|
options = dict(for_actions=actions, for_resources=resource_names)
|
|
549
578
|
|
|
550
579
|
if ACTIONS.READ in actions:
|
|
551
|
-
config.add_subscriber(
|
|
580
|
+
config.add_subscriber(wrapped_listener, ResourceRead, **options)
|
|
552
581
|
actions = [a for a in actions if a != ACTIONS.READ]
|
|
553
582
|
|
|
554
583
|
if len(actions) > 0:
|
|
555
|
-
config.add_subscriber(
|
|
584
|
+
config.add_subscriber(wrapped_listener, ResourceChanged, **options)
|
|
556
585
|
|
|
557
586
|
|
|
558
587
|
def load_default_settings(config, default_settings):
|