kinto 19.3.0__tar.gz → 19.3.1__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.
Files changed (390) hide show
  1. {kinto-19.3.0/kinto.egg-info → kinto-19.3.1}/PKG-INFO +1 -1
  2. {kinto-19.3.0 → kinto-19.3.1}/constraints.txt +11 -11
  3. {kinto-19.3.0 → kinto-19.3.1}/docs/requirements.txt +2 -2
  4. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/initialization.py +4 -2
  5. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/resource/__init__.py +3 -2
  6. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/statsd.py +10 -2
  7. {kinto-19.3.0 → kinto-19.3.1/kinto.egg-info}/PKG-INFO +1 -1
  8. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_filter.py +4 -0
  9. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_initialization.py +19 -0
  10. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_statsd.py +5 -0
  11. {kinto-19.3.0 → kinto-19.3.1}/.dockerignore +0 -0
  12. {kinto-19.3.0 → kinto-19.3.1}/.github/CODE_OF_CONDUCT.md +0 -0
  13. {kinto-19.3.0 → kinto-19.3.1}/.github/CONTRIBUTING.md +0 -0
  14. {kinto-19.3.0 → kinto-19.3.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {kinto-19.3.0 → kinto-19.3.1}/.github/dependabot.yml +0 -0
  16. {kinto-19.3.0 → kinto-19.3.1}/.github/release.yml +0 -0
  17. {kinto-19.3.0 → kinto-19.3.1}/.github/workflows/labels.yaml +0 -0
  18. {kinto-19.3.0 → kinto-19.3.1}/.github/workflows/publish.yml +0 -0
  19. {kinto-19.3.0 → kinto-19.3.1}/.github/workflows/test.yml +0 -0
  20. {kinto-19.3.0 → kinto-19.3.1}/.gitignore +0 -0
  21. {kinto-19.3.0 → kinto-19.3.1}/CHANGELOG.rst +0 -0
  22. {kinto-19.3.0 → kinto-19.3.1}/CONTRIBUTORS.rst +0 -0
  23. {kinto-19.3.0 → kinto-19.3.1}/Dockerfile +0 -0
  24. {kinto-19.3.0 → kinto-19.3.1}/LICENSE +0 -0
  25. {kinto-19.3.0 → kinto-19.3.1}/Makefile +0 -0
  26. {kinto-19.3.0 → kinto-19.3.1}/README.rst +0 -0
  27. {kinto-19.3.0 → kinto-19.3.1}/SECURITY.md +0 -0
  28. {kinto-19.3.0 → kinto-19.3.1}/SUPPORT.md +0 -0
  29. {kinto-19.3.0 → kinto-19.3.1}/app.wsgi +0 -0
  30. {kinto-19.3.0 → kinto-19.3.1}/constraints.in +0 -0
  31. {kinto-19.3.0 → kinto-19.3.1}/contribute.json +0 -0
  32. {kinto-19.3.0 → kinto-19.3.1}/docker-compose.yml +0 -0
  33. {kinto-19.3.0 → kinto-19.3.1}/docs/_static/piwik.js +0 -0
  34. {kinto-19.3.0 → kinto-19.3.1}/docs/_static/theme_overrides.css +0 -0
  35. {kinto-19.3.0 → kinto-19.3.1}/docs/_templates/footer.html +0 -0
  36. {kinto-19.3.0 → kinto-19.3.1}/docs/_templates/indexcontent.html +0 -0
  37. {kinto-19.3.0 → kinto-19.3.1}/docs/_templates/layout.html +0 -0
  38. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-delete-list.rst +0 -0
  39. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-delete-object.rst +0 -0
  40. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-get-list.rst +0 -0
  41. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-get-object.rst +0 -0
  42. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-head-list.rst +0 -0
  43. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-patch-object.rst +0 -0
  44. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-post-list.rst +0 -0
  45. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_details-put-object.rst +0 -0
  46. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-delete-list.rst +0 -0
  47. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-delete-object.rst +0 -0
  48. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-get-list.rst +0 -0
  49. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-get-object.rst +0 -0
  50. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-patch-object.rst +0 -0
  51. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-post-list.rst +0 -0
  52. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/_status-put-object.rst +0 -0
  53. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/accounts.rst +0 -0
  54. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/admin.rst +0 -0
  55. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/authentication.rst +0 -0
  56. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/backoff.rst +0 -0
  57. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/batch.rst +0 -0
  58. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/buckets.rst +0 -0
  59. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/collections.rst +0 -0
  60. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/deprecation.rst +0 -0
  61. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/errors.rst +0 -0
  62. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/filtering.rst +0 -0
  63. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/flush.rst +0 -0
  64. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/groups.rst +0 -0
  65. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/history.rst +0 -0
  66. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/index.rst +0 -0
  67. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/openapi.rst +0 -0
  68. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/openid.rst +0 -0
  69. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/pagination.rst +0 -0
  70. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/permissions.rst +0 -0
  71. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/quotas.rst +0 -0
  72. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/records.rst +0 -0
  73. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/selecting_fields.rst +0 -0
  74. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/sorting.rst +0 -0
  75. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/timestamps.rst +0 -0
  76. {kinto-19.3.0 → kinto-19.3.1}/docs/api/1.x/utilities.rst +0 -0
  77. {kinto-19.3.0 → kinto-19.3.1}/docs/api/index.rst +0 -0
  78. {kinto-19.3.0 → kinto-19.3.1}/docs/api/versioning.rst +0 -0
  79. {kinto-19.3.0 → kinto-19.3.1}/docs/changelog.rst +0 -0
  80. {kinto-19.3.0 → kinto-19.3.1}/docs/commandline.rst +0 -0
  81. {kinto-19.3.0 → kinto-19.3.1}/docs/community.rst +0 -0
  82. {kinto-19.3.0 → kinto-19.3.1}/docs/concepts.rst +0 -0
  83. {kinto-19.3.0 → kinto-19.3.1}/docs/conf.py +0 -0
  84. {kinto-19.3.0 → kinto-19.3.1}/docs/configuration/good-practices.rst +0 -0
  85. {kinto-19.3.0 → kinto-19.3.1}/docs/configuration/index.rst +0 -0
  86. {kinto-19.3.0 → kinto-19.3.1}/docs/configuration/production.rst +0 -0
  87. {kinto-19.3.0 → kinto-19.3.1}/docs/configuration/settings.rst +0 -0
  88. {kinto-19.3.0 → kinto-19.3.1}/docs/core/_static/theme_overrides.css +0 -0
  89. {kinto-19.3.0 → kinto-19.3.1}/docs/core/api.rst +0 -0
  90. {kinto-19.3.0 → kinto-19.3.1}/docs/core/cache.rst +0 -0
  91. {kinto-19.3.0 → kinto-19.3.1}/docs/core/decorators.rst +0 -0
  92. {kinto-19.3.0 → kinto-19.3.1}/docs/core/errors.rst +0 -0
  93. {kinto-19.3.0 → kinto-19.3.1}/docs/core/glossary.rst +0 -0
  94. {kinto-19.3.0 → kinto-19.3.1}/docs/core/images/cliquet-base.png +0 -0
  95. {kinto-19.3.0 → kinto-19.3.1}/docs/core/images/cliquet-mozilla.png +0 -0
  96. {kinto-19.3.0 → kinto-19.3.1}/docs/core/index.rst +0 -0
  97. {kinto-19.3.0 → kinto-19.3.1}/docs/core/notifications.rst +0 -0
  98. {kinto-19.3.0 → kinto-19.3.1}/docs/core/permission.rst +0 -0
  99. {kinto-19.3.0 → kinto-19.3.1}/docs/core/quickstart.rst +0 -0
  100. {kinto-19.3.0 → kinto-19.3.1}/docs/core/rationale.rst +0 -0
  101. {kinto-19.3.0 → kinto-19.3.1}/docs/core/resource.rst +0 -0
  102. {kinto-19.3.0 → kinto-19.3.1}/docs/core/storage.rst +0 -0
  103. {kinto-19.3.0 → kinto-19.3.1}/docs/core/testing.rst +0 -0
  104. {kinto-19.3.0 → kinto-19.3.1}/docs/core/utils.rst +0 -0
  105. {kinto-19.3.0 → kinto-19.3.1}/docs/core/viewsets.rst +0 -0
  106. {kinto-19.3.0 → kinto-19.3.1}/docs/faq.rst +0 -0
  107. {kinto-19.3.0 → kinto-19.3.1}/docs/images/alwaysdata-button.svg +0 -0
  108. {kinto-19.3.0 → kinto-19.3.1}/docs/images/architecture.svg +0 -0
  109. {kinto-19.3.0 → kinto-19.3.1}/docs/images/color-formatter.png +0 -0
  110. {kinto-19.3.0 → kinto-19.3.1}/docs/images/concepts-general.png +0 -0
  111. {kinto-19.3.0 → kinto-19.3.1}/docs/images/concepts-permissions.png +0 -0
  112. {kinto-19.3.0 → kinto-19.3.1}/docs/images/heroku-button.png +0 -0
  113. {kinto-19.3.0 → kinto-19.3.1}/docs/images/kinto-logo.png +0 -0
  114. {kinto-19.3.0 → kinto-19.3.1}/docs/images/kinto-logo.svg +0 -0
  115. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-admin.svg +0 -0
  116. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-attachment.svg +0 -0
  117. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-community.svg +0 -0
  118. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-demos.svg +0 -0
  119. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-history.svg +0 -0
  120. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-indexing.svg +0 -0
  121. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-javascript.svg +0 -0
  122. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-jsonschema.svg +0 -0
  123. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-livesync.svg +0 -0
  124. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-multiapps.svg +0 -0
  125. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-offline.svg +0 -0
  126. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-permissions.svg +0 -0
  127. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-python.svg +0 -0
  128. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-quotas.svg +0 -0
  129. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-selfhostable.svg +0 -0
  130. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-signature.svg +0 -0
  131. {kinto-19.3.0 → kinto-19.3.1}/docs/images/logo-synchronisation.svg +0 -0
  132. {kinto-19.3.0 → kinto-19.3.1}/docs/images/overview-deployonce-selfhost.png +0 -0
  133. {kinto-19.3.0 → kinto-19.3.1}/docs/images/overview-features.png +0 -0
  134. {kinto-19.3.0 → kinto-19.3.1}/docs/images/overview-synchronisation.png +0 -0
  135. {kinto-19.3.0 → kinto-19.3.1}/docs/images/overview-use-cases.png +0 -0
  136. {kinto-19.3.0 → kinto-19.3.1}/docs/images/scalingo-button.svg +0 -0
  137. {kinto-19.3.0 → kinto-19.3.1}/docs/images/screenshot-kinto-admin-1.png +0 -0
  138. {kinto-19.3.0 → kinto-19.3.1}/docs/images/screenshot-kinto-admin-2.png +0 -0
  139. {kinto-19.3.0 → kinto-19.3.1}/docs/images/screenshot-kinto-admin-3.png +0 -0
  140. {kinto-19.3.0 → kinto-19.3.1}/docs/images/screenshot-kinto-admin-4.png +0 -0
  141. {kinto-19.3.0 → kinto-19.3.1}/docs/images/sequence-storage.png +0 -0
  142. {kinto-19.3.0 → kinto-19.3.1}/docs/images/sync-both.svg +0 -0
  143. {kinto-19.3.0 → kinto-19.3.1}/docs/images/sync-newest.svg +0 -0
  144. {kinto-19.3.0 → kinto-19.3.1}/docs/images/sync-oldest.svg +0 -0
  145. {kinto-19.3.0 → kinto-19.3.1}/docs/index.rst +0 -0
  146. {kinto-19.3.0 → kinto-19.3.1}/docs/kinto-admin.rst +0 -0
  147. {kinto-19.3.0 → kinto-19.3.1}/docs/overview.rst +0 -0
  148. {kinto-19.3.0 → kinto-19.3.1}/docs/troubleshooting.rst +0 -0
  149. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/app-examples.rst +0 -0
  150. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/authentication-github.rst +0 -0
  151. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/client-side-encryption.rst +0 -0
  152. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/custom-id-generator.rst +0 -0
  153. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/first-steps.rst +0 -0
  154. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/index.rst +0 -0
  155. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/install.rst +0 -0
  156. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/notifications-custom.rst +0 -0
  157. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/notifications-websockets.rst +0 -0
  158. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/permission-setups.rst +0 -0
  159. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/permissions.rst +0 -0
  160. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/synchronisation.rst +0 -0
  161. {kinto-19.3.0 → kinto-19.3.1}/docs/tutorials/write-plugin.rst +0 -0
  162. {kinto-19.3.0 → kinto-19.3.1}/kinto/__init__.py +0 -0
  163. {kinto-19.3.0 → kinto-19.3.1}/kinto/__main__.py +0 -0
  164. {kinto-19.3.0 → kinto-19.3.1}/kinto/authorization.py +0 -0
  165. {kinto-19.3.0 → kinto-19.3.1}/kinto/config/__init__.py +0 -0
  166. {kinto-19.3.0 → kinto-19.3.1}/kinto/config/kinto.tpl +0 -0
  167. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/__init__.py +0 -0
  168. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/authentication.py +0 -0
  169. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/authorization.py +0 -0
  170. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/__init__.py +0 -0
  171. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/memcached.py +0 -0
  172. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/memory.py +0 -0
  173. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/postgresql/__init__.py +0 -0
  174. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/postgresql/schema.sql +0 -0
  175. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/cache/testing.py +0 -0
  176. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/decorators.py +0 -0
  177. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/errors.py +0 -0
  178. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/events.py +0 -0
  179. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/listeners/__init__.py +0 -0
  180. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/metrics.py +0 -0
  181. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/openapi.py +0 -0
  182. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/__init__.py +0 -0
  183. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/memory.py +0 -0
  184. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/postgresql/__init__.py +0 -0
  185. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
  186. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/postgresql/schema.sql +0 -0
  187. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/permission/testing.py +0 -0
  188. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/resource/model.py +0 -0
  189. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/resource/schema.py +0 -0
  190. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/resource/viewset.py +0 -0
  191. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/schema.py +0 -0
  192. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/scripts.py +0 -0
  193. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/statsd.py +0 -0
  194. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/__init__.py +0 -0
  195. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/exceptions.py +0 -0
  196. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/generators.py +0 -0
  197. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/memory.py +0 -0
  198. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/__init__.py +0 -0
  199. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/client.py +0 -0
  200. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
  201. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
  202. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
  203. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
  204. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
  205. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
  206. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
  207. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
  208. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
  209. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
  210. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
  211. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
  212. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
  213. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
  214. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
  215. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
  216. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
  217. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
  218. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
  219. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
  220. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
  221. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/migrator.py +0 -0
  222. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/pool.py +0 -0
  223. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/postgresql/schema.sql +0 -0
  224. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/testing.py +0 -0
  225. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/storage/utils.py +0 -0
  226. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/testing.py +0 -0
  227. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/utils.py +0 -0
  228. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/__init__.py +0 -0
  229. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/batch.py +0 -0
  230. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/errors.py +0 -0
  231. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/heartbeat.py +0 -0
  232. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/hello.py +0 -0
  233. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/openapi.py +0 -0
  234. {kinto-19.3.0 → kinto-19.3.1}/kinto/core/views/version.py +0 -0
  235. {kinto-19.3.0 → kinto-19.3.1}/kinto/events.py +0 -0
  236. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/__init__.py +0 -0
  237. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/__init__.py +0 -0
  238. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/authentication.py +0 -0
  239. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/mails.py +0 -0
  240. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/scripts.py +0 -0
  241. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/utils.py +0 -0
  242. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/views/__init__.py +0 -0
  243. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/accounts/views/validation.py +0 -0
  244. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/README.md +0 -0
  245. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/VERSION +0 -0
  246. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/__init__.py +0 -0
  247. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/VERSION +0 -0
  248. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/asn1-CGOzndHr.js +0 -0
  249. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
  250. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
  251. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/index-BKIg2XW8.js +0 -0
  252. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/index-D8oiN37x.css +0 -0
  253. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/javascript-iSgyE4tI.js +0 -0
  254. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
  255. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/mllike-C_8OmSiT.js +0 -0
  256. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
  257. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
  258. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/sql-C4g8LzGK.js +0 -0
  259. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/assets/ttcn-cfg-BIkV9KBc.js +0 -0
  260. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/build/index.html +0 -0
  261. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/public/help.html +0 -0
  262. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/admin/views.py +0 -0
  263. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/default_bucket/__init__.py +0 -0
  264. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/flush.py +0 -0
  265. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/history/__init__.py +0 -0
  266. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/history/listener.py +0 -0
  267. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/history/views.py +0 -0
  268. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/openid/__init__.py +0 -0
  269. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/openid/utils.py +0 -0
  270. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/openid/views.py +0 -0
  271. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/prometheus.py +0 -0
  272. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/quotas/__init__.py +0 -0
  273. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/quotas/listener.py +0 -0
  274. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/quotas/scripts.py +0 -0
  275. {kinto-19.3.0 → kinto-19.3.1}/kinto/plugins/quotas/utils.py +0 -0
  276. {kinto-19.3.0 → kinto-19.3.1}/kinto/schema_validation.py +0 -0
  277. {kinto-19.3.0 → kinto-19.3.1}/kinto/scripts.py +0 -0
  278. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/__init__.py +0 -0
  279. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/admin.py +0 -0
  280. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/buckets.py +0 -0
  281. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/collections.py +0 -0
  282. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/contribute.py +0 -0
  283. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/groups.py +0 -0
  284. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/permissions.py +0 -0
  285. {kinto-19.3.0 → kinto-19.3.1}/kinto/views/records.py +0 -0
  286. {kinto-19.3.0 → kinto-19.3.1}/kinto.egg-info/SOURCES.txt +0 -0
  287. {kinto-19.3.0 → kinto-19.3.1}/kinto.egg-info/dependency_links.txt +0 -0
  288. {kinto-19.3.0 → kinto-19.3.1}/kinto.egg-info/entry_points.txt +0 -0
  289. {kinto-19.3.0 → kinto-19.3.1}/kinto.egg-info/requires.txt +0 -0
  290. {kinto-19.3.0 → kinto-19.3.1}/kinto.egg-info/top_level.txt +0 -0
  291. {kinto-19.3.0 → kinto-19.3.1}/pyproject.toml +0 -0
  292. {kinto-19.3.0 → kinto-19.3.1}/scripts/pull-kinto-admin.sh +0 -0
  293. {kinto-19.3.0 → kinto-19.3.1}/setup.cfg +0 -0
  294. {kinto-19.3.0 → kinto-19.3.1}/tests/__init__.py +0 -0
  295. {kinto-19.3.0 → kinto-19.3.1}/tests/browser.ini +0 -0
  296. {kinto-19.3.0 → kinto-19.3.1}/tests/browser.py +0 -0
  297. {kinto-19.3.0 → kinto-19.3.1}/tests/core/__init__.py +0 -0
  298. {kinto-19.3.0 → kinto-19.3.1}/tests/core/listeners.py +0 -0
  299. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/__init__.py +0 -0
  300. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_base.py +0 -0
  301. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_cache_expires.py +0 -0
  302. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_events.py +0 -0
  303. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_model.py +0 -0
  304. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_object.py +0 -0
  305. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_object_permissions.py +0 -0
  306. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_pagination.py +0 -0
  307. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_partial_response.py +0 -0
  308. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_preconditions.py +0 -0
  309. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_schema.py +0 -0
  310. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_sort.py +0 -0
  311. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_sync.py +0 -0
  312. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_views.py +0 -0
  313. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_views_cors.py +0 -0
  314. {kinto-19.3.0 → kinto-19.3.1}/tests/core/resource/test_viewset.py +0 -0
  315. {kinto-19.3.0 → kinto-19.3.1}/tests/core/schema/postgresql-permission-1.sql +0 -0
  316. {kinto-19.3.0 → kinto-19.3.1}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
  317. {kinto-19.3.0 → kinto-19.3.1}/tests/core/schema/postgresql-storage-11.sql +0 -0
  318. {kinto-19.3.0 → kinto-19.3.1}/tests/core/support.py +0 -0
  319. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_authentication.py +0 -0
  320. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_authorization.py +0 -0
  321. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_cache.py +0 -0
  322. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_decorators.py +0 -0
  323. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_deprecation.py +0 -0
  324. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_errors.py +0 -0
  325. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_listeners.py +0 -0
  326. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_logging.py +0 -0
  327. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_metrics.py +0 -0
  328. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_openapi.py +0 -0
  329. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_permission.py +0 -0
  330. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_schema.py +0 -0
  331. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_scripts.py +0 -0
  332. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_storage.py +0 -0
  333. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_storage_migrations.py +0 -0
  334. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_storage_pool.py +0 -0
  335. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_utils.py +0 -0
  336. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_batch.py +0 -0
  337. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_errors.py +0 -0
  338. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_heartbeat.py +0 -0
  339. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_hello.py +0 -0
  340. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_openapi.py +0 -0
  341. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_postgresql.py +0 -0
  342. {kinto-19.3.0 → kinto-19.3.1}/tests/core/test_views_transaction.py +0 -0
  343. {kinto-19.3.0 → kinto-19.3.1}/tests/core/testapp/__init__.py +0 -0
  344. {kinto-19.3.0 → kinto-19.3.1}/tests/core/testapp/static/index.html +0 -0
  345. {kinto-19.3.0 → kinto-19.3.1}/tests/core/testapp/views.py +0 -0
  346. {kinto-19.3.0 → kinto-19.3.1}/tests/core/testplugin/__init__.py +0 -0
  347. {kinto-19.3.0 → kinto-19.3.1}/tests/functional.ini +0 -0
  348. {kinto-19.3.0 → kinto-19.3.1}/tests/functional.py +0 -0
  349. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/__init__.py +0 -0
  350. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/support.py +0 -0
  351. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_plugins.py +0 -0
  352. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_resources.py +0 -0
  353. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_responses_buckets.py +0 -0
  354. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_responses_collections.py +0 -0
  355. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_responses_errors.py +0 -0
  356. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_responses_groups.py +0 -0
  357. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_responses_records.py +0 -0
  358. {kinto-19.3.0 → kinto-19.3.1}/tests/openapi/test_validation.py +0 -0
  359. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/__init__.py +0 -0
  360. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_accounts.py +0 -0
  361. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_admin.py +0 -0
  362. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_default_bucket.py +0 -0
  363. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_flush.py +0 -0
  364. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_history.py +0 -0
  365. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_openid.py +0 -0
  366. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_prometheus.py +0 -0
  367. {kinto-19.3.0 → kinto-19.3.1}/tests/plugins/test_quotas.py +0 -0
  368. {kinto-19.3.0 → kinto-19.3.1}/tests/support.py +0 -0
  369. {kinto-19.3.0 → kinto-19.3.1}/tests/test_authorization.py +0 -0
  370. {kinto-19.3.0 → kinto-19.3.1}/tests/test_config.py +0 -0
  371. {kinto-19.3.0 → kinto-19.3.1}/tests/test_configuration/test.ini +0 -0
  372. {kinto-19.3.0 → kinto-19.3.1}/tests/test_init.py +0 -0
  373. {kinto-19.3.0 → kinto-19.3.1}/tests/test_main.py +0 -0
  374. {kinto-19.3.0 → kinto-19.3.1}/tests/test_scripts.py +0 -0
  375. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_admin.py +0 -0
  376. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_buckets.py +0 -0
  377. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_collections.py +0 -0
  378. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_collections_cache.py +0 -0
  379. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_contribute.py +0 -0
  380. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_disable_default.py +0 -0
  381. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_groups.py +0 -0
  382. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_hello.py +0 -0
  383. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_metrics.py +0 -0
  384. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_objects_permissions.py +0 -0
  385. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_permissions.py +0 -0
  386. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_records.py +0 -0
  387. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_schema_collection.py +0 -0
  388. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_schema_group.py +0 -0
  389. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_schema_record.py +0 -0
  390. {kinto-19.3.0 → kinto-19.3.1}/tests/test_views_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kinto
3
- Version: 19.3.0
3
+ Version: 19.3.1
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
@@ -10,7 +10,7 @@ attrs==23.2.0
10
10
  # via
11
11
  # jsonschema
12
12
  # referencing
13
- bcrypt==4.2.0
13
+ bcrypt==4.2.1
14
14
  # via -r constraints.in
15
15
  beautifulsoup4==4.12.3
16
16
  # via webtest
@@ -36,7 +36,7 @@ cornice==6.0.1
36
36
  # cornice-swagger
37
37
  cornice-swagger==1.0.1
38
38
  # via -r constraints.in
39
- coverage==7.4.0
39
+ coverage==7.6.4
40
40
  # via pytest-cov
41
41
  dockerflow==2024.4.2
42
42
  # via -r constraints.in
@@ -81,7 +81,7 @@ markupsafe==2.1.4
81
81
  # via werkzeug
82
82
  msgpack==1.0.7
83
83
  # via bravado-core
84
- newrelic==10.2.0
84
+ newrelic==10.3.1
85
85
  # via -r constraints.in
86
86
  packaging==23.2
87
87
  # via
@@ -96,11 +96,11 @@ plaster==1.1.2
96
96
  # pyramid
97
97
  plaster-pastedeploy==1.0.1
98
98
  # via pyramid
99
- playwright==1.48.0
99
+ playwright==1.49.0
100
100
  # via -r constraints.in
101
101
  pluggy==1.5.0
102
102
  # via pytest
103
- prometheus-client==0.21.0
103
+ prometheus-client==0.21.1
104
104
  # via -r constraints.in
105
105
  psycopg2==2.9.10
106
106
  # via -r constraints.in
@@ -119,16 +119,16 @@ pyramid-mailer==0.15.1
119
119
  # via -r constraints.in
120
120
  pyramid-multiauth==1.0.2
121
121
  # via -r constraints.in
122
- pyramid-tm==2.5
122
+ pyramid-tm==2.6
123
123
  # via -r constraints.in
124
- pytest==8.3.3
124
+ pytest==8.3.4
125
125
  # via
126
126
  # -r constraints.in
127
127
  # pytest-cache
128
128
  # pytest-cov
129
129
  pytest-cache==1.0
130
130
  # via -r constraints.in
131
- pytest-cov==5.0.0
131
+ pytest-cov==6.0.0
132
132
  # via -r constraints.in
133
133
  python-dateutil==2.9.0.post0
134
134
  # via
@@ -163,7 +163,7 @@ rpds-py==0.17.1
163
163
  # via
164
164
  # jsonschema
165
165
  # referencing
166
- ruff==0.7.1
166
+ ruff==0.8.2
167
167
  # via -r constraints.in
168
168
  sentry-sdk==2.8.0
169
169
  # via -r constraints.in
@@ -214,7 +214,7 @@ venusian==3.1.0
214
214
  # via
215
215
  # cornice
216
216
  # pyramid
217
- waitress==3.0.1
217
+ waitress==3.0.2
218
218
  # via
219
219
  # -r constraints.in
220
220
  # webtest
@@ -226,7 +226,7 @@ webob==1.8.8
226
226
  # webtest
227
227
  webtest==3.0.0
228
228
  # via -r constraints.in
229
- werkzeug==3.0.6
229
+ werkzeug==3.1.3
230
230
  # via -r constraints.in
231
231
  zope-deprecation==5.0
232
232
  # via pyramid
@@ -1,11 +1,11 @@
1
1
  Sphinx==8.1.3
2
- sphinx_rtd_theme==3.0.1
2
+ sphinx_rtd_theme==3.0.2
3
3
  docutils==0.20.1
4
4
  sphinxcontrib-httpdomain==1.8.1
5
5
  sphinx-github-changelog==1.4.0
6
6
  kinto
7
7
  mock==5.1.0
8
- webtest==3.0.1
8
+ webtest==3.0.2
9
9
  cornice==6.1.0
10
10
  pyramid==2.0.2
11
11
  python-rapidjson==1.20
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  import random
3
3
  import re
4
+ import urllib.parse
4
5
  import warnings
5
6
  from datetime import datetime
6
7
  from secrets import token_hex
@@ -474,6 +475,7 @@ def setup_metrics(config):
474
475
 
475
476
  try:
476
477
  endpoint = utils.strip_uri_prefix(request.path)
478
+ endpoint = urllib.parse.quote_plus(endpoint, safe="/?&=-_")
477
479
  except UnicodeDecodeError as e:
478
480
  # This `on_new_response` callback is also called when a HTTP 400
479
481
  # is returned because of an invalid UTF-8 path. We still want metrics.
@@ -507,7 +509,7 @@ def setup_metrics(config):
507
509
  unique=[
508
510
  ("method", request.method.lower()),
509
511
  ("endpoint", endpoint),
510
- ("status", str(request.response.status_code)),
512
+ ("status", str(event.response.status_code)),
511
513
  ]
512
514
  + metrics_matchdict_labels,
513
515
  )
