wagtail 5.2.2__py3-none-any.whl → 5.2.3__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, 2, "final", 1)
9
+ VERSION = (5, 2, 3, "final", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
@@ -18,7 +18,11 @@ class FormSubmissionsPanel(Panel):
18
18
  def submissions(self):
19
19
  form_page_model = self.panel.model
20
20
  form_submissions_model = form_page_model().get_submission_class()
21
- return form_submissions_model.objects.filter(page=self.instance)
21
+ if self.instance.pk:
22
+ return form_submissions_model.objects.filter(page=self.instance)
23
+ else:
24
+ # Page has not been created yet, so there can't be any submissions
25
+ return form_submissions_model.objects.none()
22
26
 
23
27
  @cached_property
24
28
  def submission_count(self):
@@ -76,6 +76,30 @@ class TestFormResponsesPanel(TestCase):
76
76
  self.assertFalse(self.panel.is_shown())
77
77
 
78
78
 
79
+ class TestFormResponsesPanelWithNewPage(TestCase):
80
+ def setUp(self):
81
+ self.request = RequestFactory().get("/")
82
+ user = AnonymousUser() # technically, Anonymous users cannot access the admin
83
+ self.request.user = user
84
+
85
+ self.form_page = FormPage()
86
+
87
+ self.FormPageForm = get_form_for_model(
88
+ FormPage,
89
+ form_class=WagtailAdminPageForm,
90
+ fields=["title", "slug", "to_address", "from_address", "subject"],
91
+ )
92
+
93
+ panel = FormSubmissionsPanel().bind_to_model(FormPage)
94
+ self.panel = panel.get_bound_panel(
95
+ instance=self.form_page, form=self.FormPageForm(), request=self.request
96
+ )
97
+
98
+ def test_render_without_submissions(self):
99
+ """The panel should not be shown if the number of submission is zero."""
100
+ self.assertFalse(self.panel.is_shown())
101
+
102
+
79
103
  class TestFormResponsesPanelWithCustomSubmissionClass(WagtailTestUtils, TestCase):
80
104
  def setUp(self):
81
105
  self.request = RequestFactory().get("/")
@@ -1824,3 +1848,85 @@ class TestPreview(WagtailTestUtils, TestCase):
1824
1848
  response = self.client.get(preview_url + params)
1825
1849
  self.assertEqual(response.status_code, 200)
1826
1850
  self.assertTemplateUsed(response, template)
1851
+
1852
+
1853
+ class TestFormPageCreate(WagtailTestUtils, TestCase):
1854
+ def setUp(self):
1855
+ # Find root page
1856
+ self.root_page = Page.objects.get(id=2)
1857
+
1858
+ # Login
1859
+ self.user = self.login()
1860
+
1861
+ def test_get_creation_form(self):
1862
+ response = self.client.get(
1863
+ reverse(
1864
+ "wagtailadmin_pages:add",
1865
+ args=("tests", "formpage", self.root_page.id),
1866
+ )
1867
+ )
1868
+ self.assertEqual(response.status_code, 200)
1869
+
1870
+ def test_post_creation_form(self):
1871
+ post_data = {
1872
+ "title": "Form page!",
1873
+ "slug": "contact-us",
1874
+ "form_fields-TOTAL_FORMS": "1",
1875
+ "form_fields-INITIAL_FORMS": "1",
1876
+ "form_fields-MIN_NUM_FORMS": "0",
1877
+ "form_fields-MAX_NUM_FORMS": "1000",
1878
+ "form_fields-0-id": "",
1879
+ "form_fields-0-label": "Field One",
1880
+ "form_fields-0-field_type": "singleline",
1881
+ }
1882
+ response = self.client.post(
1883
+ reverse(
1884
+ "wagtailadmin_pages:add",
1885
+ args=("tests", "formpage", self.root_page.id),
1886
+ ),
1887
+ post_data,
1888
+ )
1889
+ # Find the page and check it
1890
+ page = Page.objects.get(slug="contact-us")
1891
+
1892
+ # Should be redirected to edit page
1893
+ self.assertRedirects(
1894
+ response, reverse("wagtailadmin_pages:edit", args=(page.id,))
1895
+ )
1896
+
1897
+
1898
+ class TestFormPageEdit(WagtailTestUtils, TestCase):
1899
+ def setUp(self):
1900
+ self.form_page = make_form_page()
1901
+
1902
+ # Login
1903
+ self.user = self.login()
1904
+
1905
+ def test_get_edit_form(self):
1906
+ response = self.client.get(
1907
+ reverse("wagtailadmin_pages:edit", args=(self.form_page.id,))
1908
+ )
1909
+ self.assertEqual(response.status_code, 200)
1910
+
1911
+ def test_post_edit_form(self):
1912
+ post_data = {
1913
+ "title": "Updated form page",
1914
+ "slug": "contact-us",
1915
+ "form_fields-TOTAL_FORMS": "1",
1916
+ "form_fields-INITIAL_FORMS": "1",
1917
+ "form_fields-MIN_NUM_FORMS": "0",
1918
+ "form_fields-MAX_NUM_FORMS": "1000",
1919
+ "form_fields-0-id": "",
1920
+ "form_fields-0-label": "Field One",
1921
+ "form_fields-0-field_type": "singleline",
1922
+ }
1923
+ response = self.client.post(
1924
+ reverse("wagtailadmin_pages:edit", args=(self.form_page.id,)),
1925
+ post_data,
1926
+ )
1927
+ # Should be redirected to edit page
1928
+ self.assertRedirects(
1929
+ response, reverse("wagtailadmin_pages:edit", args=(self.form_page.id,))
1930
+ )
1931
+ page = Page.objects.get(slug="contact-us").get_latest_revision_as_object()
1932
+ self.assertEqual(page.title, "Updated form page")
@@ -49,6 +49,7 @@ from wagtail.contrib.forms.models import (
49
49
  AbstractFormField,
50
50
  AbstractFormSubmission,
51
51
  )
52
+ from wagtail.contrib.forms.panels import FormSubmissionsPanel
52
53
  from wagtail.contrib.forms.views import SubmissionsListView
53
54
  from wagtail.contrib.settings.models import (
54
55
  BaseGenericSetting,
@@ -568,6 +569,7 @@ class FormPage(AbstractEmailForm):
568
569
  ],
569
570
  "Email",
570
571
  ),
