wagtail 6.1.3__py3-none-any.whl → 6.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 (257) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_for_translation.py +15 -1
  3. wagtail/admin/checks.py +20 -30
  4. wagtail/admin/forms/pages.py +10 -0
  5. wagtail/admin/icons.py +43 -0
  6. wagtail/admin/locale/en/LC_MESSAGES/django.po +405 -295
  7. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +21 -3
  8. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  9. wagtail/admin/locale/sl/LC_MESSAGES/django.po +30 -0
  10. wagtail/admin/menu.py +2 -2
  11. wagtail/admin/migrations/0004_editingsession.py +57 -0
  12. wagtail/admin/migrations/0005_editingsession_is_editing.py +18 -0
  13. wagtail/admin/models.py +36 -3
  14. wagtail/admin/rich_text/editors/draftail/__init__.py +2 -20
  15. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  16. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  17. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  18. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  19. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  20. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  21. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  22. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  23. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  24. wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
  25. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  26. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  27. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  28. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  29. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  30. wagtail/admin/static/wagtailadmin/js/preview-panel.js +2 -1
  31. wagtail/admin/static/wagtailadmin/js/preview-panel.js.LICENSE.txt +11 -0
  32. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  33. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/userbar.js +2 -1
  39. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +11 -0
  40. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +0 -12
  42. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  44. wagtail/admin/templates/wagtailadmin/collection_privacy/ancestor_privacy.html +2 -6
  45. wagtail/admin/templates/wagtailadmin/generic/index_results.html +1 -17
  46. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +20 -1
  47. wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +2 -11
  48. wagtail/admin/templates/wagtailadmin/page_privacy/ancestor_privacy.html +2 -6
  49. wagtail/admin/templates/wagtailadmin/page_privacy/no_privacy.html +2 -0
  50. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -1
  51. wagtail/admin/templates/wagtailadmin/pages/action_menu/menu.html +1 -1
  52. wagtail/admin/templates/wagtailadmin/reports/aging_pages_results.html +54 -0
  53. wagtail/admin/templates/wagtailadmin/reports/base_page_report.html +1 -17
  54. wagtail/admin/templates/wagtailadmin/reports/base_page_report_results.html +10 -0
  55. wagtail/admin/templates/wagtailadmin/reports/base_report.html +1 -40
  56. wagtail/admin/templates/wagtailadmin/reports/base_report_results.html +1 -0
  57. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_report.html +21 -27
  58. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_types_usage.html +48 -54
  59. wagtail/admin/templates/wagtailadmin/reports/{locked_pages.html → locked_pages_results.html} +3 -3
  60. wagtail/admin/templates/wagtailadmin/reports/page_types_usage_results.html +10 -0
  61. wagtail/admin/templates/wagtailadmin/reports/site_history_results.html +53 -0
  62. wagtail/admin/templates/wagtailadmin/reports/workflow_results.html +74 -0
  63. wagtail/admin/templates/wagtailadmin/reports/workflow_tasks_results.html +56 -0
  64. wagtail/admin/templates/wagtailadmin/shared/_workflow_init.html +8 -44
  65. wagtail/admin/templates/wagtailadmin/shared/avatar.html +11 -1
  66. wagtail/admin/templates/wagtailadmin/shared/dialog/dialog.html +5 -4
  67. wagtail/admin/templates/wagtailadmin/shared/dropdown/dropdown_button.html +2 -1
  68. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +132 -0
  69. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +44 -0
  70. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +7 -1
  71. wagtail/admin/templates/wagtailadmin/shared/page_status_tag_new.html +1 -1
  72. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +32 -16
  73. wagtail/admin/templates/wagtailadmin/skeleton.html +1 -1
  74. wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +9 -11
  75. wagtail/admin/templatetags/wagtailadmin_tags.py +13 -2
  76. wagtail/admin/tests/formats/en/__init__.py +0 -0
  77. wagtail/admin/tests/formats/en/formats.py +1 -0
  78. wagtail/admin/tests/pages/test_create_page.py +47 -0
  79. wagtail/admin/tests/pages/test_edit_page.py +10 -8
  80. wagtail/admin/tests/pages/test_parent_page_chooser_view.py +45 -1
  81. wagtail/admin/tests/test_checks.py +53 -3
  82. wagtail/admin/tests/test_collections_views.py +62 -1
  83. wagtail/admin/tests/test_edit_handlers.py +37 -0
  84. wagtail/admin/tests/test_editing_sessions.py +1336 -0
  85. wagtail/admin/tests/test_icon_sprite.py +12 -21
  86. wagtail/admin/tests/test_page_chooser.py +309 -7
  87. wagtail/admin/tests/test_privacy.py +82 -0
  88. wagtail/admin/tests/test_reports_views.py +464 -70
  89. wagtail/admin/tests/test_userbar.py +93 -6
  90. wagtail/admin/tests/test_workflows.py +223 -33
  91. wagtail/admin/tests/viewsets/test_model_viewset.py +151 -2
  92. wagtail/admin/ui/editing_sessions.py +57 -0
  93. wagtail/admin/urls/__init__.py +9 -15
  94. wagtail/admin/urls/editing_sessions.py +17 -0
  95. wagtail/admin/urls/reports.py +33 -1
  96. wagtail/admin/userbar.py +77 -20
  97. wagtail/admin/views/chooser.py +49 -22
  98. wagtail/admin/views/collections.py +0 -11
  99. wagtail/admin/views/editing_sessions.py +193 -0
  100. wagtail/admin/views/generic/__init__.py +1 -0
  101. wagtail/admin/views/generic/history.py +9 -3
  102. wagtail/admin/views/generic/mixins.py +44 -3
  103. wagtail/admin/views/generic/models.py +46 -72
  104. wagtail/admin/views/generic/permissions.py +20 -10
  105. wagtail/admin/views/home.py +2 -31
  106. wagtail/admin/views/page_privacy.py +20 -5
  107. wagtail/admin/views/pages/choose_parent.py +62 -0
  108. wagtail/admin/views/pages/edit.py +28 -0
  109. wagtail/admin/views/reports/aging_pages.py +6 -10
  110. wagtail/admin/views/reports/audit_logging.py +13 -42
  111. wagtail/admin/views/reports/base.py +31 -4
  112. wagtail/admin/views/reports/locked_pages.py +5 -8
  113. wagtail/admin/views/reports/page_types_usage.py +6 -10
  114. wagtail/admin/views/reports/workflows.py +36 -12
  115. wagtail/admin/viewsets/base.py +8 -3
  116. wagtail/admin/viewsets/chooser.py +1 -1
  117. wagtail/admin/viewsets/model.py +26 -1
  118. wagtail/admin/wagtail_hooks.py +2 -1
  119. wagtail/api/v2/filters.py +6 -0
  120. wagtail/api/v2/tests/test_documents.py +1 -1
  121. wagtail/api/v2/tests/test_images.py +1 -1
  122. wagtail/api/v2/tests/test_pages.py +11 -1
  123. wagtail/api/v2/utils.py +2 -2
  124. wagtail/blocks/base.py +35 -12
  125. wagtail/blocks/definition_lookup.py +85 -0
  126. wagtail/blocks/list_block.py +12 -0
  127. wagtail/blocks/migrations/migrate_operation.py +2 -0
  128. wagtail/blocks/stream_block.py +19 -0
  129. wagtail/blocks/struct_block.py +19 -0
  130. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
  131. wagtail/contrib/frontend_cache/backends/__init__.py +5 -0
  132. wagtail/contrib/frontend_cache/backends/azure.py +179 -0
  133. wagtail/contrib/frontend_cache/backends/base.py +28 -0
  134. wagtail/contrib/frontend_cache/backends/cloudflare.py +114 -0
  135. wagtail/contrib/frontend_cache/backends/cloudfront.py +99 -0
  136. wagtail/contrib/frontend_cache/backends/http.py +64 -0
  137. wagtail/contrib/frontend_cache/tests.py +59 -17
  138. wagtail/contrib/frontend_cache/utils.py +26 -8
  139. wagtail/contrib/redirects/filters.py +15 -1
  140. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +37 -72
  141. wagtail/contrib/redirects/models.py +6 -5
  142. wagtail/contrib/redirects/templates/wagtailredirects/edit.html +1 -38
  143. wagtail/contrib/redirects/tests/test_redirects.py +141 -1
  144. wagtail/contrib/redirects/urls.py +1 -2
  145. wagtail/contrib/redirects/views.py +39 -80
  146. wagtail/contrib/routable_page/models.py +6 -4
  147. wagtail/contrib/routable_page/tests.py +11 -0
  148. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +1 -1
  149. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +4 -4
  150. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +5 -1
  151. wagtail/contrib/simple_translation/models.py +2 -1
  152. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  153. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  154. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  155. wagtail/contrib/typed_table_block/blocks.py +19 -0
  156. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  157. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  158. wagtail/contrib/typed_table_block/tests.py +38 -0
  159. wagtail/coreutils.py +1 -1
  160. wagtail/documents/__init__.py +1 -1
  161. wagtail/documents/locale/en/LC_MESSAGES/django.po +8 -8
  162. wagtail/documents/locale/sl/LC_MESSAGES/django.mo +0 -0
  163. wagtail/documents/locale/sl/LC_MESSAGES/django.po +20 -0
  164. wagtail/documents/models.py +5 -1
  165. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  166. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  167. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  168. wagtail/documents/tests/test_models.py +5 -1
  169. wagtail/embeds/apps.py +2 -0
  170. wagtail/embeds/embeds.py +12 -14
  171. wagtail/embeds/finders/__init__.py +2 -0
  172. wagtail/embeds/finders/facebook.py +17 -33
  173. wagtail/embeds/finders/instagram.py +19 -16
  174. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  175. wagtail/embeds/signal_handlers.py +13 -0
  176. wagtail/embeds/tests/test_embeds.py +7 -7
  177. wagtail/fields.py +58 -14
  178. wagtail/images/__init__.py +1 -1
  179. wagtail/images/locale/en/LC_MESSAGES/django.po +34 -34
  180. wagtail/images/locale/sl/LC_MESSAGES/django.mo +0 -0
  181. wagtail/images/locale/sl/LC_MESSAGES/django.po +20 -0
  182. wagtail/images/models.py +2 -0
  183. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  184. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  185. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  186. wagtail/images/templates/wagtailimages/images/edit.html +4 -4
  187. wagtail/images/tests/test_admin_views.py +26 -2
  188. wagtail/images/views/chooser.py +6 -1
  189. wagtail/locale/en/LC_MESSAGES/django.po +84 -80
  190. wagtail/locales/locale/en/LC_MESSAGES/django.po +2 -2
  191. wagtail/locales/tests.py +16 -0
  192. wagtail/locales/wagtail_hooks.py +0 -9
  193. wagtail/migrations/0094_alter_page_locale.py +19 -0
  194. wagtail/models/__init__.py +11 -5
  195. wagtail/models/i18n.py +6 -1
  196. wagtail/project_template/requirements.txt +1 -1
  197. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  198. wagtail/signals.py +4 -0
  199. wagtail/sites/locale/en/LC_MESSAGES/django.po +2 -2
  200. wagtail/sites/tests.py +15 -0
  201. wagtail/sites/wagtail_hooks.py +0 -9
  202. wagtail/snippets/locale/en/LC_MESSAGES/django.po +9 -9
  203. wagtail/snippets/permissions.py +5 -3
  204. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  205. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  206. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/menu.html +1 -1
  207. wagtail/snippets/tests/test_snippets.py +78 -12
  208. wagtail/snippets/tests/test_viewset.py +22 -0
  209. wagtail/snippets/views/snippets.py +19 -14
  210. wagtail/snippets/wagtail_hooks.py +2 -10
  211. wagtail/templatetags/wagtailcore_tags.py +3 -0
  212. wagtail/test/dummy_external_storage.py +1 -1
  213. wagtail/test/i18n/migrations/0003_alter_clusterabletestmodel_locale_and_more.py +40 -0
  214. wagtail/test/routablepage/models.py +4 -0
  215. wagtail/test/snippets/migrations/0012_alter_translatablesnippet_locale.py +20 -0
  216. wagtail/test/testapp/migrations/0038_sociallink.py +52 -0
  217. wagtail/test/testapp/migrations/0039_alter_eventcategory_locale_and_more.py +45 -0
  218. wagtail/test/testapp/models.py +24 -0
  219. wagtail/test/testapp/views.py +1 -0
  220. wagtail/test/testapp/wagtail_hooks.py +9 -0
  221. wagtail/test/urls_multilang.py +6 -1
  222. wagtail/test/urls_multilang_non_root.py +11 -0
  223. wagtail/tests/streamfield_migrations/test_migrations.py +53 -12
  224. wagtail/tests/test_audit_log.py +72 -2
  225. wagtail/tests/test_blocks.py +103 -0
  226. wagtail/tests/test_signals.py +49 -2
  227. wagtail/tests/test_streamfield.py +153 -0
  228. wagtail/tests/test_utils.py +14 -0
  229. wagtail/tests/tests.py +5 -0
  230. wagtail/users/apps.py +1 -0
  231. wagtail/users/forms.py +7 -0
  232. wagtail/users/locale/en/LC_MESSAGES/django.po +55 -50
  233. wagtail/users/models.py +1 -0
  234. wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +3 -2
  235. wagtail/users/templatetags/wagtailusers_tags.py +9 -0
  236. wagtail/users/tests/__init__.py +7 -1
  237. wagtail/users/tests/test_admin_views.py +117 -32
  238. wagtail/users/views/groups.py +4 -0
  239. wagtail/users/views/users.py +58 -14
  240. wagtail/users/wagtail_hooks.py +7 -123
  241. wagtail/utils/utils.py +1 -0
  242. wagtail/utils/version.py +5 -2
  243. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/METADATA +3 -3
  244. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/RECORD +248 -222
  245. wagtail/admin/templates/wagtailadmin/reports/aging_pages.html +0 -58
  246. wagtail/admin/templates/wagtailadmin/reports/page_types_usage.html +0 -18
  247. wagtail/admin/templates/wagtailadmin/reports/site_history.html +0 -57
  248. wagtail/admin/templates/wagtailadmin/reports/workflow.html +0 -81
  249. wagtail/admin/templates/wagtailadmin/reports/workflow_tasks.html +0 -63
  250. wagtail/contrib/frontend_cache/backends.py +0 -400
  251. wagtail/contrib/redirects/templates/wagtailredirects/list.html +0 -43
  252. wagtail/contrib/redirects/templates/wagtailredirects/reports/redirects_report.html +0 -14
  253. wagtail/contrib/redirects/tests/test_reports_view.py +0 -82
  254. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/LICENSE +0 -0
  255. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/WHEEL +0 -0
  256. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/entry_points.txt +0 -0
  257. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/top_level.txt +0 -0