@@ -527,7 +529,7 @@ def setup_metrics(config):
527
529
  # Observe response size.
528
530
  metrics_service.observe(
529
531
  "request_size",
530
- len(request.response.body or b""),
532
+ len(event.response.body or b""),
531
533
  labels=[("endpoint", endpoint)] + metrics_matchdict_labels,
532
534
  )
533
535
 
@@ -665,7 +665,7 @@ class Resource:
665
665
  obj = self._get_object_or_404(self.object_id)
666
666
  self._raise_412_if_modified(obj)
667
667
 
668
- # Retreive the last_modified information from a querystring if present.
668
+ # Retrieve the last_modified information from a querystring if present.
669
669
  last_modified = self.request.validated["querystring"].get("last_modified")
670
670
 
671
671
  # If less or equal than current object. Ignore it.
@@ -1060,7 +1060,8 @@ class Resource:
1060
1060
  """Extracts filters from QueryString parameters."""
1061
1061
 
1062
1062
  def is_valid_timestamp(value):
1063
- return isinstance(value, int) or re.match(r'^"?\d+"?$', str(value))
1063
+ # Is either integer, or integer as string, or integer between 2 quotes.
1064
+ return isinstance(value, int) or re.match(r'^(\d+)$|^("\d+")$', str(value))
1064
1065
 
