kinto 20.0.0__tar.gz → 20.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinto might be problematic. Click here for more details.
- {kinto-20.0.0 → kinto-20.1.0}/PKG-INFO +1 -1
- {kinto-20.0.0 → kinto-20.1.0}/constraints.txt +2 -2
- {kinto-20.0.0 → kinto-20.1.0}/docs/configuration/settings.rst +13 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/config/kinto.tpl +5 -2
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/__init__.py +14 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/initialization.py +5 -2
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/PKG-INFO +1 -1
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_logging.py +25 -1
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_configuration/test.ini +5 -2
- {kinto-20.0.0 → kinto-20.1.0}/.dockerignore +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/CONTRIBUTING.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/dependabot.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/release.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/workflows/labels.yaml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/workflows/publish.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/workflows/scheduled.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.github/workflows/test.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.gitignore +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/.readthedocs.yaml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/CHANGELOG.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/CONTRIBUTORS.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/Dockerfile +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/LICENSE +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/Makefile +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/README.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/SECURITY.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/SUPPORT.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/app.wsgi +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/constraints.in +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docker-compose.yml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/_static/piwik.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/_static/theme_overrides.css +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/_templates/footer.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/_templates/indexcontent.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/_templates/layout.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-delete-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-delete-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-get-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-get-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-head-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-patch-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-post-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_details-put-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-delete-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-delete-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-get-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-get-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-patch-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-post-list.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/_status-put-object.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/accounts.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/admin.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/authentication.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/backoff.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/batch.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/buckets.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/collections.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/deprecation.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/errors.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/filtering.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/flush.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/groups.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/history.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/openapi.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/openid.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/pagination.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/permissions.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/records.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/selecting_fields.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/sorting.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/timestamps.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/1.x/utilities.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/api/versioning.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/changelog.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/commandline.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/community.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/concepts.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/conf.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/configuration/good-practices.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/configuration/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/configuration/production.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/_static/theme_overrides.css +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/api.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/cache.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/decorators.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/errors.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/glossary.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/images/cliquet-base.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/images/cliquet-mozilla.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/notifications.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/permission.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/quickstart.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/rationale.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/resource.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/storage.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/testing.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/utils.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/core/viewsets.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/faq.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/alwaysdata-button.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/architecture.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/color-formatter.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/concepts-general.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/concepts-permissions.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/heroku-button.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/kinto-logo.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/kinto-logo.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-admin.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-attachment.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-community.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-history.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-javascript.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-jsonschema.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-multiapps.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-permissions.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-python.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-selfhostable.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/logo-synchronisation.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/overview-deployonce-selfhost.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/overview-features.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/overview-synchronisation.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/overview-use-cases.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/scalingo-button.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/sequence-storage.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/sync-both.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/sync-newest.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/images/sync-oldest.svg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/kinto-admin.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/overview.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/requirements.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/troubleshooting.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/custom-id-generator.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/first-steps.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/index.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/install.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/notifications-custom.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/permission-setups.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/permissions.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/synchronisation.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/docs/tutorials/write-plugin.rst +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/__main__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/authorization.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/config/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/contribute.json +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/authentication.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/authorization.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/memcached.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/memory.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/postgresql/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/postgresql/schema.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cache/testing.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/cors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/pyramidhook.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/renderer.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/resource.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/service.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/util.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/validators/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/validators/_colander.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice/validators/_marshmallow.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/converters/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/converters/exceptions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/converters/parameters.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/converters/schema.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/swagger.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/templates/index.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/templates/index_script_template.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/util.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/cornice_swagger/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/decorators.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/events.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/listeners/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/metrics.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/openapi.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/memory.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/postgresql/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/postgresql/schema.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/permission/testing.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/resource/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/resource/model.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/resource/schema.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/resource/viewset.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/schema.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/scripts.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/statsd.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/exceptions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/generators.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/memory.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/client.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/migrator.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/pool.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/postgresql/schema.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/testing.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/storage/utils.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/testing.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/utils.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/batch.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/heartbeat.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/hello.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/openapi.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/core/views/version.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/events.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/accounts/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/accounts/authentication.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/accounts/scripts.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/accounts/utils.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/accounts/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/README.md +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/VERSION +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/VERSION +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/asn1-EdZsLKOL.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/index-Bq62Gei8.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/index-Cs7JVwIg.css +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/javascript-qCveANmP.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/mllike-CXdrOF99.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/sql-D0XecflT.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/assets/ttcn-cfg-B9xdYoR4.js +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/build/index.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/public/help.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/admin/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/default_bucket/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/flush.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/history/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/history/listener.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/history/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/openid/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/openid/utils.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/openid/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/prometheus.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/plugins/statsd.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/schema_validation.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/admin.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/buckets.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/collections.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/contribute.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/groups.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/permissions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto/views/records.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/SOURCES.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/dependency_links.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/entry_points.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/requires.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/kinto.egg-info/top_level.txt +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/pyproject.toml +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/scripts/pull-kinto-admin.sh +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/setup.cfg +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/browser.ini +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/browser.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/listeners.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_base.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_cache_expires.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_events.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_filter.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_model.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_object.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_object_permissions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_pagination.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_partial_response.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_preconditions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_schema.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_sort.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_sync.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_views_cors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/resource/test_viewset.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/support.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_authentication.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_authorization.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_cache.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_decorators.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_deprecation.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_initialization.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_listeners.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_metrics.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_openapi.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_permission.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_schema.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_scripts.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_storage.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_storage_migrations.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_storage_pool.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_utils.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_batch.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_heartbeat.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_hello.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_openapi.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_postgresql.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/test_views_transaction.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/testapp/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/testapp/static/index.html +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/testapp/views.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/core/testplugin/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/functional.ini +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/functional.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/support.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_plugins.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_resources.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_responses_buckets.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_responses_collections.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_responses_errors.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_responses_groups.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_responses_records.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/openapi/test_validation.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/__init__.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_accounts.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_admin.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_default_bucket.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_flush.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_history.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_openid.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_prometheus.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/plugins/test_statsd.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/support.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_authorization.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_config.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_init.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_main.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_admin.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_buckets.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_collections.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_collections_cache.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_contribute.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_disable_default.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_groups.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_hello.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_metrics.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_objects_permissions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_permissions.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_records.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_schema_collection.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_schema_group.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_schema_record.py +0 -0
- {kinto-20.0.0 → kinto-20.1.0}/tests/test_views_version.py +0 -0
|
@@ -73,7 +73,7 @@ markupsafe==2.1.4
|
|
|
73
73
|
# via werkzeug
|
|
74
74
|
msgpack==1.0.7
|
|
75
75
|
# via bravado-core
|
|
76
|
-
newrelic==10.
|
|
76
|
+
newrelic==10.7.0
|
|
77
77
|
# via -r constraints.in
|
|
78
78
|
packaging==23.2
|
|
79
79
|
# via
|
|
@@ -149,7 +149,7 @@ rpds-py==0.17.1
|
|
|
149
149
|
# via
|
|
150
150
|
# jsonschema
|
|
151
151
|
# referencing
|
|
152
|
-
ruff==0.9.
|
|
152
|
+
ruff==0.9.10
|
|
153
153
|
# via -r constraints.in
|
|
154
154
|
sentry-sdk==2.8.0
|
|
155
155
|
# via -r constraints.in
|
|
@@ -456,6 +456,19 @@ Example output:
|
|
|
456
456
|
{"Pid": 19240, "Type": "root", "Timestamp": 1489067817834153984, "Severity": 4, "Hostname": "pluo", "Logger": "%", "EnvVersion": "2.0", "Fields": {"perm": "read", "userid": "ldap:john@corp.com", "message": "Permission not granted.", "uri": "/buckets/123"}}
|
|
457
457
|
|
|
458
458
|
|
|
459
|
+
Request IDs
|
|
460
|
+
:::::::::::
|
|
461
|
+
|
|
462
|
+
In order to add requests IDs to log messages, set the provided handler:
|
|
463
|
+
|
|
464
|
+
.. code-block:: ini
|
|
465
|
+
|
|
466
|
+
[handler_console]
|
|
467
|
+
class = kinto.core.StreamHandlerWithRequestID
|
|
468
|
+
|
|
469
|
+
It will read the value from the ``X-Request-Id`` request header if present, or generate a random string when the request is received otherwise.
|
|
470
|
+
|
|
471
|
+
|
|
459
472
|
.. _handling-exceptions-with-sentry:
|
|
460
473
|
|
|
461
474
|
Handling exceptions with Sentry
|
|
@@ -245,7 +245,7 @@ keys = root, kinto
|
|
|
245
245
|
keys = console
|
|
246
246
|
|
|
247
247
|
[formatters]
|
|
248
|
-
keys = color
|
|
248
|
+
keys = color, json
|
|
249
249
|
|
|
250
250
|
[logger_root]
|
|
251
251
|
level = INFO
|
|
@@ -258,10 +258,13 @@ qualname = kinto
|
|
|
258
258
|
propagate = 0
|
|
259
259
|
|
|
260
260
|
[handler_console]
|
|
261
|
-
class =
|
|
261
|
+
class = kinto.core.StreamHandlerWithRequestID
|
|
262
262
|
args = (sys.stderr,)
|
|
263
263
|
level = NOTSET
|
|
264
264
|
formatter = color
|
|
265
265
|
|
|
266
266
|
[formatter_color]
|
|
267
267
|
class = logging_color_formatter.ColorFormatter
|
|
268
|
+
|
|
269
|
+
[formatter_json]
|
|
270
|
+
class = kinto.core.JsonLogFormatter
|
|
@@ -151,6 +151,20 @@ class JsonLogFormatter(dockerflow_logging.JsonLogFormatter):
|
|
|
151
151
|
self.logger_name = logger_name
|
|
152
152
|
|
|
153
153
|
|
|
154
|
+
class StreamHandlerWithRequestID(logging.StreamHandler):
|
|
155
|
+
"""
|
|
156
|
+
A custom StreamHandler that adds the Dockerflow's `RequestIdLogFilter`.
|
|
157
|
+
|
|
158
|
+
Defining a custom handler seems to be the only way to bypass the fact that
|
|
159
|
+
``logging.config.fileConfig()`` does not load filters from ``.ini`` files.
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
def __init__(self, *args, **kwargs):
|
|
163
|
+
super().__init__(*args, **kwargs)
|
|
164
|
+
filter_ = dockerflow_logging.RequestIdLogFilter()
|
|
165
|
+
self.addFilter(filter_)
|
|
166
|
+
|
|
167
|
+
|
|
154
168
|
def get_user_info(request):
|
|
155
169
|
# Default user info (shown in hello view for example).
|
|
156
170
|
user_info = {"id": request.prefixed_userid, "principals": request.prefixed_principals}
|
|
@@ -4,9 +4,9 @@ import re
|
|
|
4
4
|
import urllib.parse
|
|
5
5
|
import warnings
|
|
6
6
|
from datetime import datetime
|
|
7
|
-
from secrets import token_hex
|
|
8
7
|
|
|
9
8
|
from dateutil import parser as dateparser
|
|
9
|
+
from dockerflow.logging import get_or_generate_request_id, request_id_context
|
|
10
10
|
from pyramid.events import ApplicationCreated, NewRequest, NewResponse
|
|
11
11
|
from pyramid.exceptions import ConfigurationError
|
|
12
12
|
from pyramid.httpexceptions import (
|
|
@@ -374,12 +374,15 @@ def setup_logging(config):
|
|
|
374
374
|
message="Invalid URL path.",
|
|
375
375
|
)
|
|
376
376
|
|
|
377
|
+
rid = get_or_generate_request_id(headers=request.headers)
|
|
378
|
+
request_id_context.set(rid)
|
|
379
|
+
|
|
377
380
|
request.log_context(
|
|
378
381
|
agent=request.headers.get("User-Agent"),
|
|
379
382
|
path=request_path,
|
|
380
383
|
method=request.method,
|
|
381
384
|
lang=request.headers.get("Accept-Language"),
|
|
382
|
-
rid=
|
|
385
|
+
rid=rid,
|
|
383
386
|
errno=0,
|
|
384
387
|
)
|
|
385
388
|
qs = dict(errors.request_GET(request))
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
import io
|
|
1
2
|
import json
|
|
2
3
|
import logging
|
|
3
4
|
import unittest
|
|
4
5
|
from unittest import mock
|
|
5
6
|
|
|
7
|
+
from dockerflow.logging import request_id_context
|
|
6
8
|
from pyramid import testing
|
|
7
9
|
|
|
8
|
-
from kinto.core import
|
|
10
|
+
from kinto.core import (
|
|
11
|
+
DEFAULT_SETTINGS,
|
|
12
|
+
JsonLogFormatter,
|
|
13
|
+
StreamHandlerWithRequestID,
|
|
14
|
+
initialization,
|
|
15
|
+
)
|
|
9
16
|
|
|
10
17
|
from .support import BaseWebTest
|
|
11
18
|
|
|
@@ -162,3 +169,20 @@ class JsonFormatterTest(unittest.TestCase):
|
|
|
162
169
|
self.assertEqual(logged["Type"], "app.log")
|
|
163
170
|
# See https://github.com/mozilla/mozilla-cloud-services-logger/issues/2
|
|
164
171
|
self.assertEqual(logged["Fields"]["msg"], "coucou")
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class RequestIdFilter(BaseWebTest, unittest.TestCase):
|
|
175
|
+
def test_stream_logs_rid_field(self):
|
|
176
|
+
log_buffer = io.StringIO() # In-memory log capture
|
|
177
|
+
stream_handler = StreamHandlerWithRequestID(log_buffer)
|
|
178
|
+
stream_handler.setFormatter(JsonLogFormatter())
|
|
179
|
+
logger = logging.getLogger(__name__)
|
|
180
|
+
logger.addHandler(stream_handler)
|
|
181
|
+
|
|
182
|
+
request_id_context.set("abc") # As done in `kinto.core.initalization`.
|
|
183
|
+
logger.error("Some message")
|
|
184
|
+
|
|
185
|
+
captured = log_buffer.getvalue()
|
|
186
|
+
|
|
187
|
+
logged = json.loads(captured)
|
|
188
|
+
self.assertEqual(logged["Fields"]["rid"], "abc")
|
|
@@ -245,7 +245,7 @@ keys = root, kinto
|
|
|
245
245
|
keys = console
|
|
246
246
|
|
|
247
247
|
[formatters]
|
|
248
|
-
keys = color
|
|
248
|
+
keys = color, json
|
|
249
249
|
|
|
250
250
|
[logger_root]
|
|
251
251
|
level = INFO
|
|
@@ -258,10 +258,13 @@ qualname = kinto
|
|
|
258
258
|
propagate = 0
|
|
259
259
|
|
|
260
260
|
[handler_console]
|
|
261
|
-
class =
|
|
261
|
+
class = kinto.core.StreamHandlerWithRequestID
|
|
262
262
|
args = (sys.stderr,)
|
|
263
263
|
level = NOTSET
|
|
264
264
|
formatter = color
|
|
265
265
|
|
|
266
266
|
[formatter_color]
|
|
267
267
|
class = logging_color_formatter.ColorFormatter
|
|
268
|
+
|
|
269
|
+
[formatter_json]
|
|
270
|
+
class = kinto.core.JsonLogFormatter
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|