wagtail 5.2.3__py3-none-any.whl → 5.2.4__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.
wagtail/__init__.py CHANGED
@@ -6,7 +6,7 @@ from wagtail.utils.version import get_semver_version, get_version
6
6
 
7
7
  # major.minor.patch.release.number
8
8
  # release must be one of alpha, beta, rc, or final
9
- VERSION = (5, 2, 3, "final", 1)
9
+ VERSION = (5, 2, 4, "final", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
@@ -78,7 +78,11 @@ class TitleFieldPanel(FieldPanel):
78
78
  actions = [widget.attrs.get("data-action", None)] + self.apply_actions
79
79
  attrs["data-action"] = " ".join(filter(None, actions))
80
80
 
81
- targets = [self.get_target_selector(target) for target in panel.targets]
81
+ targets = [
82
+ self.get_target_selector(target)
83
+ for target in panel.targets
84
+ if target in self.form.fields
85
+ ]
82
86
  attrs["data-w-sync-target-value"] = ", ".join(filter(None, targets))
83
87
 
84
88
  placeholder = self.get_placeholder()
@@ -1309,7 +1309,7 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1309
1309
  self.assertEqual(response.status_code, 403)
1310
1310
  content = json.loads(response.content.decode("utf-8"))
1311
1311
  self.assertEqual(
1312
- content, {"detail": "You do not have permission to perform this action."}
1312
+ content, {"detail": "You do not have permission to copy this page"}
1313
1313
  )
1314
1314
 
1315
1315
  def test_recursively_copy_into_self(self):
@@ -1347,7 +1347,7 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1347
1347
  self.assertEqual(response.status_code, 403)
1348
1348
  content = json.loads(response.content.decode("utf-8"))
1349
1349
  self.assertEqual(
1350
- content, {"detail": "You do not have permission to perform this action."}
1350
+ content, {"detail": "You do not have permission to copy this page"}
1351
1351
  )
1352
1352
 
1353
1353
  def test_without_publish_permissions_at_destination_with_keep_live(self):
@@ -1374,7 +1374,12 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1374
1374
  self.assertEqual(response.status_code, 403)
1375
1375
  content = json.loads(response.content.decode("utf-8"))
1376
1376
  self.assertEqual(
1377
- content, {"detail": "You do not have permission to perform this action."}
1377
+ content,
1378
+ {
1379
+ "detail": (
1380
+ "You do not have permission to publish a page at the destination"
1381
+ )
1382
+ },
1378
1383
  )
1379
1384
 
1380
1385
  def test_respects_page_creation_rules(self):
@@ -1384,7 +1389,7 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1384
1389
  self.assertEqual(response.status_code, 403)
1385
1390
  content = json.loads(response.content.decode("utf-8"))
1386
1391
  self.assertEqual(
1387
- content, {"detail": "You do not have permission to perform this action."}
1392
+ content, {"detail": "You do not have permission to copy this page"}
1388
1393
  )
1389
1394
 
1390
1395
  def test_copy_page_slug_in_use(self):
@@ -1511,7 +1516,7 @@ class TestDeletePageAction(AdminAPITestCase, TestCase):
1511
1516
  self.assertEqual(response.status_code, 403)
1512
1517
  content = json.loads(response.content.decode("utf-8"))
1513
1518
  self.assertEqual(
1514
- content, {"detail": "You do not have permission to perform this action."}
1519
+ content, {"detail": "You do not have permission to delete this page"}
1515
1520
  )
1516
1521
 
1517
1522
  # Page is still there
@@ -1559,7 +1564,7 @@ class TestPublishPageAction(AdminAPITestCase, TestCase):
1559
1564
  self.assertEqual(response.status_code, 403)
1560
1565
  content = json.loads(response.content.decode("utf-8"))
1561
1566
  self.assertEqual(
1562
- content, {"detail": "You do not have permission to perform this action."}
1567
+ content, {"detail": "You do not have permission to publish this page"}
1563
1568
  )
1564
1569
 
1565
1570
  def test_publish_alias_page(self):
@@ -1649,7 +1654,7 @@ class TestUnpublishPageAction(AdminAPITestCase, TestCase):
1649
1654
  self.assertEqual(response.status_code, 403)
1650
1655
  content = json.loads(response.content.decode("utf-8"))
1651
1656
  self.assertEqual(
1652
- content, {"detail": "You do not have permission to perform this action."}
1657
+ content, {"detail": "You do not have permission to unpublish this page"}
1653
1658
  )
1654
1659
 
1655
1660
 
@@ -1681,7 +1686,13 @@ class TestMovePageAction(AdminAPITestCase, TestCase):
1681
1686
 
1682
1687
  content = json.loads(response.content.decode("utf-8"))
1683
1688
  self.assertEqual(
1684
- content, {"detail": "You do not have permission to perform this action."}
1689
+ content,
1690
+ {
1691
+ "detail": (
1692
+ "You do not have permission to move the page to the "
1693
+ "target specified."
1694
+ ),
1695
+ },
1685
1696
  )
1686
1697
 
1687
1698
  def test_move_page_without_destination_page_id(self):
@@ -1884,7 +1895,12 @@ class TestCreatePageAliasAction(AdminAPITestCase, TestCase):
1884
1895
 
1885
1896
  content = json.loads(response.content.decode("utf-8"))
1886
1897
  self.assertEqual(
1887
- content, {"detail": "You do not have permission to perform this action."}
1898
+ content,
1899
+ {
1900
+ "detail": (
1901
+ "You do not have permission to publish a page at the destination"
1902
+ ),
1903
+ },
1888
1904
  )
1889
1905
 
1890
1906
 
@@ -1941,7 +1957,7 @@ class TestRevertToPageRevisionAction(AdminAPITestCase, TestCase):
1941
1957
 
1942
1958
  content = json.loads(response.content.decode("utf-8"))
1943
1959
  self.assertEqual(
1944
- content, {"detail": "You do not have permission to perform this action."}
1960
+ content, {"detail": "You do not have permission to edit this page"}
1945
1961
  )
1946
1962
 
1947
1963
  def test_revert_to_page_revision_without_revision_id(self):
@@ -2260,6 +2260,25 @@ class TestTitleFieldPanel(WagtailTestUtils, TestCase):
2260
2260
  "focus->w-sync#check blur->w-sync#apply change->w-sync#apply keyup->w-sync#apply",
2261
2261
  )
