wagtail 6.2.2__py3-none-any.whl → 6.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.
@@ -1,7 +1,9 @@
1
1
  from datetime import timedelta
2
+ from io import StringIO
2
3
 
3
4
  from django.conf import settings
4
5
  from django.contrib.auth.models import Group, Permission
6
+ from django.core.management import call_command
5
7
  from django.test import TestCase
6
8
  from django.urls import reverse
7
9
  from django.utils import timezone
@@ -305,6 +307,26 @@ class TestAuditLogAdmin(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
305
307
  response = self.client.get(reverse("wagtailadmin_reports:site_history"))
306
308
  self.assertContains(response, expected_deleted_string)
307
309
 
310
+ def test_page_history_after_revision_purge(self):
311
+ self._update_page(self.hello_page)
312
+ call_command("purge_revisions", days=0, stdout=StringIO())
313
+
314
+ history_url = reverse(
315
+ "wagtailadmin_pages:history", kwargs={"page_id": self.hello_page.id}
316
+ )
317
+
318
+ self.login(user=self.editor)
319
+
320
+ response = self.client.get(history_url)
321
+ self.assertEqual(response.status_code, 200)
322
+
323
+ self.assertContains(response, "Created", 1)
324
+ self.assertContains(response, "Draft saved", 2)
325
+ self.assertContains(response, "Locked", 1)
326
+ self.assertContains(response, "Unlocked", 1)
327
+ self.assertContains(response, "Page scheduled for publishing", 1)
328
+ self.assertContains(response, "Published", 1)
329
+
308
330
  def test_edit_form_has_history_link(self):
309
331
  self.hello_page.save_revision()
310
332
  self.login(user=self.editor)
@@ -162,6 +162,33 @@ class TestWorkflowsIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase)
162
162
  self.assertNotContains(response, "There are no enabled workflows.")
163
163
  self.assertContains(response, "test_workflow")
164
164
 
165
+ def test_multiple_snippets_assigned_to_workflow(self):
166
+ Workflow.objects.create(name="Nocontenttypes")
167
+ multi_ct_workflow = Workflow.objects.create(name="Multicontenttypes")
168
+ for model in [FullFeaturedSnippet, ModeratedModel]:
169
+ WorkflowContentType.objects.create(
170
+ workflow=multi_ct_workflow,
171
+ content_type=ContentType.objects.get_for_model(model),
172
+ )
173
+
174
+ response = self.get()
175
+ self.assertEqual(response.status_code, 200)
176
+ soup = self.get_soup(response.content)
177
+ cells = [
178
+ text
179
+ for td in soup.select("td")
180
+ if (text := td.get_text(separator=" | ", strip=True))
181
+ ]
182
+ self.assertEqual(
183
+ cells,
184
+ [
185
+ "Multicontenttypes",
186
+ "0 pages | 2 snippet types",
187
+ "Nocontenttypes",
188
+ "0 pages | 0 snippet types",
189
+ ],
190
+ )
191
+
165
192
  def test_num_queries(self):
166
193
  self.create_workflows()
167
194
  self.get()
@@ -165,6 +165,7 @@ class ActionColumn(Column):
165
165
 
166
166
  if (
167
167
  (url_name := self.url_names.get("revisions_unschedule"))
168
+ and instance.revision
168
169
  and instance.revision.approved_go_live_at
169
170
  and self.user_can_unschedule
170
171
  ):
@@ -4,7 +4,7 @@ from django.contrib.contenttypes.models import ContentType
4
4
  from django.core.exceptions import PermissionDenied
5
5
  from django.core.paginator import Paginator
6
6
  from django.db import transaction
7
- from django.db.models import Count, OuterRef, Prefetch
7
+ from django.db.models import Count, Prefetch
8
8
  from django.db.models.functions import Lower
9
9
  from django.http import Http404, HttpResponseBadRequest
10
10
  from django.shortcuts import get_object_or_404, redirect, render
@@ -37,7 +37,6 @@ from wagtail.models import (
37
37
  Task,
38
38
  TaskState,
39
39
  Workflow,
40
- WorkflowContentType,
41
40
  WorkflowState,
42
41
  WorkflowTask,
43
42
  )
@@ -146,10 +145,7 @@ class Index(IndexView):
146
145
 
147
146
  def get_base_queryset(self):
