wagtail 6.2.3__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.
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 = (6, 2, 3, "final", 1)
9
+ VERSION = (6, 2, 4, "final", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
@@ -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=nF1GK52NX4PquGTT1TBwc2MBR3D6zQpWjJVXx5TZzUI,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
@@ -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.3.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4013
- wagtail-6.2.3.dist-info/METADATA,sha256=oR_DNSZgg38xmVK-4rh6DOtUt-FylIUSWKjwDNSM48g,3694
4014
- wagtail-6.2.3.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4015
- wagtail-6.2.3.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4016
- wagtail-6.2.3.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4017
- wagtail-6.2.3.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,77 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: wagtail
3
- Version: 6.2.3
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.4.0) ; extra == 'docs'
55
- Requires-Dist: myst-parser (==2.0.0) ; extra == 'docs'
56
- Provides-Extra: testing
57
- Requires-Dist: python-dateutil (>=2.7) ; extra == 'testing'
58
- Requires-Dist: pytz (>=2014.7) ; extra == 'testing'
59
- Requires-Dist: Jinja2 (<3.2,>=3.0) ; extra == 'testing'
60
- Requires-Dist: boto3 (<2,>=1.28) ; extra == 'testing'
61
- Requires-Dist: freezegun (>=0.3.8) ; extra == 'testing'
62
- Requires-Dist: azure-mgmt-cdn (<13.0,>=12.0) ; extra == 'testing'
63
- Requires-Dist: azure-mgmt-frontdoor (<1.1,>=1.0) ; extra == 'testing'
64
- Requires-Dist: django-pattern-library (>=0.7) ; extra == 'testing'
65
- Requires-Dist: coverage (>=3.7.0) ; extra == 'testing'
66
- Requires-Dist: doc8 (==0.8.1) ; extra == 'testing'
67
- Requires-Dist: ruff (==0.1.5) ; extra == 'testing'
68
- Requires-Dist: semgrep (==1.40.0) ; extra == 'testing'
69
- Requires-Dist: curlylint (==0.13.1) ; extra == 'testing'
70
- Requires-Dist: djhtml (==3.0.6) ; extra == 'testing'
71
- Requires-Dist: polib (<2.0,>=1.1) ; extra == 'testing'
72
- Requires-Dist: factory-boy (>=3.2) ; extra == 'testing'
73
- Requires-Dist: tblib (<3.0,>=2.0) ; extra == 'testing'
74
-
75
- 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.
76
-
77
- For more details, see https://wagtail.org, https://docs.wagtail.org and https://github.com/wagtail/wagtail/.