572
+ FormSubmissionsPanel(),
571
573
  ]
572
574
 
573
575
 
@@ -0,0 +1,80 @@
1
+ Metadata-Version: 2.1
2
+ Name: wagtail
3
+ Version: 5.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: Framework :: Django
25
+ Classifier: Framework :: Django :: 3.2
26
+ Classifier: Framework :: Django :: 4.1
27
+ Classifier: Framework :: Django :: 4.2
28
+ Classifier: Framework :: Django :: 5.0
29
+ Classifier: Framework :: Wagtail
30
+ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
31
+ Requires-Python: >=3.8
32
+ License-File: LICENSE
33
+ Requires-Dist: Django (<5.1,>=3.2)
34
+ Requires-Dist: django-modelcluster (<7.0,>=6.1)
35
+ Requires-Dist: django-permissionedforms (<1.0,>=0.1)
36
+ Requires-Dist: django-taggit (<5.0,>=2.0)
37
+ Requires-Dist: django-treebeard (<5.0,>=4.5.1)
38
+ Requires-Dist: djangorestframework (<4.0,>=3.11.1)
39
+ Requires-Dist: django-filter (<24,>=23.3)
40
+ Requires-Dist: draftjs-exporter (<3.0,>=2.1.5)
41
+ Requires-Dist: Pillow (<11.0.0,>=9.1.0)
42
+ Requires-Dist: beautifulsoup4 (<4.12,>=4.8)
43
+ Requires-Dist: html5lib (<2,>=0.999)
44
+ Requires-Dist: Willow[heif] (<1.7,>=1.6.2)
45
+ Requires-Dist: requests (<3.0,>=2.11.1)
46
+ Requires-Dist: l18n (>=2018.5)
47
+ Requires-Dist: openpyxl (<4.0,>=3.0.10)
48
+ Requires-Dist: anyascii (>=0.1.5)
49
+ Requires-Dist: telepath (<1,>=0.3.1)
50
+ Provides-Extra: docs
51
+ Requires-Dist: pyenchant (<4,>=3.1.1) ; extra == 'docs'
52
+ Requires-Dist: sphinxcontrib-spelling (<6,>=5.4.0) ; extra == 'docs'
53
+ Requires-Dist: Sphinx (>=1.5.2) ; extra == 'docs'
54
+ Requires-Dist: sphinx-autobuild (>=0.6.0) ; extra == 'docs'
55
+ Requires-Dist: sphinx-wagtail-theme (==6.1.1) ; extra == 'docs'
56
+ Requires-Dist: myst-parser (==0.18.1) ; extra == 'docs'
57
+ Requires-Dist: sphinx-copybutton (<1.0,>=0.5) ; extra == 'docs'
58
+ Provides-Extra: testing
59
+ Requires-Dist: python-dateutil (>=2.7) ; extra == 'testing'
60
+ Requires-Dist: pytz (>=2014.7) ; extra == 'testing'
61
+ Requires-Dist: Jinja2 (<3.2,>=3.0) ; extra == 'testing'
62
+ Requires-Dist: boto3 (<2,>=1.28) ; extra == 'testing'
63
+ Requires-Dist: freezegun (>=0.3.8) ; extra == 'testing'
64
+ Requires-Dist: azure-mgmt-cdn (<13.0,>=12.0) ; extra == 'testing'
65
+ Requires-Dist: azure-mgmt-frontdoor (<1.1,>=1.0) ; extra == 'testing'
66
+ Requires-Dist: django-pattern-library (<0.8,>=0.7) ; extra == 'testing'
67
+ Requires-Dist: coverage (>=3.7.0) ; extra == 'testing'
68
+ Requires-Dist: black (==22.3.0) ; extra == 'testing'
69
+ Requires-Dist: doc8 (==0.8.1) ; extra == 'testing'
70
+ Requires-Dist: ruff (==0.0.290) ; extra == 'testing'
71
+ Requires-Dist: semgrep (==1.40.0) ; extra == 'testing'
72
+ Requires-Dist: curlylint (==0.13.1) ; extra == 'testing'
73
+ Requires-Dist: djhtml (==1.5.2) ; extra == 'testing'
74
+ Requires-Dist: polib (<2.0,>=1.1) ; extra == 'testing'
75
+ Requires-Dist: factory-boy (>=3.2) ; extra == 'testing'
76
+ Requires-Dist: tblib (<3.0,>=2.0) ; extra == 'testing'
77
+
78
+ 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.
79
+
80
+ 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=qHzW9NN5NhL160C5sZcp8XjlgoJgvCpRvE4pglrnhSc,724
1
+ wagtail/__init__.py,sha256=Kk_cevWK-tjv03zEUw9zpBK2jw6puSPvUL4nQovloc4,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
@@ -1029,7 +1029,7 @@ wagtail/contrib/forms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
1029
1029
  wagtail/contrib/forms/apps.py,sha256=OY2eHr8Jetf9FYnTTcfWX4XgiG_gWfSGS7ndwMuq5po,285