@@ -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: 2024-04-18 17:28+0100\n"
11
+ "POT-Creation-Date: 2024-07-19 16:26+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"
@@ -30,35 +30,35 @@ msgstr ""
30
30
  msgid "Add Comment"
31
31
  msgstr ""
32
32
 
33
- #: blocks/list_block.py:202 blocks/stream_block.py:170
34
- #: blocks/stream_block.py:200
33
+ #: blocks/list_block.py:208 blocks/stream_block.py:178
34
+ #: blocks/stream_block.py:208
35
35
  #, python-format
36
36
  msgid "The minimum number of items is %(min_num)d"
37
37
  msgstr ""
38
38
 
39
- #: blocks/list_block.py:210 blocks/stream_block.py:180
40
- #: blocks/stream_block.py:210
39
+ #: blocks/list_block.py:216 blocks/stream_block.py:188
40
+ #: blocks/stream_block.py:218
41
41
  #, python-format
42
42
  msgid "The maximum number of items is %(max_num)d"
43
43
  msgstr ""
44
44
 
45
- #: blocks/list_block.py:422 blocks/stream_block.py:818
45
+ #: blocks/list_block.py:434 blocks/stream_block.py:837
46
46
  msgid "Move up"
47
47
  msgstr ""
48
48
 
49
- #: blocks/list_block.py:423 blocks/stream_block.py:819
49
+ #: blocks/list_block.py:435 blocks/stream_block.py:838
50
50
  msgid "Move down"