148
147
  queryset = super().get_base_queryset()
149
- content_types = WorkflowContentType.objects.filter(
150
- workflow=OuterRef("pk")
151
- ).values_list("pk", flat=True)
152
- queryset = queryset.annotate(content_types=Count(content_types))
148
+ queryset = queryset.annotate(content_types=Count("workflow_content_types"))
153
149
  return queryset.prefetch_related(
154
150
  "workflow_pages",
155
151
  "workflow_pages__page",
@@ -426,6 +426,7 @@ class ListBlock(Block):
426
426
  child_block = kwargs.get("child_block")
427
427
  if isinstance(child_block, Block):
428
428
  block_id = lookup.add_block(child_block)
429
+ kwargs = kwargs.copy() # avoid mutating the original kwargs stored in self._constructor_args
429
430
  kwargs["child_block"] = block_id
430
431
 
431
432
  return path, args, kwargs
@@ -603,11 +603,13 @@ class TestFormPageWithCustomFormBuilder(WagtailTestUtils, TestCase):
603
603
  html=True,
604
604
  )
605
605
  # check ip address field has rendered
606
- self.assertContains(
607
- response,
608
- '<input type="text" name="device_ip_address" required id="id_device_ip_address" />',
609
- html=True,
610
- )
606
+ # (not comparing HTML directly because https://docs.djangoproject.com/en/5.1/releases/5.1.5/
607
+ # added a maxlength attribute)
608
+ soup = self.get_soup(response.content)
609
+ input = soup.find("input", {"name": "device_ip_address"})
610
+ self.assertEqual(input["type"], "text")
611
+ self.assertEqual(input["required"], "")
612
+ self.assertEqual(input["id"], "id_device_ip_address")
611
613
 
612
614
  def test_post_invalid_form(self):
613
615
  response = self.client.post(
File without changes
@@ -949,6 +949,54 @@ class TestDeconstructStreamFieldWithLookup(TestCase):
949
949
  },
950
950
  )
951
951
 
952
+ def test_deconstruct_with_listblock_with_child_block_kwarg_idempotence(self):
953
+ # See https://github.com/wagtail/wagtail/issues/13137. When a ListBlock is defined with
954
+ # a child_block keyword argument, its deconstruct_with_lookup method inserts that child
955
+ # block into the lookup to obtain an ID, and returns that ID as the child_block kwarg
956
+ # in its result. However, an implementation bug meant that this was mutating the kwargs
957
+ # dict stored in the block's _constructor_args attribute. As a result, subsequent calls
958
+ # to deconstruct_with_lookup (which happen routinely during makemigrations) would
959
+ # encounter the ID in child_block, leave it alone (because it isn't a block object as
960
+ # expected), and return that ID in the result without adding it to the lookup, messing
961
+ # up the ID sequence in the process.
962
+ field = StreamField(
963
+ [
964
+ ("heading", blocks.CharBlock(required=True)),
965
+ (
966
+ "bullets",
967
+ blocks.ListBlock(child_block=blocks.CharBlock(required=False)),
968
+ ),
969
+ ],
970
+ blank=True,
971
+ )
972
+ field.set_attributes_from_name("body")
973
+
974
+ expected_args = [
975
+ [
976
+ ("heading", 0),
977
+ ("bullets", 2),
978
+ ]
979
+ ]
980
+ expected_kwargs = {
981
+ "blank": True,
982
+ "block_lookup": {
983
+ 0: ("wagtail.blocks.CharBlock", (), {"required": True}),
984
+ 1: ("wagtail.blocks.CharBlock", (), {"required": False}),
985
+ 2: ("wagtail.blocks.ListBlock", (), {"child_block": 1}),
986
+ },
987
+ }
988
+ name, path, args, kwargs = field.deconstruct()
989
+ self.assertEqual(name, "body")
990
+ self.assertEqual(path, "wagtail.fields.StreamField")
991
+ self.assertEqual(kwargs, expected_kwargs)
992
+ self.assertEqual(args, expected_args)
993
+
994
+ name, path, args, kwargs = field.deconstruct()
995
+ self.assertEqual(name, "body")
996
+ self.assertEqual(path, "wagtail.fields.StreamField")
997
+ self.assertEqual(kwargs, expected_kwargs)
998
+ self.assertEqual(args, expected_args)
999
+
952
1000
  def test_deconstruct_with_listblock_subclass(self):