1030
1030
  wagtail/contrib/forms/forms.py,sha256=b0LO8VbvTaX6RxVdnId2zM3ouzHvVtU8qyiFWeBR_EA,7583
1031
1031
  wagtail/contrib/forms/models.py,sha256=tiZQoObhuPngA63q1gO_fKKO9n-V0ohYcLJylkCxbh8,12035
1032
- wagtail/contrib/forms/panels.py,sha256=NNMPj2oQ3MI9TmA_5sUbxfSqnjmeGf87UqOlUw4SmZc,1357
1032
+ wagtail/contrib/forms/panels.py,sha256=zI3bFM1X5iT_fnxQUe5BWWN5iQKm6tEFEiaFhNRZcwk,1556
1033
1033
  wagtail/contrib/forms/urls.py,sha256=Gph_x_24NvsHgVPuZmD5w4G74F411YEFEvhX2mKF0QM,501
1034
1034
  wagtail/contrib/forms/utils.py,sha256=5bJcX15-X0ocf46c4KUTcrscNaEznB5lmoBlFXjBF0c,1430
1035
1035
  wagtail/contrib/forms/views.py,sha256=xeC6uWfNCaZDloGCNDUHWbYU-23hZ4oIoLPqPbWzfHE,11746
@@ -1162,7 +1162,7 @@ wagtail/contrib/forms/templates/wagtailforms/panels/form_responses_panel.html,sh
1162
1162
  wagtail/contrib/forms/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1163