51
51
  msgstr ""
52
52
 
53
- #: blocks/list_block.py:424 blocks/stream_block.py:820
53
+ #: blocks/list_block.py:436 blocks/stream_block.py:839
54
54
  msgid "Duplicate"
55
55
  msgstr ""
56
56
 
57
- #: blocks/list_block.py:425 blocks/stream_block.py:821 wagtail_hooks.py:115
57
+ #: blocks/list_block.py:437 blocks/stream_block.py:840 wagtail_hooks.py:115
58
58
  msgid "Delete"
59
59
  msgstr ""
60
60
 
61
- #: blocks/list_block.py:426 blocks/stream_block.py:822 models/__init__.py:1123
61
+ #: blocks/list_block.py:438 blocks/stream_block.py:841 models/__init__.py:1123
62
62
  msgid "Add"
63
63
  msgstr ""
64
64
 
@@ -71,7 +71,7 @@ msgstr ""
71
71
  msgid "This block has no options."
72
72
  msgstr ""
73
73
 
74
- #: blocks/stream_block.py:175
74
+ #: blocks/stream_block.py:183
75
75
  msgid "This field is required."
76
76
  msgstr ""
77
77
 
@@ -340,8 +340,8 @@ msgid ""
340
340
  "[my-slug]/"
341
341
  msgstr ""
