diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b4ee0f0..99516f7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,22 +8,20 @@ jobs: strategy: matrix: python-version: - - "3.7" - "3.8" - "3.9" - "3.10" - "3.11" wagtail-version: - - "2.15.6" - - "4.1.2" + - "4.1" - "4.2" - exclude: - - python-version: "3.11" - wagtail-version: "2.15.6" + - "5.0" + - "5.1" + - "5.2" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -39,7 +37,7 @@ jobs: runs-on: ubuntu-latest needs: test steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: psf/black@stable with: options: "--check --verbose" @@ -50,8 +48,8 @@ jobs: runs-on: ubuntu-latest needs: test steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 with: python-version: 3.8 - name: Install dependencies @@ -64,8 +62,8 @@ jobs: runs-on: ubuntu-latest needs: [test, lint-black, lint-isort] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 with: python-version: 3.8 - name: Install dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index 25d923c..0102fb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Add Wagtail >= 5.0 support (@katdom13) +- Add Python 4.2 support (@katdom13) +- Add Python 3.11 support (@katdom13) + ### Changed ### Fixed ### Removed +- Drop Wagtail < 4.1 support (@katdom13) +- Drop Django 4.0 support (@katdom13) +- Drop Python 3.7 support (@katdom13) ## [1.4.1] - 2023-02-19 ### Added diff --git a/README.md b/README.md index ecda08a..87db983 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Introduces panels for selecting colors in Wagtail. ## Example ```python -from wagtail.core.models import Page +from wagtail.models import Page from wagtail_color_panel.fields import ColorField from wagtail_color_panel.edit_handlers import NativeColorPanel diff --git a/docs/1_getting_started.md b/docs/1_getting_started.md index e744146..441c7fa 100644 --- a/docs/1_getting_started.md +++ b/docs/1_getting_started.md @@ -2,8 +2,8 @@ ### Requirements -- Python 3.7+ -- Wagtail 2.15+ and Django +- Python 3.8+ +- Wagtail 4.1+ and Django 3.2+ - [A browser that supports `input type="color"`](https://caniuse.com/#feat=input-color) diff --git a/docs/2_adding_to_a_page.md b/docs/2_adding_to_a_page.md index 1ed63f4..5bf5b64 100644 --- a/docs/2_adding_to_a_page.md +++ b/docs/2_adding_to_a_page.md @@ -3,7 +3,7 @@ ### First create a page ```python -from wagtail.core.models import Page +from wagtail.models import Page class MyPage(Page): ... @@ -15,7 +15,7 @@ class MyPage(Page): Define a ColorField that represents your color, in this example we call it `color`. ```python -from wagtail.core.models import Page +from wagtail.models import Page from wagtail_color_panel.fields import ColorField class MyPage(Page): @@ -28,7 +28,7 @@ Note: ColorField is built on top of CharField, so its also possible to use `Char ### Add a content panel to represent the field in the admin ```python -from wagtail.core.models import Page +from wagtail.models import Page from wagtail_color_panel.edit_handlers import NativeColorPanel @@ -46,7 +46,7 @@ We're done! After migration a color picker should appear. ### Full example ```python -from wagtail.core.models import Page +from wagtail.models import Page from wagtail_color_panel.fields import ColorField from wagtail_color_panel.edit_handlers import NativeColorPanel diff --git a/docs/3_adding_to_a_streamfield.md b/docs/3_adding_to_a_streamfield.md index e93ff28..50efd7c 100644 --- a/docs/3_adding_to_a_streamfield.md +++ b/docs/3_adding_to_a_streamfield.md @@ -3,17 +3,17 @@ To add the color chooser to a StreamField, import and use the `NativeColorBlock`. ```python -from wagtail.core.models import Page -from wagtail.core.fields import StreamField +from wagtail.models import Page +from wagtail.fields import StreamField from wagtail_color_panel.blocks import NativeColorBlock class MyStreamFieldPage(Page): body = StreamField([ ('color', NativeColorBlock(default="#000000")), - ]) + ], use_json_field=True) content_panels = Page.content_panels + [ - StreamFieldPanel('body'), + FieldPanel('body'), ] ``` diff --git a/docs/4_reference.md b/docs/4_reference.md index 767d80a..13bde1a 100644 --- a/docs/4_reference.md +++ b/docs/4_reference.md @@ -9,7 +9,7 @@ This panel uses the native `=2.15"] +install_requires = ["wagtail>=4.1"] tests_require = ["pytest-django", "wagtail-factories", "pytest"] @@ -40,15 +40,13 @@ "Environment :: Web Environment", "Framework :: Django", "Framework :: Wagtail", - "Framework :: Wagtail :: 2", - "Framework :: Wagtail :: 3", "Framework :: Wagtail :: 4", + "Framework :: Wagtail :: 5", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -56,5 +54,5 @@ "Topic :: Utilities", ], setup_requires=["setuptools_scm", "pytest-runner"], - python_requires=">=3.7", + python_requires=">=3.8", ) diff --git a/tests/settings.py b/tests/settings.py index d4aac22..a7b2b39 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -1,7 +1,5 @@ import os -from wagtail import VERSION as WAGTAIL_VERSION - BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ADMINS = (("test@example.com", "test"),) @@ -26,7 +24,7 @@ "wagtail.images", "wagtail.search", "wagtail.admin", - "wagtail" if WAGTAIL_VERSION >= (3, 0) else "wagtail.core", + "wagtail", "modelcluster", "taggit", "django.contrib.admin", diff --git a/tests/test_block.py b/tests/test_block.py index 286e78c..ad23550 100644 --- a/tests/test_block.py +++ b/tests/test_block.py @@ -1,15 +1,10 @@ from django.core.exceptions import ValidationError from django.test import TestCase -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.test.utils import WagtailTestUtils from wagtail_color_panel.blocks import NativeColorBlock from wagtail_color_panel.widgets import ColorInputWidget -if WAGTAIL_VERSION >= (3, 0): - from wagtail.test.utils import WagtailTestUtils -else: - from wagtail.tests.utils import WagtailTestUtils - class BlockTest(TestCase, WagtailTestUtils): def test_color_block_render(self): diff --git a/tests/test_field.py b/tests/test_field.py index 0063c7c..638451f 100644 --- a/tests/test_field.py +++ b/tests/test_field.py @@ -1,17 +1,12 @@ from django.core.exceptions import ValidationError from django.test import TestCase -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.test.utils import WagtailTestUtils from tests.testapp.factories import ( PageWithColorFieldPageFactory, PageWithDefaultValuePageFactory, ) -if WAGTAIL_VERSION >= (3, 0): - from wagtail.test.utils import WagtailTestUtils -else: - from wagtail.tests.utils import WagtailTestUtils - class FieldTest(TestCase, WagtailTestUtils): def test_strings_larger_than_7_raises_error(self): diff --git a/tests/test_widget.py b/tests/test_widget.py index edd962c..7bf9323 100644 --- a/tests/test_widget.py +++ b/tests/test_widget.py @@ -1,15 +1,10 @@ from django.test import TestCase -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.test.utils import WagtailTestUtils from tests.testapp.factories import PageWithColorFieldPageFactory from wagtail_color_panel.edit_handlers import NativeColorPanel from wagtail_color_panel.widgets import ColorInputWidget -if WAGTAIL_VERSION >= (3, 0): - from wagtail.test.utils import WagtailTestUtils -else: - from wagtail.tests.utils import WagtailTestUtils - # from wagtail.admin.panels import get_form_for_model # from wagtail.admin.forms import WagtailAdminModelForm, WagtailAdminPageForm @@ -30,5 +25,5 @@ def test_native_color_panel_uses_correct_widget(self): color_panel = page.content_panels[1] self.assertEqual(color_panel.__class__, NativeColorPanel) - color_widget = color_panel.widget_overrides()["color"] + color_widget = color_panel.get_form_options()["widgets"]["color"] self.assertEqual(color_widget.__class__, ColorInputWidget) diff --git a/tests/testapp/migrations/0001_initial.py b/tests/testapp/migrations/0001_initial.py index 22740fe..855af4d 100644 --- a/tests/testapp/migrations/0001_initial.py +++ b/tests/testapp/migrations/0001_initial.py @@ -1,18 +1,13 @@ # Generated by Django 3.0.7 on 2020-07-31 06:52 -from wagtail import VERSION as WAGTAIL_VERSION from django.db import migrations, models import django.db.models.deletion import wagtail_color_panel.blocks import wagtail_color_panel.fields -if WAGTAIL_VERSION >= (3, 0): - import wagtail.fields as wagtail_fields -else: - import wagtail.core.fields as wagtail_fields +import wagtail.fields as wagtail_fields class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/tests/testapp/migrations/0002_alter_pagewithstreamfield_body.py b/tests/testapp/migrations/0002_alter_pagewithstreamfield_body.py index df12607..6548335 100644 --- a/tests/testapp/migrations/0002_alter_pagewithstreamfield_body.py +++ b/tests/testapp/migrations/0002_alter_pagewithstreamfield_body.py @@ -1,16 +1,11 @@ # Generated by Django 3.2.13 on 2022-06-23 02:07 -from wagtail import VERSION as WAGTAIL_VERSION from django.db import migrations -if WAGTAIL_VERSION >= (3, 0): - import wagtail.fields as wagtail_fields -else: - import wagtail.core.fields as wagtail_fields +import wagtail.fields as wagtail_fields import wagtail_color_panel.blocks class Migration(migrations.Migration): - dependencies = [ ("testapp", "0001_initial"), ] @@ -22,10 +17,6 @@ class Migration(migrations.Migration): field=wagtail_fields.StreamField( [("color", wagtail_color_panel.blocks.NativeColorBlock())], use_json_field=True, - ) - if WAGTAIL_VERSION >= (3, 0) - else wagtail_fields.StreamField( - [("color", wagtail_color_panel.blocks.NativeColorBlock())] ), ), ] diff --git a/tests/testapp/models.py b/tests/testapp/models.py index fcb3f47..7c798ff 100644 --- a/tests/testapp/models.py +++ b/tests/testapp/models.py @@ -1,20 +1,12 @@ from django.db import models -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.admin.panels import FieldPanel +from wagtail.fields import StreamField +from wagtail.models import Page from wagtail_color_panel.blocks import NativeColorBlock from wagtail_color_panel.edit_handlers import NativeColorPanel from wagtail_color_panel.fields import ColorField -if WAGTAIL_VERSION >= (3, 0): - from wagtail.admin.panels import FieldPanel - from wagtail.admin.panels import FieldPanel as StreamFieldPanel - from wagtail.fields import StreamField - from wagtail.models import Page -else: - from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel - from wagtail.core.fields import StreamField - from wagtail.core.models import Page - class PageWithColorField(Page): color = ColorField() @@ -41,21 +33,13 @@ class PageWithDefaultValue(Page): class PageWithStreamfield(Page): - body = ( - StreamField( - [ - ("color", NativeColorBlock()), - ], - use_json_field=True, - ) - if WAGTAIL_VERSION >= (3, 0) - else StreamField( - [ - ("color", NativeColorBlock()), - ] - ) + body = StreamField( + [ + ("color", NativeColorBlock()), + ], + use_json_field=True, ) content_panels = Page.content_panels + [ - StreamFieldPanel("body"), + FieldPanel("body"), ] diff --git a/tests/urls.py b/tests/urls.py index cdeb01e..1b41f46 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,12 +1,7 @@ from django.urls import include, path -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail import urls as wagtail_urls from wagtail.admin import urls as wagtailadmin_urls -if WAGTAIL_VERSION >= (3, 0): - from wagtail import urls as wagtail_urls -else: - from wagtail.core import urls as wagtail_urls - urlpatterns = [ path("admin/", include(wagtailadmin_urls)), path("", include(wagtail_urls)), diff --git a/wagtail_color_panel/blocks.py b/wagtail_color_panel/blocks.py index b06b544..04c6c88 100644 --- a/wagtail_color_panel/blocks.py +++ b/wagtail_color_panel/blocks.py @@ -1,15 +1,10 @@ from django import forms from django.utils.functional import cached_property -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.blocks import FieldBlock from wagtail_color_panel.validators import hex_triplet_validator from wagtail_color_panel.widgets import ColorInputWidget -if WAGTAIL_VERSION >= (3, 0): - from wagtail.blocks import FieldBlock -else: - from wagtail.core.blocks import FieldBlock - class NativeColorBlock(FieldBlock): def __init__(self, required=True, help_text=None, validators=(), **kwargs): diff --git a/wagtail_color_panel/edit_handlers.py b/wagtail_color_panel/edit_handlers.py index be7fb61..ae16e65 100644 --- a/wagtail_color_panel/edit_handlers.py +++ b/wagtail_color_panel/edit_handlers.py @@ -1,35 +1,21 @@ -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.admin.panels import FieldPanel from wagtail_color_panel.widgets import ColorInputWidget, PolyfillColorInputWidget -if WAGTAIL_VERSION >= (3, 0): - from wagtail.admin.panels import FieldPanel -else: - from wagtail.admin.edit_handlers import FieldPanel - class NativeColorPanel(FieldPanel): - def widget_overrides(self): - # For Wagtail<3.0 we use widget_overrides - return { - self.field_name: ColorInputWidget(), - } - def get_form_options(self): - # For Wagtail 3.0 we use get_form_options - # So we can mix them to provide supports to Wagtail 2,3 opts = super().get_form_options() - opts["widgets"] = self.widget_overrides() + opts["widgets"] = { + self.field_name: ColorInputWidget(), + } return opts class PolyfillColorPanel(FieldPanel): - def widget_overrides(self): - return { - self.field_name: PolyfillColorInputWidget(), - } - def get_form_options(self): opts = super().get_form_options() - opts["widgets"] = self.widget_overrides() + opts["widgets"] = { + self.field_name: PolyfillColorInputWidget(), + } return opts diff --git a/wagtail_color_panel/widgets.py b/wagtail_color_panel/widgets.py index 06e9bb4..e1db39e 100644 --- a/wagtail_color_panel/widgets.py +++ b/wagtail_color_panel/widgets.py @@ -2,15 +2,9 @@ from django.forms import widgets from django.utils.safestring import mark_safe -from wagtail import VERSION as WAGTAIL_VERSION +from wagtail.telepath import register from wagtail.utils.widgets import WidgetWithScript - -if WAGTAIL_VERSION >= (3, 0): - from wagtail.telepath import register - from wagtail.widget_adapters import WidgetAdapter -else: - from wagtail.core.telepath import register - from wagtail.core.widget_adapters import WidgetAdapter +from wagtail.widget_adapters import WidgetAdapter class PolyfillColorInputWidget(widgets.TextInput):