1065
1066
  queryparams = self.request.validated["querystring"]
1066
1067
 
@@ -13,6 +13,14 @@ except ImportError: # pragma: no cover
13
13
  statsd_module = None
14
14
 
15
15
 
16
+ def sanitize(value):
17
+ """
18
+ Telegraf does not support ':' in values.
19
+ See https://github.com/influxdata/telegraf/issues/4495
20
+ """
21
+ return value.replace(":", "") if isinstance(value, str) else value
22
+
23
+
16
24
  @implementer(metrics.IMetricsService)
17
25
  class StatsDService:
18
26
  def __init__(self, host, port, prefix):
@@ -22,7 +30,7 @@ class StatsDService:
22
30
  return self._client.timer(key)
23
31
 
24
32
  def observe(self, key, value, labels=[]):
25
- return self._client.gauge(key, value)
33
+ return self._client.gauge(key, sanitize(value))
26
34
 
27
35
  def count(self, key, count=1, unique=None):
28
36
  if unique is None:
@@ -30,7 +38,7 @@ class StatsDService:
30
38
  if isinstance(unique, list):
31
39
  # [("method", "get")] -> "method.get"
32
40
  # [("endpoint", "/"), ("method", "get")] -> "endpoint./.method.get"
33
- unique = ".".join(f"{label[0]}.{label[1]}" for label in unique)
41
+ unique = ".".join(f"{label[0]}.{sanitize(label[1])}" for label in unique)
34
42
  else:
35
43
  warnings.warn(
36
44
  "`unique` parameter should be of type ``list[tuple[str, str]]``",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kinto
3
- Version: 19.3.0
3
+ Version: 19.3.1
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
@@ -92,6 +92,10 @@ class FilteringTest(BaseTest):
92
92
  self.validated["querystring"] = {"lt_last_modified": bad_value}
93
93
  self.assertRaises(httpexceptions.HTTPBadRequest, self.resource.plural_get)
94
94
 
95
+ def test_filter_raises_error_if_last_modified_value_has_malformed_quotes(self):
96
+ self.validated["querystring"] = {"last_modified": '123"'}
97
+ self.assertRaises(httpexceptions.HTTPBadRequest, self.resource.plural_get)
98
+
95
99
  def test_filter_works_with_since_none(self):
96
100
  self.validated["querystring"] = {"_since": None}
97
101
  result = self.resource.plural_get()
@@ -420,6 +420,25 @@ class MetricsConfigurationTest(unittest.TestCase):
420
420
  unique=[("method", "get"), ("endpoint", "/__heartbeat__"), ("status", "200")],
421
421
  )
422
422
 
423
+ def test_statsd_sanitizes_url_in_metrics(self):
424
+ kinto.core.initialize(self.config, "0.0.1", "settings_prefix")
425
+ app = webtest.TestApp(self.config.make_wsgi_app())
426
+ app.get(
427
+ "/v0/changeset'%7C%22%3F%3E%3C!DOCTYPE%22http://xh3E'),'/l')%20from%20dual)%7C'",
428
+ status=404,
429
+ )
430
+ self.mocked().count.assert_any_call(
431
+ "request_summary",
432
+ unique=[
433
+ ("method", "get"),
434
+ (
435
+ "endpoint",
436
+ "/changeset%27%257C%2522%253F%253E%253C%21DOCTYPE%2522http%3A//xh3E%27%29%2C%27/l%27%29%2520from%2520dual%29%257C%27",
437
+ ),
438
+ ("status", "404"),
439
+ ],
440
+ )
441
+
423
442
  def test_statsd_observe_request_size(self):
424
443
  kinto.core.initialize(self.config, "0.0.1", "settings_prefix")
425
444
  app = webtest.TestApp(self.config.make_wsgi_app())
@@ -61,6 +61,11 @@ class StatsdClientTest(unittest.TestCase):
61
61
  self.client.count("click", unique=[("component", "menu"), ("sound", "off")])
62
62
  mocked_client.set.assert_called_with("click", "component.menu.sound.off")
63
63
 
64
+ def test_values_are_sanitized(self):
65
+ with mock.patch.object(self.client, "_client") as mocked_client:
66
+ self.client.count("click", unique=[("user", "account:boss")])
67
+ mocked_client.set.assert_called_with("click", "user.accountboss")
68
+
64
69
  @mock.patch("kinto.plugins.statsd.statsd_module")
65
70
  def test_load_from_config(self, module_mock):
66
71
  config = testing.setUp()
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