342
342
 
343
- #: models/__init__.py:1156 models/__init__.py:3425 models/__init__.py:3475
344
- #: models/__init__.py:4322 models/audit_log.py:193
343
+ #: models/__init__.py:1156 models/__init__.py:3428 models/__init__.py:3478
344
+ #: models/__init__.py:4325 models/audit_log.py:193
345
345
  msgid "content type"
346
346
  msgstr ""
347
347
 
@@ -386,279 +386,279 @@ msgstr ""
386
386
  msgid "latest revision created at"
387
387
  msgstr ""
388
388
 
389
- #: models/__init__.py:1462
389
+ #: models/__init__.py:1465
390
390
  #, python-format
391
391
  msgid ""
392
392
  "The slug '%(page_slug)s' is already in use within the parent page at "
393
393
  "'%(parent_url_path)s'"
394
394
  msgstr ""
395
395
 
396
- #: models/__init__.py:2760 models/__init__.py:3017 models/__init__.py:3317
397
- #: models/__init__.py:3384
396
+ #: models/__init__.py:2763 models/__init__.py:3020 models/__init__.py:3320
397
+ #: models/__init__.py:3387
398
398
  msgid "page"
399
399
  msgstr ""
400
400
 
401
- #: models/__init__.py:2761
401
+ #: models/__init__.py:2764
402
402
  msgid "pages"
403
403
  msgstr ""
404
404
 
405
- #: models/__init__.py:2841 models/__init__.py:3857
405
+ #: models/__init__.py:2844 models/__init__.py:3860
406
406
  #: models/reference_index.py:110 models/reference_index.py:120
407
407
  msgid "object id"
408
408
  msgstr ""
409
409
 
410
- #: models/__init__.py:2843 models/__init__.py:3876
410
+ #: models/__init__.py:2846 models/__init__.py:3879
411
411
  msgid "created at"
412
412
  msgstr ""
413
413
 
414
- #: models/__init__.py:2846
414
+ #: models/__init__.py:2849
415
415
  msgid "user"
416
416
  msgstr ""
417
417
 
418
- #: models/__init__.py:2854
418
+ #: models/__init__.py:2857
419
419
  msgid "content JSON"
420
420
  msgstr ""
421
421
 
422
- #: models/__init__.py:2857
422
+ #: models/__init__.py:2860
423
423
  msgid "approved go live at"
424
424
  msgstr ""
425
425
 
426
- #: models/__init__.py:2980 models/__init__.py:4292
426
+ #: models/__init__.py:2983 models/__init__.py:4295
427
427
  msgid "revision"
