kinto 23.0.2__tar.gz → 23.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.

Files changed (399) hide show
  1. {kinto-23.0.2 → kinto-23.1.0}/CONTRIBUTORS.rst +1 -0
  2. {kinto-23.0.2 → kinto-23.1.0}/PKG-INFO +2 -1
  3. {kinto-23.0.2 → kinto-23.1.0}/constraints.txt +15 -11
  4. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/errors.rst +1 -1
  5. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/openapi.rst +1 -1
  6. {kinto-23.0.2 → kinto-23.1.0}/docs/core/cache.rst +6 -0
  7. {kinto-23.0.2 → kinto-23.1.0}/docs/requirements.txt +2 -2
  8. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/__init__.py +35 -0
  9. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/memcached.py +2 -0
  10. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/memory.py +6 -1
  11. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/postgresql/__init__.py +3 -0
  12. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/initialization.py +11 -3
  13. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/resource/__init__.py +9 -1
  14. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/resource/schema.py +4 -4
  15. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/resource/viewset.py +2 -2
  16. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/__init__.py +8 -0
  17. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/testing.py +8 -0
  18. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/utils.py +1 -1
  19. kinto-23.1.0/kinto/plugins/admin/VERSION +1 -0
  20. kinto-23.1.0/kinto/plugins/admin/build/VERSION +1 -0
  21. kinto-23.1.0/kinto/plugins/admin/build/assets/index-B_zMxEpZ.css +6 -0
  22. kinto-23.1.0/kinto/plugins/admin/build/assets/index-DBxDgrMX.js +154 -0
  23. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/index.html +2 -2
  24. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/history/__init__.py +24 -0
  25. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/PKG-INFO +2 -1
  26. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/SOURCES.txt +3 -2
  27. {kinto-23.0.2 → kinto-23.1.0}/scripts/pull-kinto-admin.sh +2 -1
  28. {kinto-23.0.2 → kinto-23.1.0}/tests/browser.ini +2 -0
  29. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_filter.py +4 -0
  30. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_schema.py +2 -2
  31. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_initialization.py +10 -0
  32. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_history.py +15 -1
  33. kinto-23.1.0/tests/test_cache_metrics.py +70 -0
  34. kinto-23.0.2/kinto/plugins/admin/VERSION +0 -1
  35. kinto-23.0.2/kinto/plugins/admin/build/VERSION +0 -1
  36. kinto-23.0.2/kinto/plugins/admin/build/assets/index-Cs7JVwIg.css +0 -6
  37. kinto-23.0.2/kinto/plugins/admin/build/assets/index-CylsivYB.js +0 -165
  38. {kinto-23.0.2 → kinto-23.1.0}/.dockerignore +0 -0
  39. {kinto-23.0.2 → kinto-23.1.0}/.github/CODE_OF_CONDUCT.md +0 -0
  40. {kinto-23.0.2 → kinto-23.1.0}/.github/CONTRIBUTING.md +0 -0
  41. {kinto-23.0.2 → kinto-23.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  42. {kinto-23.0.2 → kinto-23.1.0}/.github/dependabot.yml +0 -0
  43. {kinto-23.0.2 → kinto-23.1.0}/.github/release.yml +0 -0
  44. {kinto-23.0.2 → kinto-23.1.0}/.github/workflows/labels.yaml +0 -0
  45. {kinto-23.0.2 → kinto-23.1.0}/.github/workflows/publish.yml +0 -0
  46. {kinto-23.0.2 → kinto-23.1.0}/.github/workflows/scheduled.yml +0 -0
  47. {kinto-23.0.2 → kinto-23.1.0}/.github/workflows/test.yml +0 -0
  48. {kinto-23.0.2 → kinto-23.1.0}/.gitignore +0 -0
  49. {kinto-23.0.2 → kinto-23.1.0}/.readthedocs.yaml +0 -0
  50. {kinto-23.0.2 → kinto-23.1.0}/CHANGELOG.rst +0 -0
  51. {kinto-23.0.2 → kinto-23.1.0}/Dockerfile +0 -0
  52. {kinto-23.0.2 → kinto-23.1.0}/LICENSE +0 -0
  53. {kinto-23.0.2 → kinto-23.1.0}/Makefile +0 -0
  54. {kinto-23.0.2 → kinto-23.1.0}/README.rst +0 -0
  55. {kinto-23.0.2 → kinto-23.1.0}/SECURITY.md +0 -0
  56. {kinto-23.0.2 → kinto-23.1.0}/SUPPORT.md +0 -0
  57. {kinto-23.0.2 → kinto-23.1.0}/app.wsgi +0 -0
  58. {kinto-23.0.2 → kinto-23.1.0}/constraints.in +0 -0
  59. {kinto-23.0.2 → kinto-23.1.0}/docker-compose.yml +0 -0
  60. {kinto-23.0.2 → kinto-23.1.0}/docs/_static/piwik.js +0 -0
  61. {kinto-23.0.2 → kinto-23.1.0}/docs/_static/theme_overrides.css +0 -0
  62. {kinto-23.0.2 → kinto-23.1.0}/docs/_templates/footer.html +0 -0
  63. {kinto-23.0.2 → kinto-23.1.0}/docs/_templates/indexcontent.html +0 -0
  64. {kinto-23.0.2 → kinto-23.1.0}/docs/_templates/layout.html +0 -0
  65. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-delete-list.rst +0 -0
  66. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-delete-object.rst +0 -0
  67. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-get-list.rst +0 -0
  68. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-get-object.rst +0 -0
  69. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-head-list.rst +0 -0
  70. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-patch-object.rst +0 -0
  71. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-post-list.rst +0 -0
  72. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_details-put-object.rst +0 -0
  73. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-delete-list.rst +0 -0
  74. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-delete-object.rst +0 -0
  75. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-get-list.rst +0 -0
  76. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-get-object.rst +0 -0
  77. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-patch-object.rst +0 -0
  78. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-post-list.rst +0 -0
  79. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/_status-put-object.rst +0 -0
  80. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/accounts.rst +0 -0
  81. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/admin.rst +0 -0
  82. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/authentication.rst +0 -0
  83. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/backoff.rst +0 -0
  84. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/batch.rst +0 -0
  85. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/buckets.rst +0 -0
  86. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/collections.rst +0 -0
  87. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/deprecation.rst +0 -0
  88. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/filtering.rst +0 -0
  89. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/flush.rst +0 -0
  90. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/groups.rst +0 -0
  91. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/history.rst +0 -0
  92. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/index.rst +0 -0
  93. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/openid.rst +0 -0
  94. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/pagination.rst +0 -0
  95. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/permissions.rst +0 -0
  96. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/records.rst +0 -0
  97. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/selecting_fields.rst +0 -0
  98. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/sorting.rst +0 -0
  99. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/timestamps.rst +0 -0
  100. {kinto-23.0.2 → kinto-23.1.0}/docs/api/1.x/utilities.rst +0 -0
  101. {kinto-23.0.2 → kinto-23.1.0}/docs/api/index.rst +0 -0
  102. {kinto-23.0.2 → kinto-23.1.0}/docs/api/versioning.rst +0 -0
  103. {kinto-23.0.2 → kinto-23.1.0}/docs/changelog.rst +0 -0
  104. {kinto-23.0.2 → kinto-23.1.0}/docs/commandline.rst +0 -0
  105. {kinto-23.0.2 → kinto-23.1.0}/docs/community.rst +0 -0
  106. {kinto-23.0.2 → kinto-23.1.0}/docs/concepts.rst +0 -0
  107. {kinto-23.0.2 → kinto-23.1.0}/docs/conf.py +0 -0
  108. {kinto-23.0.2 → kinto-23.1.0}/docs/configuration/good-practices.rst +0 -0
  109. {kinto-23.0.2 → kinto-23.1.0}/docs/configuration/index.rst +0 -0
  110. {kinto-23.0.2 → kinto-23.1.0}/docs/configuration/production.rst +0 -0
  111. {kinto-23.0.2 → kinto-23.1.0}/docs/configuration/settings.rst +0 -0
  112. {kinto-23.0.2 → kinto-23.1.0}/docs/core/_static/theme_overrides.css +0 -0
  113. {kinto-23.0.2 → kinto-23.1.0}/docs/core/api.rst +0 -0
  114. {kinto-23.0.2 → kinto-23.1.0}/docs/core/decorators.rst +0 -0
  115. {kinto-23.0.2 → kinto-23.1.0}/docs/core/errors.rst +0 -0
  116. {kinto-23.0.2 → kinto-23.1.0}/docs/core/glossary.rst +0 -0
  117. {kinto-23.0.2 → kinto-23.1.0}/docs/core/images/cliquet-base.png +0 -0
  118. {kinto-23.0.2 → kinto-23.1.0}/docs/core/images/cliquet-mozilla.png +0 -0
  119. {kinto-23.0.2 → kinto-23.1.0}/docs/core/index.rst +0 -0
  120. {kinto-23.0.2 → kinto-23.1.0}/docs/core/notifications.rst +0 -0
  121. {kinto-23.0.2 → kinto-23.1.0}/docs/core/permission.rst +0 -0
  122. {kinto-23.0.2 → kinto-23.1.0}/docs/core/quickstart.rst +0 -0
  123. {kinto-23.0.2 → kinto-23.1.0}/docs/core/rationale.rst +0 -0
  124. {kinto-23.0.2 → kinto-23.1.0}/docs/core/resource.rst +0 -0
  125. {kinto-23.0.2 → kinto-23.1.0}/docs/core/storage.rst +0 -0
  126. {kinto-23.0.2 → kinto-23.1.0}/docs/core/testing.rst +0 -0
  127. {kinto-23.0.2 → kinto-23.1.0}/docs/core/utils.rst +0 -0
  128. {kinto-23.0.2 → kinto-23.1.0}/docs/core/viewsets.rst +0 -0
  129. {kinto-23.0.2 → kinto-23.1.0}/docs/faq.rst +0 -0
  130. {kinto-23.0.2 → kinto-23.1.0}/docs/images/alwaysdata-button.svg +0 -0
  131. {kinto-23.0.2 → kinto-23.1.0}/docs/images/architecture.svg +0 -0
  132. {kinto-23.0.2 → kinto-23.1.0}/docs/images/color-formatter.png +0 -0
  133. {kinto-23.0.2 → kinto-23.1.0}/docs/images/concepts-general.png +0 -0
  134. {kinto-23.0.2 → kinto-23.1.0}/docs/images/concepts-permissions.png +0 -0
  135. {kinto-23.0.2 → kinto-23.1.0}/docs/images/heroku-button.png +0 -0
  136. {kinto-23.0.2 → kinto-23.1.0}/docs/images/kinto-logo.png +0 -0
  137. {kinto-23.0.2 → kinto-23.1.0}/docs/images/kinto-logo.svg +0 -0
  138. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-admin.svg +0 -0
  139. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-attachment.svg +0 -0
  140. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-community.svg +0 -0
  141. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-history.svg +0 -0
  142. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-javascript.svg +0 -0
  143. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-jsonschema.svg +0 -0
  144. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-multiapps.svg +0 -0
  145. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-permissions.svg +0 -0
  146. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-python.svg +0 -0
  147. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-selfhostable.svg +0 -0
  148. {kinto-23.0.2 → kinto-23.1.0}/docs/images/logo-synchronisation.svg +0 -0
  149. {kinto-23.0.2 → kinto-23.1.0}/docs/images/overview-deployonce-selfhost.png +0 -0
  150. {kinto-23.0.2 → kinto-23.1.0}/docs/images/overview-features.png +0 -0
  151. {kinto-23.0.2 → kinto-23.1.0}/docs/images/overview-synchronisation.png +0 -0
  152. {kinto-23.0.2 → kinto-23.1.0}/docs/images/overview-use-cases.png +0 -0
  153. {kinto-23.0.2 → kinto-23.1.0}/docs/images/scalingo-button.svg +0 -0
  154. {kinto-23.0.2 → kinto-23.1.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
  155. {kinto-23.0.2 → kinto-23.1.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
  156. {kinto-23.0.2 → kinto-23.1.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
  157. {kinto-23.0.2 → kinto-23.1.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
  158. {kinto-23.0.2 → kinto-23.1.0}/docs/images/sequence-storage.png +0 -0
  159. {kinto-23.0.2 → kinto-23.1.0}/docs/images/sync-both.svg +0 -0
  160. {kinto-23.0.2 → kinto-23.1.0}/docs/images/sync-newest.svg +0 -0
  161. {kinto-23.0.2 → kinto-23.1.0}/docs/images/sync-oldest.svg +0 -0
  162. {kinto-23.0.2 → kinto-23.1.0}/docs/index.rst +0 -0
  163. {kinto-23.0.2 → kinto-23.1.0}/docs/kinto-admin.rst +0 -0
  164. {kinto-23.0.2 → kinto-23.1.0}/docs/overview.rst +0 -0
  165. {kinto-23.0.2 → kinto-23.1.0}/docs/troubleshooting.rst +0 -0
  166. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/custom-id-generator.rst +0 -0
  167. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/first-steps.rst +0 -0
  168. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/index.rst +0 -0
  169. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/install.rst +0 -0
  170. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/notifications-custom.rst +0 -0
  171. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/permission-setups.rst +0 -0
  172. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/permissions.rst +0 -0
  173. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/synchronisation.rst +0 -0
  174. {kinto-23.0.2 → kinto-23.1.0}/docs/tutorials/write-plugin.rst +0 -0
  175. {kinto-23.0.2 → kinto-23.1.0}/kinto/__init__.py +0 -0
  176. {kinto-23.0.2 → kinto-23.1.0}/kinto/__main__.py +0 -0
  177. {kinto-23.0.2 → kinto-23.1.0}/kinto/authorization.py +0 -0
  178. {kinto-23.0.2 → kinto-23.1.0}/kinto/config/__init__.py +0 -0
  179. {kinto-23.0.2 → kinto-23.1.0}/kinto/config/kinto.tpl +0 -0
  180. {kinto-23.0.2 → kinto-23.1.0}/kinto/contribute.json +0 -0
  181. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/__init__.py +0 -0
  182. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/authentication.py +0 -0
  183. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/authorization.py +0 -0
  184. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/postgresql/schema.sql +0 -0
  185. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cache/testing.py +0 -0
  186. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/__init__.py +0 -0
  187. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/cors.py +0 -0
  188. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/errors.py +0 -0
  189. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/pyramidhook.py +0 -0
  190. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/renderer.py +0 -0
  191. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/resource.py +0 -0
  192. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/service.py +0 -0
  193. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/util.py +0 -0
  194. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/validators/__init__.py +0 -0
  195. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/validators/_colander.py +0 -0
  196. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice/validators/_marshmallow.py +0 -0
  197. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/__init__.py +0 -0
  198. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/converters/__init__.py +0 -0
  199. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/converters/exceptions.py +0 -0
  200. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/converters/parameters.py +0 -0
  201. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/converters/schema.py +0 -0
  202. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/swagger.py +0 -0
  203. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/templates/index.html +0 -0
  204. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/templates/index_script_template.html +0 -0
  205. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/util.py +0 -0
  206. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/cornice_swagger/views.py +0 -0
  207. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/decorators.py +0 -0
  208. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/errors.py +0 -0
  209. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/events.py +0 -0
  210. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/listeners/__init__.py +0 -0
  211. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/metrics.py +0 -0
  212. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/openapi.py +0 -0
  213. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/__init__.py +0 -0
  214. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/memory.py +0 -0
  215. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/postgresql/__init__.py +0 -0
  216. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
  217. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/postgresql/schema.sql +0 -0
  218. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/permission/testing.py +0 -0
  219. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/resource/model.py +0 -0
  220. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/schema.py +0 -0
  221. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/scripts.py +0 -0
  222. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/statsd.py +0 -0
  223. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/__init__.py +0 -0
  224. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/exceptions.py +0 -0
  225. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/generators.py +0 -0
  226. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/memory.py +0 -0
  227. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/client.py +0 -0
  228. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
  229. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
  230. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
  231. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
  232. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
  233. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
  234. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
  235. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
  236. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
  237. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
  238. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
  239. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
  240. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
  241. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
  242. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
  243. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
  244. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
  245. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
  246. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
  247. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
  248. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
  249. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrations/migration_022_023.sql +0 -0
  250. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/migrator.py +0 -0
  251. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/pool.py +0 -0
  252. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/postgresql/schema.sql +0 -0
  253. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/storage/utils.py +0 -0
  254. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/testing.py +0 -0
  255. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/__init__.py +0 -0
  256. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/batch.py +0 -0
  257. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/errors.py +0 -0
  258. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/heartbeat.py +0 -0
  259. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/hello.py +0 -0
  260. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/openapi.py +0 -0
  261. {kinto-23.0.2 → kinto-23.1.0}/kinto/core/views/version.py +0 -0
  262. {kinto-23.0.2 → kinto-23.1.0}/kinto/events.py +0 -0
  263. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/__init__.py +0 -0
  264. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/accounts/__init__.py +0 -0
  265. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/accounts/authentication.py +0 -0
  266. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/accounts/scripts.py +0 -0
  267. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/accounts/utils.py +0 -0
  268. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/accounts/views.py +0 -0
  269. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/README.md +0 -0
  270. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/__init__.py +0 -0
  271. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/asn1-EdZsLKOL.js +0 -0
  272. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
  273. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
  274. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/javascript-qCveANmP.js +0 -0
  275. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
  276. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/mllike-CXdrOF99.js +0 -0
  277. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
  278. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
  279. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/sql-D0XecflT.js +0 -0
  280. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/build/assets/ttcn-cfg-B9xdYoR4.js +0 -0
  281. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/public/help.html +0 -0
  282. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/admin/views.py +0 -0
  283. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/default_bucket/__init__.py +0 -0
  284. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/flush.py +0 -0
  285. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/history/listener.py +0 -0
  286. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/history/views.py +0 -0
  287. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/openid/__init__.py +0 -0
  288. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/openid/utils.py +0 -0
  289. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/openid/views.py +0 -0
  290. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/prometheus.py +0 -0
  291. {kinto-23.0.2 → kinto-23.1.0}/kinto/plugins/statsd.py +0 -0
  292. {kinto-23.0.2 → kinto-23.1.0}/kinto/schema_validation.py +0 -0
  293. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/__init__.py +0 -0
  294. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/admin.py +0 -0
  295. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/buckets.py +0 -0
  296. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/collections.py +0 -0
  297. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/contribute.py +0 -0
  298. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/groups.py +0 -0
  299. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/permissions.py +0 -0
  300. {kinto-23.0.2 → kinto-23.1.0}/kinto/views/records.py +0 -0
  301. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/dependency_links.txt +0 -0
  302. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/entry_points.txt +0 -0
  303. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/requires.txt +0 -0
  304. {kinto-23.0.2 → kinto-23.1.0}/kinto.egg-info/top_level.txt +0 -0
  305. {kinto-23.0.2 → kinto-23.1.0}/pyproject.toml +0 -0
  306. {kinto-23.0.2 → kinto-23.1.0}/setup.cfg +0 -0
  307. {kinto-23.0.2 → kinto-23.1.0}/tests/__init__.py +0 -0
  308. {kinto-23.0.2 → kinto-23.1.0}/tests/browser.py +0 -0
  309. {kinto-23.0.2 → kinto-23.1.0}/tests/core/__init__.py +0 -0
  310. {kinto-23.0.2 → kinto-23.1.0}/tests/core/listeners.py +0 -0
  311. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/__init__.py +0 -0
  312. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_base.py +0 -0
  313. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_cache_expires.py +0 -0
  314. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_events.py +0 -0
  315. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_model.py +0 -0
  316. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_object.py +0 -0
  317. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_object_permissions.py +0 -0
  318. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_pagination.py +0 -0
  319. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_partial_response.py +0 -0
  320. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_preconditions.py +0 -0
  321. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_sort.py +0 -0
  322. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_sync.py +0 -0
  323. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_views.py +0 -0
  324. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_views_cors.py +0 -0
  325. {kinto-23.0.2 → kinto-23.1.0}/tests/core/resource/test_viewset.py +0 -0
  326. {kinto-23.0.2 → kinto-23.1.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
  327. {kinto-23.0.2 → kinto-23.1.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
  328. {kinto-23.0.2 → kinto-23.1.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
  329. {kinto-23.0.2 → kinto-23.1.0}/tests/core/support.py +0 -0
  330. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_authentication.py +0 -0
  331. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_authorization.py +0 -0
  332. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_cache.py +0 -0
  333. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_decorators.py +0 -0
  334. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_deprecation.py +0 -0
  335. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_errors.py +0 -0
  336. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_listeners.py +0 -0
  337. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_logging.py +0 -0
  338. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_metrics.py +0 -0
  339. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_openapi.py +0 -0
  340. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_permission.py +0 -0
  341. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_schema.py +0 -0
  342. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_scripts.py +0 -0
  343. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_storage.py +0 -0
  344. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_storage_migrations.py +0 -0
  345. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_storage_pool.py +0 -0
  346. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_utils.py +0 -0
  347. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_batch.py +0 -0
  348. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_errors.py +0 -0
  349. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_heartbeat.py +0 -0
  350. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_hello.py +0 -0
  351. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_openapi.py +0 -0
  352. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_postgresql.py +0 -0
  353. {kinto-23.0.2 → kinto-23.1.0}/tests/core/test_views_transaction.py +0 -0
  354. {kinto-23.0.2 → kinto-23.1.0}/tests/core/testapp/__init__.py +0 -0
  355. {kinto-23.0.2 → kinto-23.1.0}/tests/core/testapp/static/index.html +0 -0
  356. {kinto-23.0.2 → kinto-23.1.0}/tests/core/testapp/views.py +0 -0
  357. {kinto-23.0.2 → kinto-23.1.0}/tests/core/testplugin/__init__.py +0 -0
  358. {kinto-23.0.2 → kinto-23.1.0}/tests/functional.ini +0 -0
  359. {kinto-23.0.2 → kinto-23.1.0}/tests/functional.py +0 -0
  360. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/__init__.py +0 -0
  361. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/support.py +0 -0
  362. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_plugins.py +0 -0
  363. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_resources.py +0 -0
  364. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_responses_buckets.py +0 -0
  365. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_responses_collections.py +0 -0
  366. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_responses_errors.py +0 -0
  367. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_responses_groups.py +0 -0
  368. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_responses_records.py +0 -0
  369. {kinto-23.0.2 → kinto-23.1.0}/tests/openapi/test_validation.py +0 -0
  370. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/__init__.py +0 -0
  371. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_accounts.py +0 -0
  372. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_admin.py +0 -0
  373. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_default_bucket.py +0 -0
  374. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_flush.py +0 -0
  375. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_openid.py +0 -0
  376. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_prometheus.py +0 -0
  377. {kinto-23.0.2 → kinto-23.1.0}/tests/plugins/test_statsd.py +0 -0
  378. {kinto-23.0.2 → kinto-23.1.0}/tests/support.py +0 -0
  379. {kinto-23.0.2 → kinto-23.1.0}/tests/test_authorization.py +0 -0
  380. {kinto-23.0.2 → kinto-23.1.0}/tests/test_config.py +0 -0
  381. {kinto-23.0.2 → kinto-23.1.0}/tests/test_configuration/test.ini +0 -0
  382. {kinto-23.0.2 → kinto-23.1.0}/tests/test_init.py +0 -0
  383. {kinto-23.0.2 → kinto-23.1.0}/tests/test_main.py +0 -0
  384. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_admin.py +0 -0
  385. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_buckets.py +0 -0
  386. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_collections.py +0 -0
  387. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_collections_cache.py +0 -0
  388. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_contribute.py +0 -0
  389. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_disable_default.py +0 -0
  390. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_groups.py +0 -0
  391. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_hello.py +0 -0
  392. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_metrics.py +0 -0
  393. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_objects_permissions.py +0 -0
  394. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_permissions.py +0 -0
  395. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_records.py +0 -0
  396. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_schema_collection.py +0 -0
  397. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_schema_group.py +0 -0
  398. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_schema_record.py +0 -0
  399. {kinto-23.0.2 → kinto-23.1.0}/tests/test_views_version.py +0 -0
@@ -112,3 +112,4 @@ Contributors
112
112
  * Dan Milgram <danm@intervivo.com>
113
113
  * Dex Devlon <@bxff>
114
114
  * Varun Koranne <@varun-dhruv>
115
+ * Robin Sharma <robinrythm123@gmail.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinto
3
- Version: 23.0.2
3
+ Version: 23.1.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
@@ -229,3 +229,4 @@ Contributors
229
229
  * Dan Milgram <danm@intervivo.com>
230
230
  * Dex Devlon <@bxff>
231
231
  * Varun Koranne <@varun-dhruv>
232
+ * Robin Sharma <robinrythm123@gmail.com>
@@ -60,7 +60,7 @@ jsonpointer==2.4
60
60
  # jsonschema
61
61
  jsonref==1.1.0
62
62
  # via bravado-core
63
- jsonschema==4.23.0
63
+ jsonschema==4.24.0
64
64
  # via
65
65
  # -r constraints.in
66
66
  # bravado-core
@@ -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.12.0
76
+ newrelic==10.14.0
77
77
  # via -r constraints.in
78
78
  packaging==23.2
79
79
  # via
@@ -88,16 +88,20 @@ plaster==1.1.2
88
88
  # pyramid
89
89
  plaster-pastedeploy==1.0.1
90
90
  # via pyramid
91
- playwright==1.52.0
91
+ playwright==1.53.0
92
92
  # via -r constraints.in
93
93
  pluggy==1.5.0
94
- # via pytest
95
- prometheus-client==0.22.0
94
+ # via
95
+ # pytest
96
+ # pytest-cov
97
+ prometheus-client==0.22.1
96
98
  # via -r constraints.in
97
99
  psycopg2-binary==2.9.10
98
100
  # via -r constraints.in
99
101
  pyee==13.0.0
100
102
  # via playwright
103
+ pygments==2.19.1
104
+ # via pytest
101
105
  pyproject-hooks==1.0.0
102
106
  # via build
103
107
  pyramid==2.0.2
@@ -109,14 +113,14 @@ pyramid-multiauth==1.0.2
109
113
  # via -r constraints.in
110
114
  pyramid-tm==2.6
111
115
  # via -r constraints.in
112
- pytest==8.3.5
116
+ pytest==8.4.1
113
117
  # via
114
118
  # -r constraints.in
115
119
  # pytest-cache
116
120
  # pytest-cov
117
121
  pytest-cache==1.0
118
122
  # via -r constraints.in
119
- pytest-cov==6.1.1
123
+ pytest-cov==6.2.1
120
124
  # via -r constraints.in
121
125
  python-dateutil==2.9.0.post0
122
126
  # via
@@ -137,7 +141,7 @@ referencing==0.32.1
137
141
  # via
138
142
  # jsonschema
139
143
  # jsonschema-specifications
140
- requests==2.32.3
144
+ requests==2.32.4
141
145
  # via
142
146
  # -r constraints.in
143
147
  # bravado-core
@@ -149,7 +153,7 @@ rpds-py==0.17.1
149
153
  # via
150
154
  # jsonschema
151
155
  # referencing
152
- ruff==0.11.10
156
+ ruff==0.12.3
153
157
  # via -r constraints.in
154
158
  sentry-sdk==2.8.0
155
159
  # via -r constraints.in
@@ -162,7 +166,7 @@ six==1.16.0
162
166
  # rfc3339-validator
163
167
  soupsieve==2.5
164
168
  # via beautifulsoup4
165
- sqlalchemy==2.0.40
169
+ sqlalchemy==2.0.41
166
170
  # via
167
171
  # -r constraints.in
168
172
  # sentry-sdk
@@ -189,7 +193,7 @@ typing-extensions==4.9.0
189
193
  # swagger-spec-validator
190
194
  uri-template==1.3.0
191
195
  # via jsonschema
192
- urllib3==2.2.2
196
+ urllib3==2.5.0
193
197
  # via
194
198
  # requests
195
199
  # sentry-sdk
@@ -53,7 +53,7 @@ Precondition errors
53
53
  As detailed in the :ref:`timestamps <server-timestamps>` section, it is
54
54
  possible to add concurrency control using ``ETag`` request headers.
55
55
 
56
- When a the provided preconditions are not met, a |status-412| error response
56
+ When the provided preconditions are not met, a |status-412| error response
57
57
  is returned.
58
58
 
59
59
  Additional information about the record currently stored on the server will be
@@ -102,7 +102,7 @@ The current implementation supports extensions as follows:
102
102
  `Cornice Swagger documentation <https://cornices.github.io/cornice.ext.swagger/>`_.
103
103
 
104
104
  - If the plugin changes the possible responses for a Resource, you can
105
- document it by subclassing :class:`kinto.core.resource.schema.ResourceReponses` and
105
+ document it by subclassing :class:`kinto.core.resource.schema.ResourceResponses` and
106
106
  changing the ``responses`` attribute on your Resource ``ViewSet``.
107
107
 
108
108
  - If the plugin adds an authentication method, you may declare it using
@@ -36,3 +36,9 @@ interface:
36
36
 
37
37
  .. autoclass:: kinto.core.cache.CacheBase
38
38
  :members:
39
+
40
+ Cache Metrics Adapter
41
+ =====================
42
+
43
+ .. autoclass:: kinto.core.cache.CacheMetricsBackend
44
+ :members:
@@ -5,7 +5,7 @@ sphinxcontrib-httpdomain==1.8.1
5
5
  sphinx-github-changelog==1.7.1
6
6
  kinto
7
7
  mock==5.2.0
8
- webtest==3.0.4
8
+ webtest==3.0.6
9
9
  pyramid==2.0.2
10
- python-rapidjson==1.20
10
+ python-rapidjson==1.21
11
11
  SQLAlchemy==2.0.41
@@ -10,10 +10,15 @@ _HEARTBEAT_KEY = "__heartbeat__"
10
10
  _HEARTBEAT_TTL_SECONDS = 3600
11
11
 
12
12
 
13
+ _CACHE_HIT_METRIC_KEY = "cache_hits"
14
+ _CACHE_MISS_METRIC_KEY = "cache_misses"
15
+
16
+
13
17
  class CacheBase:
14
18
  def __init__(self, *args, **kwargs):
15
19
  self.prefix = kwargs["cache_prefix"]
16
20
  self.max_size_bytes = kwargs.get("cache_max_size_bytes")
21
+ self.set_metrics_backend(kwargs.get("metrics_backend"))
17
22
 
18
23
  def initialize_schema(self, dry_run=False):
19
24
  """Create every necessary objects (like tables or indices) in the
@@ -71,6 +76,36 @@ class CacheBase:
71
76
  """
72
77
  raise NotImplementedError
73
78
 
79
+ def set_metrics_backend(self, metrics_backend):
80
+ """Set a metrics backend via the `CacheMetricsBackend` adapter.
81
+
82
+ :param metrics_backend: A metrics backend implementing the IMetricsService interface.
83
+ """
84
+ self.metrics_backend = CacheMetricsBackend(metrics_backend)
85
+
86
+
87
+ class CacheMetricsBackend:
88
+ """
89
+ A simple adapter for tracking cache-related metrics.
90
+ """
91
+
92
+ def __init__(self, metrics_backend, *args, **kwargs):
93
+ """Initialize with a given metrics backend.
94
+
95
+ :param metrics_backend: A metrics backend implementing the IMetricsService interface.
96
+ """
97
+ self._backend = metrics_backend
98
+
99
+ def count_hit(self):
100
+ """Increment the cache hit counter."""
101
+ if self._backend:
102
+ self._backend.count(key=_CACHE_HIT_METRIC_KEY)
103
+
104
+ def count_miss(self):
105
+ """Increment the cache miss counter."""
106
+ if self._backend:
107
+ self._backend.count(key=_CACHE_MISS_METRIC_KEY)
108
+
74
109
 
75
110
  def heartbeat(backend):
76
111
  def ping(request):
@@ -68,7 +68,9 @@ class Cache(CacheBase):
68
68
  def _get(self, key):
69
69
  value = self._client.get(self.prefix + key)
70
70
  if not value:
71
+ self.metrics_backend.count_miss()
71
72
  return None, 0
73
+ self.metrics_backend.count_hit()
72
74
  data = json.loads(value)
73
75
  return data["value"], data["ttl"]
74
76
 
@@ -73,7 +73,12 @@ class Cache(CacheBase):
73
73
  @synchronized
74
74
  def get(self, key):
75
75
  self._clean_expired()
76
- return self._store.get(self.prefix + key)
76
+ value = self._store.get(self.prefix + key)
77
+ if value is None:
78
+ self.metrics_backend.count_miss()
79
+ return None
80
+ self.metrics_backend.count_hit()
81
+ return value
77
82
 
78
83
  @synchronized
79
84
  def delete(self, key):
@@ -156,8 +156,11 @@ class Cache(CacheBase):
156
156
  conn.execute(sa.text(purge))
157
157
  result = conn.execute(sa.text(query), dict(key=self.prefix + key))
158
158
  if result.rowcount > 0:
159
+ self.metrics_backend.count_hit()
159
160
  value = result.fetchone().value
160
161
  return json.loads(value)
162
+ self.metrics_backend.count_miss()
163
+ return None
161
164
 
162
165
  def delete(self, key):
163
166
  query = "DELETE FROM cache WHERE key = :key RETURNING value;"
@@ -228,7 +228,9 @@ def _end_of_life_tween_factory(handler, registry):
228
228
  else:
229
229
  code = "hard-eol"
230
230
  request.response = errors.http_error(
231
- HTTPGone(), errno=errors.ERRORS.SERVICE_DEPRECATED, message=deprecation_msg
231
+ HTTPGone(),
232
+ errno=errors.ERRORS.SERVICE_DEPRECATED,
233
+ message=deprecation_msg,
232
234
  )
233
235
 
234
236
  errors.send_alert(request, eos_message, url=eos_url, code=code)
@@ -459,6 +461,11 @@ def setup_metrics(config):
459
461
  else:
460
462
  metrics.watch_execution_time(metrics_service, policy, prefix="authentication")
461
463
 
464
+ # Set cache metrics backend
465
+ cache_backend = config.registry.cache
466
+ if isinstance(cache_backend, cache.CacheBase):
467
+ cache_backend.set_metrics_backend(metrics_service)
468
+
462
469
  config.add_subscriber(on_app_created, ApplicationCreated)
463
470
 
464
471
  def on_new_response(event):
@@ -468,8 +475,9 @@ def setup_metrics(config):
468
475
  # Count unique users.
469
476
  user_id = request.prefixed_userid
470
477
  if user_id:
471
- # Get rid of colons in metric packet (see #1282).
472
- auth, user_id = user_id.split(":")
478
+ auth, user_id = user_id.split(":", 1)
479
+ # Get rid of colons in metric packet (see #1282 and #3571).
480
+ user_id = user_id.replace(":", ".")
473
481
  metrics_service.count("users", unique=[("auth", auth), ("userid", user_id)])
474
482
 
475
483
  status = event.response.status_code
@@ -319,7 +319,7 @@ class Resource:
319
319
  #
320
320
 
321
321
  def plural_head(self):
322
- """Model ``HEAD`` endpoint: empty reponse with a ``Total-Objects`` header.
322
+ """Model ``HEAD`` endpoint: empty response with a ``Total-Objects`` header.
323
323
 
324
324
  :raises: :exc:`~pyramid:pyramid.httpexceptions.HTTPNotModified` if
325
325
  ``If-None-Match`` header is provided and collection not
@@ -1135,6 +1135,14 @@ class Resource:
1135
1135
  if field == self.model.modified_field and not is_valid_timestamp(value):
1136
1136
  raise_invalid(self.request, **error_details)
1137
1137
 
1138
+ if field in (self.model.modified_field, self.model.id_field) and operator in (
1139
+ COMPARISON.CONTAINS,
1140
+ COMPARISON.CONTAINS_ANY,
1141
+ ):
1142
+ error_msg = f"Field '{field}' is not an array"
1143
+ error_details["description"] = error_msg
1144
+ raise_invalid(self.request, **error_details)
1145
+
1138
1146
  filters.append(Filter(field, value, operator))
1139
1147
 
1140
1148
  # If a plural endpoint is reached, and if the user does not have the
@@ -21,7 +21,7 @@ positive_big_integer = colander.Range(min=0, max=POSTGRESQL_MAX_INTEGER_VALUE)
21
21
 
22
22
 
23
23
  class TimeStamp(TimeStamp):
24
- """This schema is deprecated, you shoud use `kinto.core.schema.TimeStamp` instead."""
24
+ """This schema is deprecated, you should use `kinto.core.schema.TimeStamp` instead."""
25
25
 
26
26
  def __init__(self, *args, **kwargs):
27
27
  message = (
@@ -33,7 +33,7 @@ class TimeStamp(TimeStamp):
33
33
 
34
34
 
35
35
  class URL(URL):
36
- """This schema is deprecated, you shoud use `kinto.core.schema.URL` instead."""
36
+ """This schema is deprecated, you should use `kinto.core.schema.URL` instead."""
37
37
 
38
38
  def __init__(self, *args, **kwargs):
39
39
  message = (
@@ -422,7 +422,7 @@ class PluralResponseSchema(colander.MappingSchema):
422
422
  return datalist
423
423
 
424
424
 
425
- class ResourceReponses:
425
+ class ResourceResponses:
426
426
  """Class that wraps and handles Resource responses."""
427
427
 
428
428
  default_schemas = {
@@ -448,7 +448,7 @@ class ResourceReponses:
448
448
  }
449
449
  default_get_schemas = {
450
450
  "304": NotModifiedResponseSchema(
451
- description="Reponse has not changed since value in If-None-Match header"
451
+ description="Response has not changed since value in If-None-Match header"
452
452
  )
453
453
  }
454
454
  default_post_schemas = {
@@ -16,7 +16,7 @@ from .schema import (
16
16
  PluralGetQuerySchema,
17
17
  PluralQuerySchema,
18
18
  RequestSchema,
19
- ResourceReponses,
19
+ ResourceResponses,
20
20
  )
21
21
 
22
22
 
@@ -64,7 +64,7 @@ class ViewSet:
64
64
 
65
65
  factory = authorization.RouteFactory
66
66
 
67
- responses = ResourceReponses()
67
+ responses = ResourceResponses()
68
68
 
69
69
  service_arguments = {"description": "Set of {resource_name}"}
70
70
 
@@ -884,6 +884,14 @@ class Storage(StorageBase, MigratorMixin):
884
884
  operator = "IS NOT NULL" if filtr.value else "IS NULL"
885
885
  cond = f"{sql_field} {operator}"
886
886
 
887
+ elif filtr.operator == COMPARISON.CONTAINS:
888
+ value_holder = f"{prefix}_value_{i}"
889
+ holders[value_holder] = value
890
+ # In case the field is not a sequence, we ignore the object.
891
+ is_json_sequence = f"jsonb_typeof({sql_field}) = 'array'"
892
+ sql_operator = operators[filtr.operator]
893
+ cond = f"{is_json_sequence} AND {sql_field} {sql_operator} :{value_holder}"
894
+
887
895
  elif filtr.operator == COMPARISON.CONTAINS_ANY:
888
896
  value_holder = f"{prefix}_value_{i}"
889
897
  holders[value_holder] = value
@@ -491,6 +491,14 @@ class BaseTestStorage:
491
491
  objects = self.storage.list_all(filters=filters, **self.storage_kw)
492
492
  self.assertEqual(len(objects), 0)
493
493
 
494
+ def test_list_all_contains_ignores_object_if_field_is_not_array(self):
495
+ self.create_object({"code": "black"})
496
+ self.create_object({"fib": ["a", "b", "c"]})
497
+
498
+ filters = [Filter("fib", ["a"], utils.COMPARISON.CONTAINS)]
499
+ objects = self.storage.list_all(filters=filters, **self.storage_kw)
500
+ self.assertEqual(len(objects), 1)
501
+
494
502
  def test_list_all_can_filter_on_array_with_contains_any_and_unsupported_type(self):
495
503
  self.create_object({"code": "black"})
496
504
  self.create_object({"fib": [2, 3, 5]})
@@ -422,7 +422,7 @@ def follow_subrequest(request, subrequest, **kwargs):
422
422
  """Run a subrequest (e.g. batch), and follow the redirection if any.
423
423
 
424
424
  :rtype: tuple
425
- :returns: the reponse and the redirection request (or `subrequest`
425
+ :returns: the response and the redirection request (or `subrequest`
426
426
  if no redirection happened.)
427
427
  """
428
428
  try:
@@ -0,0 +1 @@
1
+ 4.3.0
@@ -0,0 +1 @@
1
+ 4.3.0