953
1001
  # See https://github.com/wagtail/wagtail/issues/12164 - unlike StructBlock and StreamBlock,
954
1002
  # ListBlock's deconstruct method doesn't reduce subclasses to the base ListBlock class.
@@ -0,0 +1,89 @@
1
+ Metadata-Version: 2.4
2
+ Name: wagtail
3
+ Version: 6.2.4
4
+ Summary: A Django content management system.
5
+ Home-page: https://wagtail.org/
6
+ Author: Wagtail core team + contributors
7
+ Author-email: hello@wagtail.org
8
+ License: BSD
9
+ Project-URL: Changelog, https://github.com/wagtail/wagtail/blob/main/CHANGELOG.txt
10
+ Project-URL: Documentation, https://docs.wagtail.org
11
+ Project-URL: Source, https://github.com/wagtail/wagtail
12
+ Project-URL: Tracker, https://github.com/wagtail/wagtail/issues
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: BSD License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.8
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Framework :: Django
26
+ Classifier: Framework :: Django :: 4.2
27
+ Classifier: Framework :: Django :: 5.0
28
+ Classifier: Framework :: Wagtail
29
+ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
30
+ Requires-Python: >=3.8
31
+ License-File: LICENSE
32
+ Requires-Dist: Django<5.2,>=4.2
33
+ Requires-Dist: django-modelcluster<7.0,>=6.2.1
34
+ Requires-Dist: django-permissionedforms<1.0,>=0.1
35
+ Requires-Dist: django-taggit<5.1,>=5.0
36
+ Requires-Dist: django-treebeard<5.0,>=4.5.1
37
+ Requires-Dist: djangorestframework<4.0,>=3.15.1
38
+ Requires-Dist: django-filter<25,>=23.3
39
+ Requires-Dist: draftjs_exporter<6.0,>=2.1.5
40
+ Requires-Dist: Pillow<11.0.0,>=9.1.0
41
+ Requires-Dist: beautifulsoup4<4.13,>=4.8
42
+ Requires-Dist: Willow[heif]<2,>=1.8.0
43
+ Requires-Dist: requests<3.0,>=2.11.1
44
+ Requires-Dist: l18n>=2018.5
45
+ Requires-Dist: openpyxl<4.0,>=3.0.10
46
+ Requires-Dist: anyascii>=0.1.5
47
+ Requires-Dist: telepath<1,>=0.3.1
48
+ Requires-Dist: laces<0.2,>=0.1
49
+ Provides-Extra: testing
50
+ Requires-Dist: python-dateutil>=2.7; extra == "testing"
51
+ Requires-Dist: pytz>=2014.7; extra == "testing"
52
+ Requires-Dist: Jinja2<3.2,>=3.0; extra == "testing"
53
+ Requires-Dist: boto3<2,>=1.28; extra == "testing"
54
+ Requires-Dist: freezegun>=0.3.8; extra == "testing"
55
+ Requires-Dist: azure-mgmt-cdn<13.0,>=12.0; extra == "testing"
56
+ Requires-Dist: azure-mgmt-frontdoor<1.1,>=1.0; extra == "testing"
57
+ Requires-Dist: django-pattern-library>=0.7; extra == "testing"
58
+ Requires-Dist: coverage>=3.7.0; extra == "testing"
59
+ Requires-Dist: doc8==0.8.1; extra == "testing"
60
+ Requires-Dist: ruff==0.1.5; extra == "testing"
61
+ Requires-Dist: semgrep==1.40.0; extra == "testing"
62
+ Requires-Dist: curlylint==0.13.1; extra == "testing"
63
+ Requires-Dist: djhtml==3.0.6; extra == "testing"
64
+ Requires-Dist: polib<2.0,>=1.1; extra == "testing"
65
+ Requires-Dist: factory-boy>=3.2; extra == "testing"
66
+ Requires-Dist: tblib<3.0,>=2.0; extra == "testing"
67
+ Provides-Extra: docs
68
+ Requires-Dist: pyenchant<4,>=3.1.1; extra == "docs"
69
+ Requires-Dist: sphinxcontrib-spelling<8,>=7; extra == "docs"
70
+ Requires-Dist: Sphinx>=7.0; extra == "docs"
71
+ Requires-Dist: sphinx-autobuild>=0.6.0; extra == "docs"
72
+ Requires-Dist: sphinx-wagtail-theme==6.4.0; extra == "docs"
73
+ Requires-Dist: myst_parser==2.0.0; extra == "docs"
74
+ Dynamic: author
75
+ Dynamic: author-email
76
+ Dynamic: classifier
77
+ Dynamic: description
78
+ Dynamic: home-page
79
+ Dynamic: license
80
+ Dynamic: license-file
81
+ Dynamic: project-url
82
+ Dynamic: provides-extra
83
+ Dynamic: requires-dist
84
+ Dynamic: requires-python
85
+ Dynamic: summary
86
+
87
+ Wagtail is an open source content management system built on Django, with a strong community and commercial support. It’s focused on user experience, and offers precise control for designers and developers.
88
+
89
+ For more details, see https://wagtail.org, https://docs.wagtail.org and https://github.com/wagtail/wagtail/.
@@ -1,4 +1,4 @@
1
- wagtail/__init__.py,sha256=z-jsHz9YF_wR8x_ZrnFd4vnfNVAg1feqkzbq28FLUow,724
1
+ wagtail/__init__.py,sha256=1FVrmZ8PQMq8jmzfxunZ2TWroxeJda9fnlIg088HCAI,724
2
2
  wagtail/apps.py,sha256=38kXTdHoQzFnpUqDNxFpsqn2dut4V0u9rLOkhqCoYkc,713