428
428
  msgstr ""
429
429
 
430
- #: models/__init__.py:2981
430
+ #: models/__init__.py:2984
431
431
  msgid "revisions"
432
432
  msgstr ""
433
433
 
434
- #: models/__init__.py:3011 models/media.py:164
434
+ #: models/__init__.py:3014 models/media.py:164
435
435
  msgid "group"
436
436
  msgstr ""
437
437
 
438
- #: models/__init__.py:3023 models/media.py:175
438
+ #: models/__init__.py:3026 models/media.py:175
439
439
  msgid "permission"
440
440
  msgstr ""
441
441
 
442
- #: models/__init__.py:3036
442
+ #: models/__init__.py:3039
443
443
  msgid "group page permission"
444
444
  msgstr ""
445
445
 
446
- #: models/__init__.py:3037
446
+ #: models/__init__.py:3040
447
447
  msgid "group page permissions"
448
448
  msgstr ""
449
449
 
450
- #: models/__init__.py:3325
450
+ #: models/__init__.py:3328
451
451
  msgid "page view restriction"
452
452
  msgstr ""
453
453
 
454
- #: models/__init__.py:3326
454
+ #: models/__init__.py:3329
455
455
  msgid "page view restrictions"
456
456
  msgstr ""
457
457
 
458
- #: models/__init__.py:3392 models/__init__.py:3433 models/__init__.py:3704
459
- #: models/__init__.py:3867
458
+ #: models/__init__.py:3395 models/__init__.py:3436 models/__init__.py:3707
459
+ #: models/__init__.py:3870
460
460
  msgid "workflow"
461
461
  msgstr ""
462
462
 
463
- #: models/__init__.py:3417
463
+ #: models/__init__.py:3420
464
464
  msgid "workflow page"
465
465
  msgstr ""
466
466
 
467
- #: models/__init__.py:3418
467
+ #: models/__init__.py:3421
468
468
  msgid "workflow pages"
469
469
  msgstr ""
470
470
 
471
- #: models/__init__.py:3446
471
+ #: models/__init__.py:3449
472
472
  msgid "workflow_tasks"
473
473
  msgstr ""
474
474
 
475
- #: models/__init__.py:3452 models/__init__.py:3608 models/__init__.py:4298
475
+ #: models/__init__.py:3455 models/__init__.py:3611 models/__init__.py:4301
476
476
  msgid "task"
477
477
  msgstr ""
478
478
 
479
- #: models/__init__.py:3459
479
+ #: models/__init__.py:3462
480
480
  msgid "workflow task order"
481
481
  msgstr ""
482
482
 
483
- #: models/__init__.py:3460
483
+ #: models/__init__.py:3463
484
484
  msgid "workflow task orders"
485
485
  msgstr ""
486
486
 
487
- #: models/__init__.py:3472 models/__init__.py:3618 models/media.py:61
487
+ #: models/__init__.py:3475 models/__init__.py:3621 models/media.py:61
488
488
  msgid "name"
489
489
  msgstr ""
490
490
 
491
- #: models/__init__.py:3480 models/__init__.py:3620
491
+ #: models/__init__.py:3483 models/__init__.py:3623
492
492
  msgid "active"
493
493
  msgstr ""
494
494
 
495
- #: models/__init__.py:3483
495
+ #: models/__init__.py:3486
496
496
  msgid ""
497
497
  "Active tasks can be added to workflows. Deactivating a task does not remove "
498
498
  "it from existing workflows."
499
499
  msgstr ""
500
500
 
501
- #: models/__init__.py:3609
501
+ #: models/__init__.py:3612
502
502
  msgid "tasks"
503
503
  msgstr ""
504
504
 
505
- #: models/__init__.py:3623
505
+ #: models/__init__.py:3626
506
506
  msgid ""
507
507
  "Active workflows can be added to pages/snippets. Deactivating a workflow "
508
508
  "does not remove it from existing pages/snippets."
509
509
  msgstr ""
510
510
 
511
- #: models/__init__.py:3705
511
+ #: models/__init__.py:3708
512
512
  msgid "workflows"
513
513
  msgstr ""
514
514
 
515
- #: models/__init__.py:3716 models/view_restrictions.py:36
515
+ #: models/__init__.py:3719 models/view_restrictions.py:36
516
516
  msgid "groups"
517
517
  msgstr ""
518
518
 
519
- #: models/__init__.py:3718
519
+ #: models/__init__.py:3721
520
520
  msgid ""
521
521
  "Pages/snippets at this step in a workflow will be moderated or approved by "
522
522
  "these groups of users"
523
523
  msgstr ""
524
524
 
525
- #: models/__init__.py:3777
525
+ #: models/__init__.py:3780
526
526
  msgid "Request changes"
527
527
  msgstr ""
528
528
 
529
- #: models/__init__.py:3778 wagtail_hooks.py:132
529
+ #: models/__init__.py:3781 wagtail_hooks.py:132
530
530
  msgid "Approve"
531
531
  msgstr ""
532
532
 
