kinto 18.0.0__tar.gz → 18.1.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.

Potentially problematic release.


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

Files changed (388) hide show
  1. {kinto-18.0.0 → kinto-18.1.1}/.github/workflows/publish.yml +3 -3
  2. {kinto-18.0.0 → kinto-18.1.1}/.github/workflows/test.yml +8 -6
  3. {kinto-18.0.0 → kinto-18.1.1}/Dockerfile +12 -15
  4. {kinto-18.0.0 → kinto-18.1.1}/Makefile +16 -7
  5. {kinto-18.0.0/kinto.egg-info → kinto-18.1.1}/PKG-INFO +2 -2
  6. {kinto-18.0.0 → kinto-18.1.1}/constraints.in +1 -1
  7. {kinto-18.0.0 → kinto-18.1.1}/constraints.txt +62 -88
  8. {kinto-18.0.0 → kinto-18.1.1}/docs/community.rst +2 -11
  9. {kinto-18.0.0 → kinto-18.1.1}/docs/requirements.txt +5 -5
  10. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/install.rst +2 -2
  11. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/__init__.py +3 -2
  12. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/initialization.py +24 -1
  13. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/resource/__init__.py +6 -2
  14. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/scripts.py +1 -0
  15. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/exceptions.py +1 -2
  16. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/utils.py +1 -0
  17. kinto-18.1.1/kinto/plugins/admin/VERSION +1 -0
  18. kinto-18.1.1/kinto/plugins/admin/build/VERSION +1 -0
  19. kinto-18.1.1/kinto/plugins/admin/build/assets/asn1-8gHclKtu.js +1 -0
  20. kinto-18.1.1/kinto/plugins/admin/build/assets/clojure-plf_rynZ.js +1 -0
  21. kinto-18.1.1/kinto/plugins/admin/build/assets/css-tpsEXL3H.js +1 -0
  22. kinto-18.1.1/kinto/plugins/admin/build/assets/index-iVTdxamX.js +175 -0
  23. kinto-18.1.1/kinto/plugins/admin/build/assets/index-vylaZGUr.css +6 -0
  24. kinto-18.1.1/kinto/plugins/admin/build/assets/javascript-upQ8KtFH.js +1 -0
  25. kinto-18.1.1/kinto/plugins/admin/build/assets/logo-FQUYikj1.png +0 -0
  26. kinto-18.1.1/kinto/plugins/admin/build/assets/mllike-ilm95jrV.js +1 -0
  27. kinto-18.1.1/kinto/plugins/admin/build/assets/python-xljIYvii.js +1 -0
  28. kinto-18.1.1/kinto/plugins/admin/build/assets/rpm-cddeyEgF.js +1 -0
  29. kinto-18.1.1/kinto/plugins/admin/build/assets/sql-3IaSLchm.js +1 -0
  30. kinto-18.1.1/kinto/plugins/admin/build/assets/ttcn-cfg-9oMIyPXS.js +1 -0
  31. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/admin/build/index.html +2 -2
  32. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/admin/public/help.html +2 -2
  33. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/admin/views.py +1 -1
  34. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/quotas/scripts.py +1 -0
  35. {kinto-18.0.0 → kinto-18.1.1/kinto.egg-info}/PKG-INFO +2 -2
  36. {kinto-18.0.0 → kinto-18.1.1}/kinto.egg-info/SOURCES.txt +15 -2
  37. {kinto-18.0.0 → kinto-18.1.1}/kinto.egg-info/requires.txt +1 -1
  38. {kinto-18.0.0 → kinto-18.1.1}/pyproject.toml +2 -2
  39. kinto-18.1.1/scripts/pull-kinto-admin.sh +12 -0
  40. kinto-18.1.1/tests/browser.py +38 -0
  41. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_filter.py +9 -0
  42. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_views_cors.py +9 -0
  43. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_initialization.py +25 -2
  44. kinto-18.1.1/tests/core/testplugin/__init__.py +52 -0
  45. kinto-18.0.0/kinto/plugins/admin/VERSION +0 -1
  46. kinto-18.0.0/scripts/build-kinto-admin.sh +0 -29
  47. kinto-18.0.0/tests/browser.py +0 -68
  48. kinto-18.0.0/tests/core/testplugin/__init__.py +0 -19
  49. {kinto-18.0.0 → kinto-18.1.1}/.dockerignore +0 -0
  50. {kinto-18.0.0 → kinto-18.1.1}/.github/CODE_OF_CONDUCT.md +0 -0
  51. {kinto-18.0.0 → kinto-18.1.1}/.github/CONTRIBUTING.md +0 -0
  52. {kinto-18.0.0 → kinto-18.1.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  53. {kinto-18.0.0 → kinto-18.1.1}/.github/dependabot.yml +0 -0
  54. {kinto-18.0.0 → kinto-18.1.1}/.github/release.yml +0 -0
  55. {kinto-18.0.0 → kinto-18.1.1}/.github/workflows/labels.yaml +0 -0
  56. {kinto-18.0.0 → kinto-18.1.1}/.gitignore +0 -0
  57. {kinto-18.0.0 → kinto-18.1.1}/CHANGELOG.rst +0 -0
  58. {kinto-18.0.0 → kinto-18.1.1}/CONTRIBUTORS.rst +0 -0
  59. {kinto-18.0.0 → kinto-18.1.1}/LICENSE +0 -0
  60. {kinto-18.0.0 → kinto-18.1.1}/README.rst +0 -0
  61. {kinto-18.0.0 → kinto-18.1.1}/SECURITY.md +0 -0
  62. {kinto-18.0.0 → kinto-18.1.1}/SUPPORT.md +0 -0
  63. {kinto-18.0.0 → kinto-18.1.1}/app.wsgi +0 -0
  64. {kinto-18.0.0 → kinto-18.1.1}/contribute.json +0 -0
  65. {kinto-18.0.0 → kinto-18.1.1}/docker-compose.yml +0 -0
  66. {kinto-18.0.0 → kinto-18.1.1}/docs/_static/piwik.js +0 -0
  67. {kinto-18.0.0 → kinto-18.1.1}/docs/_static/theme_overrides.css +0 -0
  68. {kinto-18.0.0 → kinto-18.1.1}/docs/_templates/footer.html +0 -0
  69. {kinto-18.0.0 → kinto-18.1.1}/docs/_templates/indexcontent.html +0 -0
  70. {kinto-18.0.0 → kinto-18.1.1}/docs/_templates/layout.html +0 -0
  71. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-delete-list.rst +0 -0
  72. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-delete-object.rst +0 -0
  73. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-get-list.rst +0 -0
  74. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-get-object.rst +0 -0
  75. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-head-list.rst +0 -0
  76. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-patch-object.rst +0 -0
  77. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-post-list.rst +0 -0
  78. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_details-put-object.rst +0 -0
  79. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-delete-list.rst +0 -0
  80. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-delete-object.rst +0 -0
  81. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-get-list.rst +0 -0
  82. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-get-object.rst +0 -0
  83. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-patch-object.rst +0 -0
  84. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-post-list.rst +0 -0
  85. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/_status-put-object.rst +0 -0
  86. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/accounts.rst +0 -0
  87. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/admin.rst +0 -0
  88. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/authentication.rst +0 -0
  89. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/backoff.rst +0 -0
  90. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/batch.rst +0 -0
  91. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/buckets.rst +0 -0
  92. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/collections.rst +0 -0
  93. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/deprecation.rst +0 -0
  94. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/errors.rst +0 -0
  95. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/filtering.rst +0 -0
  96. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/flush.rst +0 -0
  97. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/groups.rst +0 -0
  98. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/history.rst +0 -0
  99. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/index.rst +0 -0
  100. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/openapi.rst +0 -0
  101. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/openid.rst +0 -0
  102. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/pagination.rst +0 -0
  103. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/permissions.rst +0 -0
  104. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/quotas.rst +0 -0
  105. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/records.rst +0 -0
  106. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/selecting_fields.rst +0 -0
  107. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/sorting.rst +0 -0
  108. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/timestamps.rst +0 -0
  109. {kinto-18.0.0 → kinto-18.1.1}/docs/api/1.x/utilities.rst +0 -0
  110. {kinto-18.0.0 → kinto-18.1.1}/docs/api/index.rst +0 -0
  111. {kinto-18.0.0 → kinto-18.1.1}/docs/api/versioning.rst +0 -0
  112. {kinto-18.0.0 → kinto-18.1.1}/docs/changelog.rst +0 -0
  113. {kinto-18.0.0 → kinto-18.1.1}/docs/commandline.rst +0 -0
  114. {kinto-18.0.0 → kinto-18.1.1}/docs/concepts.rst +0 -0
  115. {kinto-18.0.0 → kinto-18.1.1}/docs/conf.py +0 -0
  116. {kinto-18.0.0 → kinto-18.1.1}/docs/configuration/good-practices.rst +0 -0
  117. {kinto-18.0.0 → kinto-18.1.1}/docs/configuration/index.rst +0 -0
  118. {kinto-18.0.0 → kinto-18.1.1}/docs/configuration/production.rst +0 -0
  119. {kinto-18.0.0 → kinto-18.1.1}/docs/configuration/settings.rst +0 -0
  120. {kinto-18.0.0 → kinto-18.1.1}/docs/core/_static/theme_overrides.css +0 -0
  121. {kinto-18.0.0 → kinto-18.1.1}/docs/core/api.rst +0 -0
  122. {kinto-18.0.0 → kinto-18.1.1}/docs/core/cache.rst +0 -0
  123. {kinto-18.0.0 → kinto-18.1.1}/docs/core/decorators.rst +0 -0
  124. {kinto-18.0.0 → kinto-18.1.1}/docs/core/errors.rst +0 -0
  125. {kinto-18.0.0 → kinto-18.1.1}/docs/core/glossary.rst +0 -0
  126. {kinto-18.0.0 → kinto-18.1.1}/docs/core/images/cliquet-base.png +0 -0
  127. {kinto-18.0.0 → kinto-18.1.1}/docs/core/images/cliquet-mozilla.png +0 -0
  128. {kinto-18.0.0 → kinto-18.1.1}/docs/core/index.rst +0 -0
  129. {kinto-18.0.0 → kinto-18.1.1}/docs/core/notifications.rst +0 -0
  130. {kinto-18.0.0 → kinto-18.1.1}/docs/core/permission.rst +0 -0
  131. {kinto-18.0.0 → kinto-18.1.1}/docs/core/quickstart.rst +0 -0
  132. {kinto-18.0.0 → kinto-18.1.1}/docs/core/rationale.rst +0 -0
  133. {kinto-18.0.0 → kinto-18.1.1}/docs/core/resource.rst +0 -0
  134. {kinto-18.0.0 → kinto-18.1.1}/docs/core/storage.rst +0 -0
  135. {kinto-18.0.0 → kinto-18.1.1}/docs/core/testing.rst +0 -0
  136. {kinto-18.0.0 → kinto-18.1.1}/docs/core/utils.rst +0 -0
  137. {kinto-18.0.0 → kinto-18.1.1}/docs/core/viewsets.rst +0 -0
  138. {kinto-18.0.0 → kinto-18.1.1}/docs/faq.rst +0 -0
  139. {kinto-18.0.0 → kinto-18.1.1}/docs/images/alwaysdata-button.svg +0 -0
  140. {kinto-18.0.0 → kinto-18.1.1}/docs/images/architecture.svg +0 -0
  141. {kinto-18.0.0 → kinto-18.1.1}/docs/images/color-formatter.png +0 -0
  142. {kinto-18.0.0 → kinto-18.1.1}/docs/images/concepts-general.png +0 -0
  143. {kinto-18.0.0 → kinto-18.1.1}/docs/images/concepts-permissions.png +0 -0
  144. {kinto-18.0.0 → kinto-18.1.1}/docs/images/heroku-button.png +0 -0
  145. {kinto-18.0.0 → kinto-18.1.1}/docs/images/kinto-logo.png +0 -0
  146. {kinto-18.0.0 → kinto-18.1.1}/docs/images/kinto-logo.svg +0 -0
  147. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-admin.svg +0 -0
  148. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-attachment.svg +0 -0
  149. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-community.svg +0 -0
  150. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-demos.svg +0 -0
  151. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-history.svg +0 -0
  152. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-indexing.svg +0 -0
  153. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-javascript.svg +0 -0
  154. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-jsonschema.svg +0 -0
  155. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-livesync.svg +0 -0
  156. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-multiapps.svg +0 -0
  157. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-offline.svg +0 -0
  158. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-permissions.svg +0 -0
  159. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-python.svg +0 -0
  160. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-quotas.svg +0 -0
  161. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-selfhostable.svg +0 -0
  162. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-signature.svg +0 -0
  163. {kinto-18.0.0 → kinto-18.1.1}/docs/images/logo-synchronisation.svg +0 -0
  164. {kinto-18.0.0 → kinto-18.1.1}/docs/images/overview-deployonce-selfhost.png +0 -0
  165. {kinto-18.0.0 → kinto-18.1.1}/docs/images/overview-features.png +0 -0
  166. {kinto-18.0.0 → kinto-18.1.1}/docs/images/overview-synchronisation.png +0 -0
  167. {kinto-18.0.0 → kinto-18.1.1}/docs/images/overview-use-cases.png +0 -0
  168. {kinto-18.0.0 → kinto-18.1.1}/docs/images/scalingo-button.svg +0 -0
  169. {kinto-18.0.0 → kinto-18.1.1}/docs/images/screenshot-kinto-admin-1.png +0 -0
  170. {kinto-18.0.0 → kinto-18.1.1}/docs/images/screenshot-kinto-admin-2.png +0 -0
  171. {kinto-18.0.0 → kinto-18.1.1}/docs/images/screenshot-kinto-admin-3.png +0 -0
  172. {kinto-18.0.0 → kinto-18.1.1}/docs/images/screenshot-kinto-admin-4.png +0 -0
  173. {kinto-18.0.0 → kinto-18.1.1}/docs/images/sequence-storage.png +0 -0
  174. {kinto-18.0.0 → kinto-18.1.1}/docs/images/sync-both.svg +0 -0
  175. {kinto-18.0.0 → kinto-18.1.1}/docs/images/sync-newest.svg +0 -0
  176. {kinto-18.0.0 → kinto-18.1.1}/docs/images/sync-oldest.svg +0 -0
  177. {kinto-18.0.0 → kinto-18.1.1}/docs/index.rst +0 -0
  178. {kinto-18.0.0 → kinto-18.1.1}/docs/kinto-admin.rst +0 -0
  179. {kinto-18.0.0 → kinto-18.1.1}/docs/overview.rst +0 -0
  180. {kinto-18.0.0 → kinto-18.1.1}/docs/troubleshooting.rst +0 -0
  181. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/app-examples.rst +0 -0
  182. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/authentication-github.rst +0 -0
  183. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/client-side-encryption.rst +0 -0
  184. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/custom-id-generator.rst +0 -0
  185. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/first-steps.rst +0 -0
  186. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/index.rst +0 -0
  187. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/notifications-custom.rst +0 -0
  188. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/notifications-websockets.rst +0 -0
  189. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/permission-setups.rst +0 -0
  190. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/permissions.rst +0 -0
  191. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/synchronisation.rst +0 -0
  192. {kinto-18.0.0 → kinto-18.1.1}/docs/tutorials/write-plugin.rst +0 -0
  193. {kinto-18.0.0 → kinto-18.1.1}/kinto/__init__.py +0 -0
  194. {kinto-18.0.0 → kinto-18.1.1}/kinto/__main__.py +0 -0
  195. {kinto-18.0.0 → kinto-18.1.1}/kinto/authorization.py +0 -0
  196. {kinto-18.0.0 → kinto-18.1.1}/kinto/config/__init__.py +0 -0
  197. {kinto-18.0.0 → kinto-18.1.1}/kinto/config/kinto.tpl +0 -0
  198. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/authentication.py +0 -0
  199. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/authorization.py +0 -0
  200. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/__init__.py +0 -0
  201. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/memcached.py +0 -0
  202. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/memory.py +0 -0
  203. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/postgresql/__init__.py +0 -0
  204. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/postgresql/schema.sql +0 -0
  205. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/cache/testing.py +0 -0
  206. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/decorators.py +0 -0
  207. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/errors.py +0 -0
  208. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/events.py +0 -0
  209. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/listeners/__init__.py +0 -0
  210. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/openapi.py +0 -0
  211. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/__init__.py +0 -0
  212. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/memory.py +0 -0
  213. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/postgresql/__init__.py +0 -0
  214. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/postgresql/migrations/migration_001_002.sql +0 -0
  215. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/postgresql/schema.sql +0 -0
  216. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/permission/testing.py +0 -0
  217. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/resource/model.py +0 -0
  218. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/resource/schema.py +0 -0
  219. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/resource/viewset.py +0 -0
  220. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/schema.py +0 -0
  221. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/statsd.py +0 -0
  222. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/__init__.py +0 -0
  223. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/generators.py +0 -0
  224. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/memory.py +0 -0
  225. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/__init__.py +0 -0
  226. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/client.py +0 -0
  227. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_001_002.sql +0 -0
  228. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_002_003.sql +0 -0
  229. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_003_004.sql +0 -0
  230. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_004_005.sql +0 -0
  231. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_005_006.sql +0 -0
  232. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_006_007.sql +0 -0
  233. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_007_008.sql +0 -0
  234. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_008_009.sql +0 -0
  235. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_009_010.sql +0 -0
  236. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_010_011.sql +0 -0
  237. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_011_012.sql +0 -0
  238. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_012_013.sql +0 -0
  239. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_013_014.sql +0 -0
  240. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_014_015.sql +0 -0
  241. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_015_016.sql +0 -0
  242. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_016_017.sql +0 -0
  243. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_017_018.sql +0 -0
  244. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_018_019.sql +0 -0
  245. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_019_020.sql +0 -0
  246. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_020_021.sql +0 -0
  247. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrations/migration_021_022.sql +0 -0
  248. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/migrator.py +0 -0
  249. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/pool.py +0 -0
  250. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/postgresql/schema.sql +0 -0
  251. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/storage/testing.py +0 -0
  252. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/testing.py +0 -0
  253. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/utils.py +0 -0
  254. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/__init__.py +0 -0
  255. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/batch.py +0 -0
  256. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/errors.py +0 -0
  257. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/heartbeat.py +0 -0
  258. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/hello.py +0 -0
  259. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/openapi.py +0 -0
  260. {kinto-18.0.0 → kinto-18.1.1}/kinto/core/views/version.py +0 -0
  261. {kinto-18.0.0 → kinto-18.1.1}/kinto/events.py +0 -0
  262. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/__init__.py +0 -0
  263. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/__init__.py +0 -0
  264. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/authentication.py +0 -0
  265. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/mails.py +0 -0
  266. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/scripts.py +0 -0
  267. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/utils.py +0 -0
  268. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/views/__init__.py +0 -0
  269. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/accounts/views/validation.py +0 -0
  270. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/admin/README.md +0 -0
  271. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/admin/__init__.py +0 -0
  272. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/default_bucket/__init__.py +0 -0
  273. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/flush.py +0 -0
  274. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/history/__init__.py +0 -0
  275. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/history/listener.py +0 -0
  276. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/history/views.py +0 -0
  277. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/openid/__init__.py +0 -0
  278. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/openid/utils.py +0 -0
  279. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/openid/views.py +0 -0
  280. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/quotas/__init__.py +0 -0
  281. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/quotas/listener.py +0 -0
  282. {kinto-18.0.0 → kinto-18.1.1}/kinto/plugins/quotas/utils.py +0 -0
  283. {kinto-18.0.0 → kinto-18.1.1}/kinto/schema_validation.py +0 -0
  284. {kinto-18.0.0 → kinto-18.1.1}/kinto/scripts.py +0 -0
  285. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/__init__.py +0 -0
  286. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/admin.py +0 -0
  287. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/buckets.py +0 -0
  288. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/collections.py +0 -0
  289. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/contribute.py +0 -0
  290. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/groups.py +0 -0
  291. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/permissions.py +0 -0
  292. {kinto-18.0.0 → kinto-18.1.1}/kinto/views/records.py +0 -0
  293. {kinto-18.0.0 → kinto-18.1.1}/kinto.egg-info/dependency_links.txt +0 -0
  294. {kinto-18.0.0 → kinto-18.1.1}/kinto.egg-info/entry_points.txt +0 -0
  295. {kinto-18.0.0 → kinto-18.1.1}/kinto.egg-info/top_level.txt +0 -0
  296. {kinto-18.0.0 → kinto-18.1.1}/setup.cfg +0 -0
  297. {kinto-18.0.0 → kinto-18.1.1}/tests/__init__.py +0 -0
  298. {kinto-18.0.0 → kinto-18.1.1}/tests/browser.ini +0 -0
  299. {kinto-18.0.0 → kinto-18.1.1}/tests/core/__init__.py +0 -0
  300. {kinto-18.0.0 → kinto-18.1.1}/tests/core/listeners.py +0 -0
  301. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/__init__.py +0 -0
  302. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_base.py +0 -0
  303. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_cache_expires.py +0 -0
  304. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_events.py +0 -0
  305. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_model.py +0 -0
  306. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_object.py +0 -0
  307. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_object_permissions.py +0 -0
  308. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_pagination.py +0 -0
  309. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_partial_response.py +0 -0
  310. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_preconditions.py +0 -0
  311. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_schema.py +0 -0
  312. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_sort.py +0 -0
  313. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_sync.py +0 -0
  314. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_views.py +0 -0
  315. {kinto-18.0.0 → kinto-18.1.1}/tests/core/resource/test_viewset.py +0 -0
  316. {kinto-18.0.0 → kinto-18.1.1}/tests/core/schema/postgresql-permission-1.sql +0 -0
  317. {kinto-18.0.0 → kinto-18.1.1}/tests/core/schema/postgresql-storage-1.6.sql +0 -0
  318. {kinto-18.0.0 → kinto-18.1.1}/tests/core/schema/postgresql-storage-11.sql +0 -0
  319. {kinto-18.0.0 → kinto-18.1.1}/tests/core/support.py +0 -0
  320. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_authentication.py +0 -0
  321. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_authorization.py +0 -0
  322. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_cache.py +0 -0
  323. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_decorators.py +0 -0
  324. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_deprecation.py +0 -0
  325. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_errors.py +0 -0
  326. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_listeners.py +0 -0
  327. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_logging.py +0 -0
  328. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_openapi.py +0 -0
  329. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_permission.py +0 -0
  330. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_schema.py +0 -0
  331. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_scripts.py +0 -0
  332. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_statsd.py +0 -0
  333. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_storage.py +0 -0
  334. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_storage_migrations.py +0 -0
  335. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_storage_pool.py +0 -0
  336. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_utils.py +0 -0
  337. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_batch.py +0 -0
  338. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_errors.py +0 -0
  339. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_heartbeat.py +0 -0
  340. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_hello.py +0 -0
  341. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_openapi.py +0 -0
  342. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_postgresql.py +0 -0
  343. {kinto-18.0.0 → kinto-18.1.1}/tests/core/test_views_transaction.py +0 -0
  344. {kinto-18.0.0 → kinto-18.1.1}/tests/core/testapp/__init__.py +0 -0
  345. {kinto-18.0.0 → kinto-18.1.1}/tests/core/testapp/static/index.html +0 -0
  346. {kinto-18.0.0 → kinto-18.1.1}/tests/core/testapp/views.py +0 -0
  347. {kinto-18.0.0 → kinto-18.1.1}/tests/functional.ini +0 -0
  348. {kinto-18.0.0 → kinto-18.1.1}/tests/functional.py +0 -0
  349. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/__init__.py +0 -0
  350. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/support.py +0 -0
  351. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_plugins.py +0 -0
  352. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_resources.py +0 -0
  353. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_responses_buckets.py +0 -0
  354. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_responses_collections.py +0 -0
  355. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_responses_errors.py +0 -0
  356. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_responses_groups.py +0 -0
  357. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_responses_records.py +0 -0
  358. {kinto-18.0.0 → kinto-18.1.1}/tests/openapi/test_validation.py +0 -0
  359. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/__init__.py +0 -0
  360. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_accounts.py +0 -0
  361. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_admin.py +0 -0
  362. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_default_bucket.py +0 -0
  363. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_flush.py +0 -0
  364. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_history.py +0 -0
  365. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_openid.py +0 -0
  366. {kinto-18.0.0 → kinto-18.1.1}/tests/plugins/test_quotas.py +0 -0
  367. {kinto-18.0.0 → kinto-18.1.1}/tests/support.py +0 -0
  368. {kinto-18.0.0 → kinto-18.1.1}/tests/test_authorization.py +0 -0
  369. {kinto-18.0.0 → kinto-18.1.1}/tests/test_config.py +0 -0
  370. {kinto-18.0.0 → kinto-18.1.1}/tests/test_configuration/test.ini +0 -0
  371. {kinto-18.0.0 → kinto-18.1.1}/tests/test_init.py +0 -0
  372. {kinto-18.0.0 → kinto-18.1.1}/tests/test_main.py +0 -0
  373. {kinto-18.0.0 → kinto-18.1.1}/tests/test_scripts.py +0 -0
  374. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_admin.py +0 -0
  375. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_buckets.py +0 -0
  376. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_collections.py +0 -0
  377. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_collections_cache.py +0 -0
  378. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_contribute.py +0 -0
  379. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_disable_default.py +0 -0
  380. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_groups.py +0 -0
  381. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_hello.py +0 -0
  382. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_objects_permissions.py +0 -0
  383. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_permissions.py +0 -0
  384. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_records.py +0 -0
  385. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_schema_collection.py +0 -0
  386. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_schema_group.py +0 -0
  387. {kinto-18.0.0 → kinto-18.1.1}/tests/test_views_schema_record.py +0 -0
  388. {kinto-18.0.0/tests/core → kinto-18.1.1/tests}/test_views_version.py +0 -0
@@ -28,8 +28,8 @@ jobs:
28
28
  node --version
29
29
  npm --version
30
30
 
31
- - name: Build Admin UI
32
- run: make build-kinto-admin
31
+ - name: Pull Admin UI
32
+ run: make pull-kinto-admin
33
33
 
34
34
  - name: Install pypa/build
35
35
  run: python3 -m pip install build
@@ -86,7 +86,7 @@ jobs:
86
86
  images: kinto/kinto-server
87
87
 
88
88
  - name: Build and push Docker image
89
- uses: docker/build-push-action@v5
89
+ uses: docker/build-push-action@v6
90
90
  with:
91
91
  context: .
92
92
  file: ./Dockerfile
@@ -32,7 +32,7 @@ jobs:
32
32
  runs-on: ubuntu-latest
33
33
  strategy:
34
34
  matrix:
35
- pyenv: [py38, py39, py310, py311, py311-raw]
35
+ pyenv: [py38, py39, py310, py311, py312, py312-raw]
36
36
  include:
37
37
  - pyenv: py38
38
38
  python-version: "3.8"
@@ -42,8 +42,10 @@ jobs:
42
42
  python-version: "3.10"
43
43
  - pyenv: py311
44
44
  python-version: "3.11"
45
- - pyenv: py311-raw
46
- python-version: "3.11"
45
+ - pyenv: py312
46
+ python-version: "3.12"
47
+ - pyenv: py312-raw
48
+ python-version: "3.12"
47
49
  services:
48
50
  postgres:
49
51
  image: postgres
@@ -177,7 +179,7 @@ jobs:
177
179
  install: true
178
180
 
179
181
  - name: Build container
180
- uses: docker/build-push-action@v5
182
+ uses: docker/build-push-action@v6
181
183
  with:
182
184
  cache-from: type=local,src=${{ env.DOCKER_CACHE}}
183
185
  cache-to: type=local,dest=${{ env.DOCKER_CACHE}},mode=max
@@ -227,8 +229,8 @@ jobs:
227
229
  which firefox
228
230
  firefox --version
229
231
 
230
- - name: make build-kinto-admin
231
- run: make build-kinto-admin
232
+ - name: make pull-kinto-admin
233
+ run: make pull-kinto-admin
232
234
 
233
235
  - name: Install dependencies
234
236
  run: make install-dev
@@ -1,25 +1,23 @@
1
1
  # Mozilla Kinto server
2
-
3
- FROM node:lts-bullseye-slim as node-builder
4
- RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl
5
- COPY scripts/build-kinto-admin.sh .
6
- COPY /kinto/plugins/admin ./kinto/plugins/admin
7
- RUN bash build-kinto-admin.sh
8
-
9
- FROM python:3.10-slim-bullseye as python-builder
2
+ FROM python:3.10-bullseye as python-builder
10
3
  RUN python -m venv /opt/venv
11
- RUN apt-get update && apt-get install -y --no-install-recommends build-essential libpq-dev
12
4
  ARG KINTO_VERSION=1
13
5
  ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_KINTO=${KINTO_VERSION} \
14
6
  PATH="/opt/venv/bin:$PATH"
15
7
  # At this stage we only fetch and build all dependencies.
8
+
9
+ # Pull kinto-admin before building kinto so we can cache it
10
+ WORKDIR /kinto-admin
11
+ COPY kinto/plugins/admin kinto/plugins/admin
12
+ COPY scripts/pull-kinto-admin.sh .
13
+ RUN bash pull-kinto-admin.sh
14
+
16
15
  WORKDIR /pkg-kinto
17
- COPY constraints.txt .
18
- COPY pyproject.toml .
16
+ COPY constraints.txt pyproject.toml ./
17
+ RUN pip install --upgrade pip && pip install -r constraints.txt
19
18
  COPY kinto/ kinto/
20
- RUN pip install --upgrade pip && \
21
- pip install ".[postgresql,memcached,monitoring]" -c constraints.txt && \
22
- pip install kinto-attachment kinto-emailer httpie
19
+ RUN cp -r /kinto-admin/kinto/plugins/admin/build kinto/plugins/admin/
20
+ RUN pip install ".[postgresql,memcached,monitoring]" -c constraints.txt && pip install kinto-attachment kinto-emailer httpie
23
21
 
24
22
  FROM python:3.10-slim-bullseye
25
23
  RUN apt-get update && apt-get install -y --no-install-recommends libpq-dev
@@ -27,7 +25,6 @@ RUN groupadd --gid 10001 app && \
27
25
  useradd --uid 10001 --gid 10001 --home /app --create-home app
28
26
 
29
27
  COPY --from=python-builder /opt/venv /opt/venv
30
- COPY --from=node-builder /kinto/plugins/admin/build ./kinto/plugins/admin/build
31
28
 
32
29
  ENV KINTO_INI=/etc/kinto/kinto.ini \
33
30
  PORT=8888 \
@@ -20,13 +20,14 @@ help:
20
20
  @echo " install-monitoring enable monitoring features like StatsD and Newrelic"
21
21
  @echo " install-postgres install postgresql support"
22
22
  @echo " install-dev install dependencies and everything needed to run tests"
23
- @echo " build-kinto-admin build the Kinto admin UI plugin (requires npm)"
23
+ @echo " pull-kinto-admin pull the Kinto admin UI plugin (requires npm)"
24
24
  @echo " serve start the kinto server on default port"
25
25
  @echo " migrate run the kinto migrations"
26
26
  @echo " lint run the code linters"
27
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"
28
29
  @echo " tdd run pytest-watch to rerun tests automatically on changes for tdd"
29
- @echo " tests-once only run the tests once with the default python interpreter"
30
+ @echo " tests-once only run the tests once with the default python interpreter"
30
31
  @echo " functional run functional test against a real kinto"
31
32
  @echo " browser-test run browser test against a real kinto"
32
33
  @echo " clean remove *.pyc files and __pycache__ directory"
@@ -67,8 +68,8 @@ $(DOC_STAMP): $(PYTHON) docs/requirements.txt
67
68
  constraints.txt: constraints.in
68
69
  pip-compile -o constraints.txt constraints.in
69
70
 
70
- build-kinto-admin: need-npm
71
- scripts/build-kinto-admin.sh
71
+ pull-kinto-admin:
72
+ scripts/pull-kinto-admin.sh
72
73
 
73
74
  $(SERVER_CONFIG):
74
75
  $(VENV)/bin/kinto init --ini $(SERVER_CONFIG)
@@ -94,6 +95,14 @@ tests: install-postgres install-monitoring install-memcached version-file instal
94
95
  tests-raw: version-file install-dev
95
96
  $(VENV)/bin/py.test
96
97
 
98
+ test-deps:
99
+ docker pull memcached
100
+ docker pull postgres
101
+ docker run -p 11211:11211 --name kinto-memcached -d memcached || echo "cannot start memcached, already exists?"
102
+ docker run -p 5432:5432 --name kinto-postgres -e POSTGRES_PASSWORD=postgres -d postgres || echo "cannot start postgres, already exists?"
103
+ sleep 2
104
+ PGPASSWORD=postgres psql -c "CREATE DATABASE testdb ENCODING 'UTF8' TEMPLATE template0;" -U postgres -h localhost
105
+
97
106
  lint: install-dev
98
107
  $(VENV)/bin/ruff check kinto tests docs/conf.py
99
108
  $(VENV)/bin/ruff format --check kinto tests docs/conf.py
@@ -105,9 +114,6 @@ format: install-dev
105
114
  tdd: install-dev
106
115
  $(VENV)/bin/ptw --runner $(VENV)/bin/py.test
107
116
 
108
- need-npm:
109
- @npm --version 2>/dev/null 1>&2 || (echo "The 'npm' command is required to build the Kinto Admin UI." && exit 1)
110
-
111
117
  need-kinto-running:
112
118
  @curl http://localhost:8888/v0/ 2>/dev/null 1>&2 || (echo "Run 'make runkinto' before starting tests." && exit 1)
113
119
 
@@ -119,12 +125,15 @@ functional: install-dev need-kinto-running
119
125
  $(VENV)/bin/py.test tests/functional.py
120
126
 
121
127
  browser-test: need-kinto-running
128
+ $(VENV)/bin/playwright install firefox
122
129
  $(VENV)/bin/py.test tests/browser.py
123
130
 
124
131
  clean:
125
132
  find . -name '*.pyc' -delete
126
133
  find . -name '__pycache__' -type d | xargs rm -fr
127
134
  rm -fr docs/_build/
135
+ docker rm -f kinto-memcached || echo ""
136
+ docker rm -f kinto-postgres || echo ""
128
137
 
129
138
  distclean: clean
130
139
  rm -fr *.egg *.egg-info/ dist/ build/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kinto
3
- Version: 18.0.0
3
+ Version: 18.1.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
@@ -66,7 +66,7 @@ Requires-Dist: bravado; extra == "test"
66
66
  Requires-Dist: pytest; extra == "test"
67
67
  Requires-Dist: pytest-cache; extra == "test"
68
68
  Requires-Dist: pytest-cov; extra == "test"
69
- Requires-Dist: selenium; extra == "test"
69
+ Requires-Dist: playwright; extra == "test"
70
70
  Requires-Dist: webtest; extra == "test"
71
71
  Provides-Extra: dev
72
72
  Requires-Dist: build; extra == "dev"
@@ -33,7 +33,7 @@ bravado_core
33
33
  pytest
34
34
  pytest-cache
35
35
  pytest-cov
36
- selenium
36
+ playwright
37
37
  webtest
38
38
  # dev
39
39
  build
@@ -1,70 +1,61 @@
1
1
  #
2
- # This file is autogenerated by pip-compile with Python 3.9
2
+ # This file is autogenerated by pip-compile with Python 3.10
3
3
  # by the following command:
4
4
  #
5
- # pip-compile --strip-extras
5
+ # pip-compile --output-file=constraints.txt --strip-extras constraints.in
6
6
  #
7
7
  arrow==1.3.0
8
8
  # via isoduration
9
9
  attrs==23.2.0
10
10
  # via
11
11
  # jsonschema
12
- # outcome
13
12
  # referencing
14
- # trio
15
- bcrypt==4.1.2
16
- # via -r requirements.in
13
+ bcrypt==4.1.3
14
+ # via -r constraints.in
17
15
  beautifulsoup4==4.12.3
18
16
  # via webtest
19
17
  bravado-core==6.1.1
20
- # via -r requirements.in
21
- build==1.0.3
22
- # via -r requirements.in
18
+ # via -r constraints.in
19
+ build==1.2.1
20
+ # via -r constraints.in
23
21
  certifi==2023.11.17
24
22
  # via
25
23
  # requests
26
- # selenium
27
24
  # sentry-sdk
28
25
  charset-normalizer==3.3.2
29
26
  # via requests
30
27
  colander==2.0
31
28
  # via
32
- # -r requirements.in
29
+ # -r constraints.in
33
30
  # cornice-swagger
34
31
  colorama==0.4.6
35
32
  # via logging-color-formatter
36
33
  cornice==6.0.1
37
34
  # via
38
- # -r requirements.in
35
+ # -r constraints.in
39
36
  # cornice-swagger
40
37
  cornice-swagger==1.0.1
41
- # via -r requirements.in
38
+ # via -r constraints.in
42
39
  coverage==7.4.0
43
- # via
44
- # coverage
45
- # pytest-cov
46
- dockerflow==2024.1.0
47
- # via -r requirements.in
40
+ # via pytest-cov
41
+ dockerflow==2024.4.2
42
+ # via -r constraints.in
48
43
  exceptiongroup==1.2.0
49
- # via
50
- # pytest
51
- # trio
52
- # trio-websocket
44
+ # via pytest
53
45
  execnet==2.0.2
54
46
  # via pytest-cache
55
47
  fqdn==1.5.1
56
48
  # via jsonschema
57
- h11==0.14.0
58
- # via wsproto
49
+ greenlet==3.0.3
50
+ # via
51
+ # playwright
52
+ # sqlalchemy
59
53
  hupper==1.12
60
54
  # via pyramid
61
- idna==3.6
55
+ idna==3.7
62
56
  # via
63
57
  # jsonschema
64
58
  # requests
65
- # trio
66
- importlib-metadata==7.0.1
67
- # via build
68
59
  iniconfig==2.0.0
69
60
  # via pytest
70
61
  iso8601==2.1.0
@@ -72,30 +63,28 @@ iso8601==2.1.0
72
63
  isoduration==20.11.0
73
64
  # via jsonschema
74
65
  jsonpatch==1.33
75
- # via -r requirements.in
66
+ # via -r constraints.in
76
67
  jsonpointer==2.4
77
68
  # via
78
69
  # jsonpatch
79
70
  # jsonschema
80
71
  jsonref==1.1.0
81
72
  # via bravado-core
82
- jsonschema==4.21.1
73
+ jsonschema==4.22.0
83
74
  # via
84
- # -r requirements.in
75
+ # -r constraints.in
85
76
  # bravado-core
86
77
  # swagger-spec-validator
87
78
  jsonschema-specifications==2023.12.1
88
79
  # via jsonschema
89
80
  logging-color-formatter==1.1.0
90
- # via -r requirements.in
81
+ # via -r constraints.in
91
82
  markupsafe==2.1.4
92
83
  # via werkzeug
93
84
  msgpack==1.0.7
94
85
  # via bravado-core
95
- newrelic==9.5.0
96
- # via -r requirements.in
97
- outcome==1.3.0.post0
98
- # via trio
86
+ newrelic==9.11.0
87
+ # via -r constraints.in
99
88
  packaging==23.2
100
89
  # via
101
90
  # build
@@ -109,45 +98,47 @@ plaster==1.1.2
109
98
  # pyramid
110
99
  plaster-pastedeploy==1.0.1
111
100
  # via pyramid
112
- pluggy==1.3.0
101
+ playwright==1.44.0
102
+ # via -r constraints.in
103
+ pluggy==1.5.0
113
104
  # via pytest
114
105
  psycopg2==2.9.9
115
- # via -r requirements.in
106
+ # via -r constraints.in
107
+ pyee==11.1.0
108
+ # via playwright
116
109
  pyproject-hooks==1.0.0
117
110
  # via build
118
111
  pyramid==2.0.2
119
112
  # via
120
- # -r requirements.in
113
+ # -r constraints.in
121
114
  # cornice
122
115
  # pyramid-mailer
123
116
  # pyramid-multiauth
124
117
  # pyramid-tm
125
118
  pyramid-mailer==0.15.1
126
- # via -r requirements.in
127
- pyramid-multiauth==1.0.1
128
- # via -r requirements.in
119
+ # via -r constraints.in
120
+ pyramid-multiauth==1.0.2
121
+ # via -r constraints.in
129
122
  pyramid-tm==2.5
130
- # via -r requirements.in
131
- pysocks==1.7.1
132
- # via urllib3
133
- pytest==7.4.4
123
+ # via -r constraints.in
124
+ pytest==8.2.2
134
125
  # via
135
- # -r requirements.in
126
+ # -r constraints.in
136
127
  # pytest-cache
137
128
  # pytest-cov
138
129
  pytest-cache==1.0
139
- # via -r requirements.in
140
- pytest-cov==4.1.0
141
- # via -r requirements.in
142
- python-dateutil==2.8.2
130
+ # via -r constraints.in
131
+ pytest-cov==5.0.0
132
+ # via -r constraints.in
133
+ python-dateutil==2.9.0.post0
143
134
  # via
144
- # -r requirements.in
135
+ # -r constraints.in
145
136
  # arrow
146
137
  # bravado-core
147
138
  python-memcached==1.62
148
- # via -r requirements.in
139
+ # via -r constraints.in
149
140
  python-rapidjson==1.14
150
- # via -r requirements.in
141
+ # via -r constraints.in
151
142
  pytz==2023.3.post1
152
143
  # via bravado-core
153
144
  pyyaml==6.0.1
@@ -160,9 +151,9 @@ referencing==0.32.1
160
151
  # jsonschema-specifications
161
152
  repoze-sendmail==4.4.1
162
153
  # via pyramid-mailer
163
- requests==2.31.0
154
+ requests==2.32.3
164
155
  # via
165
- # -r requirements.in
156
+ # -r constraints.in
166
157
  # bravado-core
167
158
  rfc3339-validator==0.1.4
168
159
  # via jsonschema
@@ -172,12 +163,10 @@ rpds-py==0.17.1
172
163
  # via
173
164
  # jsonschema
174
165
  # referencing
175
- ruff==0.1.14
176
- # via -r requirements.in
177
- selenium==4.12.0
178
- # via -r requirements.in
166
+ ruff==0.4.9
167
+ # via -r constraints.in
179
168
  sentry-sdk==1.39.2
180
- # via -r requirements.in
169
+ # via -r constraints.in
181
170
  simplejson==3.19.2
182
171
  # via bravado-core
183
172
  six==1.16.0
@@ -186,19 +175,15 @@ six==1.16.0
186
175
  # cornice-swagger
187
176
  # python-dateutil
188
177
  # rfc3339-validator
189
- sniffio==1.3.0
190
- # via trio
191
- sortedcontainers==2.4.0
192
- # via trio
193
178
  soupsieve==2.5
194
179
  # via beautifulsoup4
195
- sqlalchemy==2.0.25
180
+ sqlalchemy==2.0.30
196
181
  # via
197
- # -r requirements.in
182
+ # -r constraints.in
198
183
  # sentry-sdk
199
184
  # zope-sqlalchemy
200
185
  statsd==4.0.1
201
- # via -r requirements.in
186
+ # via -r constraints.in
202
187
  swagger-spec-validator==3.0.3
203
188
  # via bravado-core
204
189
  tomli==2.0.1
@@ -209,7 +194,7 @@ tomli==2.0.1
209
194
  # pytest
210
195
  transaction==4.0
211
196
  # via
212
- # -r requirements.in
197
+ # -r constraints.in
213
198
  # pyramid-mailer
214
199
  # pyramid-tm
215
200
  # repoze-sendmail
@@ -218,33 +203,26 @@ translationstring==1.4
218
203
  # via
219
204
  # colander
220
205
  # pyramid
221
- trio==0.24.0
222
- # via
223
- # selenium
224
- # trio-websocket
225
- trio-websocket==0.11.1
226
- # via selenium
227
206
  types-python-dateutil==2.8.19.20240106
228
207
  # via arrow
229
208
  typing-extensions==4.9.0
230
209
  # via
231
- # selenium
210
+ # pyee
232
211
  # sqlalchemy
233
212
  # swagger-spec-validator
234
213
  uri-template==1.3.0
235
214
  # via jsonschema
236
- urllib3==2.1.0
215
+ urllib3==2.2.2
237
216
  # via
238
217
  # requests
239
- # selenium
240
218
  # sentry-sdk
241
219
  venusian==3.1.0
242
220
  # via
243
221
  # cornice
244
222
  # pyramid
245
- waitress==2.1.2
223
+ waitress==3.0.0
246
224
  # via
247
- # -r requirements.in
225
+ # -r constraints.in
248
226
  # webtest
249
227
  webcolors==1.13
250
228
  # via jsonschema
@@ -253,13 +231,9 @@ webob==1.8.7
253
231
  # pyramid
254
232
  # webtest
255
233
  webtest==3.0.0
256
- # via -r requirements.in
257
- werkzeug==3.0.1
258
- # via -r requirements.in
259
- wsproto==1.2.0
260
- # via trio-websocket
261
- zipp==3.17.0
262
- # via importlib-metadata
234
+ # via -r constraints.in
235
+ werkzeug==3.0.3
236
+ # via -r constraints.in
263
237
  zope-deprecation==5.0
264
238
  # via pyramid
265
239
  zope-interface==6.1
@@ -269,7 +243,7 @@ zope-interface==6.1
269
243
  # transaction
270
244
  # zope-sqlalchemy
271
245
  zope-sqlalchemy==3.1
272
- # via -r requirements.in
246
+ # via -r constraints.in
273
247
 
274
248
  # The following packages are considered to be unsafe in a requirements file:
275
249
  # setuptools
@@ -119,7 +119,7 @@ Get started!
119
119
 
120
120
  git clone git@github.com:your_name_here/kinto.git
121
121
 
122
- 3. Setup a local PostgreSQL database for the tests (:ref:`more details <postgresql-install>`)::
122
+ 3. Run ``make test-deps``, or setup a local PostgreSQL database (:ref:`more details <postgresql-install>`)::
123
123
 
124
124
  sudo apt-get install postgresql
125
125
  sudo -n -u postgres -s -- psql -c "ALTER USER postgres WITH PASSWORD 'postgres';" -U postgres
@@ -235,16 +235,7 @@ In another terminal, run the end-to-end tests with:
235
235
 
236
236
  Browser Tests
237
237
  -------------
238
-
239
- Make sure the `geckodriver <https://github.com/mozilla/geckodriver/releases>`_ binary is available in your path.
240
-
241
- .. note::
242
-
243
- If your installation of *Firefox* is custom, specify the path of its binary using an alias:
244
-
245
- ::
246
-
247
- alias geckodriver="geckodriver --binary /path/to/firefox"
238
+ We use `playwright <https://playwright.dev/>`_ for browser testing. The tests included in this repo are very simple and verify the admin UI can at least authenticate with the current kinto back-end. Comprehensive unit tests are maintained in the kinto-admin repo.
248
239
 
249
240
 
250
241
  In a terminal, run an instance with the provided ``browser.ini`` configuration:
@@ -1,12 +1,12 @@
1
- Sphinx==7.2.6
1
+ Sphinx==7.3.7
2
2
  sphinx_rtd_theme==2.0.0
3
3
  docutils==0.20.1
4
4
  sphinxcontrib-httpdomain==1.8.1
5
- sphinx-github-changelog==1.2.1
5
+ sphinx-github-changelog==1.3.0
6
6
  kinto
7
7
  mock==5.1.0
8
8
  webtest==3.0.0
9
- cornice==6.0.1
9
+ cornice==6.1.0
10
10
  pyramid==2.0.2
11
- python-rapidjson==1.14
12
- SQLAlchemy==2.0.25
11
+ python-rapidjson==1.17
12
+ SQLAlchemy==2.0.30
@@ -316,9 +316,9 @@ Kinto Admin
316
316
  -----------
317
317
 
318
318
  In order to run a local `Kinto Admin UI <https://github.com/Kinto/kinto-admin>`_ from a cloned
319
- repo, the ``npm`` command must be available in order to build it with ::
319
+ repo, run ::
320
320
 
321
- make build-kinto-admin
321
+ make pull-kinto-admin
322
322
 
323
323
 
324
324
  Go further
@@ -1,5 +1,5 @@
1
- """Main entry point
2
- """
1
+ """Main entry point"""
2
+
3
3
  import logging
4
4
  import tempfile
5
5
 
@@ -54,6 +54,7 @@ DEFAULT_SETTINGS = {
54
54
  "initialization_sequence": (
55
55
  "kinto.core.initialization.setup_request_bound_data",
56
56
  "kinto.core.initialization.setup_json_serializer",
57
+ "kinto.core.initialization.restrict_http_methods_if_readonly",
57
58
  "kinto.core.initialization.setup_csp_headers",
58
59
  "kinto.core.initialization.setup_logging",
59
60
  "kinto.core.initialization.setup_storage",
@@ -8,7 +8,12 @@ from secrets import token_hex
8
8
  from dateutil import parser as dateparser
9
9
  from pyramid.events import ApplicationCreated, NewRequest, NewResponse
10
10
  from pyramid.exceptions import ConfigurationError
11
- from pyramid.httpexceptions import HTTPBadRequest, HTTPGone, HTTPTemporaryRedirect
11
+ from pyramid.httpexceptions import (
12
+ HTTPBadRequest,
13
+ HTTPGone,
14
+ HTTPMethodNotAllowed,
15
+ HTTPTemporaryRedirect,
16
+ )
12
17
  from pyramid.interfaces import IAuthenticationPolicy
13
18
  from pyramid.renderers import JSON as JSONRenderer
14
19
  from pyramid.response import Response
@@ -78,6 +83,24 @@ def setup_csp_headers(config):
78
83
  config.add_subscriber(on_new_response, NewResponse)
79
84
 
80
85
 
86
+ def restrict_http_methods_if_readonly(config):
87
+ """Prevent write operations if server is configured as read-only.
88
+
89
+ This is an additional layer of security on top of the verifications done
90
+ in :method:`kinto.core.Resource.register_service`, in case an installed
91
+ plugin does not take this setting into account in the definition of its
92
+ ad-hoc Pyramid views.
93
+ """
94
+ settings = config.get_settings()
95
+
96
+ def on_new_request(event):
97
+ if event.request.method.lower() not in ("get", "head", "options"):
98
+ raise HTTPMethodNotAllowed()
99
+
100
+ if asbool(settings["readonly"]):
101
+ config.add_subscriber(on_new_request, NewRequest)
102
+
103
+
81
104
  def setup_version_redirection(config):
82
105
  """Add a view which redirects to the current version of the API."""
83
106
  settings = config.get_settings()
@@ -1058,6 +1058,10 @@ class Resource:
1058
1058
 
1059
1059
  def _extract_filters(self):
1060
1060
  """Extracts filters from QueryString parameters."""
1061
+
1062
+ def is_valid_timestamp(value):
1063
+ return isinstance(value, int) or re.match(r'^"?\d+"?$', str(value))
1064
+
1061
1065
  queryparams = self.request.validated["querystring"]
1062
1066
 
1063
1067
  filters = []
@@ -1090,7 +1094,7 @@ class Resource:
1090
1094
  send_alert(self.request, message, url)
1091
1095
  operator = COMPARISON.LT
1092
1096
 
1093
- if value == "" or not isinstance(value, (int, str, type(None))):
1097
+ if value is not None and not is_valid_timestamp(value):
1094
1098
  raise_invalid(self.request, **error_details)
1095
1099
 
1096
1100
  filters.append(Filter(self.model.modified_field, value, operator))
@@ -1127,7 +1131,7 @@ class Resource:
1127
1131
  error_details["description"] = "Invalid character 0x00"
1128
1132
  raise_invalid(self.request, **error_details)
1129
1133
 
1130
- if field == self.model.modified_field and value == "":
1134
+ if field == self.model.modified_field and not is_valid_timestamp(value):
1131
1135
  raise_invalid(self.request, **error_details)
1132
1136
 
1133
1137
  filters.append(Filter(field, value, operator))
@@ -1,6 +1,7 @@
1
1
  """
2
2
  kinto.core.scripts: utilities to build admin scripts for kinto-based services
3
3
  """
4
+
4
5
  import logging
5
6
 
6
7
  from pyramid.settings import asbool
@@ -1,5 +1,4 @@
1
- """Exceptions raised by storage backend.
2
- """
1
+ """Exceptions raised by storage backend."""
3
2
 
4
3
 
5
4
  class BackendError(Exception):