3
3
  wagtail/compat.py,sha256=L41FhlX4xy5KgTdJ63smtM78mtKf1mxkPeOs8kyOwS0,538
4
4
  wagtail/coreutils.py,sha256=HIE2FCgFgi9IfVIs85E8onbQIJFAij92XNdNFNUCb70,20655
@@ -388,7 +388,7 @@ wagtail/admin/static/wagtailadmin/js/comments.js,sha256=nwfjUdZ-klg_lLpnnw6Ui7bY
388
388
  wagtail/admin/static/wagtailadmin/js/core.js,sha256=l1gVCKhhFWMVVvwDfE5aqiqkSN275rCpYIVzNedSV64,99221
389
389
  wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt,sha256=dTzaqHjW_XEepDXUcpWz5hu9q-A1Lxr6tE4l4xE3lhY,125
390
390
  wagtail/admin/static/wagtailadmin/js/date-time-chooser.js,sha256=3hETl9qsULtkBwcnuZRFLahg4YggsY0xUeDD6SZUEYw,3376
391
- wagtail/admin/static/wagtailadmin/js/draftail.js,sha256=F5FSW9rcI_bbLYvLUo_wVdYq3nVCVz6u5gvncjzpUmY,293906
391
+ wagtail/admin/static/wagtailadmin/js/draftail.js,sha256=bA1n48GDvpTHvJxsTQQJjXdEuazbiC-bmmzXggRn0nk,293931
392
392
  wagtail/admin/static/wagtailadmin/js/draftail.js.LICENSE.txt,sha256=97l5UAKNdHRm-wg_QYro4Ch4ElJtzAVshVlxSIbL9z8,255
393
393
  wagtail/admin/static/wagtailadmin/js/expanding-formset.js,sha256=vDyyVEGdfsnBlEDHAeOokwDZMHTCWkcyjvoD2G1NgKQ,1594
394
394
  wagtail/admin/static/wagtailadmin/js/filtered-select.js,sha256=LXL9VQc8RQmpz1jy1Rx5HidtmoPWu-YZR63CvYdPf0I,2197
@@ -854,7 +854,7 @@ wagtail/admin/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
854
854
  wagtail/admin/tests/benches.py,sha256=7zdQSI4Ns0IV2u3WGQTsz25MmMHoT4HEpfii1n4XtQ8,3023
855
855
  wagtail/admin/tests/test_account_management.py,sha256=UAvHfLbNB3BMj2DEOKNM8uuxKm8JkkNawNS9ar73fso,38025
856
856
  wagtail/admin/tests/test_admin_search.py,sha256=tZv6zyCEr6xaiUeCx1N1CFKFfXfnObAEqKRtUjd25Q0,7359