533
- #: models/__init__.py:3779
533
+ #: models/__init__.py:3782
534
534
  msgid "Approve with comment"
535
535
  msgstr ""
536
536
 
537
- #: models/__init__.py:3792
537
+ #: models/__init__.py:3795
538
538
  msgid "Members of the chosen Wagtail Groups can approve this task"
539
539
  msgstr ""
540
540
 
541
- #: models/__init__.py:3796
541
+ #: models/__init__.py:3799
542
542
  msgid "Group approval task"
543
543
  msgstr ""
544
544
 
545
- #: models/__init__.py:3797
545
+ #: models/__init__.py:3800
546
546
  msgid "Group approval tasks"
547
547
  msgstr ""
548
548
 
549
- #: models/__init__.py:3845 models/__init__.py:4276
549
+ #: models/__init__.py:3848 models/__init__.py:4279
550
550
  msgid "In progress"
551
551
  msgstr ""
552
552
 
553
- #: models/__init__.py:3846 models/__init__.py:4277 wagtail_hooks.py:132
553
+ #: models/__init__.py:3849 models/__init__.py:4280 wagtail_hooks.py:132
554
554
  msgid "Approved"
555
555
  msgstr ""
556
556
 
557
- #: models/__init__.py:3847
557
+ #: models/__init__.py:3850
558
558
  msgid "Needs changes"
559
559
  msgstr ""
560
560
 
561
- #: models/__init__.py:3848 models/__init__.py:4280
561
+ #: models/__init__.py:3851 models/__init__.py:4283
562
562
  msgid "Cancelled"
563
563
  msgstr ""
564
564
 
565
- #: models/__init__.py:3872 models/__init__.py:4303
565
+ #: models/__init__.py:3875 models/__init__.py:4306
566
566
  msgid "status"
567
567
  msgstr ""
568
568
 
569
- #: models/__init__.py:3879
569
+ #: models/__init__.py:3882
570
570
  msgid "requested by"
571
571
  msgstr ""
572
572
 
573
- #: models/__init__.py:3891
573
+ #: models/__init__.py:3894
574
574
  msgid "current task state"
575
575
  msgstr ""
576
576
 
577
- #: models/__init__.py:3921
577
+ #: models/__init__.py:3924
578
578
  msgid ""
579
579
  "There may only be one in progress or needs changes workflow state per page/"
580
580
  "snippet."
581
581
  msgstr ""
582
582
 
583
- #: models/__init__.py:3931
583
+ #: models/__init__.py:3934
584
584
  #, python-format
585
585
  msgid "Workflow '%(workflow_name)s' on %(model_name)s '%(title)s': %(status)s"
586
586
  msgstr ""
587
587
 
588
- #: models/__init__.py:4161
588
+ #: models/__init__.py:4164
589
589
  msgid "Not started"
590
590
  msgstr ""
591
591
 
592
- #: models/__init__.py:4212
592
+ #: models/__init__.py:4215
593
593
  msgid "Workflow state"
594
594
  msgstr ""
595
595
 
596
- #: models/__init__.py:4213
596
+ #: models/__init__.py:4216
597
597
  msgid "Workflow states"
598
598
  msgstr ""
599
599
 
600
- #: models/__init__.py:4278 wagtail_hooks.py:133
600
+ #: models/__init__.py:4281 wagtail_hooks.py:133
601
601
  msgid "Rejected"
602
602
  msgstr ""
603
603
 
604
- #: models/__init__.py:4279
604
+ #: models/__init__.py:4282
605
605
  msgid "Skipped"
606
606
  msgstr ""
607
607
 
608
- #: models/__init__.py:4286
608
+ #: models/__init__.py:4289
609
609
  msgid "workflow state"
610
610
  msgstr ""
611
611
 
612
- #: models/__init__.py:4307
612
+ #: models/__init__.py:4310
613
613
  msgid "started at"
614
614
  msgstr ""
615
615
 
616
- #: models/__init__.py:4309
616
+ #: models/__init__.py:4312
617
617
  msgid "finished at"
618
618
  msgstr ""
619
619
 
620
- #: models/__init__.py:4313
620
+ #: models/__init__.py:4316
621
621
  msgid "finished by"
622
622
  msgstr ""
623
623
 
624
- #: models/__init__.py:4342
624
+ #: models/__init__.py:4345
625
625
  #, python-format
626
626
  msgid "Task '%(task_name)s' on Revision '%(revision_info)s': %(status)s"
627
627
  msgstr ""
628
628
 
629
- #: models/__init__.py:4472
629
+ #: models/__init__.py:4475
630
630
  msgid "Task state"
631
631
  msgstr ""
632
632
 
633
- #: models/__init__.py:4473
633
+ #: models/__init__.py:4476
634
634
  msgid "Task states"
635
635
  msgstr ""
636
636
 
637
- #: models/__init__.py:4537
637
+ #: models/__init__.py:4543
638
638
  msgid "page log entry"
639
639
  msgstr ""
640
640
 
641
- #: models/__init__.py:4538
641
+ #: models/__init__.py:4544
642
642
  msgid "page log entries"
643
643
  msgstr ""
644
644
 
