kinto 21.1.1__tar.gz → 23.0.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 (394) hide show
  1. {kinto-21.1.1 → kinto-23.0.0}/.github/workflows/test.yml +2 -0
  2. {kinto-21.1.1 → kinto-23.0.0}/Makefile +58 -66
  3. {kinto-21.1.1 → kinto-23.0.0}/PKG-INFO +2 -1
  4. {kinto-21.1.1 → kinto-23.0.0}/constraints.txt +4 -4
  5. {kinto-21.1.1 → kinto-23.0.0}/docs/community.rst +1 -7
  6. {kinto-21.1.1 → kinto-23.0.0}/docs/configuration/settings.rst +11 -2
  7. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/initialization.py +2 -3
  8. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/metrics.py +4 -4
  9. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/prometheus.py +71 -50
  10. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/PKG-INFO +2 -1
  11. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/requires.txt +1 -0
  12. {kinto-21.1.1 → kinto-23.0.0}/pyproject.toml +1 -0
  13. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_events.py +2 -2
  14. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_initialization.py +3 -3
  15. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_metrics.py +2 -2
  16. {kinto-21.1.1 → kinto-23.0.0}/tests/functional.ini +7 -0
  17. {kinto-21.1.1 → kinto-23.0.0}/tests/functional.py +11 -0
  18. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_history.py +1 -1
  19. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_prometheus.py +39 -21
  20. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_metrics.py +4 -5
  21. {kinto-21.1.1 → kinto-23.0.0}/.dockerignore +0 -0
  22. {kinto-21.1.1 → kinto-23.0.0}/.github/CODE_OF_CONDUCT.md +0 -0
  23. {kinto-21.1.1 → kinto-23.0.0}/.github/CONTRIBUTING.md +0 -0
  24. {kinto-21.1.1 → kinto-23.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  25. {kinto-21.1.1 → kinto-23.0.0}/.github/dependabot.yml +0 -0
  26. {kinto-21.1.1 → kinto-23.0.0}/.github/release.yml +0 -0
  27. {kinto-21.1.1 → kinto-23.0.0}/.github/workflows/labels.yaml +0 -0
  28. {kinto-21.1.1 → kinto-23.0.0}/.github/workflows/publish.yml +0 -0
  29. {kinto-21.1.1 → kinto-23.0.0}/.github/workflows/scheduled.yml +0 -0
  30. {kinto-21.1.1 → kinto-23.0.0}/.gitignore +0 -0
  31. {kinto-21.1.1 → kinto-23.0.0}/.readthedocs.yaml +0 -0
  32. {kinto-21.1.1 → kinto-23.0.0}/CHANGELOG.rst +0 -0
  33. {kinto-21.1.1 → kinto-23.0.0}/CONTRIBUTORS.rst +0 -0
  34. {kinto-21.1.1 → kinto-23.0.0}/Dockerfile +0 -0
  35. {kinto-21.1.1 → kinto-23.0.0}/LICENSE +0 -0
  36. {kinto-21.1.1 → kinto-23.0.0}/README.rst +0 -0
  37. {kinto-21.1.1 → kinto-23.0.0}/SECURITY.md +0 -0
  38. {kinto-21.1.1 → kinto-23.0.0}/SUPPORT.md +0 -0
  39. {kinto-21.1.1 → kinto-23.0.0}/app.wsgi +0 -0
  40. {kinto-21.1.1 → kinto-23.0.0}/constraints.in +0 -0
  41. {kinto-21.1.1 → kinto-23.0.0}/docker-compose.yml +0 -0
  42. {kinto-21.1.1 → kinto-23.0.0}/docs/_static/piwik.js +0 -0
  43. {kinto-21.1.1 → kinto-23.0.0}/docs/_static/theme_overrides.css +0 -0
  44. {kinto-21.1.1 → kinto-23.0.0}/docs/_templates/footer.html +0 -0
  45. {kinto-21.1.1 → kinto-23.0.0}/docs/_templates/indexcontent.html +0 -0
  46. {kinto-21.1.1 → kinto-23.0.0}/docs/_templates/layout.html +0 -0
  47. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-delete-list.rst +0 -0
  48. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-delete-object.rst +0 -0
  49. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-get-list.rst +0 -0
  50. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-get-object.rst +0 -0
  51. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-head-list.rst +0 -0
  52. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-patch-object.rst +0 -0
  53. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-post-list.rst +0 -0
  54. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_details-put-object.rst +0 -0
  55. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-delete-list.rst +0 -0
  56. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-delete-object.rst +0 -0
  57. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-get-list.rst +0 -0
  58. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-get-object.rst +0 -0
  59. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-patch-object.rst +0 -0
  60. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-post-list.rst +0 -0
  61. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/_status-put-object.rst +0 -0
  62. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/accounts.rst +0 -0
  63. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/admin.rst +0 -0
  64. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/authentication.rst +0 -0
  65. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/backoff.rst +0 -0
  66. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/batch.rst +0 -0
  67. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/buckets.rst +0 -0
  68. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/collections.rst +0 -0
  69. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/deprecation.rst +0 -0
  70. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/errors.rst +0 -0
  71. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/filtering.rst +0 -0
  72. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/flush.rst +0 -0
  73. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/groups.rst +0 -0
  74. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/history.rst +0 -0
  75. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/index.rst +0 -0
  76. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/openapi.rst +0 -0
  77. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/openid.rst +0 -0
  78. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/pagination.rst +0 -0
  79. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/permissions.rst +0 -0
  80. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/records.rst +0 -0
  81. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/selecting_fields.rst +0 -0
  82. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/sorting.rst +0 -0
  83. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/timestamps.rst +0 -0
  84. {kinto-21.1.1 → kinto-23.0.0}/docs/api/1.x/utilities.rst +0 -0
  85. {kinto-21.1.1 → kinto-23.0.0}/docs/api/index.rst +0 -0
  86. {kinto-21.1.1 → kinto-23.0.0}/docs/api/versioning.rst +0 -0
  87. {kinto-21.1.1 → kinto-23.0.0}/docs/changelog.rst +0 -0
  88. {kinto-21.1.1 → kinto-23.0.0}/docs/commandline.rst +0 -0
  89. {kinto-21.1.1 → kinto-23.0.0}/docs/concepts.rst +0 -0
  90. {kinto-21.1.1 → kinto-23.0.0}/docs/conf.py +0 -0
  91. {kinto-21.1.1 → kinto-23.0.0}/docs/configuration/good-practices.rst +0 -0
  92. {kinto-21.1.1 → kinto-23.0.0}/docs/configuration/index.rst +0 -0
  93. {kinto-21.1.1 → kinto-23.0.0}/docs/configuration/production.rst +0 -0
  94. {kinto-21.1.1 → kinto-23.0.0}/docs/core/_static/theme_overrides.css +0 -0
  95. {kinto-21.1.1 → kinto-23.0.0}/docs/core/api.rst +0 -0
  96. {kinto-21.1.1 → kinto-23.0.0}/docs/core/cache.rst +0 -0
  97. {kinto-21.1.1 → kinto-23.0.0}/docs/core/decorators.rst +0 -0
  98. {kinto-21.1.1 → kinto-23.0.0}/docs/core/errors.rst +0 -0
  99. {kinto-21.1.1 → kinto-23.0.0}/docs/core/glossary.rst +0 -0
  100. {kinto-21.1.1 → kinto-23.0.0}/docs/core/images/cliquet-base.png +0 -0
  101. {kinto-21.1.1 → kinto-23.0.0}/docs/core/images/cliquet-mozilla.png +0 -0
  102. {kinto-21.1.1 → kinto-23.0.0}/docs/core/index.rst +0 -0
  103. {kinto-21.1.1 → kinto-23.0.0}/docs/core/notifications.rst +0 -0
  104. {kinto-21.1.1 → kinto-23.0.0}/docs/core/permission.rst +0 -0
  105. {kinto-21.1.1 → kinto-23.0.0}/docs/core/quickstart.rst +0 -0
  106. {kinto-21.1.1 → kinto-23.0.0}/docs/core/rationale.rst +0 -0
  107. {kinto-21.1.1 → kinto-23.0.0}/docs/core/resource.rst +0 -0
  108. {kinto-21.1.1 → kinto-23.0.0}/docs/core/storage.rst +0 -0
  109. {kinto-21.1.1 → kinto-23.0.0}/docs/core/testing.rst +0 -0
  110. {kinto-21.1.1 → kinto-23.0.0}/docs/core/utils.rst +0 -0
  111. {kinto-21.1.1 → kinto-23.0.0}/docs/core/viewsets.rst +0 -0
  112. {kinto-21.1.1 → kinto-23.0.0}/docs/faq.rst +0 -0
  113. {kinto-21.1.1 → kinto-23.0.0}/docs/images/alwaysdata-button.svg +0 -0
  114. {kinto-21.1.1 → kinto-23.0.0}/docs/images/architecture.svg +0 -0
  115. {kinto-21.1.1 → kinto-23.0.0}/docs/images/color-formatter.png +0 -0
  116. {kinto-21.1.1 → kinto-23.0.0}/docs/images/concepts-general.png +0 -0
  117. {kinto-21.1.1 → kinto-23.0.0}/docs/images/concepts-permissions.png +0 -0
  118. {kinto-21.1.1 → kinto-23.0.0}/docs/images/heroku-button.png +0 -0
  119. {kinto-21.1.1 → kinto-23.0.0}/docs/images/kinto-logo.png +0 -0
  120. {kinto-21.1.1 → kinto-23.0.0}/docs/images/kinto-logo.svg +0 -0
  121. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-admin.svg +0 -0
  122. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-attachment.svg +0 -0
  123. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-community.svg +0 -0
  124. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-history.svg +0 -0
  125. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-javascript.svg +0 -0
  126. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-jsonschema.svg +0 -0
  127. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-multiapps.svg +0 -0
  128. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-permissions.svg +0 -0
  129. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-python.svg +0 -0
  130. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-selfhostable.svg +0 -0
  131. {kinto-21.1.1 → kinto-23.0.0}/docs/images/logo-synchronisation.svg +0 -0
  132. {kinto-21.1.1 → kinto-23.0.0}/docs/images/overview-deployonce-selfhost.png +0 -0
  133. {kinto-21.1.1 → kinto-23.0.0}/docs/images/overview-features.png +0 -0
  134. {kinto-21.1.1 → kinto-23.0.0}/docs/images/overview-synchronisation.png +0 -0
  135. {kinto-21.1.1 → kinto-23.0.0}/docs/images/overview-use-cases.png +0 -0
  136. {kinto-21.1.1 → kinto-23.0.0}/docs/images/scalingo-button.svg +0 -0
  137. {kinto-21.1.1 → kinto-23.0.0}/docs/images/screenshot-kinto-admin-1.png +0 -0
  138. {kinto-21.1.1 → kinto-23.0.0}/docs/images/screenshot-kinto-admin-2.png +0 -0
  139. {kinto-21.1.1 → kinto-23.0.0}/docs/images/screenshot-kinto-admin-3.png +0 -0
  140. {kinto-21.1.1 → kinto-23.0.0}/docs/images/screenshot-kinto-admin-4.png +0 -0
  141. {kinto-21.1.1 → kinto-23.0.0}/docs/images/sequence-storage.png +0 -0
  142. {kinto-21.1.1 → kinto-23.0.0}/docs/images/sync-both.svg +0 -0
  143. {kinto-21.1.1 → kinto-23.0.0}/docs/images/sync-newest.svg +0 -0
  144. {kinto-21.1.1 → kinto-23.0.0}/docs/images/sync-oldest.svg +0 -0
  145. {kinto-21.1.1 → kinto-23.0.0}/docs/index.rst +0 -0
  146. {kinto-21.1.1 → kinto-23.0.0}/docs/kinto-admin.rst +0 -0
  147. {kinto-21.1.1 → kinto-23.0.0}/docs/overview.rst +0 -0
  148. {kinto-21.1.1 → kinto-23.0.0}/docs/requirements.txt +0 -0
  149. {kinto-21.1.1 → kinto-23.0.0}/docs/troubleshooting.rst +0 -0
  150. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/custom-id-generator.rst +0 -0
  151. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/first-steps.rst +0 -0
  152. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/index.rst +0 -0
  153. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/install.rst +0 -0
  154. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/notifications-custom.rst +0 -0
  155. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/permission-setups.rst +0 -0
  156. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/permissions.rst +0 -0
  157. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/synchronisation.rst +0 -0
  158. {kinto-21.1.1 → kinto-23.0.0}/docs/tutorials/write-plugin.rst +0 -0
  159. {kinto-21.1.1 → kinto-23.0.0}/kinto/__init__.py +0 -0
  160. {kinto-21.1.1 → kinto-23.0.0}/kinto/__main__.py +0 -0
  161. {kinto-21.1.1 → kinto-23.0.0}/kinto/authorization.py +0 -0
  162. {kinto-21.1.1 → kinto-23.0.0}/kinto/config/__init__.py +0 -0
  163. {kinto-21.1.1 → kinto-23.0.0}/kinto/config/kinto.tpl +0 -0
  164. {kinto-21.1.1 → kinto-23.0.0}/kinto/contribute.json +0 -0
  165. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/__init__.py +0 -0
  166. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/authentication.py +0 -0
  167. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/authorization.py +0 -0
  168. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/__init__.py +0 -0
  169. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/memcached.py +0 -0
  170. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/memory.py +0 -0
  171. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/postgresql/__init__.py +0 -0
  172. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/postgresql/schema.sql +0 -0
  173. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cache/testing.py +0 -0
  174. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/__init__.py +0 -0
  175. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/cors.py +0 -0
  176. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/errors.py +0 -0
  177. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/pyramidhook.py +0 -0
  178. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/renderer.py +0 -0
  179. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/resource.py +0 -0
  180. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/service.py +0 -0
  181. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/util.py +0 -0
  182. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/validators/__init__.py +0 -0
  183. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/validators/_colander.py +0 -0
  184. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice/validators/_marshmallow.py +0 -0
  185. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/__init__.py +0 -0
  186. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/converters/__init__.py +0 -0
  187. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/converters/exceptions.py +0 -0
  188. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/converters/parameters.py +0 -0
  189. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/converters/schema.py +0 -0
  190. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/swagger.py +0 -0
  191. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/templates/index.html +0 -0
  192. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/templates/index_script_template.html +0 -0
  193. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/util.py +0 -0
  194. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/cornice_swagger/views.py +0 -0
  195. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/decorators.py +0 -0
  196. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/errors.py +0 -0
  197. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/events.py +0 -0
  198. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/listeners/__init__.py +0 -0
  199. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/openapi.py +0 -0
  200. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/__init__.py +0 -0
  201. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/memory.py +0 -0
  202. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/postgresql/__init__.py +0 -0
  203. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
  204. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/postgresql/schema.sql +0 -0
  205. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/permission/testing.py +0 -0
  206. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/resource/__init__.py +0 -0
  207. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/resource/model.py +0 -0
  208. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/resource/schema.py +0 -0
  209. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/resource/viewset.py +0 -0
  210. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/schema.py +0 -0
  211. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/scripts.py +0 -0
  212. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/statsd.py +0 -0
  213. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/__init__.py +0 -0
  214. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/exceptions.py +0 -0
  215. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/generators.py +0 -0
  216. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/memory.py +0 -0
  217. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/__init__.py +0 -0
  218. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/client.py +0 -0
  219. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
  220. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
  221. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
  222. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
  223. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
  224. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
  225. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
  226. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
  227. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
  228. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
  229. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
  230. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
  231. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
  232. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
  233. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
  234. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
  235. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
  236. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
  237. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
  238. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
  239. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
  240. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrations/migration_022_023.sql +0 -0
  241. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/migrator.py +0 -0
  242. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/pool.py +0 -0
  243. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/postgresql/schema.sql +0 -0
  244. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/testing.py +0 -0
  245. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/storage/utils.py +0 -0
  246. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/testing.py +0 -0
  247. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/utils.py +0 -0
  248. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/__init__.py +0 -0
  249. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/batch.py +0 -0
  250. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/errors.py +0 -0
  251. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/heartbeat.py +0 -0
  252. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/hello.py +0 -0
  253. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/openapi.py +0 -0
  254. {kinto-21.1.1 → kinto-23.0.0}/kinto/core/views/version.py +0 -0
  255. {kinto-21.1.1 → kinto-23.0.0}/kinto/events.py +0 -0
  256. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/__init__.py +0 -0
  257. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/accounts/__init__.py +0 -0
  258. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/accounts/authentication.py +0 -0
  259. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/accounts/scripts.py +0 -0
  260. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/accounts/utils.py +0 -0
  261. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/accounts/views.py +0 -0
  262. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/README.md +0 -0
  263. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/VERSION +0 -0
  264. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/__init__.py +0 -0
  265. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/VERSION +0 -0
  266. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/asn1-EdZsLKOL.js +0 -0
  267. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/clojure-BMjYHr_A.js +0 -0
  268. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/css-BnMrqG3P.js +0 -0
  269. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/index-Cs7JVwIg.css +0 -0
  270. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/index-CylsivYB.js +0 -0
  271. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/javascript-qCveANmP.js +0 -0
  272. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/logo-VBRiKSPX.png +0 -0
  273. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/mllike-CXdrOF99.js +0 -0
  274. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/python-BuPzkPfP.js +0 -0
  275. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/rpm-CTu-6PCP.js +0 -0
  276. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/sql-D0XecflT.js +0 -0
  277. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/assets/ttcn-cfg-B9xdYoR4.js +0 -0
  278. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/build/index.html +0 -0
  279. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/public/help.html +0 -0
  280. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/admin/views.py +0 -0
  281. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/default_bucket/__init__.py +0 -0
  282. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/flush.py +0 -0
  283. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/history/__init__.py +0 -0
  284. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/history/listener.py +0 -0
  285. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/history/views.py +0 -0
  286. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/openid/__init__.py +0 -0
  287. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/openid/utils.py +0 -0
  288. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/openid/views.py +0 -0
  289. {kinto-21.1.1 → kinto-23.0.0}/kinto/plugins/statsd.py +0 -0
  290. {kinto-21.1.1 → kinto-23.0.0}/kinto/schema_validation.py +0 -0
  291. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/__init__.py +0 -0
  292. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/admin.py +0 -0
  293. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/buckets.py +0 -0
  294. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/collections.py +0 -0
  295. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/contribute.py +0 -0
  296. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/groups.py +0 -0
  297. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/permissions.py +0 -0
  298. {kinto-21.1.1 → kinto-23.0.0}/kinto/views/records.py +0 -0
  299. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/SOURCES.txt +0 -0
  300. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/dependency_links.txt +0 -0
  301. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/entry_points.txt +0 -0
  302. {kinto-21.1.1 → kinto-23.0.0}/kinto.egg-info/top_level.txt +0 -0
  303. {kinto-21.1.1 → kinto-23.0.0}/scripts/pull-kinto-admin.sh +0 -0
  304. {kinto-21.1.1 → kinto-23.0.0}/setup.cfg +0 -0
  305. {kinto-21.1.1 → kinto-23.0.0}/tests/__init__.py +0 -0
  306. {kinto-21.1.1 → kinto-23.0.0}/tests/browser.ini +0 -0
  307. {kinto-21.1.1 → kinto-23.0.0}/tests/browser.py +0 -0
  308. {kinto-21.1.1 → kinto-23.0.0}/tests/core/__init__.py +0 -0
  309. {kinto-21.1.1 → kinto-23.0.0}/tests/core/listeners.py +0 -0
  310. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/__init__.py +0 -0
  311. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_base.py +0 -0
  312. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_cache_expires.py +0 -0
  313. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_filter.py +0 -0
  314. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_model.py +0 -0
  315. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_object.py +0 -0
  316. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_object_permissions.py +0 -0
  317. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_pagination.py +0 -0
  318. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_partial_response.py +0 -0
  319. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_preconditions.py +0 -0
  320. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_schema.py +0 -0
  321. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_sort.py +0 -0
  322. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_sync.py +0 -0
  323. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_views.py +0 -0
  324. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_views_cors.py +0 -0
  325. {kinto-21.1.1 → kinto-23.0.0}/tests/core/resource/test_viewset.py +0 -0
  326. {kinto-21.1.1 → kinto-23.0.0}/tests/core/schema/postgresql-permission-1.sql +0 -0
  327. {kinto-21.1.1 → kinto-23.0.0}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
  328. {kinto-21.1.1 → kinto-23.0.0}/tests/core/schema/postgresql-storage-11.sql +0 -0
  329. {kinto-21.1.1 → kinto-23.0.0}/tests/core/support.py +0 -0
  330. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_authentication.py +0 -0
  331. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_authorization.py +0 -0
  332. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_cache.py +0 -0
  333. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_decorators.py +0 -0
  334. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_deprecation.py +0 -0
  335. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_errors.py +0 -0
  336. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_listeners.py +0 -0
  337. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_logging.py +0 -0
  338. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_openapi.py +0 -0
  339. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_permission.py +0 -0
  340. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_schema.py +0 -0
  341. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_scripts.py +0 -0
  342. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_storage.py +0 -0
  343. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_storage_migrations.py +0 -0
  344. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_storage_pool.py +0 -0
  345. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_utils.py +0 -0
  346. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_batch.py +0 -0
  347. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_errors.py +0 -0
  348. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_heartbeat.py +0 -0
  349. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_hello.py +0 -0
  350. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_openapi.py +0 -0
  351. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_postgresql.py +0 -0
  352. {kinto-21.1.1 → kinto-23.0.0}/tests/core/test_views_transaction.py +0 -0
  353. {kinto-21.1.1 → kinto-23.0.0}/tests/core/testapp/__init__.py +0 -0
  354. {kinto-21.1.1 → kinto-23.0.0}/tests/core/testapp/static/index.html +0 -0
  355. {kinto-21.1.1 → kinto-23.0.0}/tests/core/testapp/views.py +0 -0
  356. {kinto-21.1.1 → kinto-23.0.0}/tests/core/testplugin/__init__.py +0 -0
  357. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/__init__.py +0 -0
  358. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/support.py +0 -0
  359. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_plugins.py +0 -0
  360. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_resources.py +0 -0
  361. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_responses_buckets.py +0 -0
  362. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_responses_collections.py +0 -0
  363. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_responses_errors.py +0 -0
  364. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_responses_groups.py +0 -0
  365. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_responses_records.py +0 -0
  366. {kinto-21.1.1 → kinto-23.0.0}/tests/openapi/test_validation.py +0 -0
  367. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/__init__.py +0 -0
  368. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_accounts.py +0 -0
  369. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_admin.py +0 -0
  370. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_default_bucket.py +0 -0
  371. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_flush.py +0 -0
  372. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_openid.py +0 -0
  373. {kinto-21.1.1 → kinto-23.0.0}/tests/plugins/test_statsd.py +0 -0
  374. {kinto-21.1.1 → kinto-23.0.0}/tests/support.py +0 -0
  375. {kinto-21.1.1 → kinto-23.0.0}/tests/test_authorization.py +0 -0
  376. {kinto-21.1.1 → kinto-23.0.0}/tests/test_config.py +0 -0
  377. {kinto-21.1.1 → kinto-23.0.0}/tests/test_configuration/test.ini +0 -0
  378. {kinto-21.1.1 → kinto-23.0.0}/tests/test_init.py +0 -0
  379. {kinto-21.1.1 → kinto-23.0.0}/tests/test_main.py +0 -0
  380. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_admin.py +0 -0
  381. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_buckets.py +0 -0
  382. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_collections.py +0 -0
  383. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_collections_cache.py +0 -0
  384. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_contribute.py +0 -0
  385. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_disable_default.py +0 -0
  386. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_groups.py +0 -0
  387. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_hello.py +0 -0
  388. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_objects_permissions.py +0 -0
  389. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_permissions.py +0 -0
  390. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_records.py +0 -0
  391. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_schema_collection.py +0 -0
  392. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_schema_group.py +0 -0
  393. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_schema_record.py +0 -0
  394. {kinto-21.1.1 → kinto-23.0.0}/tests/test_views_version.py +0 -0
@@ -190,6 +190,8 @@ jobs:
190
190
  context: .
191
191
 
192
192
  - name: Run container
193
+ env:
194
+ PROMETHEUS_MULTIPROC_DIR: /tmp/metrics
193
195
  run: |
194
196
  docker run --net=host --detach --rm \
195
197
  -p 8888:8888 \
@@ -1,43 +1,30 @@
1
+ VENV ?= .venv
2
+ PYTHON := $(VENV)/bin/python3
3
+ SPHINX_BUILDDIR ?= docs/_build
4
+
1
5
  SERVER_CONFIG = config/kinto.ini
6
+ NAME := kinto
7
+ SOURCE := $(shell git config remote.origin.url | sed -e 's|git@|https://|g' | sed -e 's|github.com:|github.com/|g')
8
+ VERSION := $(shell git describe --always --tag)
9
+ COMMIT := $(shell git log --pretty=format:'%H' -n 1)
10
+
11
+ .IGNORE: clean
2
12
 
3
- SPHINX_BUILDDIR := $(shell echo $${SPHINX_BUILDDIR-docs/_build})
4
- VENV := $(shell echo $${VIRTUAL_ENV-.venv})
5
- PYTHON = $(VENV)/bin/python3
6
13
  DEV_STAMP = $(VENV)/.dev_env_installed.stamp
7
14
  DOC_STAMP = $(VENV)/.doc_env_installed.stamp
8
15
  INSTALL_STAMP = $(VENV)/.install.stamp
9
- TEMPDIR := $(shell mktemp -du)
10
-
11
- .IGNORE: clean distclean maintainer-clean
12
- .PHONY: all install tests
13
-
14
- OBJECTS = .venv .coverage
16
+ OBJECTS = .venv .coverage .pytest_cache/ .ruff_cache/ $(INSTALL_STAMP) $(DEV_STAMP) $(DOC_STAMP)
17
+ .DEFAULT_GOAL := help
15
18
 
16
19
  help:
17
- @echo "Please use 'make <target>' where <target> is one of"
18
- @echo " format reformat code"
19
- @echo " install install dependencies and prepare environment"
20
- @echo " install-monitoring enable monitoring features like StatsD and Newrelic"
21
- @echo " install-postgres install postgresql support"
22
- @echo " install-dev install dependencies and everything needed to run tests"
23
- @echo " pull-kinto-admin pull the Kinto admin UI plugin (requires npm)"
24
- @echo " serve start the kinto server on default port"
25
- @echo " migrate run the kinto migrations"
26
- @echo " lint run the code linters"
27
- @echo " tests run all the tests with all the supported python interpreters (same as CI)"
28
- @echo " test-deps pulls and runs docker postgres and memcached containers for tests"
29
- @echo " tdd run pytest-watch to rerun tests automatically on changes for tdd"
30
- @echo " tests-once only run the tests once with the default python interpreter"
31
- @echo " functional run functional test against a real kinto"
32
- @echo " browser-test run browser test against a real kinto"
33
- @echo " clean remove *.pyc files and __pycache__ directory"
34
- @echo " distclean remove *.egg-info files and *.egg, build and dist directories"
35
- @echo " maintainer-clean remove the .venv directory"
36
- @echo " docs build the docs"
37
- @echo "Check the Makefile to know exactly what each target is doing."
20
+ @echo "Please use 'make <target>' where <target> is one of the following commands.\n"
21
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
22
+ @echo "\nCheck the Makefile to know exactly what each target is doing."
38
23
 
24
+ .PHONY: all
39
25
  all: install
40
- install: $(INSTALL_STAMP)
26
+
27
+ install: $(INSTALL_STAMP) ## install dependencies and prepare environment
41
28
  $(INSTALL_STAMP): $(PYTHON) constraints.txt pyproject.toml
42
29
  $(VENV)/bin/pip install -U pip
43
30
  $(VENV)/bin/pip install -Ue . -c constraints.txt
@@ -46,21 +33,21 @@ $(INSTALL_STAMP): $(PYTHON) constraints.txt pyproject.toml
46
33
  $(PYTHON):
47
34
  python3 -m venv $(VENV)
48
35
 
49
- install-monitoring: $(INSTALL_STAMP) $(DEV_STAMP)
36
+ install-monitoring: $(INSTALL_STAMP) $(DEV_STAMP) ## enable monitoring features like Prometheus and Newrelic
50
37
  $(VENV)/bin/pip install -Ue ".[monitoring]" -c constraints.txt
51
38
 
52
- install-postgres: $(INSTALL_STAMP) $(DEV_STAMP)
39
+ install-postgres: $(INSTALL_STAMP) $(DEV_STAMP) ## install postgresql support
53
40
  $(VENV)/bin/pip install -Ue ".[postgresql]" -c constraints.txt
54
41
 
55
- install-memcached: $(INSTALL_STAMP) $(DEV_STAMP)
42
+ install-memcached: $(INSTALL_STAMP) $(DEV_STAMP) ## install memcached support
56
43
  $(VENV)/bin/pip install -Ue ".[memcached]" -c constraints.txt
57
44
 
58
- install-dev: $(INSTALL_STAMP) $(DEV_STAMP)
45
+ install-dev: $(INSTALL_STAMP) $(DEV_STAMP) ## install dependencies and everything needed to run tests
59
46
  $(DEV_STAMP): $(PYTHON) constraints.txt
60
- $(VENV)/bin/pip install -Ue ".[dev,test]" -c constraints.txt
47
+ $(VENV)/bin/pip install -Ue ".[dev,test,monitoring,postgresql,memcached]" -c constraints.txt
61
48
  touch $(DEV_STAMP)
62
49
 
63
- install-docs: $(DOC_STAMP)
50
+ install-docs: $(DOC_STAMP) ## install dependencies to build the docs
64
51
  $(DOC_STAMP): $(PYTHON) docs/requirements.txt
65
52
  $(VENV)/bin/pip install -r docs/requirements.txt
66
53
  touch $(DOC_STAMP)
@@ -68,33 +55,36 @@ $(DOC_STAMP): $(PYTHON) docs/requirements.txt
68
55
  constraints.txt: constraints.in
69
56
  pip-compile -o constraints.txt constraints.in
70
57
 
71
- pull-kinto-admin:
58
+ pull-kinto-admin: kinto/plugins/admin/build ## pull the Kinto admin UI plugin
59
+ kinto/plugins/admin/build:
72
60
  scripts/pull-kinto-admin.sh
73
61
 
74
62
  $(SERVER_CONFIG):
75
63
  $(VENV)/bin/kinto init --ini $(SERVER_CONFIG)
76
64
 
77
- NAME := kinto
78
- SOURCE := $(shell git config remote.origin.url | sed -e 's|git@|https://|g' | sed -e 's|github.com:|github.com/|g')
79
- VERSION := $(shell git describe --always --tag)
80
- COMMIT := $(shell git log --pretty=format:'%H' -n 1)
81
- version-file:
65
+ version-file: version.json
66
+ version.json:
82
67
  echo '{"name":"$(NAME)","version":"$(VERSION)","source":"$(SOURCE)","commit":"$(COMMIT)"}' > version.json
83
68
 
84
- serve: install-dev $(SERVER_CONFIG) migrate version-file
69
+ .PHONY: serve
70
+ serve: install-dev $(SERVER_CONFIG) migrate version-file ## start the kinto server on default port
85
71
  $(VENV)/bin/kinto start --ini $(SERVER_CONFIG) --reload
86
72
 
73
+ .PHONY: migrate
87
74
  migrate: install $(SERVER_CONFIG)
88
75
  $(VENV)/bin/kinto migrate --ini $(SERVER_CONFIG)
89
76
 
90
- test: tests
77
+ .PHONY: test
78
+ test: tests ## run all the tests with all the supported python interpreters (same as CI)
79
+ .PHONY: test-once
91
80
  tests-once: tests
92
- tests: install-postgres install-monitoring install-memcached version-file install-dev
81
+ .PHONY: tests
82
+ tests: version-file install-dev
93
83
  $(VENV)/bin/py.test --cov-config pyproject.toml --cov-report term-missing --cov-fail-under 100 --cov kinto
94
-
84
+ .PHONY: tests-raw
95
85
  tests-raw: version-file install-dev
96
86
  $(VENV)/bin/py.test
97
-
87
+ .PHONY: test-deps
98
88
  test-deps:
99
89
  docker pull memcached
100
90
  docker pull postgres
@@ -103,53 +93,55 @@ test-deps:
103
93
  sleep 2
104
94
  PGPASSWORD=postgres psql -c "CREATE DATABASE testdb ENCODING 'UTF8' TEMPLATE template0;" -U postgres -h localhost
105
95
 
106
- lint: install-dev
96
+ .PHONY: lint
97
+ lint: install-dev ## run the code linters
107
98
  $(VENV)/bin/ruff check kinto tests docs/conf.py
108
99
  $(VENV)/bin/ruff format --check kinto tests docs/conf.py
109
100
 
110
- format: install-dev
101
+ .PHONY: format
102
+ format: install-dev ## reformat code
111
103
  $(VENV)/bin/ruff check --fix kinto tests docs/conf.py
112
104
  $(VENV)/bin/ruff format kinto tests docs/conf.py
113
105
 
114
- tdd: install-dev
106
+ .PHONY: tdd
107
+ tdd: install-dev ## run pytest-watch to rerun tests automatically on changes for tdd
115
108
  $(VENV)/bin/ptw --runner $(VENV)/bin/py.test
116
109
 
117
110
  need-kinto-running:
118
111
  @curl http://localhost:8888/v0/ 2>/dev/null 1>&2 || (echo "Run 'make runkinto' before starting tests." && exit 1)
119
112
 
120
- runkinto: install-dev
113
+ .PHONY: runkinto
114
+ runkinto: install-dev ## run a kinto server
121
115
  $(VENV)/bin/kinto migrate --ini tests/functional.ini
122
- $(VENV)/bin/kinto start --ini tests/functional.ini
116
+ PROMETHEUS_MULTIPROC_DIR=/tmp/metrics KINTO_INI=tests/functional.ini $(VENV)/bin/uwsgi --http :8888 --ini tests/functional.ini
123
117
 
124
- functional: install-dev need-kinto-running
118
+ .PHONY: functional
119
+ functional: install-dev need-kinto-running ## run functional tests against a real kinto
125
120
  $(VENV)/bin/py.test tests/functional.py
126
121
 
127
- browser-test: need-kinto-running
122
+ .PHONY: browser-test
123
+ browser-test: need-kinto-running ## run browser tests against a real kinto
128
124
  $(VENV)/bin/playwright install firefox
129
125
  $(VENV)/bin/py.test tests/browser.py
130
126
 
131
- clean:
132
- find . -name '*.pyc' -delete
127
+ clean: ## remove built files and start fresh
128
+ rm -fr $(OBJECTS)
133
129
  find . -name '__pycache__' -type d | xargs rm -fr
134
130
  rm -fr docs/_build/
131
+ rm -fr kinto/plugins/admin/build/ kinto/plugins/admin/node_modules/
135
132
  docker rm -f kinto-memcached || echo ""
136
133
  docker rm -f kinto-postgres || echo ""
137
134
 
138
- distclean: clean
139
- rm -fr *.egg *.egg-info/ dist/ build/
140
-
141
- maintainer-clean: distclean
142
- rm -fr .venv/ kinto/plugins/admin/build/ kinto/plugins/admin/node_modules/
143
-
144
- docs: install-docs
135
+ docs: install-docs ## build the docs
145
136
  $(VENV)/bin/sphinx-build -a -W -n -b html -d $(SPHINX_BUILDDIR)/doctrees docs $(SPHINX_BUILDDIR)/html
146
137
  @echo
147
138
  @echo "Build finished. The HTML pages are in $(SPHINX_BUILDDIR)/html/index.html"
148
139
 
149
140
  .PHONY: build
150
- build:
141
+ build: ## build the docker image
151
142
  docker build --build-arg="KINTO_VERSION=$(shell git describe --abbrev=0)" --pull -t kinto/kinto-server:latest .
152
143
 
153
- test-description: install-dev
144
+ .PHONY: test-description
145
+ test-description: install-dev ## test the built wheel metadata
154
146
  $(VENV)/bin/python -m build
155
147
  $(VENV)/bin/twine check dist/*.whl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinto
3
- Version: 21.1.1
3
+ Version: 23.0.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
@@ -70,6 +70,7 @@ Provides-Extra: dev
70
70
  Requires-Dist: build; extra == "dev"
71
71
  Requires-Dist: ruff; extra == "dev"
72
72
  Requires-Dist: twine; extra == "dev"
73
+ Requires-Dist: uwsgi; extra == "dev"
73
74
  Dynamic: license-file
74
75
 
75
76
  Kinto
@@ -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.9.0
76
+ newrelic==10.11.0
77
77
  # via -r constraints.in
78
78
  packaging==23.2
79
79
  # via
@@ -88,7 +88,7 @@ plaster==1.1.2
88
88
  # pyramid
89
89
  plaster-pastedeploy==1.0.1
90
90
  # via pyramid
91
- playwright==1.51.0
91
+ playwright==1.52.0
92
92
  # via -r constraints.in
93
93
  pluggy==1.5.0
94
94
  # via pytest
@@ -96,7 +96,7 @@ prometheus-client==0.21.1
96
96
  # via -r constraints.in
97
97
  psycopg2-binary==2.9.10
98
98
  # via -r constraints.in
99
- pyee==12.0.0
99
+ pyee==13.0.0
100
100
  # via playwright
101
101
  pyproject-hooks==1.0.0
102
102
  # via build
@@ -149,7 +149,7 @@ rpds-py==0.17.1
149
149
  # via
150
150
  # jsonschema
151
151
  # referencing
152
- ruff==0.11.6
152
+ ruff==0.11.8
153
153
  # via -r constraints.in
154
154
  sentry-sdk==2.8.0
155
155
  # via -r constraints.in
@@ -244,13 +244,7 @@ In another terminal, run the end-to-end tests with:
244
244
  Cleaning your environment
245
245
  -------------------------
246
246
 
247
- There are three levels of cleaning your environment:
248
-
249
- - ``make clean`` will remove ``*.pyc`` files and ``__pycache__`` directory.
250
- - ``make distclean`` will also remove ``*.egg-info`` files and ``*.egg``,
251
- ``build`` and ``dist`` directories.
252
- - ``make maintainer-clean`` will also remove the ``.venv`` directory.
253
-
247
+ - ``make clean``
254
248
 
255
249
  How to release
256
250
  ==============
@@ -516,8 +516,17 @@ Prometheus metrics can be enabled with (disabled by default):
516
516
  # Expose metrics created time (default: true)
517
517
  # kinto.prometheus_created_metrics_enabled = false
518
518
 
519
- # Exclude certain labels to reduce cardinality (default: none)
520
- # kinto.prometheus_exclude_labels = record_id group_id
519
+ # Control cardinality when URL fields become labels (default: bucket_id collection_id group_id record_id)
520
+ # kinto.metrics_matchdict_fields = bucket_id collection_id
521
+
522
+ # Disable default metrics that are not useful in your use-case
523
+ # kinto.disabled_metrics = request_duration_seconds
524
+ # authentication_basicauth_seconds
525
+ # backend_permission_seconds
526
+ # backend_cache_seconds
527
+
528
+ # Control duration buckets in seconds (global for all histograms)
529
+ # kinto.prometheus_histogram_buckets = 0.005 0.1 1 Inf
521
530
 
522
531
  Metrics can then be crawled from the ``/__metrics__`` endpoint.
523
532
 
@@ -510,17 +510,16 @@ def setup_metrics(config):
510
510
  request_labels = [
511
511
  ("method", request.method.lower()),
512
512
  ("endpoint", endpoint),
513
- ("status", str(status)),
514
513
  ] + metrics_matchdict_labels
515
514
 
516
515
  # Count served requests.
517
- metrics_service.count("request_summary", unique=request_labels)
516
+ metrics_service.count("request_summary", unique=request_labels + [("status", str(status))])
518
517
 
519
518
  try:
520
519
  current = utils.msec_time()
521
520
  duration = current - request._received_at
522
521
  metrics_service.timer(
523
- "request_duration",
522
+ "request_duration_seconds",
524
523
  value=duration,
525
524
  labels=request_labels,
526
525
  )
@@ -13,7 +13,7 @@ class IMetricsService(Interface):
13
13
 
14
14
  def timer(key):
15
15
  """
16
- Watch execution time.
16
+ Watch execution time in seconds.
17
17
  """
18
18
 
19
19
  def observe(self, key, value, labels=[]):
@@ -68,9 +68,9 @@ def watch_execution_time(metrics_service, obj, prefix="", classname=None):
68
68
  method = getattr(obj, name)
69
69
  is_method = isinstance(method, types.MethodType)
70
70
  if not name.startswith("_") and is_method:
71
- statsd_key = f"{prefix}.{classname}"
71
+ metric_name = f"{prefix}.{classname}.seconds"
72
72
  labels = [("method", name)]
73
- decorated_method = metrics_service.timer(statsd_key, labels=labels)(method)
73
+ decorated_method = metrics_service.timer(metric_name, labels=labels)(method)
74
74
  setattr(obj, name, decorated_method)
75
75
 
76
76
 
@@ -88,7 +88,7 @@ def listener_with_timer(config, key, func):
88
88
  # not listed in the `initialization_sequence` setting.
89
89
  return func(*args, **kwargs)
90
90
  # If metrics are enabled, monitor execution time of listeners.
91
- with metrics_service.timer(key):
91
+ with metrics_service.timer(key + ".seconds" if not key.endswith(".seconds") else key):
92
92
  return func(*args, **kwargs)
93
93
 
94
94
  return wrapped
@@ -53,7 +53,7 @@ class Timer:
53
53
  """
54
54
  A decorator to time the execution of a function. It will use the
55
55
  `prometheus_client.Histogram` to record the time taken by the function
56
- in milliseconds. The histogram is passed as an argument to the
56
+ in seconds. The histogram is passed as an argument to the
57
57
  constructor.
58
58
 
59
59
  Main limitation: it does not support `labels` on the decorator.
@@ -78,8 +78,8 @@ class Timer:
78
78
  try:
79
79
  return f(*args, **kwargs)
80
80
  finally:
81
- dt_ms = 1000.0 * (time_now() - start_time)
82
- self.histogram.observe(dt_ms)
81
+ dt_sec = time_now() - start_time
82
+ self.histogram.observe(dt_sec)
83
83
 
84
84
  return _wrapped
85
85
 
@@ -96,14 +96,22 @@ class Timer:
96
96
  def stop(self):
97
97
  if self._start_time is None: # pragma: nocover
98
98
  raise RuntimeError("Timer has not started.")
99
- dt_ms = 1000.0 * (time_now() - self._start_time)
100
- self.histogram.observe(dt_ms)
99
+ dt_sec = time_now() - self._start_time
100
+ self.histogram.observe(dt_sec)
101
+ return self
102
+
103
+
104
+ class NoOpHistogram: # pragma: no cover
105
+ def observe(self, value):
106
+ pass
107
+
108
+ def labels(self, *args):
101
109
  return self
102
110
 
103
111
 
104
112
  @implementer(metrics.IMetricsService)
105
113
  class PrometheusService:
106
- def __init__(self, prefix="", exclude_labels=None):
114
+ def __init__(self, prefix="", disabled_metrics=[], histogram_buckets=None):
107
115
  prefix_clean = ""
108
116
  if prefix:
109
117
  # In GCP Console, the metrics are grouped by the first
@@ -112,26 +120,23 @@ class PrometheusService:
112
120
  # (eg. `remote-settings` -> `remotesettings_`, `kinto_` -> `kinto_`)
113
121
  prefix_clean = _fix_metric_name(prefix).replace("_", "") + "_"
114
122
  self.prefix = prefix_clean.lower()
115
- self.exclude_labels = exclude_labels or []
116
-
117
- def _exclude_labels(self, labels):
118
- return [
119
- (label_name, label_value)
120
- for label_name, label_value in labels
121
- if label_name not in self.exclude_labels
122
- ]
123
+ self.disabled_metrics = [m.replace(self.prefix, "") for m in disabled_metrics]
124
+ self.histogram_buckets = histogram_buckets
123
125
 
124
126
  def timer(self, key, value=None, labels=[]):
125
127
  global _METRICS
126
- key = self.prefix + key
127
- labels = self._exclude_labels(labels)
128
128
 
129
+ key = _fix_metric_name(key)
130
+ if key in self.disabled_metrics:
131
+ return Timer(histogram=NoOpHistogram())
132
+
133
+ key = self.prefix + key
129
134
  if key not in _METRICS:
130
135
  _METRICS[key] = prometheus_module.Histogram(
131
- _fix_metric_name(key),
136
+ key,
132
137
  f"Histogram of {key}",
133
- registry=get_registry(),
134
138
  labelnames=[label_name for label_name, _ in labels],
139
+ buckets=self.histogram_buckets,
135
140
  )
136
141
 
137
142
  if not isinstance(_METRICS[key], prometheus_module.Histogram):
@@ -139,7 +144,7 @@ class PrometheusService:
139
144
  f"Metric {key} already exists with different type ({_METRICS[key]})"
140
145
  )
141
146
 
142
- timer = Timer(_METRICS[key])
147
+ timer = Timer(histogram=_METRICS[key])
143
148
  timer.set_labels(labels)
144
149
 
145
150
  if value is not None:
@@ -153,15 +158,17 @@ class PrometheusService:
153
158
 
154
159
  def observe(self, key, value, labels=[]):
155
160
  global _METRICS
156
- key = self.prefix + key
157
- labels = self._exclude_labels(labels)
158
161
 
162
+ key = _fix_metric_name(key)
163
+ if key in self.disabled_metrics:
164
+ return
165
+
166
+ key = self.prefix + key
159
167
  if key not in _METRICS:
160
168
  _METRICS[key] = prometheus_module.Summary(
161
- _fix_metric_name(key),
169
+ key,
162
170
  f"Summary of {key}",
163
171
  labelnames=[label_name for label_name, _ in labels],
164
- registry=get_registry(),
165
172
  )
166
173
 
167
174
  if not isinstance(_METRICS[key], prometheus_module.Summary):
@@ -177,10 +184,12 @@ class PrometheusService:
177
184
 
178
185
  def count(self, key, count=1, unique=None):
179
186
  global _METRICS
180
- key = self.prefix + key
181
187
 
182
- labels = []
188
+ key = _fix_metric_name(key)
189
+ if key in self.disabled_metrics:
190
+ return
183
191
 
192
+ labels = []
184
193
  if unique:
185
194
  if isinstance(unique, str):
186
195
  warnings.warn(
@@ -195,17 +204,16 @@ class PrometheusService:
195
204
  label_name, label_value = unique.rsplit(".", 1)
196
205
  unique = [(label_name, label_value)]
197
206
 
198
- unique = self._exclude_labels(unique)
199
207
  labels = [
200
208
  (_fix_metric_name(label_name), label_value) for label_name, label_value in unique
201
209
  ]
202
210
 
211
+ key = self.prefix + key
203
212
  if key not in _METRICS:
204
213
  _METRICS[key] = prometheus_module.Counter(
205
- _fix_metric_name(key),
214
+ key,
206
215
  f"Counter of {key}",
207
216
  labelnames=[label_name for label_name, _ in labels],
208
- registry=get_registry(),
209
217
  )
210
218
 
211
219
  if not isinstance(_METRICS[key], prometheus_module.Counter):
@@ -234,6 +242,19 @@ def _reset_multiproc_folder_content(): # pragma: no cover
234
242
  os.makedirs(PROMETHEUS_MULTIPROC_DIR, exist_ok=True)
235
243
 
236
244
 
245
+ def reset_registry():
246
+ # This is mainly useful in tests, where the plugin is included
247
+ # several times with different settings.
248
+ registry = get_registry()
249
+
250
+ for collector in _METRICS.values():
251
+ try:
252
+ registry.unregister(collector)
253
+ except KeyError: # pragma: no cover
254
+ pass
255
+ _METRICS.clear()
256
+
257
+
237
258
  def includeme(config):
238
259
  if prometheus_module is None:
239
260
  error_msg = (
@@ -246,34 +267,34 @@ def includeme(config):
246
267
  if not asbool(settings.get("prometheus_created_metrics_enabled", True)):
247
268
  prometheus_module.disable_created_metrics()
248
269
 
270
+ prefix = settings.get("prometheus_prefix", settings["project_name"])
271
+ disabled_metrics = aslist(settings.get("prometheus_disabled_metrics", ""))
272
+
273
+ # Default buckets for histogram metrics are (.005, .01, .025, .05, .075, .1, .25, .5, .75, 1.0, 2.5, 5.0, 7.5, 10.0, INF)
274
+ # we reduce it from 15 to 8 values by default here, and let the user override it if needed.
275
+ histogram_buckets_values = aslist(
276
+ settings.get(
277
+ "prometheus_histogram_buckets", "0.01 0.05 0.1 0.5 1.0 3.0 6.0 Inf"
278
+ ) # Note: Inf is added by default.
279
+ )
280
+ histogram_buckets = [float(x) for x in histogram_buckets_values]
281
+ # Note: we don't need to check for INF or list size, it's done in the prometheus_client library.
282
+
283
+ get_registry() # Initialize the registry.
284
+
285
+ metrics_impl = PrometheusService(
286
+ prefix=prefix, disabled_metrics=disabled_metrics, histogram_buckets=histogram_buckets
287
+ )
288
+
249
289
  config.add_api_capability(
250
290
  "prometheus",
251
291
  description="Prometheus metrics.",
252
292
  url="https://github.com/Kinto/kinto/",
293
+ prefix=metrics_impl.prefix,
294
+ disabled_metrics=disabled_metrics,
253
295
  )
254
296
 
255
297
  config.add_route("prometheus_metrics", "/__metrics__")
256
298
  config.add_view(metrics_view, route_name="prometheus_metrics")
257
299
 
258
- # Reinitialize the registry on initialization.
259
- # This is mainly useful in tests, where the plugin is included
260
- # several times with different settings.
261
- registry = get_registry()
262
-
263
- for collector in _METRICS.values():
264
- try:
265
- registry.unregister(collector)
266
- except KeyError: # pragma: no cover
267
- pass
268
- _METRICS.clear()
269
-
270
- prefix = settings.get("prometheus_prefix", settings["project_name"])
271
-
272
- # If we want to reduce the metrics cardinality, we can exclude certain
273
- # labels (eg. records_id). This way all metrics will be grouped by the
274
- # remaining labels.
275
- exclude_labels = aslist(settings.get("prometheus_exclude_labels", ""))
276
-
277
- config.registry.registerUtility(
278
- PrometheusService(prefix=prefix, exclude_labels=exclude_labels), metrics.IMetricsService
279
- )
300
+ config.registry.registerUtility(metrics_impl, metrics.IMetricsService)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinto
3
- Version: 21.1.1
3
+ Version: 23.0.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
@@ -70,6 +70,7 @@ Provides-Extra: dev
70
70
  Requires-Dist: build; extra == "dev"
71
71
  Requires-Dist: ruff; extra == "dev"
72
72
  Requires-Dist: twine; extra == "dev"
73
+ Requires-Dist: uwsgi; extra == "dev"
73
74
  Dynamic: license-file
74
75
 
75
76
  Kinto
@@ -17,6 +17,7 @@ python-rapidjson
17
17
  build
18
18
  ruff
19
19
  twine
20
+ uwsgi
20
21
 
21
22
  [memcached]
22
23
  python-memcached
@@ -92,6 +92,7 @@ dev = [
92
92
  "build",
93
93
  "ruff",
94
94
  "twine",
95
+ "uwsgi",
95
96
  ]
96
97
 
97
98
  [tool.pip-tools]
@@ -511,7 +511,7 @@ class StatsDTest(BaseWebTest, unittest.TestCase):
511
511
  with mock.patch.object(metrics_client, "timing") as mocked:
512
512
  self.app.post_json(self.plural_url, {"data": {"name": "pouet"}}, headers=self.headers)
513
513
  timers = set(c[0][0] for c in mocked.call_args_list)
514
- self.assertIn("listeners.test", timers)
514
+ self.assertIn("listeners.test.seconds", timers)
515
515
 
516
516
 
517
517
  @skip_if_no_prometheus
@@ -529,4 +529,4 @@ class PrometheusTest(BaseWebTest, unittest.TestCase):
529
529
  self.app.post_json(self.plural_url, {"data": {"name": "pouet"}}, headers=self.headers)
530
530
 
531
531
  resp = self.app.get("/__metrics__")
532
- self.assertIn("listeners_test_count 1.0", resp.text)
532
+ self.assertIn("listeners_test_seconds_count 1.0", resp.text)
@@ -433,7 +433,7 @@ class MetricsConfigurationTest(unittest.TestCase):
433
433
  self.mocked().observe.assert_any_call(
434
434
  "request_size",
435
435
  len("{}"),
436
- labels=[("method", "get"), ("endpoint", "heartbeat"), ("status", "200")],
436
+ labels=[("method", "get"), ("endpoint", "heartbeat")],
437
437
  )
438
438
 
439
439
  def test_statsd_observe_request_duration(self):
@@ -441,9 +441,9 @@ class MetricsConfigurationTest(unittest.TestCase):
441
441
  app = webtest.TestApp(self.config.make_wsgi_app())
442
442
  app.get("/v0/__heartbeat__")
443
443
  self.mocked().timer.assert_any_call(
444
- "request_duration",
444
+ "request_duration_seconds",
445
445
  value=mock.ANY,
446
- labels=[("method", "get"), ("endpoint", "heartbeat"), ("status", "200")],
446
+ labels=[("method", "get"), ("endpoint", "heartbeat")],
447
447
  )
448
448
 
449
449
  def test_statsd_counts_unknown_urls(self):
@@ -25,7 +25,7 @@ class WatchExecutionTimeTest(unittest.TestCase):
25
25
  def test_public_methods_generates_statsd_calls(self):
26
26
  self.test_object.test_method()
27
27
  self.mocked.timer.assert_called_with(
28
- "test.testedclass", labels=[("method", "test_method")]
28
+ "test.testedclass.seconds", labels=[("method", "test_method")]
29
29
  )
30
30
 
31
31
  def test_private_methods_does_not_generates_statsd_calls(self):
@@ -48,4 +48,4 @@ class ListenerWithTimerTest(unittest.TestCase):
48
48
  wrapped = metrics.listener_with_timer(self.config, "key", self.func)
49
49
 
50
50
  self.assertEqual(wrapped(42), 42)
51
- self.config.registry.metrics.timer.assert_called_with("key")
51
+ self.config.registry.metrics.timer.assert_called_with("key.seconds")