857
- wagtail/admin/tests/test_audit_log.py,sha256=Hx9prQt1FRd34YFQ1caGUigYtDMmBLEdVP847RBjbGM,18301
857
+ wagtail/admin/tests/test_audit_log.py,sha256=puQf3hDLwojFbUf1eRdQ-JI2FkHLR9YD99-SjONTu0s,19141
858
858
  wagtail/admin/tests/test_buttons_hooks.py,sha256=VYFuYBa1BiffKmeMGaicvyBsqUyWuIINC-ZGnz9WRF0,20502
859
859
  wagtail/admin/tests/test_checks.py,sha256=SrywlN77bD_ot6WWO6Ng3YdXuFg-FK7YyBcaeNH9Z6w,4546
860
860
  wagtail/admin/tests/test_collections_views.py,sha256=x6Y6GCsi8sIFCN9MZmJxnsjlKf8wa4rWNVjDWkm_IfU,31701
@@ -887,7 +887,7 @@ wagtail/admin/tests/test_views.py,sha256=eYpa4IC1ipWcl8f3LXEBlp8sJrbvg80pQT12tg6
887
887
  wagtail/admin/tests/test_views_generic.py,sha256=HrCYFQlj__hOuNcFNG4GAjzQzUzOsFtPqVO0MbP9_wA,2931
888
888
  wagtail/admin/tests/test_whats_new.py,sha256=Vptrf94ilJephOP3O7s1FKLtjNxFLCne6Bi4c_VlJzw,5570
889
889
  wagtail/admin/tests/test_widgets.py,sha256=3NIcu5Ktx6i5kAn8kSdW3HBg-SSVi8BspR-THj8aQ0Y,24656
890
- wagtail/admin/tests/test_workflows.py,sha256=b2SF2oQV1-eYr2J0GXEowhUjBd5v_wKN3wnpnVKZbXE,177103
890
+ wagtail/admin/tests/test_workflows.py,sha256=XaBR7iaNzz6eAUeLTRc8kr73OOjBXC53QrxjIKnvt0k,178059
891
891
  wagtail/admin/tests/tests.py,sha256=GoPO8R3hdX1DpHIugy_8fvL0sGSybesVEAL_BRoyvLE,21278
892
892
  wagtail/admin/tests/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
893
893
  wagtail/admin/tests/api/test_documents.py,sha256=2dfjTi6Bj3otRQ-ok9f3rwl-HpSmprfcmhWyYPDnXcs,5051
@@ -955,7 +955,7 @@ wagtail/admin/views/home.py,sha256=u88JvZdh_fjMqvM2l2PKx8HhcURZemOEBhuzr5MKwTQ,1
955
955
  wagtail/admin/views/mixins.py,sha256=SaIe2YwuRFK7segVdIRaughf3_xsAgV5zAV2HTiTRhA,12975
956
956
  wagtail/admin/views/page_privacy.py,sha256=CBDaf8ElLesuco9Z3WLqdscPtoDRiGmxLPPWmWjHT7Q,3472
957
957
  wagtail/admin/views/tags.py,sha256=ZxV-Nzme28b8WaKTk96SFiFOKd_qS2SiQOoaOFUJwjE,812
958
- wagtail/admin/views/workflows.py,sha256=c63MZnFgc--j0Ijbh7MvSdFCPjsNfWtaBSqt6nWhJmc,34948
958
+ wagtail/admin/views/workflows.py,sha256=EQIz1UR8QRniKr6X2iQ7LttPZ34i4Y5myfJ47FcconY,34789
959
959
  wagtail/admin/views/bulk_action/__init__.py,sha256=vvb1oKmExfxl6cd6g7YaCO4LSwxWNoRFdkqgemDBNeI,106
960
960
  wagtail/admin/views/bulk_action/base_bulk_action.py,sha256=UuidpHVm3uQTI6zRYxwSgxZNkAVP_XCWhkCEMW0Wu1s,5201
961
961
  wagtail/admin/views/bulk_action/dispatcher.py,sha256=fqhOJ3tyRwIDP474vewlsAq1FgP48AgKOvdiySxDlto,504
@@ -963,7 +963,7 @@ wagtail/admin/views/bulk_action/registry.py,sha256=e9-rN9TdHUmRwDfTeauvPUjE6p3ip
963
963
  wagtail/admin/views/generic/__init__.py,sha256=XSpUylwSEv32pR3pVZmF6lo6KGBqthS6b3y5neXvsW4,730