645
- #: models/__init__.py:4556
645
+ #: models/__init__.py:4562
646
646
  msgid "Draft saved"
647
647
  msgstr ""
648
648
 
649
- #: models/__init__.py:4604
649
+ #: models/__init__.py:4610
650
650
  msgid "comment"
651
651
  msgstr ""
652
652
 
653
- #: models/__init__.py:4605
653
+ #: models/__init__.py:4611
654
654
  msgid "comments"
655
655
  msgstr ""
656
656
 
657
- #: models/__init__.py:4700
657
+ #: models/__init__.py:4706
658
658
  msgid "comment reply"
659
659
  msgstr ""
660
660
 
661
- #: models/__init__.py:4701
661
+ #: models/__init__.py:4707
662
662
  msgid "comment replies"
663
663
  msgstr ""
664
664
 
@@ -696,6 +696,10 @@ msgstr ""
696
696
  msgid "model log entries"
697
697
  msgstr ""
698
698
 
699
+ #: models/i18n.py:185
700
+ msgid "locale"
701
+ msgstr ""
702
+
699
703
  #: models/media.py:44 models/media.py:122 models/media.py:138
700
704
  #: models/media.py:170
701
705
  msgid "collection"
@@ -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: 2024-04-18 17:28+0100\n"
11
+ "POT-Creation-Date: 2024-07-19 16:26+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"
@@ -49,7 +49,7 @@ msgid ""
49
49
  "language or delete this locale."
50
50
  msgstr ""
51
51
 
52
- #: views.py:32 wagtail_hooks.py:27
52
+ #: views.py:32 wagtail_hooks.py:26
53
53
  msgid "Locales"
54
54
  msgstr ""
55
55
 
wagtail/locales/tests.py CHANGED
@@ -1,8 +1,11 @@
1
+ from django.contrib.auth.models import Permission
2
+ from django.contrib.contenttypes.models import ContentType
1
3
  from django.contrib.messages import get_messages
2
4
  from django.contrib.messages.constants import ERROR
3
5
  from django.test import TestCase, override_settings
4
6
  from django.urls import reverse
5
7
 
8
+ from wagtail import hooks
6
9
  from wagtail.admin.admin_url_finder import AdminURLFinder
7
10
  from wagtail.models import Locale, Page
8
11
  from wagtail.test.utils import WagtailTestUtils
@@ -344,3 +347,16 @@ class TestLocaleDeleteView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
344
347
 
345
348
  # Check that the locale was not deleted
346
349
  self.assertTrue(Locale.objects.filter(language_code="en").exists())
350
+
351
+
352
+ class TestAdminPermissions(WagtailTestUtils, TestCase):
353
+ def test_registered_permissions(self):
354
+ locale_ct = ContentType.objects.get_for_model(Locale)
355
+ qs = Permission.objects.none()
356
+ for fn in hooks.get_hooks("register_permissions"):
357
+ qs |= fn()
358
+ registered_permissions = qs.filter(content_type=locale_ct)
359
+ self.assertEqual(
360
+ set(registered_permissions.values_list("codename", flat=True)),
361
+ {"add_locale", "change_locale", "delete_locale"},
362
+ )
@@ -1,4 +1,3 @@
1
- from django.contrib.auth.models import Permission
2
1
  from django.urls import reverse
3
2
  from django.utils.translation import gettext_lazy as _
4
3
 
@@ -30,11 +29,3 @@ def register_locales_menu_item():
30
29
  icon_name="site",
31
30
  order=603,
32
31
  )
33
-
34
-
35
- @hooks.register("register_permissions")
36
- def register_permissions():
37
- return Permission.objects.filter(
38
- content_type__app_label="wagtailcore",
39
- codename__in=["add_locale", "change_locale", "delete_locale"],
40
- )
@@ -0,0 +1,19 @@
1
+ # Generated by Django 5.0.6 on 2024-06-21 06:47
2
+
3
+ import django.db.models.deletion
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('wagtailcore', '0093_uploadedfile'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name='page',
16
+ name='locale',
17
+ field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.locale', verbose_name='locale'),
18
+ ),
19
+ ]
@@ -17,7 +17,7 @@ import posixpath
17
17
  import uuid
18
18
  from io import StringIO
19
19
  from typing import TYPE_CHECKING
20
- from urllib.parse import urlparse
20
+ from urllib.parse import urlsplit
21
21
  from warnings import warn
22
22
 
23
23
  from django import forms
@@ -702,7 +702,7 @@ class PreviewableMixin:
702
702
  """
703
703
  url = self._get_dummy_header_url(original_request)
704
704
  if url:
705
- url_info = urlparse(url)
705
+ url_info = urlsplit(url)
706
706
  hostname = url_info.hostname
707
707
  path = url_info.path
708
708
  port = url_info.port or (443 if url_info.scheme == "https" else 80)
@@ -1291,6 +1291,9 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
1291
1291
  promote_panels = []
1292
1292
  settings_panels = []
1293
1293
 
1294
+ # Privacy options for page
1295
+ private_page_options = ["password", "groups", "login"]
1296
+
1294
1297
  @staticmethod
1295
1298
  def route_for_request(request: "HttpRequest", path: str) -> RouteResult | None:
1296
1299
  """