2262
2262
 
2263
+ def test_form_without_slugfield(self):
2264
+ html = self.get_edit_handler_html(ObjectList([TitleFieldPanel("title")]))
2265
+
2266
+ self.assertIsNotNone(html.find(attrs={"class": "w-panel title"}))
2267
+
2268
+ attrs = html.find("input").attrs
2269
+ self.assertEqual(attrs["data-w-sync-target-value"], "")
2270
+
2271
+ def test_form_with_readonly_slugfield(self):
2272
+ html = self.get_edit_handler_html(
2273
+ ObjectList([TitleFieldPanel("title"), FieldPanel("slug", read_only=True)]),
2274
+ instance=EventPage(),
2275
+ )
2276
+
2277
+ self.assertIsNotNone(html.find(attrs={"class": "w-panel title"}))
2278
+
2279
+ attrs = html.find("input").attrs
2280
+ self.assertEqual(attrs["data-w-sync-target-value"], "")
2281
+
2263
2282
  def test_not_using_apply_actions_if_live(self):
2264
2283
  """
2265
2284
  If the Page (or any model) has `live = True`, do not apply the actions by default.
@@ -2412,7 +2412,7 @@ class TestPageWorkflowReport(BasePageWorkflowTests):
2412
2412
  self.submitter.first_name = "Sebastian"
2413
2413
  self.submitter.last_name = "Mitter"
2414
2414
  self.submitter.save()
2415
- self.post("submit")
2415
+ self.post("submit", follow=True)
2416
2416
  self.login(user=self.moderator)
2417
2417
 
2418
2418
  def setup_workflow_and_tasks(self):
@@ -2545,11 +2545,35 @@ class TestPageWorkflowReport(BasePageWorkflowTests):
2545
2545
  self.assertEqual(response.status_code, 200)
2546
2546
  self.assertNotIn("Hello world!", content)
2547
2547
 
2548
+ def test_workflow_report_deleted(self):
2549
+ self.object.delete()
2550
+ response = self.client.get(reverse("wagtailadmin_reports:workflow"))
2551
+ self.assertEqual(response.status_code, 200)
2552
+ self.assertNotContains(response, "Hello world!")
2553
+ # test_workflow is only rendered in the filter, not the results
2554
+ self.assertContains(response, "test_workflow", count=1)
2555
+ self.assertNotContains(response, "Sebastian Mitter")
2556
+ self.assertNotContains(response, "March 31, 2020")
2557
+
2558
+ response = self.client.get(reverse("wagtailadmin_reports:workflow_tasks"))
2559
+ self.assertEqual(response.status_code, 200)
2560
+ self.assertNotContains(response, "Hello world!")
2561
+
2548
2562
 
2549
2563
  class TestSnippetWorkflowReport(TestPageWorkflowReport, BaseSnippetWorkflowTests):
2550
2564
  pass
2551
2565
 
2552
2566
 
2567
+ class TestNonLockableSnippetWorkflowReport(
2568
+ TestPageWorkflowReport, BaseSnippetWorkflowTests
2569
+ ):
2570
+ # This model does not use LockableMixin, and it also does not have a
2571
+ # GenericRelation to WorkflowState and Revision, but it should not break
2572
+ # the report page.
2573
+ # See https://github.com/wagtail/wagtail/issues/11300 for more details.
2574
+ model = ModeratedModel
2575
+
2576
+
2553
2577
  class TestPageNotificationPreferences(BasePageWorkflowTests):
2554
2578
  def setUp(self):
2555
2579
  super().setUp()
@@ -13,6 +13,7 @@ from django.utils.timezone import make_aware
13
13
  from openpyxl import load_workbook
14
14
 
15
15
  from wagtail.admin.admin_url_finder import AdminURLFinder
16
+ from wagtail.log_actions import log
16
17
  from wagtail.models import ModelLogEntry
17
18
  from wagtail.test.testapp.models import (
18
19
  FeatureCompleteToy,
@@ -777,6 +778,18 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
777
778
  ]
778
779
  self.assertBreadcrumbsItemsRendered(items, response.content)
779
780
 
781
+ def test_history_view_pagination(self):
782
+ for i in range(25):
783
+ log(instance=self.object, action="wagtail.edit", user=self.user)
784
+
785
+ history_url = reverse(
786
+ "feature_complete_toy:history",
787
+ args=(quote(self.object.pk),),
788
+ )
789
+ response = self.client.get(history_url)
790
+ self.assertContains(response, "Page 1 of 2")
791
+ self.assertContains(response, f'<a href="{history_url}?p=2">')
792
+
780
793
  def test_usage_view(self):
781
794
  usage_url = reverse(
782
795
  "feature_complete_toy:usage",
@@ -801,6 +814,20 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
801
814
  ]
802
815
  self.assertBreadcrumbsItemsRendered(items, response.content)
803
816
 
817
+ def test_usage_view_pagination(self):
818
+ for i in range(25):
819
+ VariousOnDeleteModel.objects.create(
820
+ text=f"Toybox {i}", cascading_toy=self.object
821
+ )
822
+
823
+ usage_url = reverse(
824
+ "feature_complete_toy:usage",
825
+ args=(quote(self.object.pk),),
826
+ )
827
+ response = self.client.get(usage_url)
828
+ self.assertContains(response, "Page 1 of 2")
829
+ self.assertContains(response, f'<a href="{usage_url}?p=2">')
830
+
804
831
  def test_inspect_view(self):
805
832
  inspect_url = reverse(
806
833
  "feature_complete_toy:inspect",
@@ -1,7 +1,7 @@
1
1
  from datetime import timedelta
2
2
 
3
3
  import django_filters
4
- from django.contrib.admin.utils import unquote
4
+ from django.contrib.admin.utils import quote, unquote
5
5
  from django.core.paginator import Paginator
6
6
  from django.shortcuts import get_object_or_404
7
7
  from django.urls import reverse
@@ -57,6 +57,8 @@ class HistoryView(IndexView):
57
57
  any_permission_required = ["add", "change", "delete"]
58
58
  page_title = gettext_lazy("History")
59
59
  results_template_name = "wagtailadmin/generic/history_results.html"
60
+ history_url_name = None
61
+ history_results_url_name = None
60
62
  header_icon = "history"
61
63
  is_searchable = False
62
64
  paginate_by = 20
@@ -97,6 +99,20 @@ class HistoryView(IndexView):
97
99
  {"url": "", "label": gettext("History")},
98
100
  ]
99
101
 
102
+ def get_history_url(self, instance):
103
+ if self.history_url_name:
104
+ return reverse(self.history_url_name, args=(quote(instance.pk),))
105
+
106
+ def get_history_results_url(self, instance):
107
+ if self.history_results_url_name:
108
+ return reverse(self.history_results_url_name, args=(quote(instance.pk),))
109
+
110
+ def get_index_url(self): # used for pagination links
111
+ return self.get_history_url(self.object)
112
+
113
+ def get_index_results_url(self):
114
+ return self.get_history_results_url(self.object)
115
+
100
116
  def get_context_data(self, *args, object_list=None, **kwargs):
101
117
  context = super().get_context_data(*args, object_list=object_list, **kwargs)
102
118
  context["object"] = self.object
@@ -24,6 +24,7 @@ class UsageView(PermissionCheckedMixin, BaseObjectMixin, BaseListingView):
24
24
  page_title = gettext_lazy("Usage of")
25
25
  index_url_name = None
26
26
  edit_url_name = None
27
+ usage_url_name = None
27
28
  permission_required = "change"
28
29
 
29
30
  def setup(self, request, *args, **kwargs):
@@ -40,6 +41,13 @@ class UsageView(PermissionCheckedMixin, BaseObjectMixin, BaseListingView):
40
41
  return object.get_latest_revision_as_object()
41
42
  return object
42
43
 
44
+ def get_usage_url(self, instance):
45
+ if self.usage_url_name:
46
+ return reverse(self.usage_url_name, args=(quote(instance.pk),))
47
+
48
+ def get_index_url(self): # used for pagination links
49
+ return self.get_usage_url(self.object)
50
+
43
51
  def get_page_subtitle(self):
44
52
  return get_latest_str(self.object)
45
53
 
@@ -187,10 +187,16 @@ class WorkflowView(ReportView):
187
187
  content_type_id__in=get_editable_content_type_ids(self.request)
188
188
  )
189
189
 
190
- return WorkflowState.objects.filter(editable_pages | editable_objects).order_by(
191
- "-created_at"
190
+ return (
191
+ WorkflowState.objects.filter(editable_pages | editable_objects)
192
+ .select_related("workflow", "requested_by")
193
+ .prefetch_related("content_object", "content_object__latest_revision")
194
+ .order_by("-created_at")
192
195
  )
193
196
 
197
+ def decorate_paginated_queryset(self, object_list):
198
+ return [obj for obj in object_list if obj.content_object]
199
+
194
200
 
195
201
  class WorkflowTasksView(ReportView):
196
202
  template_name = "wagtailadmin/reports/workflow_tasks.html"
@@ -248,6 +254,15 @@ class WorkflowTasksView(ReportView):
248
254
  self.request
249
255
  )
250
256
  )
251
- return TaskState.objects.filter(editable_pages | editable_objects).order_by(
252
- "-started_at"
257
+ return (
258
+ TaskState.objects.filter(editable_pages | editable_objects)
259
+ .select_related("workflow_state", "task")
260
+ .prefetch_related(
261
+ "workflow_state__content_object",
262
+ "workflow_state__content_object__latest_revision",
263
+ )
264
+ .order_by("-started_at")
253
265
  )
266
+
267
+ def decorate_paginated_queryset(self, object_list):
268
+ return [obj for obj in object_list if obj.workflow_state.content_object]
@@ -653,8 +653,15 @@ class ElasticsearchAutocompleteQueryCompilerImpl:
653
653
  if len(fields) == 0:
654
654
  # No fields. Return a query that'll match nothing
655
655
  return {"bool": {"mustNot": {"match_all": {}}}}
656
-
657
- return self._compile_plaintext_query(self.query, fields)
656
+ elif isinstance(self.query, PlainText):
657
+ return self._compile_plaintext_query(self.query, fields)
658
+ elif isinstance(self.query, MatchAll):
659
+ return {"match_all": {}}
660
+ else:
661
+ raise NotImplementedError(
662
+ "`%s` is not supported for autocomplete queries."
663
+ % self.query.__class__.__name__
664
+ )
658
665
 
659
666
 
660
667
  class Elasticsearch5AutocompleteQueryCompiler(
@@ -70,6 +70,31 @@ class TestElasticsearch5SearchQuery(TestCase):
70
70
  }
71
71
  self.assertDictEqual(query_compiler.get_query(), expected_result)
72
72
 
73
+ def test_match_all_autocomplete(self):
74
+ # Create a query
75
+ query = self.autocomplete_query_compiler_class(
76
+ models.Book.objects.all(), MATCH_ALL
77
+ )
78
+
79
+ # Check it
80
+ expected_result = {
81
+ "bool": {
82
+ "filter": {"match": {"content_type": "searchtests.Book"}},
83
+ "must": {"match_all": {}},
84
+ }
85
+ }
86
+ self.assertDictEqual(query.get_query(), expected_result)
87
+
88
+ def test_non_supported_queries_autocomplete(self):
89
+ # Create a query
90
+ query = self.autocomplete_query_compiler_class(
91
+ models.Book.objects.all(), Fuzzy("Hello")
92
+ )
93
+
94
+ # Check it
95
+ with self.assertRaises(NotImplementedError):
96
+ query.get_query()
97
+
73
98
  def test_match_all(self):
74
99
  # Create a query
75
100
  query_compiler = self.query_compiler_class(models.Book.objects.all(), MATCH_ALL)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wagtail
3
- Version: 5.2.3
3
+ Version: 5.2.4
4
4
  Summary: A Django content management system.
5
5
  Home-page: https://wagtail.org/
6
6
  Author: Wagtail core team + contributors
@@ -1,4 +1,4 @@
1
- wagtail/__init__.py,sha256=Kk_cevWK-tjv03zEUw9zpBK2jw6puSPvUL4nQovloc4,724
1
+ wagtail/__init__.py,sha256=jmetSduAfAHcC7kBOOD1M45uLzWe4wMk5AUNoUO9Z5g,724
2
2
  wagtail/apps.py,sha256=38kXTdHoQzFnpUqDNxFpsqn2dut4V0u9rLOkhqCoYkc,713
3
3
  wagtail/compat.py,sha256=L41FhlX4xy5KgTdJ63smtM78mtKf1mxkPeOs8kyOwS0,538
4
4
  wagtail/coreutils.py,sha256=ZlmtoHC5YzXmhdKi13QkCSmBryAmS7k8s5jgQjahpEQ,20660
@@ -334,7 +334,7 @@ wagtail/admin/panels/page_chooser_panel.py,sha256=aOOvkbN0ONy2aeJWcsAc926O1NFttk
334
334
  wagtail/admin/panels/page_utils.py,sha256=dBvYHofWP7-yWMY2KcmSVsC4-JJWdr9nNM5cQxUb4Mc,2297
335
335
  wagtail/admin/panels/publishing_panel.py,sha256=zMUYL1ybwoiv3f1Za7pCOBKbzWHeA7dshTWV8Q3SN0A,2452
336
336
  wagtail/admin/panels/signal_handlers.py,sha256=BOpF4PKqvGqz1qarMM2P7uzJaELDF9uYMOieXY2Xh-o,705
337
- wagtail/admin/panels/title_field_panel.py,sha256=tqwGdyh4to_S2tWaK8kDB9G8foPTXu781GNkN4Oa7bE,4776
337
+ wagtail/admin/panels/title_field_panel.py,sha256=md9ZV0IImKNKavALsQjVrO3kijKhHF9HUOknKXB4mEA,4868
338
338
  wagtail/admin/rich_text/__init__.py,sha256=HcMHRljUQSC4nomdfxT44cNrTtdFp-OHMOlpzb_Fnhs,965
339
339
  wagtail/admin/rich_text/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
340
340
  wagtail/admin/rich_text/converters/contentstate.py,sha256=kdeaIioSf3bbKD7bAoESdQHirXzC6nzJdSAehQAyTWA,4927
@@ -846,7 +846,7 @@ wagtail/admin/tests/test_compare.py,sha256=NpPtmLNWdArAp91-OIFRozcXjKA1FUV5tgI3r
846
846
  wagtail/admin/tests/test_contentstate.py,sha256=C8hzm30KP6KJH6Q7CzNojamPl_78aUdqRkq3VybPhGE,73011
847
847
  wagtail/admin/tests/test_dbwhitelister.py,sha256=uKlqTviGnlD1dClroq9Y1wOXLIfZWA4LvsfCtYW5S-E,6069
848
848
  wagtail/admin/tests/test_dismissibles.py,sha256=JKXt8SucZcAp4IkKNMQU7-qrm8oMu8vDKnyTdTUbAYo,2671
849
- wagtail/admin/tests/test_edit_handlers.py,sha256=c8aOcHAE3lvQOLvfXBNWfdeqUlnhq5RPRAUNhNAcDuA,98536
849
+ wagtail/admin/tests/test_edit_handlers.py,sha256=yURSoqfc5bHJatbPuXVP-dnjY5JXSC_NqTgFcd8KznI,99249
850
850
  wagtail/admin/tests/test_filters.py,sha256=PVRp_XbxggZ0IT-ZnZJZF0SZVxAtV39nZcDSSQxtBFU,3843
851
851
  wagtail/admin/tests/test_forms.py,sha256=RsIFiDlE5b3Wbm7bJAfvSjElM8qA-Iaxrzqwmiq_kW0,994
852
852
  wagtail/admin/tests/test_html_ruleset.py,sha256=QCSL8JGVyHQapCdGSgCFUTlsIgi2p8weugyQo4A-X7k,1743
@@ -869,12 +869,12 @@ wagtail/admin/tests/test_views.py,sha256=1i8N2Ao6rIbCY9wRXqNQzfSsAojnFxJ1TtI7JYf
869
869
  wagtail/admin/tests/test_views_generic.py,sha256=FQJLz9aD7OtToCCwtlYs-Bu_0BxSM99R-jGE4ZPnfAM,2934
870
870
  wagtail/admin/tests/test_whats_new.py,sha256=Vptrf94ilJephOP3O7s1FKLtjNxFLCne6Bi4c_VlJzw,5570
871
871
  wagtail/admin/tests/test_widgets.py,sha256=3NIcu5Ktx6i5kAn8kSdW3HBg-SSVi8BspR-THj8aQ0Y,24656
872
- wagtail/admin/tests/test_workflows.py,sha256=8fjuJVGpmB_rXC_7GXAxihnF53dGM8Io9ZN2LcCvsiU,144681
872
+ wagtail/admin/tests/test_workflows.py,sha256=f2zd-Baa0ZW3zA-WztgKTAGLkwksUlAQRdA6osnWmdU,145781
873
873
  wagtail/admin/tests/tests.py,sha256=GveGPLq49kvtr6J6Qz1-Cv1YHgjPxGk_amOgTeNslaU,22323
874
874
  wagtail/admin/tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
875
875
  wagtail/admin/tests/api/test_documents.py,sha256=2dfjTi6Bj3otRQ-ok9f3rwl-HpSmprfcmhWyYPDnXcs,5051
876
876
  wagtail/admin/tests/api/test_images.py,sha256=JTVOPWDeI5y1dZfuL1wS_kXuNC2q45QoMpflSTtvreI,9304
877
- wagtail/admin/tests/api/test_pages.py,sha256=H6bwKLshMjHQc2CdDILxCYAJ_jkJ6Lif8_d9_wkMRPM,71508
877
+ wagtail/admin/tests/api/test_pages.py,sha256=30_NuekkimRUJX0Lr6eekP-9Wf69-R_YkKiMt59lpms,71794
878
878
  wagtail/admin/tests/api/utils.py,sha256=VW2E7P-Yq-n6rsgvRhwXk3Tuyic8uVIx6xcFZV5yoN4,236
879
879
  wagtail/admin/tests/pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
880
880
  wagtail/admin/tests/pages/test_content_type_use_view.py,sha256=4ekBbMbIjpvEW7cmXuy2bP2tmI3rUNk1sx6cL7A_EW4,1336
@@ -908,7 +908,7 @@ wagtail/admin/tests/ui/test_tables.py,sha256=LSZu_E8pD7l4yJz4YjJlZ0vdk1edkHdHejV
908
908
  wagtail/admin/tests/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
909
909
  wagtail/admin/tests/viewsets/test_base_viewset.py,sha256=_6DhpxiinfXr-wjQfh0tcL1skZi1KXVlZLJpxCwazog,1537
910
910
  wagtail/admin/tests/viewsets/test_chooser_viewset.py,sha256=fIoBQ3u_J-ZhWvpATq7BLEzCet7_hOl383xGIgFtf7E,2039
911
- wagtail/admin/tests/viewsets/test_model_viewset.py,sha256=l5HpJ9IAEWeSBYKqDmjwFWX88X66RsNFfhAJksEEMPU,49106
911
+ wagtail/admin/tests/viewsets/test_model_viewset.py,sha256=xK11mvtyCD7DU9bNzVkIHuC2m1Pn5pAoKbKyWTGhMTI,50082
912
912
  wagtail/admin/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
913
913
  wagtail/admin/ui/components.py,sha256=He-K0puoWcxgH_vyXfO2OoO9iSo-pCTM-aVBqYHSrFs,1074
914
914
  wagtail/admin/ui/fields.py,sha256=QQBV9L8w6L5w8E6DG8LKqrlIzz1K5leFSxfM67v6L1Q,1377
@@ -940,14 +940,14 @@ wagtail/admin/views/bulk_action/registry.py,sha256=e9-rN9TdHUmRwDfTeauvPUjE6p3ip
940
940
  wagtail/admin/views/generic/__init__.py,sha256=_FnNGhm9fVAblGcipJ0DLyqKZ3syQYG3v4OZK6qOR-4,650
941
941
  wagtail/admin/views/generic/base.py,sha256=xm3Z2jnHkTWMWdZKlZ68yjeaIfcTwTPYndI7-uhfAV4,7056
942
942
  wagtail/admin/views/generic/chooser.py,sha256=pjOYGcYBHc1ZkZJ4LWcHkoGNQ7U7GdKBsJZ0vyOO4kc,18061
943
- wagtail/admin/views/generic/history.py,sha256=ohDznIrFwP0QzH1hFsM_ulR3xQLonv9hK-H4R-3sSqc,9663
943
+ wagtail/admin/views/generic/history.py,sha256=1agfpkggAJb6-2P0tFj0CVphtZ8fynlcHSwLF_NlQ08,10269
944
944
  wagtail/admin/views/generic/lock.py,sha256=dvZ613n3itNAhO3zdQzGRewm2kH-dyemx-LSuUC2AHM,1435
945
945
  wagtail/admin/views/generic/mixins.py,sha256=Gxt02gof4SRdEGtUkWBygiDK01OsmhL-7nZK00fAbAI,28123
946
946
  wagtail/admin/views/generic/models.py,sha256=XthJ6TaXDXvlxWCRMmNXGAGBwlqGfdW60TzmH9h0sJ4,50194
947
947
  wagtail/admin/views/generic/multiple_upload.py,sha256=rgf3uXZShyZ_2rnidfk_tnU4YhHcXyPwrIKMKWIk78s,13031
948
948
  wagtail/admin/views/generic/permissions.py,sha256=yOZFjz9pteBTnI2KayW-lYOu4mCl-kDDGjN029AptzA,1477
949
949
  wagtail/admin/views/generic/preview.py,sha256=9tvUJoz55b0bKY4vvfqnDMNke3TTeSPaEamvrICYR9Q,5655
950
- wagtail/admin/views/generic/usage.py,sha256=JS7W-DNU_PNmEk9mj9sbrvGk_qpaLZTa52V9mf10tDM,4251
950
+ wagtail/admin/views/generic/usage.py,sha256=CVdvz47WOr9xfYu5RaZltUPJII5VyG5eMLkQtDQ1S8U,4531
951
951
  wagtail/admin/views/generic/workflow.py,sha256=u8mv-rdFeO0UmDaWVzzwtlXRaTZ_ZQzTEl1dwMtW-r8,9429
952
952
  wagtail/admin/views/pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
953
953
  wagtail/admin/views/pages/convert_alias.py,sha256=hWKn1Uc2w4Z5ciq_ncsznRihiRXLFOgC2mNNFUgI7bM,1858
@@ -979,7 +979,7 @@ wagtail/admin/views/reports/aging_pages.py,sha256=AgdoEXa5Y8Gvfv6DpCiZV-A6YSF5Vk
979
979
  wagtail/admin/views/reports/audit_logging.py,sha256=YAcNFGgVhUTp-XX0QZ8vuTKdiI3TLpMctdOAra3f0mY,8350
980
980
  wagtail/admin/views/reports/base.py,sha256=ePpmLbRS5wsH3Z_02sC8x97S3p1uoWlIOffBtrw2f1E,1581
981
981
  wagtail/admin/views/reports/locked_pages.py,sha256=9CVqHRYODp3Y3gw1IE4Q4M6iizmgXZCzQcD7o-5FtcQ,2206
982
- wagtail/admin/views/reports/workflows.py,sha256=KnhgXGHQBJSaBY-bqLzCOXNIavNvW6d9gsZdCAeknHw,8253
982
+ wagtail/admin/views/reports/workflows.py,sha256=25KeVcZvApN4Xhah-fpLdObeFg3M6eHYl9lZSqM7WCQ,8899
983
983
  wagtail/admin/viewsets/__init__.py,sha256=k_ZRVEmUEHmj7mVPJSTfJGDlsauTLX6loPPN0aD2v14,1476
984
984
  wagtail/admin/viewsets/base.py,sha256=BNEM5XeX7TPetydJ7Dhh3qFRCDrCt8HlgN6e8JE_ws8,4998
985
985
  wagtail/admin/viewsets/chooser.py,sha256=t9fzFyilR_5kYfTls4s9N-WYuwwniLZOlvkZ0-R0McQ,9356
@@ -3176,7 +3176,7 @@ wagtail/search/signal_handlers.py,sha256=Md4dhmwLF7kX7YLG-MsqTLQ6NdfkFIavBJ9n5Os
3176
3176
  wagtail/search/utils.py,sha256=PnF65FM5Udc7mZ8J2oBMJ15T6vYGL0N69awp_RgEDmc,6210
3177
3177
  wagtail/search/backends/__init__.py,sha256=nJEc435WnprL13v7OwcUCyHz0CTXMCMar9xTRqn1rH8,3455
3178
3178
  wagtail/search/backends/base.py,sha256=M7lyovOz2Wau_UwjyEk7AYeQOLt6Q3Lm2hUHDUoEVNg,16806
3179
- wagtail/search/backends/elasticsearch5.py,sha256=Ae4QtqvbT7hYeENQj-4sV-yoNhv920svIiHeUnT7BMU,38702
3179
+ wagtail/search/backends/elasticsearch5.py,sha256=lfhUvXUafpmnw0kqdZVr9LBSUMjUuehMkixzj6rYYls,39018
3180
3180
  wagtail/search/backends/elasticsearch6.py,sha256=L9B3rh1T9q5rFjtWh8CRgntSmoMbv5CVGTGEQIJmRpM,9048
3181
3181
  wagtail/search/backends/elasticsearch7.py,sha256=hpjj_SA5yjTs2lrjTguI1o1XVepXqgO-1_XWwhLiiUk,4864
3182
3182
  wagtail/search/backends/elasticsearch8.py,sha256=n3y05d_atzbnkaM4F1BXp3OhayE-J6uzfggYBdw2rBo,3750
@@ -3309,7 +3309,7 @@ wagtail/search/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
3309
3309
  wagtail/search/tests/elasticsearch_common_tests.py,sha256=aifEijThsfzK7NYwbvjVdr36fW_ckXMesHtX-tDwPpw,7817
3310
3310
  wagtail/search/tests/test_backends.py,sha256=DBOFXu2W6hAtH-KHnOjn7IBXWHfOWkJJW2Ery7eKzSs,40719
3311
3311
  wagtail/search/tests/test_db_backend.py,sha256=X_x2yDApntvCRq4pL9UM1Q-DRY5WFCR_aaSnCbkcf4s,2031
3312
- wagtail/search/tests/test_elasticsearch5_backend.py,sha256=2byWOVdbfKdRS1fu1Hpf8r_jyTjUwqbtWnbcH3SIEmQ,42937
3312
+ wagtail/search/tests/test_elasticsearch5_backend.py,sha256=rObmzJmZ4-iM7UXUterLfCoT7rIYIGVUGNEUmB1EaME,43702
3313
3313
  wagtail/search/tests/test_elasticsearch6_backend.py,sha256=M1QmKDJrTQulbsiEX0AFQDyihoieusZ0UVW17rNDoeo,47213
3314
3314
  wagtail/search/tests/test_elasticsearch7_backend.py,sha256=NxjMGh1vUjgmaLn6MqULX-FA4OlGOZ7VvOslOnW_JKs,46344
3315
3315
  wagtail/search/tests/test_elasticsearch8_backend.py,sha256=3EKGnVO8ldl8em5rE0xG4b_BXVFvh7QGk719FSXGbzE,482
@@ -4070,9 +4070,9 @@ wagtail/utils/urlpatterns.py,sha256=RDhVScxdm-RV4HSMjWElyrbEoTPsXu841_SKMgoFKtY,
4070
4070
  wagtail/utils/utils.py,sha256=UALGn0KOyqi5ZoXOozWX99ZPUsVZP51ET8d7sZ1jlm0,430
4071
4071
  wagtail/utils/version.py,sha256=40WGMIy8nSPQJFF01p7c38L444SexH2Cb-bQmR8ztXg,1478
4072
4072
  wagtail/utils/widgets.py,sha256=oTpTMcmQ0Y4MugbSKp_Uigl97ftWdHvMfvhrrLyVmBs,1529
4073
- wagtail-5.2.3.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4074
- wagtail-5.2.3.dist-info/METADATA,sha256=kH96_SWd99n0ziKLD1yAvGBVxQ7smenK-pqgp6wwjd0,3855
4075
- wagtail-5.2.3.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4076
- wagtail-5.2.3.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4077
- wagtail-5.2.3.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4078
- wagtail-5.2.3.dist-info/RECORD,,
4073
+ wagtail-5.2.4.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4074
+ wagtail-5.2.4.dist-info/METADATA,sha256=1XqOblIzPCZys_AyynwCkFYDcXIxpkcicWerrBMJMB4,3855
4075
+ wagtail-5.2.4.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4076
+ wagtail-5.2.4.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4077
+ wagtail-5.2.4.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4078
+ wagtail-5.2.4.dist-info/RECORD,,