964
964
  wagtail/admin/views/generic/base.py,sha256=c9kgi1JdtUUEyRBqYulJRsiD3SFC0zPDZwCCFRRaP7I,17737
965
965
  wagtail/admin/views/generic/chooser.py,sha256=pjOYGcYBHc1ZkZJ4LWcHkoGNQ7U7GdKBsJZ0vyOO4kc,18061
966
- wagtail/admin/views/generic/history.py,sha256=YgY6zgT_v3PK9gOZInZQEQd75hyiKJhhJ4iuErE-rTQ,17651
966
+ wagtail/admin/views/generic/history.py,sha256=XGbu1HbAj3N-NYEeC90_O7sWilaqRqz2d-6G3LgXeCk,17685
967
967
  wagtail/admin/views/generic/lock.py,sha256=dvZ613n3itNAhO3zdQzGRewm2kH-dyemx-LSuUC2AHM,1435
968
968
  wagtail/admin/views/generic/mixins.py,sha256=FqHQOqwPPqQxGRqJEZx7hW2cIuUvZRrpFfuJrLTfWDE,29915
969
969
  wagtail/admin/views/generic/models.py,sha256=ugKntUQWiifWqMGW9YNimpFfxUT0o988LIosY8M0Tuk,51058
@@ -1042,7 +1042,7 @@ wagtail/blocks/__init__.py,sha256=VjRA2jnSMItNEqkMGtYQxFHzoefy8QbqTysjlFHnxpU,31
1042
1042
  wagtail/blocks/base.py,sha256=H-dI5oEXN2paPEhW8gf45n42IdWF62vnw0ZUDELvdtw,27979
1043
1043
  wagtail/blocks/definition_lookup.py,sha256=JkSwFcqEkavq-M6kWNfeDZtvIXnQJ58QT2FeaKrFPEA,3274
1044
1044
  wagtail/blocks/field_block.py,sha256=6idDhjIO2yRE1uhbO0dxUzzJUhruYJ-2KNg8xCrplY4,32055
1045
- wagtail/blocks/list_block.py,sha256=TJgxmUvTnQrnwk-celA2T5zGSa-NedVvr7WzGsweDRo,18289
1045
+ wagtail/blocks/list_block.py,sha256=_3qNE0L7UMAmwMYCZ5CKasf574tKO7eDUth8HInmo88,18403
1046
1046
  wagtail/blocks/static_block.py,sha256=JPU591ytmoU71uBpRPLZjwvc1boQOEgI193wKrUcqBw,1680
1047
1047
  wagtail/blocks/stream_block.py,sha256=gL18S1svXTdeoO8esQos7WF-L0Ps8px405BgpsZcack,32291
1048
1048
  wagtail/blocks/struct_block.py,sha256=u-etS4B5ONd6_gYbL-F8XX3l_RY3zPMMsrxSTLXMOIs,15988
@@ -1191,7 +1191,7 @@ wagtail/contrib/forms/templates/wagtailforms/submissions_index.html,sha256=Ai7nx
1191
1191
  wagtail/contrib/forms/templates/wagtailforms/panels/form_responses_panel.html,sha256=iqKD050fLAHG2CZe-cK6ZsSlsHNirABtGtkfGvisc_4,331
1192
1192
  wagtail/contrib/forms/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1193
1193
  wagtail/contrib/forms/tests/test_forms.py,sha256=7tRUwJA2j9xzr28NpRC9hDYeOEfR1VTmBCPlny7UPVw,13634
1194
- wagtail/contrib/forms/tests/test_models.py,sha256=OLm-1iNymROzG8QeYCzHSqCrhVBqBZIVgml5HaaZ2II,32235
1194
+ wagtail/contrib/forms/tests/test_models.py,sha256=lcifi_nJHHD9toYVtIY3P-zh-rdCTsLQTgxvAyFKbMM,32465
1195
1195
  wagtail/contrib/forms/tests/test_views.py,sha256=6kXEJwzsS5iSTIpt5DDexpyxVpRgz4zUC60qEbACu-8,72856
1196
1196
  wagtail/contrib/forms/tests/utils.py,sha256=OESefxdqGRgL1lDItVPSFNw_FJNB4X0PvozdvAhrpkc,6043