@@ -1817,7 +1820,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
1817
1820
  This is called by Wagtail whenever a page with aliases is published.
1818
1821
 
1819
1822
  :param revision: The revision of the original page that we are updating to (used for logging purposes)
1820
- :type revision: PageRevision, optional
1823
+ :type revision: Revision, Optional
1821
1824
  """
1822
1825
  specific_self = self.specific
1823
1826
 
@@ -2387,8 +2390,8 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
2387
2390
  ):
2388
2391
  """
2389
2392
  Copies a given page
2390
- :param log_action flag for logging the action. Pass None to skip logging.
2391
- Can be passed an action string. Defaults to 'wagtail.copy'
2393
+
2394
+ :param log_action: flag for logging the action. Pass None to skip logging. Can be passed an action string. Defaults to 'wagtail.copy'
2392
2395
  """
2393
2396
  return CopyPageAction(
2394
2397
  self,
@@ -4521,6 +4524,9 @@ class PageLogEntryManager(BaseLogEntryManager):
4521
4524
 
4522
4525
  return PageLogEntry.objects.filter(q)
4523
4526
 
4527
+ def for_instance(self, instance):
4528
+ return self.filter(page=instance)
4529
+
4524
4530
 
4525
4531
  class PageLogEntry(BaseLogEntry):
4526
4532
  page = models.ForeignKey(
wagtail/models/i18n.py CHANGED
@@ -9,6 +9,7 @@ from django.db.models.signals import pre_save
9
9
  from django.dispatch import receiver
10
10
  from django.utils import translation
11
11
  from django.utils.encoding import force_str
12
+ from django.utils.translation import gettext_lazy as _
12
13
  from modelcluster.fields import ParentalKey
13
14
 
14
15
  from wagtail.actions.copy_for_translation import CopyForTranslationAction
@@ -177,7 +178,11 @@ class Locale(models.Model):
177
178
  class TranslatableMixin(models.Model):
178
179
  translation_key = models.UUIDField(default=uuid.uuid4, editable=False)
179
180
  locale = models.ForeignKey(
180
- Locale, on_delete=models.PROTECT, related_name="+", editable=False
181
+ Locale,
182
+ on_delete=models.PROTECT,
183
+ related_name="+",
184
+ editable=False,
185
+ verbose_name=_("locale"),
181
186
  )
182
187
  locale.wagtail_reference_index_ignore = True
183
188
 
@@ -1,2 +1,2 @@
1
1
  Django>=4.2,<5.1
2
- wagtail>=6.1,<6.2
2
+ wagtail==6.2rc1
@@ -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: 2024-04-18 17:28+0100\n"
11
+ "POT-Creation-Date: 2024-07-19 16:26+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"
wagtail/signals.py CHANGED
@@ -64,3 +64,7 @@ task_cancelled = Signal()
64
64
  # Required as a workaround for https://code.djangoproject.com/ticket/6870
65
65
  # provides args: sender, instance
66
66
  pre_validate_delete = Signal()
67
+
68
+ # Translation signals
69
+ # provides args: sender, source_obj, target_obj
70
+ copy_for_translation_done = Signal()
@@ -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: 2024-04-18 17:28+0100\n"
11
+ "POT-Creation-Date: 2024-07-19 16:26+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"
@@ -30,7 +30,7 @@ msgstr ""
30
30
  msgid "Choose a different root page"
31
31
  msgstr ""
32
32
 
33
- #: views.py:12 wagtail_hooks.py:27
33
+ #: views.py:12 wagtail_hooks.py:26
34
34
  msgid "Sites"
35
35
  msgstr ""
36
36
 
wagtail/sites/tests.py CHANGED
@@ -1,7 +1,9 @@
1
1
  from django.contrib.auth.models import Permission
2
+ from django.contrib.contenttypes.models import ContentType
2
3
  from django.test import TestCase
3
4
  from django.urls import reverse
4
5
 
6
+ from wagtail import hooks
5
7
  from wagtail.admin.admin_url_finder import AdminURLFinder
6
8
  from wagtail.models import Page, Site
7
9
  from wagtail.test.utils import WagtailTestUtils
@@ -482,3 +484,16 @@ class TestLimitedPermissions(WagtailTestUtils, TestCase):
482
484
  # Check that the site was edited
483
485
  with self.assertRaises(Site.DoesNotExist):
484
486
  Site.objects.get(id=self.localhost.id)
487
+
488
+
489
+ class TestAdminPermissions(WagtailTestUtils, TestCase):
490
+ def test_registered_permissions(self):
491
+ site_ct = ContentType.objects.get_for_model(Site)
492
+ qs = Permission.objects.none()
493
+ for fn in hooks.get_hooks("register_permissions"):
494
+ qs |= fn()
495
+ registered_permissions = qs.filter(content_type=site_ct)
496
+ self.assertEqual(
497
+ set(registered_permissions.values_list("codename", flat=True)),
498
+ {"add_site", "change_site", "delete_site"},
499
+ )