kinto 19.2.0__tar.gz → 19.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kinto might be problematic. Click here for more details.

Files changed (393) hide show
  1. {kinto-19.2.0 → kinto-19.3.0}/.github/workflows/test.yml +1 -3
  2. {kinto-19.2.0 → kinto-19.3.0}/Dockerfile +2 -2
  3. {kinto-19.2.0/kinto.egg-info → kinto-19.3.0}/PKG-INFO +3 -3
  4. {kinto-19.2.0 → kinto-19.3.0}/README.rst +1 -1
  5. {kinto-19.2.0 → kinto-19.3.0}/constraints.txt +11 -9
  6. {kinto-19.2.0 → kinto-19.3.0}/docs/conf.py +0 -3
  7. {kinto-19.2.0 → kinto-19.3.0}/docs/requirements.txt +3 -3
  8. {kinto-19.2.0 → kinto-19.3.0}/kinto/__init__.py +1 -0
  9. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/__init__.py +1 -0
  10. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/initialization.py +57 -7
  11. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/metrics.py +37 -1
  12. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/utils.py +8 -0
  13. kinto-19.3.0/kinto/plugins/admin/VERSION +1 -0
  14. kinto-19.3.0/kinto/plugins/admin/build/VERSION +1 -0
  15. kinto-19.3.0/kinto/plugins/admin/build/assets/index-BKIg2XW8.js +165 -0
  16. kinto-19.2.0/kinto/plugins/admin/build/assets/index-vylaZGUr.css → kinto-19.3.0/kinto/plugins/admin/build/assets/index-D8oiN37x.css +1 -1
  17. kinto-19.2.0/kinto/plugins/admin/build/assets/javascript-upQ8KtFH.js → kinto-19.3.0/kinto/plugins/admin/build/assets/javascript-iSgyE4tI.js +1 -1
  18. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/build/index.html +2 -2
  19. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/prometheus.py +56 -20
  20. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/statsd.py +13 -1
  21. {kinto-19.2.0 → kinto-19.3.0/kinto.egg-info}/PKG-INFO +3 -3
  22. {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/SOURCES.txt +13 -12
  23. {kinto-19.2.0 → kinto-19.3.0}/pyproject.toml +1 -1
  24. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_views.py +4 -5
  25. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_initialization.py +53 -13
  26. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_prometheus.py +31 -9
  27. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_statsd.py +15 -0
  28. kinto-19.3.0/tests/test_views_metrics.py +45 -0
  29. kinto-19.2.0/kinto/plugins/admin/VERSION +0 -1
  30. kinto-19.2.0/kinto/plugins/admin/build/VERSION +0 -1
  31. kinto-19.2.0/kinto/plugins/admin/build/assets/index-iVTdxamX.js +0 -175
  32. {kinto-19.2.0 → kinto-19.3.0}/.dockerignore +0 -0
  33. {kinto-19.2.0 → kinto-19.3.0}/.github/CODE_OF_CONDUCT.md +0 -0
  34. {kinto-19.2.0 → kinto-19.3.0}/.github/CONTRIBUTING.md +0 -0
  35. {kinto-19.2.0 → kinto-19.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  36. {kinto-19.2.0 → kinto-19.3.0}/.github/dependabot.yml +0 -0
  37. {kinto-19.2.0 → kinto-19.3.0}/.github/release.yml +0 -0
  38. {kinto-19.2.0 → kinto-19.3.0}/.github/workflows/labels.yaml +0 -0
  39. {kinto-19.2.0 → kinto-19.3.0}/.github/workflows/publish.yml +0 -0
  40. {kinto-19.2.0 → kinto-19.3.0}/.gitignore +0 -0
  41. {kinto-19.2.0 → kinto-19.3.0}/CHANGELOG.rst +0 -0
  42. {kinto-19.2.0 → kinto-19.3.0}/CONTRIBUTORS.rst +0 -0
  43. {kinto-19.2.0 → kinto-19.3.0}/LICENSE +0 -0
  44. {kinto-19.2.0 → kinto-19.3.0}/Makefile +0 -0
  45. {kinto-19.2.0 → kinto-19.3.0}/SECURITY.md +0 -0
  46. {kinto-19.2.0 → kinto-19.3.0}/SUPPORT.md +0 -0
  47. {kinto-19.2.0 → kinto-19.3.0}/app.wsgi +0 -0
  48. {kinto-19.2.0 → kinto-19.3.0}/constraints.in +0 -0
  49. {kinto-19.2.0 → kinto-19.3.0}/contribute.json +0 -0
  50. {kinto-19.2.0 → kinto-19.3.0}/docker-compose.yml +0 -0
  51. {kinto-19.2.0 → kinto-19.3.0}/docs/_static/piwik.js +0 -0
  52. {kinto-19.2.0 → kinto-19.3.0}/docs/_static/theme_overrides.css +0 -0
  53. {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/footer.html +0 -0
  54. {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/indexcontent.html +0 -0
  55. {kinto-19.2.0 → kinto-19.3.0}/docs/_templates/layout.html +0 -0
  56. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-delete-list.rst +0 -0
  57. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-delete-object.rst +0 -0
  58. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-get-list.rst +0 -0
  59. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-get-object.rst +0 -0
  60. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-head-list.rst +0 -0
  61. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-patch-object.rst +0 -0
  62. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-post-list.rst +0 -0
  63. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_details-put-object.rst +0 -0
  64. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-delete-list.rst +0 -0
  65. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-delete-object.rst +0 -0
  66. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-get-list.rst +0 -0
  67. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-get-object.rst +0 -0
  68. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-patch-object.rst +0 -0
  69. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-post-list.rst +0 -0
  70. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/_status-put-object.rst +0 -0
  71. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/accounts.rst +0 -0
  72. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/admin.rst +0 -0
  73. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/authentication.rst +0 -0
  74. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/backoff.rst +0 -0
  75. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/batch.rst +0 -0
  76. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/buckets.rst +0 -0
  77. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/collections.rst +0 -0
  78. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/deprecation.rst +0 -0
  79. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/errors.rst +0 -0
  80. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/filtering.rst +0 -0
  81. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/flush.rst +0 -0
  82. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/groups.rst +0 -0
  83. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/history.rst +0 -0
  84. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/index.rst +0 -0
  85. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/openapi.rst +0 -0
  86. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/openid.rst +0 -0
  87. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/pagination.rst +0 -0
  88. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/permissions.rst +0 -0
  89. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/quotas.rst +0 -0
  90. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/records.rst +0 -0
  91. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/selecting_fields.rst +0 -0
  92. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/sorting.rst +0 -0
  93. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/timestamps.rst +0 -0
  94. {kinto-19.2.0 → kinto-19.3.0}/docs/api/1.x/utilities.rst +0 -0
  95. {kinto-19.2.0 → kinto-19.3.0}/docs/api/index.rst +0 -0
  96. {kinto-19.2.0 → kinto-19.3.0}/docs/api/versioning.rst +0 -0
  97. {kinto-19.2.0 → kinto-19.3.0}/docs/changelog.rst +0 -0
  98. {kinto-19.2.0 → kinto-19.3.0}/docs/commandline.rst +0 -0
  99. {kinto-19.2.0 → kinto-19.3.0}/docs/community.rst +0 -0
  100. {kinto-19.2.0 → kinto-19.3.0}/docs/concepts.rst +0 -0
  101. {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/good-practices.rst +0 -0
  102. {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/index.rst +0 -0
  103. {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/production.rst +0 -0
  104. {kinto-19.2.0 → kinto-19.3.0}/docs/configuration/settings.rst +0 -0
  105. {kinto-19.2.0 → kinto-19.3.0}/docs/core/_static/theme_overrides.css +0 -0
  106. {kinto-19.2.0 → kinto-19.3.0}/docs/core/api.rst +0 -0
  107. {kinto-19.2.0 → kinto-19.3.0}/docs/core/cache.rst +0 -0
  108. {kinto-19.2.0 → kinto-19.3.0}/docs/core/decorators.rst +0 -0
  109. {kinto-19.2.0 → kinto-19.3.0}/docs/core/errors.rst +0 -0
  110. {kinto-19.2.0 → kinto-19.3.0}/docs/core/glossary.rst +0 -0
  111. {kinto-19.2.0 → kinto-19.3.0}/docs/core/images/cliquet-base.png +0 -0
  112. {kinto-19.2.0 → kinto-19.3.0}/docs/core/images/cliquet-mozilla.png +0 -0
  113. {kinto-19.2.0 → kinto-19.3.0}/docs/core/index.rst +0 -0
  114. {kinto-19.2.0 → kinto-19.3.0}/docs/core/notifications.rst +0 -0
  115. {kinto-19.2.0 → kinto-19.3.0}/docs/core/permission.rst +0 -0
  116. {kinto-19.2.0 → kinto-19.3.0}/docs/core/quickstart.rst +0 -0
  117. {kinto-19.2.0 → kinto-19.3.0}/docs/core/rationale.rst +0 -0
  118. {kinto-19.2.0 → kinto-19.3.0}/docs/core/resource.rst +0 -0
  119. {kinto-19.2.0 → kinto-19.3.0}/docs/core/storage.rst +0 -0
  120. {kinto-19.2.0 → kinto-19.3.0}/docs/core/testing.rst +0 -0
  121. {kinto-19.2.0 → kinto-19.3.0}/docs/core/utils.rst +0 -0
  122. {kinto-19.2.0 → kinto-19.3.0}/docs/core/viewsets.rst +0 -0
  123. {kinto-19.2.0 → kinto-19.3.0}/docs/faq.rst +0 -0
  124. {kinto-19.2.0 → kinto-19.3.0}/docs/images/alwaysdata-button.svg +0 -0
  125. {kinto-19.2.0 → kinto-19.3.0}/docs/images/architecture.svg +0 -0
  126. {kinto-19.2.0 → kinto-19.3.0}/docs/images/color-formatter.png +0 -0
  127. {kinto-19.2.0 → kinto-19.3.0}/docs/images/concepts-general.png +0 -0
  128. {kinto-19.2.0 → kinto-19.3.0}/docs/images/concepts-permissions.png +0 -0
  129. {kinto-19.2.0 → kinto-19.3.0}/docs/images/heroku-button.png +0 -0
  130. {kinto-19.2.0 → kinto-19.3.0}/docs/images/kinto-logo.png +0 -0
  131. {kinto-19.2.0 → kinto-19.3.0}/docs/images/kinto-logo.svg +0 -0
  132. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-admin.svg +0 -0
  133. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-attachment.svg +0 -0
  134. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-community.svg +0 -0
  135. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-demos.svg +0 -0
  136. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-history.svg +0 -0
  137. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-indexing.svg +0 -0
  138. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-javascript.svg +0 -0
  139. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-jsonschema.svg +0 -0
  140. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-livesync.svg +0 -0
  141. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-multiapps.svg +0 -0
  142. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-offline.svg +0 -0
  143. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-permissions.svg +0 -0
  144. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-python.svg +0 -0
  145. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-quotas.svg +0 -0
  146. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-selfhostable.svg +0 -0
  147. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-signature.svg +0 -0
  148. {kinto-19.2.0 → kinto-19.3.0}/docs/images/logo-synchronisation.svg +0 -0
  149. {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-deployonce-selfhost.png +0 -0
  150. {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-features.png +0 -0
  151. {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-synchronisation.png +0 -0
  152. {kinto-19.2.0 → kinto-19.3.0}/docs/images/overview-use-cases.png +0 -0
  153. {kinto-19.2.0 → kinto-19.3.0}/docs/images/scalingo-button.svg +0 -0
  154. {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
  155. {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
  156. {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
  157. {kinto-19.2.0 → kinto-19.3.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
  158. {kinto-19.2.0 → kinto-19.3.0}/docs/images/sequence-storage.png +0 -0
  159. {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-both.svg +0 -0
  160. {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-newest.svg +0 -0
  161. {kinto-19.2.0 → kinto-19.3.0}/docs/images/sync-oldest.svg +0 -0
  162. {kinto-19.2.0 → kinto-19.3.0}/docs/index.rst +0 -0
  163. {kinto-19.2.0 → kinto-19.3.0}/docs/kinto-admin.rst +0 -0
  164. {kinto-19.2.0 → kinto-19.3.0}/docs/overview.rst +0 -0
  165. {kinto-19.2.0 → kinto-19.3.0}/docs/troubleshooting.rst +0 -0
  166. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/app-examples.rst +0 -0
  167. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/authentication-github.rst +0 -0
  168. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/client-side-encryption.rst +0 -0
  169. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/custom-id-generator.rst +0 -0
  170. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/first-steps.rst +0 -0
  171. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/index.rst +0 -0
  172. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/install.rst +0 -0
  173. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/notifications-custom.rst +0 -0
  174. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/notifications-websockets.rst +0 -0
  175. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/permission-setups.rst +0 -0
  176. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/permissions.rst +0 -0
  177. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/synchronisation.rst +0 -0
  178. {kinto-19.2.0 → kinto-19.3.0}/docs/tutorials/write-plugin.rst +0 -0
  179. {kinto-19.2.0 → kinto-19.3.0}/kinto/__main__.py +0 -0
  180. {kinto-19.2.0 → kinto-19.3.0}/kinto/authorization.py +0 -0
  181. {kinto-19.2.0 → kinto-19.3.0}/kinto/config/__init__.py +0 -0
  182. {kinto-19.2.0 → kinto-19.3.0}/kinto/config/kinto.tpl +0 -0
  183. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/authentication.py +0 -0
  184. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/authorization.py +0 -0
  185. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/__init__.py +0 -0
  186. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/memcached.py +0 -0
  187. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/memory.py +0 -0
  188. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/postgresql/__init__.py +0 -0
  189. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/postgresql/schema.sql +0 -0
  190. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/cache/testing.py +0 -0
  191. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/decorators.py +0 -0
  192. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/errors.py +0 -0
  193. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/events.py +0 -0
  194. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/listeners/__init__.py +0 -0
  195. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/openapi.py +0 -0
  196. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/__init__.py +0 -0
  197. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/memory.py +0 -0
  198. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/__init__.py +0 -0
  199. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
  200. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/postgresql/schema.sql +0 -0
  201. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/permission/testing.py +0 -0
  202. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/__init__.py +0 -0
  203. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/model.py +0 -0
  204. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/schema.py +0 -0
  205. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/resource/viewset.py +0 -0
  206. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/schema.py +0 -0
  207. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/scripts.py +0 -0
  208. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/statsd.py +0 -0
  209. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/__init__.py +0 -0
  210. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/exceptions.py +0 -0
  211. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/generators.py +0 -0
  212. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/memory.py +0 -0
  213. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/__init__.py +0 -0
  214. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/client.py +0 -0
  215. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
  216. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
  217. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
  218. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
  219. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
  220. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
  221. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
  222. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
  223. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
  224. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
  225. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
  226. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
  227. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
  228. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
  229. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
  230. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
  231. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
  232. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
  233. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
  234. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
  235. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
  236. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/migrator.py +0 -0
  237. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/pool.py +0 -0
  238. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/postgresql/schema.sql +0 -0
  239. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/testing.py +0 -0
  240. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/storage/utils.py +0 -0
  241. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/testing.py +0 -0
  242. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/__init__.py +0 -0
  243. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/batch.py +0 -0
  244. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/errors.py +0 -0
  245. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/heartbeat.py +0 -0
  246. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/hello.py +0 -0
  247. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/openapi.py +0 -0
  248. {kinto-19.2.0 → kinto-19.3.0}/kinto/core/views/version.py +0 -0
  249. {kinto-19.2.0 → kinto-19.3.0}/kinto/events.py +0 -0
  250. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/__init__.py +0 -0
  251. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/__init__.py +0 -0
  252. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/authentication.py +0 -0
  253. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/mails.py +0 -0
  254. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/scripts.py +0 -0
  255. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/utils.py +0 -0
  256. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/views/__init__.py +0 -0
  257. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/accounts/views/validation.py +0 -0
  258. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/README.md +0 -0
  259. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/__init__.py +0 -0
  260. /kinto-19.2.0/kinto/plugins/admin/build/assets/asn1-8gHclKtu.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/asn1-CGOzndHr.js +0 -0
  261. /kinto-19.2.0/kinto/plugins/admin/build/assets/clojure-plf_rynZ.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
  262. /kinto-19.2.0/kinto/plugins/admin/build/assets/css-tpsEXL3H.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
  263. /kinto-19.2.0/kinto/plugins/admin/build/assets/logo-FQUYikj1.png → /kinto-19.3.0/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
  264. /kinto-19.2.0/kinto/plugins/admin/build/assets/mllike-ilm95jrV.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/mllike-C_8OmSiT.js +0 -0
  265. /kinto-19.2.0/kinto/plugins/admin/build/assets/python-xljIYvii.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
  266. /kinto-19.2.0/kinto/plugins/admin/build/assets/rpm-cddeyEgF.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
  267. /kinto-19.2.0/kinto/plugins/admin/build/assets/sql-3IaSLchm.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/sql-C4g8LzGK.js +0 -0
  268. /kinto-19.2.0/kinto/plugins/admin/build/assets/ttcn-cfg-9oMIyPXS.js → /kinto-19.3.0/kinto/plugins/admin/build/assets/ttcn-cfg-BIkV9KBc.js +0 -0
  269. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/public/help.html +0 -0
  270. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/admin/views.py +0 -0
  271. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/default_bucket/__init__.py +0 -0
  272. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/flush.py +0 -0
  273. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/__init__.py +0 -0
  274. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/listener.py +0 -0
  275. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/history/views.py +0 -0
  276. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/__init__.py +0 -0
  277. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/utils.py +0 -0
  278. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/openid/views.py +0 -0
  279. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/__init__.py +0 -0
  280. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/listener.py +0 -0
  281. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/scripts.py +0 -0
  282. {kinto-19.2.0 → kinto-19.3.0}/kinto/plugins/quotas/utils.py +0 -0
  283. {kinto-19.2.0 → kinto-19.3.0}/kinto/schema_validation.py +0 -0
  284. {kinto-19.2.0 → kinto-19.3.0}/kinto/scripts.py +0 -0
  285. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/__init__.py +0 -0
  286. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/admin.py +0 -0
  287. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/buckets.py +0 -0
  288. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/collections.py +0 -0
  289. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/contribute.py +0 -0
  290. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/groups.py +0 -0
  291. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/permissions.py +0 -0
  292. {kinto-19.2.0 → kinto-19.3.0}/kinto/views/records.py +0 -0
  293. {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/dependency_links.txt +0 -0
  294. {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/entry_points.txt +0 -0
  295. {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/requires.txt +0 -0
  296. {kinto-19.2.0 → kinto-19.3.0}/kinto.egg-info/top_level.txt +0 -0
  297. {kinto-19.2.0 → kinto-19.3.0}/scripts/pull-kinto-admin.sh +0 -0
  298. {kinto-19.2.0 → kinto-19.3.0}/setup.cfg +0 -0
  299. {kinto-19.2.0 → kinto-19.3.0}/tests/__init__.py +0 -0
  300. {kinto-19.2.0 → kinto-19.3.0}/tests/browser.ini +0 -0
  301. {kinto-19.2.0 → kinto-19.3.0}/tests/browser.py +0 -0
  302. {kinto-19.2.0 → kinto-19.3.0}/tests/core/__init__.py +0 -0
  303. {kinto-19.2.0 → kinto-19.3.0}/tests/core/listeners.py +0 -0
  304. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/__init__.py +0 -0
  305. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_base.py +0 -0
  306. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_cache_expires.py +0 -0
  307. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_events.py +0 -0
  308. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_filter.py +0 -0
  309. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_model.py +0 -0
  310. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_object.py +0 -0
  311. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_object_permissions.py +0 -0
  312. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_pagination.py +0 -0
  313. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_partial_response.py +0 -0
  314. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_preconditions.py +0 -0
  315. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_schema.py +0 -0
  316. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_sort.py +0 -0
  317. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_sync.py +0 -0
  318. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_views_cors.py +0 -0
  319. {kinto-19.2.0 → kinto-19.3.0}/tests/core/resource/test_viewset.py +0 -0
  320. {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
  321. {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
  322. {kinto-19.2.0 → kinto-19.3.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
  323. {kinto-19.2.0 → kinto-19.3.0}/tests/core/support.py +0 -0
  324. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_authentication.py +0 -0
  325. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_authorization.py +0 -0
  326. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_cache.py +0 -0
  327. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_decorators.py +0 -0
  328. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_deprecation.py +0 -0
  329. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_errors.py +0 -0
  330. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_listeners.py +0 -0
  331. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_logging.py +0 -0
  332. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_metrics.py +0 -0
  333. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_openapi.py +0 -0
  334. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_permission.py +0 -0
  335. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_schema.py +0 -0
  336. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_scripts.py +0 -0
  337. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage.py +0 -0
  338. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage_migrations.py +0 -0
  339. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_storage_pool.py +0 -0
  340. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_utils.py +0 -0
  341. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_batch.py +0 -0
  342. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_errors.py +0 -0
  343. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_heartbeat.py +0 -0
  344. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_hello.py +0 -0
  345. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_openapi.py +0 -0
  346. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_postgresql.py +0 -0
  347. {kinto-19.2.0 → kinto-19.3.0}/tests/core/test_views_transaction.py +0 -0
  348. {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/__init__.py +0 -0
  349. {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/static/index.html +0 -0
  350. {kinto-19.2.0 → kinto-19.3.0}/tests/core/testapp/views.py +0 -0
  351. {kinto-19.2.0 → kinto-19.3.0}/tests/core/testplugin/__init__.py +0 -0
  352. {kinto-19.2.0 → kinto-19.3.0}/tests/functional.ini +0 -0
  353. {kinto-19.2.0 → kinto-19.3.0}/tests/functional.py +0 -0
  354. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/__init__.py +0 -0
  355. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/support.py +0 -0
  356. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_plugins.py +0 -0
  357. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_resources.py +0 -0
  358. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_buckets.py +0 -0
  359. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_collections.py +0 -0
  360. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_errors.py +0 -0
  361. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_groups.py +0 -0
  362. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_responses_records.py +0 -0
  363. {kinto-19.2.0 → kinto-19.3.0}/tests/openapi/test_validation.py +0 -0
  364. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/__init__.py +0 -0
  365. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_accounts.py +0 -0
  366. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_admin.py +0 -0
  367. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_default_bucket.py +0 -0
  368. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_flush.py +0 -0
  369. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_history.py +0 -0
  370. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_openid.py +0 -0
  371. {kinto-19.2.0 → kinto-19.3.0}/tests/plugins/test_quotas.py +0 -0
  372. {kinto-19.2.0 → kinto-19.3.0}/tests/support.py +0 -0
  373. {kinto-19.2.0 → kinto-19.3.0}/tests/test_authorization.py +0 -0
  374. {kinto-19.2.0 → kinto-19.3.0}/tests/test_config.py +0 -0
  375. {kinto-19.2.0 → kinto-19.3.0}/tests/test_configuration/test.ini +0 -0
  376. {kinto-19.2.0 → kinto-19.3.0}/tests/test_init.py +0 -0
  377. {kinto-19.2.0 → kinto-19.3.0}/tests/test_main.py +0 -0
  378. {kinto-19.2.0 → kinto-19.3.0}/tests/test_scripts.py +0 -0
  379. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_admin.py +0 -0
  380. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_buckets.py +0 -0
  381. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_collections.py +0 -0
  382. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_collections_cache.py +0 -0
  383. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_contribute.py +0 -0
  384. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_disable_default.py +0 -0
  385. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_groups.py +0 -0
  386. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_hello.py +0 -0
  387. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_objects_permissions.py +0 -0
  388. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_permissions.py +0 -0
  389. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_records.py +0 -0
  390. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_collection.py +0 -0
  391. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_group.py +0 -0
  392. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_schema_record.py +0 -0
  393. {kinto-19.2.0 → kinto-19.3.0}/tests/test_views_version.py +0 -0
@@ -32,10 +32,8 @@ jobs:
32
32
  runs-on: ubuntu-latest
33
33
  strategy:
34
34
  matrix:
35
- pyenv: [py38, py39, py310, py311, py312, py312-raw]
35
+ pyenv: [py39, py310, py311, py312, py312-raw]
36
36
  include:
37
- - pyenv: py38
38
- python-version: "3.8"
39
37
  - pyenv: py39
40
38
  python-version: "3.9"
41
39
  - pyenv: py310
@@ -1,5 +1,5 @@
1
1
  # Mozilla Kinto server
2
- FROM python:3.10-bullseye as python-builder
2
+ FROM python:3.10-bullseye AS python-builder
3
3
  RUN python -m venv /opt/venv
4
4
  ARG KINTO_VERSION=1
5
5
  ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_KINTO=${KINTO_VERSION} \
@@ -36,4 +36,4 @@ WORKDIR /app
36
36
  USER app
37
37
 
38
38
  # Run database migrations and start the kinto server
39
- CMD kinto migrate --ini $KINTO_INI && kinto start --ini $KINTO_INI --port $PORT
39
+ CMD ["sh", "-c", "kinto migrate --ini $KINTO_INI && kinto start --ini $KINTO_INI --port $PORT"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kinto
3
- Version: 19.2.0
3
+ Version: 19.3.0
4
4
  Summary: Kinto Web Service - Store, Sync, Share, and Self-Host.
5
5
  Author-email: Mozilla Services <developers@kinto-storage.org>
6
6
  License: Copyright 2012 - Mozilla Foundation
@@ -21,10 +21,10 @@ Project-URL: Repository, https://github.com/Kinto/kinto
21
21
  Keywords: web,sync,json,storage,services
22
22
  Classifier: Programming Language :: Python
23
23
  Classifier: Programming Language :: Python :: 3
24
- Classifier: Programming Language :: Python :: 3.8
25
24
  Classifier: Programming Language :: Python :: 3.9
26
25
  Classifier: Programming Language :: Python :: 3.10
27
26
  Classifier: Programming Language :: Python :: 3.11
27
+ Classifier: Programming Language :: Python :: 3.12
28
28
  Classifier: Programming Language :: Python :: Implementation :: CPython
29
29
  Classifier: Topic :: Internet :: WWW/HTTP
30
30
  Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
@@ -114,7 +114,7 @@ Kinto is a minimalist JSON storage service with synchronisation and sharing abil
114
114
  Requirements
115
115
  ------------
116
116
 
117
- * **Python**: 3.8+
117
+ * **Python**: 3.9+
118
118
  * **Backends**: In-memory (development), PostgreSQL 9.5+ (production)
119
119
 
120
120
  Contributors
@@ -38,5 +38,5 @@ Kinto is a minimalist JSON storage service with synchronisation and sharing abil
38
38
  Requirements
39
39
  ------------
40
40
 
41
- * **Python**: 3.8+
41
+ * **Python**: 3.9+
42
42
  * **Backends**: In-memory (development), PostgreSQL 9.5+ (production)
@@ -44,8 +44,10 @@ execnet==2.0.2
44
44
  # via pytest-cache
45
45
  fqdn==1.5.1
46
46
  # via jsonschema
47
- greenlet==3.0.3
48
- # via playwright
47
+ greenlet==3.1.1
48
+ # via
49
+ # playwright
50
+ # sqlalchemy
49
51
  hupper==1.12
50
52
  # via pyramid
51
53
  idna==3.7
@@ -79,7 +81,7 @@ markupsafe==2.1.4
79
81
  # via werkzeug
80
82
  msgpack==1.0.7
81
83
  # via bravado-core
82
- newrelic==10.1.0
84
+ newrelic==10.2.0
83
85
  # via -r constraints.in
84
86
  packaging==23.2
85
87
  # via
@@ -94,13 +96,13 @@ plaster==1.1.2
94
96
  # pyramid
95
97
  plaster-pastedeploy==1.0.1
96
98
  # via pyramid
97
- playwright==1.47.0
99
+ playwright==1.48.0
98
100
  # via -r constraints.in
99
101
  pluggy==1.5.0
100
102
  # via pytest
101
103
  prometheus-client==0.21.0
102
104
  # via -r constraints.in
103
- psycopg2==2.9.9
105
+ psycopg2==2.9.10
104
106
  # via -r constraints.in
105
107
  pyee==12.0.0
106
108
  # via playwright
@@ -161,7 +163,7 @@ rpds-py==0.17.1
161
163
  # via
162
164
  # jsonschema
163
165
  # referencing
164
- ruff==0.6.9
166
+ ruff==0.7.1
165
167
  # via -r constraints.in
166
168
  sentry-sdk==2.8.0
167
169
  # via -r constraints.in
@@ -175,7 +177,7 @@ six==1.16.0
175
177
  # rfc3339-validator
176
178
  soupsieve==2.5
177
179
  # via beautifulsoup4
178
- sqlalchemy==2.0.35
180
+ sqlalchemy==2.0.36
179
181
  # via
180
182
  # -r constraints.in
181
183
  # sentry-sdk
@@ -212,7 +214,7 @@ venusian==3.1.0
212
214
  # via
213
215
  # cornice
214
216
  # pyramid
215
- waitress==3.0.0
217
+ waitress==3.0.1
216
218
  # via
217
219
  # -r constraints.in
218
220
  # webtest
@@ -224,7 +226,7 @@ webob==1.8.8
224
226
  # webtest
225
227
  webtest==3.0.0
226
228
  # via -r constraints.in
227
- werkzeug==3.0.4
229
+ werkzeug==3.0.6
228
230
  # via -r constraints.in
229
231
  zope-deprecation==5.0
230
232
  # via pyramid
@@ -24,10 +24,7 @@ __HERE__ = os.path.dirname(os.path.abspath(__file__))
24
24
  on_rtd = os.environ.get("READTHEDOCS", None) == "True"
25
25
 
26
26
  if not on_rtd: # only import and set the theme if we're building docs locally
27
- import sphinx_rtd_theme
28
-
29
27
  html_theme = "sphinx_rtd_theme"
30
- html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
31
28
 
32
29
  # otherwise, readthedocs.io uses their theme by default, so no need to specify
33
30
  # it
@@ -1,5 +1,5 @@
1
- Sphinx==7.4.4
2
- sphinx_rtd_theme==2.0.0
1
+ Sphinx==8.1.3
2
+ sphinx_rtd_theme==3.0.1
3
3
  docutils==0.20.1
4
4
  sphinxcontrib-httpdomain==1.8.1
5
5
  sphinx-github-changelog==1.4.0
@@ -9,4 +9,4 @@ webtest==3.0.1
9
9
  cornice==6.1.0
10
10
  pyramid==2.0.2
11
11
  python-rapidjson==1.20
12
- SQLAlchemy==2.0.35
12
+ SQLAlchemy==2.0.36
@@ -38,6 +38,7 @@ DEFAULT_SETTINGS = {
38
38
  "record_id_generator": "kinto.views.RelaxedUUID",
39
39
  "project_name": "kinto",
40
40
  "admin_assets_path": None,
41
+ "metrics_matchdict_fields": ["bucket_id", "collection_id", "group_id", "record_id"],
41
42
  }
42
43
 
43
44
 
@@ -96,6 +96,7 @@ DEFAULT_SETTINGS = {
96
96
  "statsd_backend": "kinto.core.statsd",
97
97
  "statsd_prefix": "kinto.core",
98
98
  "statsd_url": None,
99
+ "metrics_matchdict_fields": [],
99
100
  "storage_backend": "",
100
101
  "storage_url": "",
101
102
  "storage_max_fetch_size": 10000,
@@ -431,6 +431,9 @@ def setup_logging(config):
431
431
  def setup_metrics(config):
432
432
  settings = config.get_settings()
433
433
 
434
+ # Register a no-op metrics service by default.
435
+ config.registry.registerUtility(metrics.NoOpMetricsService(), metrics.IMetricsService)
436
+
434
437
  # This does not fully respect the Pyramid/ZCA patterns, but the rest of Kinto uses
435
438
  # `registry.storage`, `registry.cache`, etc. Consistency seems more important.
436
439
  config.registry.__class__.metrics = property(
@@ -449,9 +452,6 @@ def setup_metrics(config):
449
452
  def on_app_created(event):
450
453
  config = event.app
451
454
  metrics_service = config.registry.metrics
452
- if not metrics_service:
453
- logger.warning("No metrics service registered.")
454
- return
455
455
 
456
456
  metrics.watch_execution_time(metrics_service, config.registry.cache, prefix="backend")
457
457
  metrics.watch_execution_time(metrics_service, config.registry.storage, prefix="backend")
@@ -471,15 +471,65 @@ def setup_metrics(config):
471
471
  def on_new_response(event):
472
472
  request = event.request
473
473
  metrics_service = config.registry.metrics
474
- if not metrics_service:
475
- return
474
+
475
+ try:
476
+ endpoint = utils.strip_uri_prefix(request.path)
477
+ except UnicodeDecodeError as e:
478
+ # This `on_new_response` callback is also called when a HTTP 400
479
+ # is returned because of an invalid UTF-8 path. We still want metrics.
480
+ endpoint = str(e)
476
481
 
477
482
  # Count unique users.
478
483
  user_id = request.prefixed_userid
479
484
  if user_id:
480
485
  # Get rid of colons in metric packet (see #1282).
481
- user_id = user_id.replace(":", ".")
482
- metrics_service.count("users", unique=user_id)
486
+ auth, user_id = user_id.split(":")
487
+ metrics_service.count("users", unique=[("auth", auth), ("userid", user_id)])
488
+
489
+ # Add extra labels to metrics, based on fields extracted from the request matchdict.
490
+ metrics_matchdict_fields = aslist(settings["metrics_matchdict_fields"])
491
+ # Turn the `id` field of object endpoints into `{resource}_id` (eg. `mushroom_id`, `bucket_id`)
492
+ enhanced_matchdict = dict(request.matchdict or {})
493
+ try:
494
+ enhanced_matchdict[request.current_resource_name + "_id"] = enhanced_matchdict.get(
495
+ "id", ""
496
+ )
497
+ except AttributeError:
498
+ # Not on a resource.
499
+ pass
500
+ metrics_matchdict_labels = [
501
+ (field, enhanced_matchdict.get(field, "")) for field in metrics_matchdict_fields
502
+ ]
503
+
504
+ # Count served requests.
505
+ metrics_service.count(
506
+ "request_summary",
507
+ unique=[
508
+ ("method", request.method.lower()),
509
+ ("endpoint", endpoint),
510
+ ("status", str(request.response.status_code)),
511
+ ]
512
+ + metrics_matchdict_labels,
513
+ )
514
+
515
+ try:
516
+ current = utils.msec_time()
517
+ duration = current - request._received_at
518
+ metrics_service.observe(
519
+ "request_duration",
520
+ duration,
521
+ labels=[("endpoint", endpoint)] + metrics_matchdict_labels,
522
+ )
523
+ except AttributeError: # pragma: no cover
524
+ # Logging was not setup in this Kinto app (unlikely but possible)
525
+ pass
526
+
527
+ # Observe response size.
528
+ metrics_service.observe(
529
+ "request_size",
530
+ len(request.response.body or b""),
531
+ labels=[("endpoint", endpoint)] + metrics_matchdict_labels,
532
+ )
483
533
 
484
534
  # Count authentication verifications.
485
535
  if hasattr(request, "authn_type"):
@@ -1,6 +1,6 @@
1
1
  import types
2
2
 
3
- from zope.interface import Interface
3
+ from zope.interface import Interface, implementer
4
4
 
5
5
  from kinto.core import utils
6
6
 
@@ -16,13 +16,47 @@ class IMetricsService(Interface):
16
16
  Watch execution time.
17
17
  """
18
18
 
19
+ def observe(self, key, value, labels=[]):
20
+ """
21
+ Observe a give `value` for the specified `key`.
22
+ """
23
+
19
24
  def count(key, count=1, unique=None):
20
25
  """
21
26
  Count occurrences. If `unique` is set, overwrites the counter value
22
27
  on each call.
28
+
29
+ `unique` should be of type ``list[tuple[str,str]]``.
23
30
  """
24
31
 
25
32
 
33
+ class NoOpTimer:
34
+ def __call__(self, f):
35
+ @utils.safe_wraps(f)
36
+ def _wrapped(*args, **kwargs):
37
+ return f(*args, **kwargs)
38
+
39
+ return _wrapped
40
+
41
+ def __enter__(self):
42
+ pass
43
+
44
+ def __exit__(self, *args, **kwargs):
45
+ pass
46
+
47
+
48
+ @implementer(IMetricsService)
49
+ class NoOpMetricsService:
50
+ def timer(self, key):
51
+ return NoOpTimer()
52
+
53
+ def observe(self, key, value, labels=[]):
54
+ pass
55
+
56
+ def count(self, key, count=1, unique=None):
57
+ pass
58
+
59
+
26
60
  def watch_execution_time(metrics_service, obj, prefix="", classname=None):
27
61
  """
28
62
  Decorate all methods of an object in order to watch their execution time.
@@ -49,6 +83,8 @@ def listener_with_timer(config, key, func):
49
83
  def wrapped(*args, **kwargs):
50
84
  metrics_service = config.registry.metrics
51
85
  if not metrics_service:
86
+ # This only happens if `kinto.core.initialization.setup_metrics` is
87
+ # not listed in the `initialization_sequence` setting.
52
88
  return func(*args, **kwargs)
53
89
  # If metrics are enabled, monitor execution time of listeners.
54
90
  with metrics_service.timer(key):
@@ -1,4 +1,5 @@
1
1
  import collections.abc as collections_abc
2
+ import functools
2
3
  import hashlib
3
4
  import hmac
4
5
  import os
@@ -541,3 +542,10 @@ def apply_json_patch(obj, ops):
541
542
  raise ValueError(e)
542
543
 
543
544
  return result
545
+
546
+
547
+ def safe_wraps(wrapper, *args, **kwargs):
548
+ """Safely wraps partial functions."""
549
+ while isinstance(wrapper, functools.partial):
550
+ wrapper = wrapper.func
551
+ return functools.wraps(wrapper, *args, **kwargs)
@@ -0,0 +1 @@
1
+ 3.4.1
@@ -0,0 +1 @@
1
+ 3.4.1