1197
1197
  wagtail/contrib/frontend_cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -3795,7 +3795,7 @@ wagtail/tests/test_revision_model.py,sha256=7gJXG1ItbHRkg93DpjtY6L8x3ahJIh0eQvlO
3795
3795
  wagtail/tests/test_rich_text.py,sha256=bBTdI__z5QSq-Z3dPvGLUyHaodmi6mKMBl65dSrsJQw,17795
3796
3796
  wagtail/tests/test_signals.py,sha256=C0yTBwjFRptrcDJDnGpmVwBRWjJHvZ4M6EJ3qkyfkfw,5371
3797
3797
  wagtail/tests/test_sites.py,sha256=syJCEPMHdKXfbxc_Vb7CH9ymuPVZiWDAae4JmJPmPx0,8488
3798
- wagtail/tests/test_streamfield.py,sha256=GnaB-OHIPVzayozZFswHCmh9jLpn_bgBxJF0Nts04Zc,38167
3798
+ wagtail/tests/test_streamfield.py,sha256=t3QOM3ATXCmva1mDSkRljbbrpWY9oUfkzShqT10xNNM,40367
3799
3799
  wagtail/tests/test_telepath.py,sha256=muiOryoRmkISEHVu9GPSrKJEVB_EvpOufhvuJF-HrTk,10374
3800
3800
  wagtail/tests/test_tests.py,sha256=Y801jv650IAENPg-1pGTiicrHc9uHijg-Ga2DIDh0yM,17074
3801
3801
  wagtail/tests/test_translatablemixin.py,sha256=bCHX65L-3SMtgXU7XEdG0NYV4G5-V93TzzHX24ubcl8,10283
@@ -4009,9 +4009,9 @@ wagtail/utils/urlpatterns.py,sha256=RDhVScxdm-RV4HSMjWElyrbEoTPsXu841_SKMgoFKtY,
4009
4009
  wagtail/utils/utils.py,sha256=nQhfy-fOiZfUFr67kTX4nF_2VVH7_MDtjTDOzZdpPTE,1407
4010
4010
  wagtail/utils/version.py,sha256=jYCDKIGJD3bZHTpgXMXu14oSBArQnf2WVU979D8V4b0,1552
4011
4011
  wagtail/utils/widgets.py,sha256=ibAvxHCjNw06bMlTD7wvrwmGEMNS3NzrnSKREGfPF44,1775
