wagtail 7.0.2__py3-none-any.whl → 7.0.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 = (7, 0, 2, "final", 1)
9
+ VERSION = (7, 0, 4, "final", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
@@ -6,7 +6,9 @@
6
6
  {% if breadcrumbs_items %}
7
7
  <div class="nice-padding w-mt-8">
8
8
  <h2 class="w-relative w-h1" id="header-title">
9
- {% icon classname="w-absolute w-top-1 -w-left-11 w-max-w-[1em] w-max-h-[1em]" name=header_icon %}
9
+ {% if header_icon %}
10
+ {% icon classname="w-absolute w-top-1 -w-left-11 w-max-w-[1em] w-max-h-[1em]" name=header_icon %}
11
+ {% endif %}
10
12
  {{ page_subtitle|default:page_title }}
11
13
  </h2>
12
14
  </div>
@@ -1,6 +1,7 @@
1
1
  import datetime
2
2
  from functools import wraps
3
3
 
4
+ from django.contrib.auth.models import Permission
4
5
  from django.test import TestCase, override_settings
5
6
  from django.urls import reverse
6
7
  from django.utils import timezone
@@ -358,6 +359,47 @@ class TestPreview(WagtailTestUtils, TestCase):
358
359
  self.assertTemplateUsed(response, "tests/event_page.html")
359
360
  self.assertContains(response, "Placeholder title")
360
361
 
362
+ def test_preview_on_create_without_permissions(self):
363
+ # Remove privileges from user
364
+ self.user.is_superuser = False
365
+ self.user.user_permissions.add(
366
+ Permission.objects.get(
367
+ content_type__app_label="wagtailadmin", codename="access_admin"
368
+ )
369
+ )
370
+ self.user.save()
371
+
372
+ preview_url = reverse(
373
+ "wagtailadmin_pages:preview_on_add",
374
+ args=("tests", "eventpage", self.home_page.id),
375
+ )
376
+
377
+ response = self.client.post(
378
+ preview_url,
379
+ self.post_data,
380
+ )
381
+ self.assertEqual(response.status_code, 302)
382
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
383
+
384
+ def test_preview_on_create_get_without_permissions(self):
385
+ # Remove privileges from user
386
+ self.user.is_superuser = False
387
+ self.user.user_permissions.add(
388
+ Permission.objects.get(
389
+ content_type__app_label="wagtailadmin", codename="access_admin"
390
+ )
391
+ )
392
+ self.user.save()
393
+
394
+ preview_url = reverse(
395
+ "wagtailadmin_pages:preview_on_add",
396
+ args=("tests", "eventpage", self.home_page.id),
397
+ )
398
+
399
+ response = self.client.get(preview_url)
400
+ self.assertEqual(response.status_code, 302)
401
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
402
+
361
403
  def test_preview_on_edit_with_m2m_field(self):
362
404
  preview_url = reverse(
363
405
  "wagtailadmin_pages:preview_on_edit", args=(self.event_page.id,)
@@ -557,6 +599,45 @@ class TestPreview(WagtailTestUtils, TestCase):
557
599
  response = self.client.get(preview_url)
558
600
  self.assertEqual(response.status_code, 200)
559
601
 
602
+ def test_preview_on_edit_without_permissions(self):
603
+ # Remove privileges from user
604
+ self.user.is_superuser = False
605
+ self.user.user_permissions.add(
606
+ Permission.objects.get(
607
+ content_type__app_label="wagtailadmin", codename="access_admin"
608
+ )
609
+ )
610
+ self.user.save()
611
+
612
+ preview_url = reverse(
613
+ "wagtailadmin_pages:preview_on_edit", args=(self.event_page.id,)
614
+ )
615
+
616
+ response = self.client.post(
617
+ preview_url,
618
+ self.post_data,
619
+ )
620
+ self.assertEqual(response.status_code, 302)
621
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
622
+
623
+ def test_preview_on_edit_get_without_permissions(self):
624
+ # Remove privileges from user
625
+ self.user.is_superuser = False
626
+ self.user.user_permissions.add(
627
+ Permission.objects.get(
628
+ content_type__app_label="wagtailadmin", codename="access_admin"
629
+ )
630
+ )
631
+ self.user.save()
632
+
633
+ preview_url = reverse(
634
+ "wagtailadmin_pages:preview_on_edit", args=(self.event_page.id,)
635
+ )
636
+
637
+ response = self.client.get(preview_url)
638
+ self.assertEqual(response.status_code, 302)
639
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
640
+
560
641
  def test_preview_on_create_clear_preview_data(self):
561
642
  preview_session_key = "wagtail-preview-tests-eventpage-{}".format(
562
643
  self.home_page.id
@@ -2,6 +2,7 @@ from django.contrib.admin.utils import quote
2
2
  from django.test import TestCase
3
3
  from django.urls import reverse
4
4
 
5
+ from wagtail.test.testapp.models import ModelWithStringTypePrimaryKey
5
6
  from wagtail.test.utils import WagtailTestUtils
6
7
 
7
8
 
@@ -37,6 +38,39 @@ class TestGenericIndexViewWithoutModel(WagtailTestUtils, TestCase):
37
38
  self.assertEqual(response_object_count, 4)
38
39
 
39
40
 
41
+ class TestGenericCreateView(WagtailTestUtils, TestCase):
42
+ fixtures = ["test.json"]
43
+
44
+ def get(self, params={}):
45
+ return self.client.get(reverse("testapp_generic_create"), params)
46
+
47
+ def test_get_create_view(self):
48
+ response = self.get()
49
+ self.assertEqual(response.status_code, 200)
50
+ soup = self.get_soup(response.content)
51
+ h2 = soup.select_one("main h2")
52
+ self.assertIsNotNone(h2)
53
+ self.assertEqual(h2.text.strip(), "Model with string type primary key")
54
+ form = soup.select_one("main form")
55
+ self.assertIsNotNone(form)
56
+ id_input = form.select_one("input[name='custom_id']")
57
+ self.assertIsNotNone(id_input)
58
+ self.assertEqual(id_input.get("type"), "text")
59
+ content_input = form.select_one("input[name='content']")
60
+ self.assertIsNotNone(content_input)
61
+
62
+ def test_post_create_view(self):
63
+ post_data = {
64
+ "custom_id": "string-pk-3",
65
+ "content": "third modelwithstringtypeprimarykey model",
66
+ }
67
+ response = self.client.post(reverse("testapp_generic_create"), post_data)
68
+ self.assertEqual(response.status_code, 302) # Redirect to index view
69
+ self.assertTrue(
70
+ ModelWithStringTypePrimaryKey.objects.filter(pk="string-pk-3").exists()
71
+ )
72
+
73
+
40
74
  class TestGenericEditView(WagtailTestUtils, TestCase):
41
75
  fixtures = ["test.json"]
42
76
 
@@ -17,13 +17,16 @@ from wagtail.blocks.base import Block
17
17
  from wagtail.models import PreviewableMixin, RevisionMixin
18
18
  from wagtail.utils.decorators import xframe_options_sameorigin_override
19
19
 
20
+ from .permissions import PermissionCheckedMixin
20
21
 
21
- class PreviewOnEdit(View):
22
+
23
+ class PreviewOnEdit(PermissionCheckedMixin, View):
22
24
  model = None
23
25
  form_class = None
24
26
  http_method_names = ("post", "get", "delete")
25
27
  preview_expiration_timeout = 60 * 60 * 24 # seconds
26
28
  session_key_prefix = "wagtail-preview-"
29
+ permission_required = "change"
27
30
 
28
31
  def setup(self, request, *args, **kwargs):
29
32
  super().setup(request, *args, **kwargs)
@@ -54,6 +57,8 @@ class PreviewOnEdit(View):
54
57
 
55
58
  def get_object(self):
56
59
  obj = get_object_or_404(self.model, pk=unquote(str(self.kwargs["pk"])))
60
+ if not self.user_has_permission_for_instance(self.permission_required, obj):
61
+ raise PermissionDenied
57
62
  if isinstance(obj, RevisionMixin):
58
63
  obj = obj.get_latest_revision_as_object()
59
64
  return obj
@@ -133,6 +138,8 @@ class PreviewOnEdit(View):
133
138
 
134
139
 
135
140
  class PreviewOnCreate(PreviewOnEdit):
141
+ permission_required = "add"
142
+
136
143
  @property
137
144
  def session_key(self):
138
145
  app_label = self.model._meta.app_label
@@ -30,9 +30,13 @@ class PreviewOnEdit(GenericPreviewOnEdit):
30
30
  return "{}{}".format(self.session_key_prefix, self.kwargs["page_id"])
31
31
 
32
32
  def get_object(self):
33
- return get_object_or_404(
33
+ page = get_object_or_404(
34
34
  Page, id=self.kwargs["page_id"]
35
35
  ).get_latest_revision_as_object()
36
+ page_perms = page.permissions_for_user(self.request.user)
37
+ if not page_perms.can_edit():
38
+ raise PermissionDenied
39
+ return page
36
40
 
37
41
  def get_form(self, query_dict):
38
42
  form_class = self.object.get_edit_handler().get_form_class()
@@ -87,6 +91,11 @@ class PreviewOnCreate(PreviewOnEdit):
87
91
 
88
92
  page = content_type.model_class()()
89
93
  parent_page = get_object_or_404(Page, id=parent_page_id).specific
94
+
95
+ parent_page_perms = parent_page.permissions_for_user(self.request.user)
96
+ if not parent_page_perms.can_add_subpage():
97
+ raise PermissionDenied
98
+
90
99
  # We need to populate treebeard's path / depth fields in order to
91
100
  # pass validation. We can't make these 100% consistent with the rest
92
101
  # of the tree without making actual database changes (such as
@@ -93,6 +93,8 @@ class AbstractFormField(Orderable):
93
93
  field_type = models.CharField(
94
94
  verbose_name=_("field type"), max_length=16, choices=FORM_FIELD_CHOICES
95
95
  )
96
+ # field_type must be populated for previews to build the form field.
97
+ field_type.required_on_save = True
96
98
  required = models.BooleanField(verbose_name=_("required"), default=True)
97
99
  choices = models.TextField(
98
100
  verbose_name=_("choices"),
@@ -2266,6 +2266,29 @@ class TestPreview(WagtailTestUtils, TestCase):
2266
2266
  self.assertEqual(response.status_code, 200)
2267
2267
  self.assertTemplateUsed(response, template)
2268
2268
 
2269
+ def test_empty_field_type_does_not_crash_preview(self):
2270
+ preview_url = reverse(
2271
+ "wagtailadmin_pages:preview_on_add",
2272
+ args=("tests", "formpage", self.homepage.pk),
2273
+ )
2274
+
2275
+ response = self.client.post(
2276
+ preview_url,
2277
+ {**self.post_data, "form_fields-0-field_type": ""},
2278
+ )
2279
+ self.assertEqual(response.status_code, 200)
2280
+ self.assertJSONEqual(
2281
+ response.content.decode(),
2282
+ {"is_valid": False, "is_available": False},
2283
+ )
2284
+
2285
+ response = self.client.get(preview_url)
2286
+
2287
+ self.assertContains(
2288
+ response,
2289
+ "Preview cannot display due to validation errors.",
2290
+ )
2291
+
2269
2292
 
2270
2293
  class TestFormPageCreate(WagtailTestUtils, TestCase):
2271
2294
  def setUp(self):
@@ -1,5 +1,6 @@
1
1
  import datetime
2
2
 
3
+ from django.contrib.auth.models import Permission
3
4
  from django.test import TestCase, override_settings
4
5
  from django.urls import reverse
5
6
  from django.utils import timezone
@@ -145,6 +146,32 @@ class TestPreview(WagtailTestUtils, TestCase):
145
146
  self.assertNotContains(response, "<li>Parties</li>")
146
147
  self.assertContains(response, "<li>Holidays</li>")
147
148
 
149
+ def test_preview_on_create_without_permissions(self):
150
+ # Remove privileges from user
151
+ self.user.is_superuser = False
152
+ self.user.user_permissions.add(
153
+ Permission.objects.get(
154
+ content_type__app_label="wagtailadmin", codename="access_admin"
155
+ )
156
+ )
157
+ self.user.save()
158
+ response = self.client.post(self.preview_on_add_url, self.post_data)
159
+ self.assertEqual(response.status_code, 302)
160
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
161
+
162
+ def test_preview_on_create_get_without_permissions(self):
163
+ # Remove privileges from user
164
+ self.user.is_superuser = False
165
+ self.user.user_permissions.add(
166
+ Permission.objects.get(
167
+ content_type__app_label="wagtailadmin", codename="access_admin"
168
+ )
169
+ )
170
+ self.user.save()
171
+ response = self.client.get(self.preview_on_add_url)
172
+ self.assertEqual(response.status_code, 302)
173
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
174
+
148
175
  def test_preview_on_edit_with_m2m_field(self):
149
176
  response = self.client.post(self.preview_on_edit_url, self.post_data)
150
177
 
@@ -262,6 +289,32 @@ class TestPreview(WagtailTestUtils, TestCase):
262
289
  self.client.session,
263
290
  )
264
291
 
292
+ def test_preview_on_edit_without_permissions(self):
293
+ # Remove privileges from user
294
+ self.user.is_superuser = False
295
+ self.user.user_permissions.add(
296
+ Permission.objects.get(
297
+ content_type__app_label="wagtailadmin", codename="access_admin"
298
+ )
299
+ )
300
+ self.user.save()
301
+ response = self.client.post(self.preview_on_edit_url, self.post_data)
302
+ self.assertEqual(response.status_code, 302)
303
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
304
+
305
+ def test_preview_on_edit_get_without_permissions(self):
306
+ # Remove privileges from user
307
+ self.user.is_superuser = False
308
+ self.user.user_permissions.add(
309
+ Permission.objects.get(
310
+ content_type__app_label="wagtailadmin", codename="access_admin"
311
+ )
312
+ )
313
+ self.user.save()
314
+ response = self.client.get(self.preview_on_edit_url)
315
+ self.assertEqual(response.status_code, 302)
316
+ self.assertRedirects(response, reverse("wagtailadmin_home"))
317
+
265
318
  def test_preview_on_create_clear_preview_data(self):
266
319
  # Set a fake preview session data for the page
267
320
  self.client.session[self.session_key_prefix] = "test data"
@@ -6,6 +6,7 @@ urlpatterns = [
6
6
  path("bob-only-zone", views.bob_only_zone, name="testapp_bob_only_zone"),
7
7
  path("messages/", views.message_test, name="testapp_message_test"),
8
8
  path("test-index/", views.TestIndexView.as_view(), name="testapp_generic_index"),
9
+ path("test-create/", views.TestCreateView.as_view(), name="testapp_generic_create"),
9
10
  path(
10
11
  "test-edit/<str:pk>/", views.TestEditView.as_view(), name="testapp_generic_edit"
11
12
  ),
@@ -13,7 +13,13 @@ from wagtail.admin.auth import user_passes_test
13
13
  from wagtail.admin.filters import WagtailFilterSet
14
14
  from wagtail.admin.panels import FieldPanel
15
15
  from wagtail.admin.ui.tables import BooleanColumn, Column, UpdatedAtColumn
16
- from wagtail.admin.views.generic import DeleteView, EditView, IndexView, InspectView
16
+ from wagtail.admin.views.generic import (
17
+ CreateView,
18
+ DeleteView,
19
+ EditView,
20
+ IndexView,
21
+ InspectView,
22
+ )
17
23
  from wagtail.admin.viewsets.base import ViewSet, ViewSetGroup
18
24
  from wagtail.admin.viewsets.chooser import ChooserViewSet
19
25
  from wagtail.admin.viewsets.model import ModelViewSet, ModelViewSetGroup
@@ -79,6 +85,14 @@ class CustomModelEditForm(forms.ModelForm):
79
85
  fields = ("content",)
80
86
 
81
87
 
88
+ class TestCreateView(CreateView):
89
+ model = ModelWithStringTypePrimaryKey
90
+ fields = ["custom_id", "content"]
91
+ add_url_name = "testapp_generic_create"
92
+ edit_url_name = "testapp_generic_edit"
93
+ index_url_name = "testapp_generic_index"
94
+
95
+
82
96
  class TestEditView(EditView):
83
97
  model = ModelWithStringTypePrimaryKey
84
98
  context_object_name = "test_object"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wagtail
3
- Version: 7.0.2
3
+ Version: 7.0.4
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
@@ -1,4 +1,4 @@
1
- wagtail/__init__.py,sha256=mcz3bCLqgfiNLSPC65n3I8OY2t27mCM0V2bH_JDzRUU,724
1
+ wagtail/__init__.py,sha256=455kVsVQPyP85D2dUKMdH5mtqot-AS_yocdlgF-xx7w,724
2
2
  wagtail/apps.py,sha256=38kXTdHoQzFnpUqDNxFpsqn2dut4V0u9rLOkhqCoYkc,713
3
3
  wagtail/compat.py,sha256=5z6X9d-h_VUFt44kuZ-Cw00e9Be5vIXy7yqAdfuv3Mc,1452
4
4
  wagtail/coreutils.py,sha256=MbFcVZjqUChdHMCa993X_RUwLJQNUGwpkTpzJOFdtgU,19822
@@ -478,7 +478,7 @@ wagtail/admin/templates/wagtailadmin/generic/confirm_unpublish.html,sha256=vkVfX
478
478
  wagtail/admin/templates/wagtailadmin/generic/confirm_workflow_cancellation.html,sha256=xNblpxN3QwhtMnIRNKU0N1Ygn1VDpzb-j-drtaDSnG4,1411
479
479
  wagtail/admin/templates/wagtailadmin/generic/create.html,sha256=U3O8eOcRK-dYIKLDKPwW9Y9YIDBPvFquP8Vm2mSRck4,47
480
480
  wagtail/admin/templates/wagtailadmin/generic/edit.html,sha256=U3O8eOcRK-dYIKLDKPwW9Y9YIDBPvFquP8Vm2mSRck4,47
481
- wagtail/admin/templates/wagtailadmin/generic/form.html,sha256=hYO0FJxQ0RS_D6krhaUPM-Nk4qHo-rFztFu7_nMxeYY,3875
481
+ wagtail/admin/templates/wagtailadmin/generic/form.html,sha256=2lD-f-95FKe6OIAiqlVEqFLi2I_ZewEg_bH_QIrJzFU,3944
482
482
  wagtail/admin/templates/wagtailadmin/generic/index.html,sha256=k8RcssMS8XjCPCS0AUulRR4pOEjnzMuQlZyXub_5Geg,1626
483
483
  wagtail/admin/templates/wagtailadmin/generic/index_results.html,sha256=nERPqMUtEjbwTnKsPevT0esF48FKHoiKcRn0Y5f_taY,718
484
484
  wagtail/admin/templates/wagtailadmin/generic/inspect.html,sha256=0GCZH1f0IVmCvpOHqvENjGS6aWaozEReDr1UvAa7jTo,659
@@ -885,7 +885,7 @@ wagtail/admin/tests/test_templatetags.py,sha256=HCU2EZwRYSVTlD5-dzCYtlbuQBakx-WG
885
885
  wagtail/admin/tests/test_upgrade_notification.py,sha256=GnUZ5Nugp9SHtefdGNIUKA1La7P2DXu5Z1-UkwGkcRI,5990
886
886
  wagtail/admin/tests/test_userbar.py,sha256=m8nslAEJFQN-ExNup6ueIeDlQ1NTziD5AI-xF12tE7c,23811
887
887
  wagtail/admin/tests/test_views.py,sha256=r9V1hvg8r32nKkAQL_suihXl2HQzFgLwwHfM8UsVSBU,9463
888
- wagtail/admin/tests/test_views_generic.py,sha256=dH3kUcGAVj80ZocN8XoYCjX5DiTQGOupGQoHzuHX9gA,4109
888
+ wagtail/admin/tests/test_views_generic.py,sha256=v3tCOnv4282nW3LOU0AWmxRhQ17mLbUyt4--Gfji2FA,5492
889
889
  wagtail/admin/tests/test_whats_new.py,sha256=Vptrf94ilJephOP3O7s1FKLtjNxFLCne6Bi4c_VlJzw,5570
890
890
  wagtail/admin/tests/test_widgets.py,sha256=mksHAnFN-EAt-ayxfBRDk8Icu22nE9ji1ZuFW8ARZBM,26174
891
891
  wagtail/admin/tests/test_workflows.py,sha256=5N7inW2m1AODVsqdo5bDzWld9bV--PXGqGb3sGoUDe0,188682
@@ -911,7 +911,7 @@ wagtail/admin/tests/pages/test_page_locking.py,sha256=7CMYaBVzbvSdsLMtXNOoVYnG0i
911
911
  wagtail/admin/tests/pages/test_page_search.py,sha256=VTVOvgIH1IicUsuTCWHnKRKowMJBRWhAX8M7_YK1Tbg,13133
912
912
  wagtail/admin/tests/pages/test_page_usage.py,sha256=5kdKxoffOuz8cnPNPsqQbisT4QwlNdgyJZAXKGZPAdg,5091
913
913
  wagtail/admin/tests/pages/test_parent_page_chooser_view.py,sha256=W_cFg5qmbxdaXvR6hkhvPnbQmmnSWjmu3_I5HoIIHt4,6055
914
- wagtail/admin/tests/pages/test_preview.py,sha256=aAhc4D8X6Ee35oR_-ltVzb_ikKqvxdDGZxoTsl9YrSo,39916
914
+ wagtail/admin/tests/pages/test_preview.py,sha256=Wnrk0Twh5-0QYB0uINPye4gquMx7qGvpvsoL1DFtoGg,42658
915
915
  wagtail/admin/tests/pages/test_reorder_page.py,sha256=FTw5XLai3dcdb5LAbGDpJc5LGZzAyGXaRVNaC94-MCw,8755
916
916
  wagtail/admin/tests/pages/test_revisions.py,sha256=mmMbazjzfCn644dujr-uGnsJ8UuHb2qM12RwlfyZiqQ,26340
917
917
  wagtail/admin/tests/pages/test_unpublish_page.py,sha256=Vu2zq74xcwYPQeMFI9zN2mXh27Iee13LSwnmiALTQgo,9682
@@ -971,7 +971,7 @@ wagtail/admin/views/generic/mixins.py,sha256=rRpvawcFqUxQjE0fZ4zhB2TJNYCMgd_PTWI
971
971
  wagtail/admin/views/generic/models.py,sha256=1ootlZ37eNg2F6YxXTWs3_RdBOar1SJtZ6DC3Ru-agg,52302
972
972
  wagtail/admin/views/generic/multiple_upload.py,sha256=KiE9T9Uv_EuMr2_MbHzSWJ2W3uaw3djwAnUXgxsjJ38,13383
973
973
  wagtail/admin/views/generic/permissions.py,sha256=LETkWYmN1DjGC8rNYXplkqSZj3TIHEdYf3iWFVZ2jbE,1788
974
- wagtail/admin/views/generic/preview.py,sha256=c76DjkghAXYdGlmQluClTbUVjPtXmA92rWY3Ta9wVik,7749
974
+ wagtail/admin/views/generic/preview.py,sha256=aAb0hRUHx9LTHJ6FeKA_8gNS6Ac6qbSWaw2nIpEy29A,8010
975
975
  wagtail/admin/views/generic/usage.py,sha256=leJNFgfZ7tXugIFyuuQ-oMlBKmq0xlTCybH3WtozqnA,5085
976
976
  wagtail/admin/views/generic/workflow.py,sha256=wx5EukIJPNNGEGmWFHlP21_hUUNkwiefp6qVd6LZrvY,9947
977
977
  wagtail/admin/views/pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -986,7 +986,7 @@ wagtail/admin/views/pages/listing.py,sha256=Fx7UMoJSMI1dxfpCWQ2FXVmM6zX4pReZvM8W
986
986
  wagtail/admin/views/pages/lock.py,sha256=Z4FxvYyr0eDJj5kgoCJfk-WgwgXhip6_I2CabaG4J1c,1209
987
987
  wagtail/admin/views/pages/move.py,sha256=l8DSb6EGXau6kdD8gVUo9e-E8lfrIlP72Fi4S43T2OI,5940
988
988
  wagtail/admin/views/pages/ordering.py,sha256=cabaYVsfbHZoxNkGQUqP5klUSlnZDisSFbPko1mX8kM,1633
989
- wagtail/admin/views/pages/preview.py,sha256=MNAqFjHEzq6r05aWV2wziz14Srnzq2LaVTe49mE8e0k,4191
989
+ wagtail/admin/views/pages/preview.py,sha256=YbZX-VWBeHg9nTrSJBeLDuJVy_mTyvXYu-dms2LqKeM,4519
990
990
  wagtail/admin/views/pages/revisions.py,sha256=paEcUjkDDrGgGnQNhwgSM4uanGcLClxb7KlFlEunGEM,4651
991
991
  wagtail/admin/views/pages/search.py,sha256=_OUbbXQfKNB6Qq2n1T95CE5liyVJwLFfb018GUPDiRM,5098
992
992
  wagtail/admin/views/pages/unpublish.py,sha256=p_lYd6x8k35UlFIhrZzEjQ6m68qbiHAWyvZrgCg4EoY,3716
@@ -1056,7 +1056,7 @@ wagtail/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1056
1056
  wagtail/contrib/forms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1057
1057
  wagtail/contrib/forms/apps.py,sha256=OY2eHr8Jetf9FYnTTcfWX4XgiG_gWfSGS7ndwMuq5po,285
1058
1058
  wagtail/contrib/forms/forms.py,sha256=l6acbaXKeeks-pcb6iUMb1XsWGqyQ8EIiwUm1ft2VH4,9735
1059
- wagtail/contrib/forms/models.py,sha256=IqLRh9a9W0hDsO2HUgwfAOUzKWqeaTMvP-KT8VLWVHM,12069
1059
+ wagtail/contrib/forms/models.py,sha256=T2_mI0MPiHIId4GZYmJGSwhbaDnnHBSND-EfcVgN5nQ,12181
1060
1060
  wagtail/contrib/forms/panels.py,sha256=zI3bFM1X5iT_fnxQUe5BWWN5iQKm6tEFEiaFhNRZcwk,1556
1061
1061
  wagtail/contrib/forms/urls.py,sha256=VZ4LDq6SkdEi3iXL7zoxDRSNZeGS5ZSeiNUsfqZ-nOI,776
1062
1062
  wagtail/contrib/forms/utils.py,sha256=Gu3WS-X37KQeDuHZliEwkhHJaqDgUwF1ObuVp3ai2fM,1279
@@ -1194,7 +1194,7 @@ wagtail/contrib/forms/templates/wagtailforms/panels/form_responses_panel.html,sh
1194
1194
  wagtail/contrib/forms/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1195
1195
  wagtail/contrib/forms/tests/test_forms.py,sha256=pyTRQjBW9tIInrxnV1_Zy5ACsNTpUlF6SnAfcgOAUWk,16094
1196
1196
  wagtail/contrib/forms/tests/test_models.py,sha256=lcifi_nJHHD9toYVtIY3P-zh-rdCTsLQTgxvAyFKbMM,32465
1197
- wagtail/contrib/forms/tests/test_views.py,sha256=3kqxz-Tp4vtn2vQ4jDgb2B9XbiUlY0lOAa9sEhhoNLw,90917
1197
+ wagtail/contrib/forms/tests/test_views.py,sha256=hRyzalYKmZHnIvoNSioaS4a1AIOzYtHbNc692bUs-ww,91625
1198
1198
  wagtail/contrib/forms/tests/utils.py,sha256=OESefxdqGRgL1lDItVPSFNw_FJNB4X0PvozdvAhrpkc,6043
1199
1199
  wagtail/contrib/frontend_cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1200
1200
  wagtail/contrib/frontend_cache/apps.py,sha256=y-TyHADOpdCrIQ7zfnVD6OOxjo28lnBhPJeBtjlPih4,407
@@ -3541,7 +3541,7 @@ wagtail/snippets/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
3541
3541
  wagtail/snippets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3542
3542
  wagtail/snippets/tests/test_locking.py,sha256=QdaRVuX47tCbwoA62KYNJm9qxH33ekKs-nai5UeYDp4,25370
3543
3543
  wagtail/snippets/tests/test_management.py,sha256=GQw8HCZSJWny8giAUua_5-RstN7U_QGcsOkVuG72YHM,894
3544
- wagtail/snippets/tests/test_preview.py,sha256=dv8aUOaUSEvLDrvUEr-f5axQBSnrhwW2uhR8KEHnt7U,28031
3544
+ wagtail/snippets/tests/test_preview.py,sha256=2dlYUfEhtLAfXt5oUuJO3QU2PtJwUnE8Wca57Iy_fT4,30209
3545
3545
  wagtail/snippets/tests/test_snippets.py,sha256=5gLoWnoInYMEbEtdxXzURLnMdnkx0vFtAWPOIouNrCI,235641
3546
3546
  wagtail/snippets/tests/test_usage.py,sha256=3Re4NCdt0M4WfzvUruJmpYEV0FsZ7lWkyAw7ZLyc6Lw,8642
3547
3547
  wagtail/snippets/tests/test_viewset.py,sha256=3bEF13xPsUO7eVldchBYs-MJpNj8WCkRvRgH4dDt2UY,66196
@@ -3661,8 +3661,8 @@ wagtail/test/testapp/forms.py,sha256=jDu_6eF5DzRF3ww-9hGLKCyE90InGLQoiwkTjPQX5qo
3661
3661
  wagtail/test/testapp/media_forms.py,sha256=TVphjCtSfK90cl6p8lfz7hb5fUzAFmBb4KW0u3pOFa4,798
3662
3662
  wagtail/test/testapp/models.py,sha256=CySwTJomn9HTaDKmpTZyIW1niA2Ici2x59l5ik8u2PY,73259
3663
3663
  wagtail/test/testapp/rich_text.py,sha256=3KZmR9QVZJbyOZwv4sODlitY4CzEYdFh-6OACLo4dwU,1033
3664
- wagtail/test/testapp/urls.py,sha256=SCtohMFo-EFGBc6KcUGCkbGRgEI6ufVdoGWGRgS6llE,716
3665
- wagtail/test/testapp/views.py,sha256=0VarCMkOS2YCF50sZ88drwDIZlCjiwizBu3B-KsDAEs,10055
3664
+ wagtail/test/testapp/urls.py,sha256=5md_TvVXc9RXjyL9FpBp1VoTqwqqueJPmdxMzKCQKLo,805
3665
+ wagtail/test/testapp/views.py,sha256=XYdiUw8Gq-4ygCRa97syTN7uNM_dHkMUqkVTL8xTIes,10340
3666
3666
  wagtail/test/testapp/wagtail_hooks.py,sha256=uHPLe83QaIIFYa09Jt-tCDo08UP6PtVfBlM-UM7ZiKg,13181
3667
3667
  wagtail/test/testapp/fixtures/test.json,sha256=jOmw2-IcVIyNniwJQ2EWh61Lsz7Y6ulCyx7iVJO9pPY,23547
3668
3668
  wagtail/test/testapp/fixtures/test_empty.json,sha256=4t6c6tfYLPQL55Q9lrsNsnmVaeO3paSKpoLq0Tm6YTs,1116
@@ -4033,9 +4033,9 @@ wagtail/utils/timestamps.py,sha256=wqaIvdtZLUENAYiCP9jN8QPPeud305BlPNJiyTNvxkM,1
4033
4033
  wagtail/utils/urlpatterns.py,sha256=RDhVScxdm-RV4HSMjWElyrbEoTPsXu841_SKMgoFKtY,629
4034
4034
  wagtail/utils/utils.py,sha256=nQhfy-fOiZfUFr67kTX4nF_2VVH7_MDtjTDOzZdpPTE,1407
4035
4035
  wagtail/utils/version.py,sha256=jYCDKIGJD3bZHTpgXMXu14oSBArQnf2WVU979D8V4b0,1552
4036
- wagtail-7.0.2.dist-info/licenses/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4037
- wagtail-7.0.2.dist-info/METADATA,sha256=wpvP7V8arsjMlhTlTRNA7iZUjgV10AZ_As3X9DhsWU8,12600
4038
- wagtail-7.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4039
- wagtail-7.0.2.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4040
- wagtail-7.0.2.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4041
- wagtail-7.0.2.dist-info/RECORD,,
4036
+ wagtail-7.0.4.dist-info/licenses/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4037
+ wagtail-7.0.4.dist-info/METADATA,sha256=F5MVyoQRKCkfPBJ2UpHYmB2-B837gl8r49OceW3fQRk,12600
4038
+ wagtail-7.0.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
4039
+ wagtail-7.0.4.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4040
+ wagtail-7.0.4.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4041
+ wagtail-7.0.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5