1163
  wagtail/contrib/forms/tests/test_forms.py,sha256=7tRUwJA2j9xzr28NpRC9hDYeOEfR1VTmBCPlny7UPVw,13634
1164
1164
  wagtail/contrib/forms/tests/test_models.py,sha256=c1kPz-TWvIbqm16uUp5Ln8ndqhv6S2dFBS2IPZJdgXM,31728
1165
- wagtail/contrib/forms/tests/test_views.py,sha256=YyGSD9p_azQUAdGB0nztg2rgjDv5DtoE8T36N3-iz-M,69486
1165
+ wagtail/contrib/forms/tests/test_views.py,sha256=rXirGlom9s9veeodsYEU3mcBTCsRryT3D-pjErI05nM,73044
1166
1166
  wagtail/contrib/forms/tests/utils.py,sha256=OESefxdqGRgL1lDItVPSFNw_FJNB4X0PvozdvAhrpkc,6043
1167
1167
  wagtail/contrib/frontend_cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1168
1168
  wagtail/contrib/frontend_cache/apps.py,sha256=y-TyHADOpdCrIQ7zfnVD6OOxjo28lnBhPJeBtjlPih4,407
@@ -3721,7 +3721,7 @@ wagtail/test/testapp/apps.py,sha256=NIqHOtcWNoM35crZpziUcE5nzmHtcb-PQgtDKjOKV34,
3721
3721
  wagtail/test/testapp/blocks.py,sha256=GUzxM5RVmRHiDk7fmNtFGzfuO1WKJnmAEzJK8Ot52mU,971
3722
3722
  wagtail/test/testapp/forms.py,sha256=jDu_6eF5DzRF3ww-9hGLKCyE90InGLQoiwkTjPQX5qo,1438
3723
3723
  wagtail/test/testapp/media_forms.py,sha256=TVphjCtSfK90cl6p8lfz7hb5fUzAFmBb4KW0u3pOFa4,798
3724
- wagtail/test/testapp/models.py,sha256=ue4752vXUxlG262AVtNF9AuMdy7jrESB5qPOqilLoQI,60272
3724
+ wagtail/test/testapp/models.py,sha256=vaSIte1rgY84-wvUYDIW7CZNhBi9qNaGFjLu0kgk6Po,60366
3725
3725
  wagtail/test/testapp/rich_text.py,sha256=IbihBydjtAbJJLbwvVm4wW9OTgMkKU1lCrOFtpXCNEk,629
3726
3726
  wagtail/test/testapp/urls.py,sha256=2zQPbGiM8e53nGkxu4ZtECjlalBk_t-pTPyapfiKwXc,559
3727
3727
  wagtail/test/testapp/views.py,sha256=3NXrox9yW8-9HN5nmVoNdp5LlSrXGWq0bpmip1rM2zw,8432