4012
- wagtail-6.2.2.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4013
- wagtail-6.2.2.dist-info/METADATA,sha256=rxTJqLOnZ1WkAQT_XmD5z2xIu2Hvuk-B6FCQM3uc4V4,3758
4014
- wagtail-6.2.2.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4015
- wagtail-6.2.2.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4016
- wagtail-6.2.2.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4017
- wagtail-6.2.2.dist-info/RECORD,,
4012
+ wagtail-6.2.4.dist-info/licenses/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4013
+ wagtail-6.2.4.dist-info/METADATA,sha256=1DXd698lRX4mLOOEok9UC0MQgzlttJ5YnXBPXFz3QB8,3798
4014
+ wagtail-6.2.4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
4015
+ wagtail-6.2.4.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4016
+ wagtail-6.2.4.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4017
+ wagtail-6.2.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,78 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: wagtail
3
- Version: 6.2.2
4
- Summary: A Django content management system.
5
- Home-page: https://wagtail.org/
6
- Author: Wagtail core team + contributors
7
- Author-email: hello@wagtail.org
8
- License: BSD
9
- Project-URL: Changelog, https://github.com/wagtail/wagtail/blob/main/CHANGELOG.txt
10
- Project-URL: Documentation, https://docs.wagtail.org
11
- Project-URL: Source, https://github.com/wagtail/wagtail
12
- Project-URL: Tracker, https://github.com/wagtail/wagtail/issues
13
- Classifier: Development Status :: 5 - Production/Stable
14
- Classifier: Environment :: Web Environment
15
- Classifier: Intended Audience :: Developers
16
- Classifier: License :: OSI Approved :: BSD License
17
- Classifier: Operating System :: OS Independent
18
- Classifier: Programming Language :: Python
19
- Classifier: Programming Language :: Python :: 3
20
- Classifier: Programming Language :: Python :: 3.8
21
- Classifier: Programming Language :: Python :: 3.9
22
- Classifier: Programming Language :: Python :: 3.10
23
- Classifier: Programming Language :: Python :: 3.11
24
- Classifier: Programming Language :: Python :: 3.12
25
- Classifier: Framework :: Django
26
- Classifier: Framework :: Django :: 4.2
27
- Classifier: Framework :: Django :: 5.0
28
- Classifier: Framework :: Wagtail
29
- Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
30
- Requires-Python: >=3.8
31
- License-File: LICENSE
32
- Requires-Dist: Django (<6.0,>=4.2)
33
- Requires-Dist: django-modelcluster (<7.0,>=6.2.1)
34
- Requires-Dist: django-permissionedforms (<1.0,>=0.1)
35
- Requires-Dist: django-taggit (<5.1,>=5.0)
36
- Requires-Dist: django-treebeard (<5.0,>=4.5.1)
37
- Requires-Dist: djangorestframework (<4.0,>=3.15.1)
38
- Requires-Dist: django-filter (<25,>=23.3)
39
- Requires-Dist: draftjs-exporter (<6.0,>=2.1.5)
40
- Requires-Dist: Pillow (<11.0.0,>=9.1.0)
41
- Requires-Dist: beautifulsoup4 (<4.13,>=4.8)
42
- Requires-Dist: Willow[heif] (<2,>=1.8.0)
43
- Requires-Dist: requests (<3.0,>=2.11.1)
44
- Requires-Dist: l18n (>=2018.5)
45
- Requires-Dist: openpyxl (<4.0,>=3.0.10)
46
- Requires-Dist: anyascii (>=0.1.5)
47
- Requires-Dist: telepath (<1,>=0.3.1)
48
- Requires-Dist: laces (<0.2,>=0.1)
49
- Provides-Extra: docs
50
- Requires-Dist: pyenchant (<4,>=3.1.1) ; extra == 'docs'
51
- Requires-Dist: sphinxcontrib-spelling (<8,>=7) ; extra == 'docs'
52
- Requires-Dist: Sphinx (>=7.0) ; extra == 'docs'
53
- Requires-Dist: sphinx-autobuild (>=0.6.0) ; extra == 'docs'
54
- Requires-Dist: sphinx-wagtail-theme (==6.3.0) ; extra == 'docs'
55
- Requires-Dist: myst-parser (==2.0.0) ; extra == 'docs'
56
- Requires-Dist: sphinx-copybutton (<1.0,>=0.5) ; extra == 'docs'
57
- Provides-Extra: testing
58
- Requires-Dist: python-dateutil (>=2.7) ; extra == 'testing'
59
- Requires-Dist: pytz (>=2014.7) ; extra == 'testing'
60
- Requires-Dist: Jinja2 (<3.2,>=3.0) ; extra == 'testing'
61
- Requires-Dist: boto3 (<2,>=1.28) ; extra == 'testing'
62
- Requires-Dist: freezegun (>=0.3.8) ; extra == 'testing'
63
- Requires-Dist: azure-mgmt-cdn (<13.0,>=12.0) ; extra == 'testing'
64
- Requires-Dist: azure-mgmt-frontdoor (<1.1,>=1.0) ; extra == 'testing'
65
- Requires-Dist: django-pattern-library (>=0.7) ; extra == 'testing'
66
- Requires-Dist: coverage (>=3.7.0) ; extra == 'testing'
67
- Requires-Dist: doc8 (==0.8.1) ; extra == 'testing'
68
- Requires-Dist: ruff (==0.1.5) ; extra == 'testing'
69
- Requires-Dist: semgrep (==1.40.0) ; extra == 'testing'
70
- Requires-Dist: curlylint (==0.13.1) ; extra == 'testing'
71
- Requires-Dist: djhtml (==3.0.6) ; extra == 'testing'
72
- Requires-Dist: polib (<2.0,>=1.1) ; extra == 'testing'
73
- Requires-Dist: factory-boy (>=3.2) ; extra == 'testing'
74
- Requires-Dist: tblib (<3.0,>=2.0) ; extra == 'testing'
75
-
76
- Wagtail is an open source content management system built on Django, with a strong community and commercial support. It’s focused on user experience, and offers precise control for designers and developers.
77
-
78
- For more details, see https://wagtail.org, https://docs.wagtail.org and https://github.com/wagtail/wagtail/.