wagtail 7.1.2__py3-none-any.whl → 7.2rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_page.py +1 -1
  3. wagtail/actions/create_alias.py +1 -1
  4. wagtail/actions/delete_page.py +1 -1
  5. wagtail/actions/publish_page_revision.py +1 -1
  6. wagtail/actions/publish_revision.py +1 -1
  7. wagtail/actions/revert_to_page_revision.py +1 -1
  8. wagtail/actions/unpublish.py +1 -1
  9. wagtail/actions/unpublish_page.py +1 -1
  10. wagtail/admin/auth.py +3 -1
  11. wagtail/admin/checks.py +2 -2
  12. wagtail/admin/filters.py +28 -1
  13. wagtail/admin/forms/collections.py +1 -1
  14. wagtail/admin/forms/comments.py +1 -1
  15. wagtail/admin/forms/models.py +1 -1
  16. wagtail/admin/forms/pages.py +1 -1
  17. wagtail/admin/forms/tags.py +1 -1
  18. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/cs/LC_MESSAGES/django.po +25 -1
  20. wagtail/admin/locale/en/LC_MESSAGES/django.po +278 -192
  21. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +29 -15
  22. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  23. wagtail/admin/locale/it/LC_MESSAGES/django.po +3 -2
  24. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  25. wagtail/admin/locale/nl/LC_MESSAGES/django.po +57 -3
  26. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  27. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +8 -2
  28. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  29. wagtail/admin/locale/ru/LC_MESSAGES/django.po +58 -1
  30. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  31. wagtail/admin/locale/tr/LC_MESSAGES/django.po +3 -2
  32. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  33. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +2 -2
  40. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  42. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/icons.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  48. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  49. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  50. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  51. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  52. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  53. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  54. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  55. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  56. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +2 -2
  57. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-modal.js +1 -1
  58. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-transition.js +1 -1
  59. wagtail/admin/static/wagtailadmin/js/vendor/jquery-3.6.0.min.js +1 -1
  60. wagtail/admin/static/wagtailadmin/js/vendor/jquery-ui-1.13.2.min.js +1 -1
  61. wagtail/admin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js +1 -1
  62. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload-process.js +1 -1
  63. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload.js +1 -1
  64. wagtail/admin/static/wagtailadmin/js/vendor/jquery.iframe-transport.js +1 -1
  65. wagtail/admin/static/wagtailadmin/js/vendor/tag-it.js +1 -1
  66. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  67. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +1 -1
  68. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  69. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  70. wagtail/admin/templates/wagtailadmin/account/account.html +2 -0
  71. wagtail/admin/templates/wagtailadmin/base.html +14 -0
  72. wagtail/admin/templates/wagtailadmin/generic/chooser/chooser.html +2 -1
  73. wagtail/admin/templates/wagtailadmin/generic/chooser/creation_form.html +2 -1
  74. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  75. wagtail/admin/templates/wagtailadmin/panels/object_list.html +1 -1
  76. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +3 -2
  77. wagtail/admin/templates/wagtailadmin/shared/formatted_field.html +1 -1
  78. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  79. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +19 -0
  80. wagtail/admin/templates/wagtailadmin/shared/panel.html +1 -1
  81. wagtail/admin/templates/wagtailadmin/shared/set_privacy.html +15 -0
  82. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +28 -1
  83. wagtail/admin/templates/wagtailadmin/shared/workflow_history/detail.html +2 -2
  84. wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_header.html → tables/ordering_header.html} +2 -2
  85. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +1 -1
  86. wagtail/admin/templates/wagtailadmin/widgets/{daterange_input.html → range_input.html} +1 -1
  87. wagtail/admin/templates/wagtailadmin/workflows/task_chooser/chooser.html +4 -2
  88. wagtail/admin/templatetags/wagtailadmin_tags.py +41 -22
  89. wagtail/admin/tests/api/test_pages.py +7 -7
  90. wagtail/admin/tests/api/test_renderer_classes.py +16 -0
  91. wagtail/admin/tests/pages/test_create_page.py +34 -2
  92. wagtail/admin/tests/pages/test_edit_page.py +128 -14
  93. wagtail/admin/tests/pages/test_explorer_view.py +34 -7
  94. wagtail/admin/tests/pages/test_reorder_page.py +11 -0
  95. wagtail/admin/tests/test_collections_views.py +12 -0
  96. wagtail/admin/tests/test_edit_handlers.py +3 -3
  97. wagtail/admin/tests/test_filters.py +2 -2
  98. wagtail/admin/tests/test_keyboard_shortcuts.py +52 -2
  99. wagtail/admin/tests/test_menu.py +0 -2
  100. wagtail/admin/tests/test_privacy.py +16 -16
  101. wagtail/admin/tests/test_templatetags.py +137 -0
  102. wagtail/admin/tests/test_workflows.py +34 -0
  103. wagtail/admin/tests/viewsets/test_model_viewset.py +322 -0
  104. wagtail/admin/ui/tables/orderable.py +73 -0
  105. wagtail/admin/ui/tables/pages.py +3 -13
  106. wagtail/admin/views/collection_privacy.py +6 -2
  107. wagtail/admin/views/generic/__init__.py +1 -0
  108. wagtail/admin/views/generic/mixins.py +20 -2
  109. wagtail/admin/views/generic/models.py +67 -1
  110. wagtail/admin/views/generic/ordering.py +79 -0
  111. wagtail/admin/views/home.py +3 -3
  112. wagtail/admin/views/page_privacy.py +5 -2
  113. wagtail/admin/views/pages/create.py +1 -1
  114. wagtail/admin/views/pages/edit.py +2 -2
  115. wagtail/admin/views/pages/listing.py +7 -42
  116. wagtail/admin/views/pages/move.py +1 -1
  117. wagtail/admin/views/pages/ordering.py +1 -1
  118. wagtail/admin/viewsets/base.py +1 -1
  119. wagtail/admin/viewsets/model.py +49 -1
  120. wagtail/admin/wagtail_hooks.py +2 -1
  121. wagtail/admin/widgets/slug.py +10 -10
  122. wagtail/api/v2/serializers.py +1 -1
  123. wagtail/api/v2/tests/test_renderer_classes.py +32 -0
  124. wagtail/apps.py +2 -0
  125. wagtail/bin/wagtail.py +1 -1
  126. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +14 -14
  127. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.mo +0 -0
  128. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +19 -2
  129. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.mo +0 -0
  130. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +18 -1
  131. wagtail/contrib/frontend_cache/tests.py +4 -2
  132. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +4 -4
  133. wagtail/contrib/redirects/tests/test_tmp_storages.py +20 -0
  134. wagtail/contrib/redirects/tmp_storages.py +1 -1
  135. wagtail/contrib/redirects/views.py +3 -3
  136. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +3 -3
  137. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  138. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +43 -3
  139. wagtail/contrib/search_promotions/static/wagtailsearchpromotions/js/query-chooser-modal.js +1 -1
  140. wagtail/contrib/search_promotions/views/settings.py +2 -2
  141. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.mo +0 -0
  142. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +6 -1
  143. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +1 -1
  144. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.mo +0 -0
  145. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +6 -2
  146. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.mo +0 -0
  147. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +6 -1
  148. wagtail/contrib/settings/tests/site_specific/test_admin.py +40 -6
  149. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  150. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +1 -1
  151. wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html +5 -5
  152. wagtail/contrib/table_block/blocks.py +1 -0
  153. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +5 -1
  154. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  155. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  156. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  157. wagtail/coreutils.py +5 -5
  158. wagtail/documents/forms.py +18 -1
  159. wagtail/documents/locale/en/LC_MESSAGES/django.po +10 -10
  160. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  161. wagtail/documents/locale/nl/LC_MESSAGES/django.po +9 -0
  162. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  163. wagtail/documents/locale/ru/LC_MESSAGES/django.po +9 -0
  164. wagtail/documents/models.py +1 -1
  165. wagtail/documents/static/wagtaildocs/js/add-multiple.js +1 -1
  166. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  167. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  168. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  169. wagtail/documents/templates/wagtaildocs/documents/add.html +0 -34
  170. wagtail/documents/tests/test_admin_views.py +132 -26
  171. wagtail/documents/tests/test_collection_privacy.py +18 -4
  172. wagtail/documents/tests/test_form_overrides.py +1 -1
  173. wagtail/documents/tests/test_search.py +21 -8
  174. wagtail/documents/views/documents.py +1 -1
  175. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  176. wagtail/embeds/static/wagtailembeds/js/embed-chooser-modal.js +1 -1
  177. wagtail/images/forms.py +16 -1
  178. wagtail/images/locale/cs/LC_MESSAGES/django.mo +0 -0
  179. wagtail/images/locale/cs/LC_MESSAGES/django.po +12 -1
  180. wagtail/images/locale/en/LC_MESSAGES/django.po +57 -46
  181. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  182. wagtail/images/locale/nl/LC_MESSAGES/django.po +37 -14
  183. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  184. wagtail/images/locale/ru/LC_MESSAGES/django.po +20 -1
  185. wagtail/images/models.py +1 -1
  186. wagtail/images/static/wagtailimages/js/add-multiple.js +1 -1
  187. wagtail/images/static/wagtailimages/js/focal-point-chooser.js +1 -1
  188. wagtail/images/static/wagtailimages/js/image-block.js +1 -1
  189. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  190. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  191. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  192. wagtail/images/static/wagtailimages/js/image-url-generator.js +1 -1
  193. wagtail/images/static/wagtailimages/js/vendor/jquery.Jcrop.min.js +1 -1
  194. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-image.js +1 -1
  195. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-validate.js +1 -1
  196. wagtail/images/static/wagtailimages/js/vendor/load-image.min.js +1 -1
  197. wagtail/images/templates/wagtailimages/chooser/chooser.html +22 -13
  198. wagtail/images/templates/wagtailimages/chooser/image_preview_column_cell.html +10 -0
  199. wagtail/images/templates/wagtailimages/chooser/results.html +24 -20
  200. wagtail/images/templates/wagtailimages/chooser/title_column_cell.html +15 -0
  201. wagtail/images/templates/wagtailimages/images/add.html +0 -34
  202. wagtail/images/templates/wagtailimages/images/index.html +3 -3
  203. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  204. wagtail/images/templates/wagtailimages/images/layout_toggle_button.html +8 -7
  205. wagtail/images/templatetags/wagtailimages_tags.py +2 -2
  206. wagtail/images/tests/test_admin_views.py +87 -0
  207. wagtail/images/tests/test_form_overrides.py +1 -1
  208. wagtail/images/tests/test_models.py +48 -9
  209. wagtail/images/views/chooser.py +66 -2
  210. wagtail/locale/en/LC_MESSAGES/django.po +55 -55
  211. wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  212. wagtail/locale/is_IS/LC_MESSAGES/django.po +3 -3
  213. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  214. wagtail/locale/nl/LC_MESSAGES/django.po +11 -2
  215. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  216. wagtail/locale/ru/LC_MESSAGES/django.po +11 -1
  217. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  218. wagtail/locales/locale/nl/LC_MESSAGES/django.mo +0 -0
  219. wagtail/locales/locale/nl/LC_MESSAGES/django.po +12 -1
  220. wagtail/locales/locale/ru/LC_MESSAGES/django.mo +0 -0
  221. wagtail/locales/locale/ru/LC_MESSAGES/django.po +10 -1
  222. wagtail/locales/views.py +2 -2
  223. wagtail/models/orderable.py +10 -0
  224. wagtail/models/pages.py +9 -11
  225. wagtail/models/sites.py +1 -1
  226. wagtail/models/workflows.py +8 -5
  227. wagtail/project_template/home/tests.py +6 -7
  228. wagtail/project_template/project_name/settings/base.py +9 -9
  229. wagtail/project_template/requirements.txt +1 -1
  230. wagtail/query.py +7 -2
  231. wagtail/rich_text/rewriters.py +1 -1
  232. wagtail/search/apps.py +4 -49
  233. wagtail/search/backends/__init__.py +1 -113
  234. wagtail/search/backends/base.py +1 -547
  235. wagtail/search/backends/database/__init__.py +1 -50
  236. wagtail/search/backends/database/fallback.py +1 -253
  237. wagtail/search/backends/database/mysql/mysql.py +1 -700
  238. wagtail/search/backends/database/mysql/query.py +1 -258
  239. wagtail/search/backends/database/postgres/postgres.py +1 -749
  240. wagtail/search/backends/database/postgres/query.py +1 -83
  241. wagtail/search/backends/database/postgres/weights.py +1 -63
  242. wagtail/search/backends/database/sqlite/query.py +1 -294
  243. wagtail/search/backends/database/sqlite/sqlite.py +1 -719
  244. wagtail/search/backends/database/sqlite/utils.py +1 -35
  245. wagtail/search/backends/deprecation.py +45 -0
  246. wagtail/search/backends/elasticsearch7.py +18 -1260
  247. wagtail/search/backends/elasticsearch8.py +21 -96
  248. wagtail/search/backends/elasticsearch9.py +35 -0
  249. wagtail/search/backends/opensearch2.py +35 -0
  250. wagtail/search/backends/opensearch3.py +35 -0
  251. wagtail/search/index.py +1 -358
  252. wagtail/search/locale/en/LC_MESSAGES/django.po +2 -10
  253. wagtail/search/management/commands/update_index.py +1 -205
  254. wagtail/search/management/commands/wagtail_update_index.py +1 -4
  255. wagtail/search/models.py +32 -158
  256. wagtail/search/query.py +1 -114
  257. wagtail/search/queryset.py +1 -43
  258. wagtail/search/signal_handlers.py +1 -24
  259. wagtail/search/tasks.py +1 -10
  260. wagtail/search/tests/test_elasticsearch.py +22 -0
  261. wagtail/search/utils.py +1 -206
  262. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  263. wagtail/snippets/locale/en/LC_MESSAGES/django.po +3 -3
  264. wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
  265. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +8 -1
  266. wagtail/snippets/locale/tr/LC_MESSAGES/django.mo +0 -0
  267. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +8 -1
  268. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  269. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  270. wagtail/snippets/tests/test_reordering.py +319 -0
  271. wagtail/snippets/tests/test_snippets.py +65 -12
  272. wagtail/snippets/views/snippets.py +16 -0
  273. wagtail/test/numberformat.py +30 -0
  274. wagtail/test/settings.py +35 -12
  275. wagtail/test/testapp/fields.py +12 -0
  276. wagtail/test/testapp/migrations/0056_commentablejsonpage.py +50 -0
  277. wagtail/test/testapp/migrations/0057_featurecompletetoy_sort_order.py +23 -0
  278. wagtail/test/testapp/migrations/0058_customlocktask.py +31 -0
  279. wagtail/test/testapp/models.py +27 -0
  280. wagtail/test/testapp/views.py +3 -1
  281. wagtail/test/utils/page_tests.py +17 -17
  282. wagtail/test/utils/template_tests.py +4 -6
  283. wagtail/test/utils/wagtail_tests.py +1 -2
  284. wagtail/tests/test_page_model.py +15 -0
  285. wagtail/{search/tests → tests}/test_page_search.py +29 -2
  286. wagtail/tests/test_search_fields.py +69 -0
  287. wagtail/tests/test_tests.py +62 -6
  288. wagtail/tests/test_workflow.py +25 -1
  289. wagtail/users/locale/cs/LC_MESSAGES/django.mo +0 -0
  290. wagtail/users/locale/cs/LC_MESSAGES/django.po +3 -0
  291. wagtail/users/locale/en/LC_MESSAGES/django.po +2 -2
  292. wagtail/users/locale/nl/LC_MESSAGES/django.mo +0 -0
  293. wagtail/users/locale/nl/LC_MESSAGES/django.po +6 -3
  294. wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
  295. wagtail/users/locale/ru/LC_MESSAGES/django.po +5 -1
  296. wagtail/users/locale/tr/LC_MESSAGES/django.mo +0 -0
  297. wagtail/users/locale/tr/LC_MESSAGES/django.po +78 -4
  298. wagtail/users/templates/wagtailusers/users/create.html +2 -0
  299. wagtail/users/templates/wagtailusers/users/edit.html +2 -0
  300. wagtail/users/tests/test_admin_views.py +4 -0
  301. wagtail/users/views/users.py +1 -1
  302. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/METADATA +7 -6
  303. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/RECORD +309 -315
  304. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +0 -13
  305. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +0 -13
  306. wagtail/search/tests/__init__.py +0 -0
  307. wagtail/search/tests/elasticsearch_common_tests.py +0 -251
  308. wagtail/search/tests/test_backends.py +0 -1215
  309. wagtail/search/tests/test_db_backend.py +0 -62
  310. wagtail/search/tests/test_elasticsearch7_backend.py +0 -1452
  311. wagtail/search/tests/test_elasticsearch8_backend.py +0 -15
  312. wagtail/search/tests/test_index_functions.py +0 -256
  313. wagtail/search/tests/test_indexed_class.py +0 -157
  314. wagtail/search/tests/test_mysql_backend.py +0 -192
  315. wagtail/search/tests/test_postgres_backend.py +0 -210
  316. wagtail/search/tests/test_queries.py +0 -332
  317. wagtail/search/tests/test_related_fields.py +0 -102
  318. wagtail/search/tests/test_sqlite_backend.py +0 -52
  319. wagtail/test/search/__init__.py +0 -0
  320. wagtail/test/search/apps.py +0 -9
  321. wagtail/test/search/fixtures/search.json +0 -545
  322. wagtail/test/search/migrations/0001_initial.py +0 -146
  323. wagtail/test/search/migrations/0002_bookunindexed.py +0 -43
  324. wagtail/test/search/migrations/0003_book_summary.py +0 -18
  325. wagtail/test/search/migrations/__init__.py +0 -0
  326. wagtail/test/search/models.py +0 -137
  327. /wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_cell.html → tables/ordering_cell.html} +0 -0
  328. /wagtail/{search/checks.py → checks.py} +0 -0
  329. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/WHEEL +0 -0
  330. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/entry_points.txt +0 -0
  331. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/licenses/LICENSE +0 -0
  332. {wagtail-7.1.2.dist-info → wagtail-7.2rc1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,69 @@
1
+ from contextlib import contextmanager
2
+
3
+ from django.core import checks
4
+ from django.test import TestCase
5
+
6
+ from wagtail.models import Page
7
+ from wagtail.test.testapp.models import (
8
+ TaggedChildPage,
9
+ TaggedGrandchildPage,
10
+ TaggedPage,
11
+ )
12
+
13
+
14
+ @contextmanager
15
+ def patch_search_fields(model, new_search_fields):
16
+ """
17
+ A context manager to allow testing of different search_fields configurations
18
+ without permanently changing the models' search_fields.
19
+ """
20
+ old_search_fields = model.search_fields
21
+ model.search_fields = new_search_fields
22
+ yield
23
+ model.search_fields = old_search_fields
24
+
25
+
26
+ class TestSearchFields(TestCase):
27
+ def test_checking_core_page_fields_are_indexed(self):
28
+ """Run checks to ensure that when core page fields are missing we get a warning"""
29
+
30
+ # first confirm that errors show as TaggedPage (in test models) has no Page.search_fields
31
+ errors = [
32
+ error for error in checks.run_checks() if error.id == "wagtailsearch.W001"
33
+ ]
34
+
35
+ # should only ever get this warning on the sub-classes of the page model
36
+ self.assertEqual(
37
+ [TaggedPage, TaggedChildPage, TaggedGrandchildPage],
38
+ [error.obj for error in errors],
39
+ )
40
+
41
+ for error in errors:
42
+ self.assertEqual(
43
+ error.msg,
44
+ "Core Page fields missing in `search_fields`",
45
+ )
46
+ self.assertIn(
47
+ "Page model search fields `search_fields = Page.search_fields + [...]`",
48
+ error.hint,
49
+ )
50
+
51
+ # second check that we get no errors when setting up the models correctly
52
+ with patch_search_fields(
53
+ TaggedPage, Page.search_fields + TaggedPage.search_fields
54
+ ):
55
+ errors = [
56
+ error
57
+ for error in checks.run_checks()
58
+ if error.id == "wagtailsearch.W001"
59
+ ]
60
+ self.assertEqual([], errors)
61
+
62
+ # third check that we get no errors when disabling all model search
63
+ with patch_search_fields(TaggedPage, []):
64
+ errors = [
65
+ error
66
+ for error in checks.run_checks()
67
+ if error.id == "wagtailsearch.W001"
68
+ ]
69
+ self.assertEqual([], errors)
@@ -4,12 +4,13 @@ import unittest
4
4
  from django.conf import settings
5
5
  from django.core.exceptions import ImproperlyConfigured
6
6
  from django.core.files.uploadedfile import SimpleUploadedFile
7
- from django.template import Context, Template
8
- from django.test import TestCase
7
+ from django.template import Context, Origin, Template
8
+ from django.test import SimpleTestCase, TestCase
9
9
 
10
10
  from wagtail.admin.tests.test_contentstate import content_state_equal
11
11
  from wagtail.models import PAGE_MODEL_CLASSES, Page, Site
12
12
  from wagtail.test.dummy_external_storage import DummyExternalStorage
13
+ from wagtail.test.numberformat import ignore_numberformat
13
14
  from wagtail.test.testapp.models import (
14
15
  BusinessChild,
15
16
  BusinessIndex,
@@ -470,12 +471,67 @@ class TestDummyExternalStorage(WagtailTestUtils, TestCase):
470
471
  settings.WAGTAIL_CHECK_TEMPLATE_NUMBER_FORMAT,
471
472
  "Number formatting functions have not been patched",
472
473
  )
473
- class TestPatchedNumberFormat(TestCase):
474
+ class TestPatchedNumberFormat(SimpleTestCase):
474
475
  def test_outputting_number_directly_is_disallowed(self):
475
476
  context = Context({"num": 42})
476
- template = Template("the answer is {{ num }}")
477
- with self.assertRaises(ImproperlyConfigured):
478
- template.render(context)
477
+ template_name = "wagtailcore/tests/some_template.html"
478
+ external_template_name = "external_package/other_template.html"
479
+ templates = [
480
+ Template("the answer is {{ num }}"),
481
+ Template(
482
+ "the answer is {{ num }}",
483
+ origin=Origin(
484
+ name=f"/some/path/{template_name}",
485
+ template_name=template_name,
486
+ ),
487
+ ),
488
+ Template(
489
+ "the answer is {{ num }}",
490
+ origin=Origin(
491
+ name=f"/some/path/{external_template_name}",
492
+ template_name=external_template_name,
493
+ ),
494
+ ),
495
+ ]
496
+ for template in templates:
497
+ with (
498
+ self.subTest(template=template),
499
+ self.assertRaises(ImproperlyConfigured),
500
+ ):
501
+ template.render(context)
502
+
503
+ def test_ignore_numberformat(self):
504
+ context = Context({"num": 4815162342})
505
+ template_name = "external_package/some_template.html"
506
+ with ignore_numberformat([template_name]):
507
+ ignored_template = Template(
508
+ "the answer is {{ num }}",
509
+ origin=Origin(
510
+ name=f"/some/path/{template_name}",
511
+ template_name=template_name,
512
+ ),
513
+ )
514
+
515
+ self.assertEqual(
516
+ ignored_template.render(context),
517
+ "the answer is 4815162342",
518
+ )
519
+ with self.settings(USE_THOUSAND_SEPARATOR=True):
520
+ self.assertEqual(
521
+ ignored_template.render(context),
522
+ "the answer is 4,815,162,342",
523
+ )
524
+
525
+ # But other templates should still raise
526
+ other_template = Template(
527
+ "the answer is {{ num }}",
528
+ origin=Origin(
529
+ name="/some/path/important/tests/some_template.html",
530
+ template_name="important/tests/some_template.html",
531
+ ),
532
+ )
533
+ with self.assertRaises(ImproperlyConfigured):
534
+ other_template.render(context)
479
535
 
480
536
  def test_outputting_number_via_intcomma(self):
481
537
  context = Context({"num": 9000})
@@ -1,4 +1,5 @@
1
1
  import datetime
2
+ from unittest import mock
2
3
 
3
4
  from django.conf import settings
4
5
  from django.contrib.auth import get_user_model
@@ -21,7 +22,12 @@ from wagtail.models import (
21
22
  WorkflowState,
22
23
  WorkflowTask,
23
24
  )
24
- from wagtail.test.testapp.models import FullFeaturedSnippet, ModeratedModel, SimplePage
25
+ from wagtail.test.testapp.models import (
26
+ FullFeaturedSnippet,
27
+ ModeratedModel,
28
+ SimplePage,
29
+ SimpleTask,
30
+ )
25
31
  from wagtail.test.utils.wagtail_tests import WagtailTestUtils
26
32
 
27
33
 
@@ -117,6 +123,24 @@ class TestWorkflowModels(TestCase):
117
123
  self.assertTrue(workflow_2.all_pages().filter(id=hello_page.id).exists())
118
124
  self.assertTrue(workflow_2.all_pages().filter(id=goodbye_page.id).exists())
119
125
 
126
+ def test_specific_gracefully_handles_missing_rows(self):
127
+ # 13376 - Check that .specific handles missing rows for Tasks
128
+ # when generating warnings
129
+
130
+ # Trick SpecificIteraterable.__init__() into always looking for SimpleTasks
131
+ with mock.patch(
132
+ "wagtail.query.ContentType.objects.get_for_id",
133
+ return_value=ContentType.objects.get_for_model(SimpleTask),
134
+ ):
135
+ with self.assertWarnsRegex(
136
+ RuntimeWarning,
137
+ "Specific versions of the following items could not be found",
138
+ ):
139
+ tasks = list(Task.objects.all().specific())
140
+
141
+ # Missing tasks should be supplemented with generic tasks
142
+ self.assertEqual(tasks, [Task.objects.get(name="Moderators approval")])
143
+
120
144
 
121
145
  class TestPageWorkflows(WagtailTestUtils, TestCase):
122
146
  fixtures = ["test.json"]
@@ -127,6 +127,9 @@ msgstr "Tmavé"
127
127
  msgid "Default"
128
128
  msgstr "Default(ní)"
129
129
 
130
+ msgid "Keyboard shortcuts"
131
+ msgstr "Klávesové zkratky"
132
+
130
133
  msgid "user profile"
131
134
  msgstr "uživatelský profile"
132
135
 
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -379,7 +379,7 @@ msgid "Account"
379
379
  msgstr ""
380
380
 
381
381
  #: templates/wagtailusers/users/create.html:11
382
- #: templates/wagtailusers/users/create.html:44
382
+ #: templates/wagtailusers/users/create.html:45
383
383
  #: templates/wagtailusers/users/edit.html:11
384
384
  msgid "Roles"
385
385
  msgstr ""
@@ -8,7 +8,7 @@
8
8
  # Joeri Vlekken, 2024
9
9
  # Kees Hink <keeshink@gmail.com>, 2017
10
10
  # Maarten Kling <kling.maarten@gmail.com>, 2023
11
- # Storm Heg <storm@stormbase.digital>, 2021-2024
11
+ # Storm Heg <storm@stormbase.digital>, 2021-2025
12
12
  # Thijs Kramer <thijskramer@gmail.com>, 2015
13
13
  # Thijs Kramer <thijskramer@gmail.com>, 2015-2016,2022-2023
14
14
  msgid ""
@@ -17,7 +17,7 @@ msgstr ""
17
17
  "Report-Msgid-Bugs-To: \n"
18
18
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
19
19
  "PO-Revision-Date: 2014-02-19 11:54+0000\n"
20
- "Last-Translator: Thijs Kramer <thijskramer@gmail.com>, 2015-2016,2022-2023\n"
20
+ "Last-Translator: Storm Heg <storm@stormbase.digital>, 2021-2025\n"
21
21
  "Language-Team: Dutch (http://app.transifex.com/torchbox/wagtail/language/"
22
22
  "nl/)\n"
23
23
  "MIME-Version: 1.0\n"
@@ -154,6 +154,9 @@ msgstr "informatiedichtheid"
154
154
  msgid "Keyboard shortcuts"
155
155
  msgstr "Sneltoetsen"
156
156
 
157
+ msgid "Enable custom keyboard shortcuts specific to Wagtail."
158
+ msgstr "Schakel sneltoetsen voor gebruik met Wagtail in."
159
+
157
160
  msgid "user profile"
158
161
  msgstr "gebruikersprofiel"
159
162
 
@@ -263,7 +266,7 @@ msgid "Change"
263
266
  msgstr "Wijzigen"
264
267
 
265
268
  msgid "Custom permissions"
266
- msgstr "Aangepaste machtigingen"
269
+ msgstr "Speciale machtigingen"
267
270
 
268
271
  msgid "Toggle all"
269
272
  msgstr "Toon/verberg alle"
@@ -20,6 +20,7 @@
20
20
  # sergeybe <sergeybe@gmail.com>, 2020
21
21
  # Sergey Komarov <sjkomarov@gmail.com>, 2014
22
22
  # Tatsiana Tsygan <art.tatsiana@gmail.com>, 2018
23
+ # Twixxik, 2025
23
24
  # Vassily <zuber.kg@gmail.com>, 2017
24
25
  # Vassily <zuber.kg@gmail.com>, 2017
25
26
  # Влад <integration.into.society@gmail.com>, 2022
@@ -34,7 +35,7 @@ msgstr ""
34
35
  "Report-Msgid-Bugs-To: \n"
35
36
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
36
37
  "PO-Revision-Date: 2014-02-19 11:54+0000\n"
37
- "Last-Translator: Никита Викторович <hnknta@gmail.com>, 2014\n"
38
+ "Last-Translator: Twixxik, 2025\n"
38
39
  "Language-Team: Russian (http://app.transifex.com/torchbox/wagtail/language/"
39
40
  "ru/)\n"
40
41
  "MIME-Version: 1.0\n"
@@ -172,6 +173,9 @@ msgstr "плотность"
172
173
  msgid "Keyboard shortcuts"
173
174
  msgstr "Горячие клавиши"
174
175
 
176
+ msgid "Enable custom keyboard shortcuts specific to Wagtail."
177
+ msgstr "Включить пользовательские сочетания клавиш для Wagtail."
178
+
175
179
  msgid "user profile"
176
180
  msgstr "профиль пользователя"
177
181
 
@@ -6,6 +6,7 @@
6
6
  # Basitlik İyidir, 2020
7
7
  # Basitlik İyidir, 2020
8
8
  # Cihad GÜNDOĞDU <cihadgundogdu@gmail.com>, 2016,2025
9
+ # Ertuğrul Keremoğlu, 2025
9
10
  # Matt Westcott <matthew@torchbox.com>, 2020
10
11
  # Py Data Geek <pydatageek@gmail.com>, 2019
11
12
  # Py Data Geek <pydatageek@gmail.com>, 2019
@@ -16,7 +17,7 @@ msgstr ""
16
17
  "Report-Msgid-Bugs-To: \n"
17
18
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
18
19
  "PO-Revision-Date: 2014-02-19 11:54+0000\n"
19
- "Last-Translator: Ragıp Ünal <ragip@ragipunal.com>, 2016\n"
20
+ "Last-Translator: Ertuğrul Keremoğlu, 2025\n"
20
21
  "Language-Team: Turkish (http://app.transifex.com/torchbox/wagtail/language/"
21
22
  "tr/)\n"
22
23
  "MIME-Version: 1.0\n"
@@ -28,6 +29,10 @@ msgstr ""
28
29
  msgid "Wagtail users"
29
30
  msgstr "Wagtail kullanıcılar"
30
31
 
32
+ msgid "Required. Letters, digits and @/./+/-/_ only."
33
+ msgstr ""
34
+ "Zorunlu. Sadece harfler, rakamlar ve @/./+/-/_ karakterleri kullanılabilir."
35
+
31
36
  msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
32
37
  msgstr "Bu değer sadece harf, sayı ya da @/./+/-/_ karakterlerinden oluşur."
33
38
 
@@ -90,6 +95,16 @@ msgstr "reddedilen bildirimler"
90
95
  msgid "Receive notification when your page edit is rejected"
91
96
  msgstr "Düzenlediğiniz sayfa reddedildiğinde bildirim alın"
92
97
 
98
+ msgid "updated comments notifications"
99
+ msgstr "güncellenen yorum bildirimleri"
100
+
101
+ msgid ""
102
+ "Receive notification when comments have been created, resolved, or deleted "
103
+ "on a page that you have subscribed to receive comment notifications on"
104
+ msgstr ""
105
+ "Abone olduğunuz bir sayfada yorum oluşturulduğunda, çözüldüğünde veya "
106
+ "silindiğinde bildirim alın"
107
+
93
108
  msgid "preferred language"
94
109
  msgstr "tercih edilen dil"
95
110
 
@@ -155,6 +170,9 @@ msgstr[1] "%(counter)s kullanıcısına rol atandı."
155
170
  msgid "Assign role"
156
171
  msgstr "Rol ata"
157
172
 
173
+ msgid "Are you sure you want to assign this role to these users?"
174
+ msgstr "Bu rolü bu kullanıcılara atamak istediğinizden emin misiniz?"
175
+
158
176
  msgid "You don't have permission to edit this user"
159
177
  msgid_plural "You don't have permission to edit these users"
160
178
  msgstr[0] "Bu kullanıcıyı düzenleme izniniz yok"
@@ -163,9 +181,21 @@ msgstr[1] "Bu kullanıcıları düzenleme izniniz yok"
163
181
  msgid "Yes, assign"
164
182
  msgstr "Evet, ata"
165
183
 
184
+ msgid "No, don't assign"
185
+ msgstr "Hayır, atama yapma"
186
+
187
+ #, python-format
188
+ msgid "Delete 1 user"
189
+ msgid_plural "Delete %(counter)s users"
190
+ msgstr[0] "1 kullanıcı sil"
191
+ msgstr[1] "%(counter)s kullanıcı sil"
192
+
166
193
  msgid "Delete"
167
194
  msgstr "Sil"
168
195
 
196
+ msgid "Are you sure you want to delete these users?"
197
+ msgstr "Bu kullanıcıları silmek istediğinizden emin misiniz?"
198
+
169
199
  msgid "You don't have permission to delete this user"
170
200
  msgid_plural "You don't have permission to delete these users"
171
201
  msgstr[0] "Bu kullanıcıyı silme izniniz yok"
@@ -181,17 +211,24 @@ msgstr "Hayır, silme"
181
211
  msgid "Change active state for 1 user"
182
212
  msgid_plural "Change active state for %(counter)s users"
183
213
  msgstr[0] "1 kullanıcının etkin durumunu değiştir"
184
- msgstr[1] "%(counter)s kullanıcının etkin durumunu değiştir"
214
+ msgstr[1] "%(counter)s kullanıcının aktiflik durumunu değiştir"
185
215
 
186
216
  msgid "Set active state"
187
- msgstr "Etkin durumu ayarla"
217
+ msgstr "Aktiflik durumunu ayarla"
218
+
219
+ msgid "Are you sure you want to change the active state for these users?"
220
+ msgstr ""
221
+ "Bu kullanıcıların aktiflik durumunu değiştirmek istediğinizden emin misiniz?"
188
222
 
189
223
  msgid "You cannot change your own active status"
190
- msgstr "Kendi etkin durumunuzu değiştiremezsiniz."
224
+ msgstr "Kendi aktiflik durumunuzu değiştiremezsiniz"
191
225
 
192
226
  msgid "Yes, change state"
193
227
  msgstr "Evet, durumu değiştir"
194
228
 
229
+ msgid "No, don't change state"
230
+ msgstr "Hayır, durumu değiştirme"
231
+
195
232
  #, python-format
196
233
  msgid ""
197
234
  "The group '%(group_name)s' has <strong>%(group_user_count)s</strong> member."
@@ -222,9 +259,24 @@ msgstr "Ekle"
222
259
  msgid "Change"
223
260
  msgstr "Değiştir"
224
261
 
262
+ msgid "Custom permissions"
263
+ msgstr "Özel izinler"
264
+
225
265
  msgid "Toggle all"
226
266
  msgstr "Tümünü değiştir"
227
267
 
268
+ msgid "Toggle all add permissions"
269
+ msgstr "Tüm ekleme izinlerini etkinleştir/devre dışı bırak"
270
+
271
+ msgid "Toggle all change permissions"
272
+ msgstr "Tüm değişiklik izinlerini etkinleştir/devre dışı bırak"
273
+
274
+ msgid "Toggle all delete permissions"
275
+ msgstr "Tüm silme izinlerini etkinleştir/devre dışı bırak"
276
+
277
+ msgid "Toggle all custom permissions"
278
+ msgstr "Tüm özel izinleri etkinleştir/devre dışı bırak"
279
+
228
280
  msgid "Other permissions"
229
281
  msgstr "Diğer izinler"
230
282
 
@@ -258,9 +310,24 @@ msgstr "Roller"
258
310
  msgid "Select all users in listing"
259
311
  msgstr "Listede tüm kullanıcıları seç"
260
312
 
313
+ msgid "Sorry, no users match your query"
314
+ msgstr "Sorgunuza uyan kullanıcı bulunamadı"
315
+
316
+ #, python-format
317
+ msgid ""
318
+ "There are no users configured. Why not <a "
319
+ "href=\"%(wagtailusers_add_url)s\">add some</a>?"
320
+ msgstr ""
321
+ "Hiç kullanıcı yapılandırılmamış. Bir kullanıcı <a "
322
+ "href=\"%(wagtailusers_add_url)s\">eklemeyi</a> deneyin."
323
+
261
324
  msgid "Can view"
262
325
  msgstr "Görebilir"
263
326
 
327
+ #, python-format
328
+ msgid "user %(id)s (deleted)"
329
+ msgstr "Kullanıcı %(id)s (silinmiş)"
330
+
264
331
  msgid "Assign role to selected users"
265
332
  msgstr "Seçilen kullanıcılara rol ata"
266
333
 
@@ -336,6 +403,9 @@ msgstr "Grubu sil"
336
403
  msgid "Last login"
337
404
  msgstr "Son giriş"
338
405
 
406
+ msgid "Group"
407
+ msgstr "Grup"
408
+
339
409
  msgid "Add a user"
340
410
  msgstr "Kullanıcı ekle"
341
411
 
@@ -355,6 +425,10 @@ msgstr "Erişim seviyesi"
355
425
  msgid "More options for '%(title)s'"
356
426
  msgstr " '%(title)s' için daha fazla seçenek"
357
427
 
428
+ #, python-format
429
+ msgid "User '%(object)s' created."
430
+ msgstr "Kullanıcı '%(object)s' oluşturuldu."
431
+
358
432
  msgid "Add user"
359
433
  msgstr "Kullanıcı ekle"
360
434
 
@@ -21,6 +21,7 @@
21
21
  hidden
22
22
  aria-labelledby="tab-label-account"
23
23
  data-w-tabs-target="panel"
24
+ data-action="w-focus:focus->w-tabs#selectInside"
24
25
  >
25
26
  <ul class="fields">
26
27
  {% block fields %}
@@ -54,6 +55,7 @@
54
55
  hidden
55
56
  aria-labelledby="tab-label-roles"
56
57
  data-w-tabs-target="panel"
58
+ data-action="w-focus:focus->w-tabs#selectInside"
57
59
  >
58
60
  <ul class="fields">
59
61
  <li>{% formattedfield form.is_superuser %}</li>
@@ -21,6 +21,7 @@
21
21
  hidden
22
22
  aria-labelledby="tab-label-account"
23
23
  data-w-tabs-target="panel"
24
+ data-action="w-focus:focus->w-tabs#selectInside"
24
25
  >
25
26
  <ul class="fields">
26
27
  {% block fields %}
@@ -51,6 +52,7 @@
51
52
  hidden
52
53
  aria-labelledby="tab-label-roles"
53
54
  data-w-tabs-target="panel"
55
+ data-action="w-focus:focus->w-tabs#selectInside"
54
56
  >
55
57
  <ul class="fields">
56
58
  {% if form.is_superuser %}
@@ -2789,6 +2789,10 @@ class TestUserViewSet(TestCase):
2789
2789
  self.assertIs(viewset.get_form_class(for_update=False), CustomUserCreationForm)
2790
2790
  self.assertIs(viewset.get_form_class(for_update=True), CustomUserEditForm)
2791
2791
 
2792
+ def test_get_viewset_cls_custom_and_check_ordering(self):
2793
+ viewset_cls = get_viewset_cls(self.app_config, "user_viewset")
2794
+ self.assertEqual(viewset_cls.ordering, get_user_model().USERNAME_FIELD)
2795
+
2792
2796
  def test_get_viewset_cls_custom_form_invalid_value(self):
2793
2797
  with unittest.mock.patch.object(
2794
2798
  self.app_config, "user_viewset", new="asdfasdf"
@@ -345,7 +345,7 @@ class HistoryView(generic.HistoryView):
345
345
  class UserViewSet(ModelViewSet):
346
346
  icon = "user"
347
347
  model = User
348
- ordering = "name"
348
+ ordering = User.USERNAME_FIELD
349
349
  add_to_reference_index = False
350
350
  filterset_class = UserFilterSet
351
351
  menu_name = "users"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wagtail
3
- Version: 7.1.2
3
+ Version: 7.2rc1
4
4
  Summary: A Django content management system.
5
5
  Author-email: Wagtail core team + contributors <hello@wagtail.org>
6
6
  License-Expression: BSD-3-Clause
@@ -16,11 +16,11 @@ Classifier: Intended Audience :: Developers
16
16
  Classifier: Operating System :: OS Independent
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
24
  Classifier: Framework :: Django
25
25
  Classifier: Framework :: Django :: 4.2
26
26
  Classifier: Framework :: Django :: 5.0
@@ -28,7 +28,7 @@ Classifier: Framework :: Django :: 5.1
28
28
  Classifier: Framework :: Django :: 5.2
29
29
  Classifier: Framework :: Wagtail
30
30
  Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
31
- Requires-Python: >=3.9
31
+ Requires-Python: >=3.10
32
32
  Description-Content-Type: text/markdown
33
33
  License-File: LICENSE
34
34
  Requires-Dist: Django>=4.2
@@ -47,7 +47,8 @@ Requires-Dist: openpyxl<4.0,>=3.0.10
47
47
  Requires-Dist: anyascii>=0.1.5
48
48
  Requires-Dist: telepath<1,>=0.3.1
49
49
  Requires-Dist: laces<0.2,>=0.1
50
- Requires-Dist: django-tasks<0.9,>=0.8
50
+ Requires-Dist: django-tasks<0.10,>=0.8
51
+ Requires-Dist: wagtailmodelsearch==1.1b1
51
52
  Provides-Extra: testing
52
53
  Requires-Dist: python-dateutil>=2.7; extra == "testing"
53
54
  Requires-Dist: Jinja2<3.2,>=3.0; extra == "testing"
@@ -60,7 +61,7 @@ Requires-Dist: responses<1,>=0.25; extra == "testing"
60
61
  Requires-Dist: coverage>=3.7.0; extra == "testing"
61
62
  Requires-Dist: doc8==1.1.2; extra == "testing"
62
63
  Requires-Dist: ruff==0.9.6; extra == "testing"
63
- Requires-Dist: semgrep==1.40.0; extra == "testing"
64
+ Requires-Dist: semgrep==1.132.0; extra == "testing"
64
65
  Requires-Dist: curlylint==0.13.1; extra == "testing"
65
66
  Requires-Dist: djhtml==3.0.6; extra == "testing"
66
67
  Requires-Dist: polib<2.0,>=1.1; extra == "testing"
@@ -162,7 +163,7 @@ _(If you are reading this on GitHub, the details here may not be indicative of t
162
163
  Wagtail supports:
163
164
 
164
165
  - Django 4.2.x and 5.1.x
165
- - Python 3.9, 3.10, 3.11, 3.12 and 3.13
166
+ - Python 3.10, 3.11, 3.12, 3.13, and 3.14
166
167
  - PostgreSQL, MySQL, MariaDB and SQLite (with JSON1) as database backends
167
168
 
168
169
  [Previous versions of Wagtail](https://docs.wagtail.org/en/stable/releases/upgrading.html#compatible-django-python-versions) additionally supported Python 2.7, 3.8 and earlier Django versions.