@@ -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.2.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4074
- wagtail-5.2.2.dist-info/METADATA,sha256=NI7rIimHJbMhzw_HAfZHMGk21vGc_oEUInrlpHkhUVU,3771
4075
- wagtail-5.2.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
4076
- wagtail-5.2.2.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4077
- wagtail-5.2.2.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4078
- wagtail-5.2.2.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.38.4)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,80 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: wagtail
3
- Version: 5.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: Framework :: Django
25
- Classifier: Framework :: Django :: 3.2
26
- Classifier: Framework :: Django :: 4.1
27
- Classifier: Framework :: Django :: 4.2
28
- Classifier: Framework :: Django :: 5.0
29
- Classifier: Framework :: Wagtail
30
- Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
31
- Requires-Python: >=3.8
32
- License-File: LICENSE
33
- Requires-Dist: Django <5.1,>=3.2
34
- Requires-Dist: django-modelcluster <7.0,>=6.1
35
- Requires-Dist: django-permissionedforms <1.0,>=0.1
36
- Requires-Dist: django-taggit <5.0,>=2.0
37
- Requires-Dist: django-treebeard <5.0,>=4.5.1
38
- Requires-Dist: djangorestframework <4.0,>=3.11.1
39
- Requires-Dist: django-filter <24,>=23.3
40
- Requires-Dist: draftjs-exporter <3.0,>=2.1.5
41
- Requires-Dist: Pillow <11.0.0,>=9.1.0
42
- Requires-Dist: beautifulsoup4 <4.12,>=4.8
43
- Requires-Dist: html5lib <2,>=0.999
44
- Requires-Dist: Willow[heif] <1.7,>=1.6.2
45
- Requires-Dist: requests <3.0,>=2.11.1
46
- Requires-Dist: l18n >=2018.5
47
- Requires-Dist: openpyxl <4.0,>=3.0.10
48
- Requires-Dist: anyascii >=0.1.5
49
- Requires-Dist: telepath <1,>=0.1.1
50
- Provides-Extra: docs
51
- Requires-Dist: pyenchant <4,>=3.1.1 ; extra == 'docs'
52
- Requires-Dist: sphinxcontrib-spelling <6,>=5.4.0 ; extra == 'docs'
53
- Requires-Dist: Sphinx >=1.5.2 ; extra == 'docs'
54
- Requires-Dist: sphinx-autobuild >=0.6.0 ; extra == 'docs'
55
- Requires-Dist: sphinx-wagtail-theme ==6.1.1 ; extra == 'docs'
56
- Requires-Dist: myst-parser ==0.18.1 ; extra == 'docs'
57
- Requires-Dist: sphinx-copybutton <1.0,>=0.5 ; extra == 'docs'
58
- Provides-Extra: testing
59
- Requires-Dist: python-dateutil >=2.7 ; extra == 'testing'
60
- Requires-Dist: pytz >=2014.7 ; extra == 'testing'
61
- Requires-Dist: Jinja2 <3.2,>=3.0 ; extra == 'testing'
62
- Requires-Dist: boto3 <2,>=1.28 ; extra == 'testing'
63
- Requires-Dist: freezegun >=0.3.8 ; extra == 'testing'
64
- Requires-Dist: azure-mgmt-cdn <13.0,>=12.0 ; extra == 'testing'
65
- Requires-Dist: azure-mgmt-frontdoor <1.1,>=1.0 ; extra == 'testing'
66
- Requires-Dist: django-pattern-library <0.8,>=0.7 ; extra == 'testing'
67
- Requires-Dist: coverage >=3.7.0 ; extra == 'testing'
68
- Requires-Dist: black ==22.3.0 ; extra == 'testing'
69
- Requires-Dist: doc8 ==0.8.1 ; extra == 'testing'
70
- Requires-Dist: ruff ==0.0.290 ; extra == 'testing'
71
- Requires-Dist: semgrep ==1.40.0 ; extra == 'testing'
72
- Requires-Dist: curlylint ==0.13.1 ; extra == 'testing'
73
- Requires-Dist: djhtml ==1.5.2 ; extra == 'testing'
74
- Requires-Dist: polib <2.0,>=1.1 ; extra == 'testing'
75
- Requires-Dist: factory-boy >=3.2 ; extra == 'testing'
76
- Requires-Dist: tblib <3.0,>=2.0 ; extra == 'testing'
77
-
78
- 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.
79
-
80
- For more details, see https://wagtail.org, https://docs.wagtail.org and https://github.com/wagtail/wagtail/.