From 78dba179dbbbc3497106c814c732403a94b412e2 Mon Sep 17 00:00:00 2001 From: Jhonatan Lopes Date: Wed, 17 Jan 2024 16:13:22 -0300 Subject: [PATCH] Add Django 5 and Wagtail 5 support (#29) * Run django-upgrade for 3.2 * Allow Django 5 and Wagtail 5 * Update tox test matrix * Update GH actions for new versions * Fix wagtail.core import * Update classifiers * Lint * Remove Django 4.1, Wagtail 4.1 * Relax Wagtail upper bound * Update pre-commit hooks --- .github/workflows/test.yml | 34 +++++++++++-------- .pre-commit-config.yaml | 14 ++++---- setup.py | 16 ++++----- testmanage.py | 2 +- tox.ini | 18 +++++----- wagtail_localize_git/__init__.py | 3 -- .../migrations/0001_initial.py | 1 - wagtail_localize_git/models.py | 2 +- wagtail_localize_git/sync.py | 2 +- wagtail_localize_git/test/__init__.py | 1 - .../test/migrations/0001_initial.py | 7 +--- wagtail_localize_git/test/models.py | 13 ++----- wagtail_localize_git/test/settings.py | 2 +- wagtail_localize_git/test/urls.py | 5 ++- wagtail_localize_git/tests/test_git.py | 4 +-- wagtail_localize_git/tests/test_importer.py | 2 +- wagtail_localize_git/tests/test_models.py | 2 +- wagtail_localize_git/tests/test_sync.py | 2 +- wagtail_localize_git/tests/test_views.py | 4 +-- wagtail_localize_git/wagtail_hooks.py | 2 +- 20 files changed, 60 insertions(+), 76 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 283133a..8f21f91 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,29 +12,35 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true + +env: + FORCE_COLOR: '1' # Make tools pretty. + TOX_TESTENV_PASSENV: FORCE_COLOR + PIP_DISABLE_PIP_VERSION_CHECK: '1' + PIP_NO_PYTHON_VERSION_WARNING: '1' + PYTHON_LATEST: '3.11' + + jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up Python 3.8 - uses: actions/setup-python@v4 + - uses: actions/setup-python@v4 with: - python-version: '3.8' - - uses: pre-commit/action@v2.0.3 - with: - token: ${{ secrets.GITHUB_TOKEN }} + python-version: ${{ env.PYTHON_LATEST }} + - uses: pre-commit/action@v3.0.0 test-sqlite: runs-on: ubuntu-latest needs: lint strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -54,11 +60,11 @@ jobs: needs: lint strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] services: postgres: - image: postgres:11 + image: postgres:15 env: POSTGRES_PASSWORD: postgres ports: @@ -66,11 +72,11 @@ jobs: options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python }} + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: - python-version: ${{ matrix.python }} + python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip setuptools wheel diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 735a3b4..2e02526 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,8 @@ default_language_version: - python: python3.8 + python: python3.11 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.5.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -15,25 +15,25 @@ repos: - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 22.8.0 + rev: 23.12.1 hooks: - id: black args: ['--target-version', 'py38'] - repo: https://github.com/pycqa/isort # isort config is in setup.cfg - rev: 5.10.1 + rev: 5.13.2 hooks: - id: isort - repo: https://github.com/pycqa/flake8 # flake8 config is in setup.cfg - rev: 5.0.4 + rev: 7.0.0 hooks: - id: flake8 additional_dependencies: - flake8-bugbear - flake8-comprehensions - repo: https://github.com/asottile/blacken-docs - rev: v1.12.1 + rev: 1.16.0 hooks: - id: blacken-docs - additional_dependencies: [black==22.8.0] + additional_dependencies: [black==23.12.1] diff --git a/setup.py b/setup.py index 859accd..e56900e 100644 --- a/setup.py +++ b/setup.py @@ -41,23 +41,21 @@ "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", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Framework :: Django", - "Framework :: Django :: 2.2", - "Framework :: Django :: 3.0", - "Framework :: Django :: 3.1", "Framework :: Django :: 3.2", + "Framework :: Django :: 4.2", + "Framework :: Django :: 5.0", "Framework :: Wagtail", - "Framework :: Wagtail :: 2", - "Framework :: Wagtail :: 3", - "Framework :: Wagtail :: 4", + "Framework :: Wagtail :: 5", ], install_requires=[ - "Django>=3.2,<4.2", - "Wagtail>=2.15,<5.0", + "Django>=3.2,<5.1", + "Wagtail>=5.2", "wagtail-localize>=1.0", "pygit2>=1.0,<2.0", "gitpython>=3.0,<4.0", diff --git a/testmanage.py b/testmanage.py index b8872db..7c69391 100644 --- a/testmanage.py +++ b/testmanage.py @@ -56,7 +56,7 @@ def runtests(): try: execute_from_command_line(argv) finally: - from wagtail.tests.settings import MEDIA_ROOT, STATIC_ROOT + from wagtail.test.settings import MEDIA_ROOT, STATIC_ROOT shutil.rmtree(STATIC_ROOT, ignore_errors=True) shutil.rmtree(MEDIA_ROOT, ignore_errors=True) diff --git a/tox.ini b/tox.ini index 5e227a0..459b153 100644 --- a/tox.ini +++ b/tox.ini @@ -7,9 +7,9 @@ requires = tox >= 3.23.0, < 4.0 # note: use py and non-dotted python version as we use tox-py envlist = - py{37,38,39,310}-django{3.2}-wagtail{2.15,3,4} - py{38,39,310}-django{4.0}-wagtail{3,4} - py{38,39,310}-django{4.1}-wagtail{4,main} + python{3.8,3.9,3.10}-django{3.2}-wagtail{5.2} + python{3.8,3.9,3.10,3.11,3.12}-django{4.2}-wagtail{5.2} + python{3.10,3.11,3.12}-django{5.0}-wagtail{5.2} [flake8] # E501: Line too long @@ -25,25 +25,23 @@ deps = coverage django3.2: Django>=3.2,<3.3 - django4.0: Django>=4.0,<4.1 - django4.1: Django>=4.1,<4.2 + django4.2: Django>=4.2,<4.3 + django5.0: Django>=5.0,<5.1 djmain: git+https://github.com/django/django.git@main#egg=Django - wagtail2.15: wagtail>=2.15,<2.16 - wagtail3: wagtail>=3.0,<4.0 - wagtail4: wagtail>=4.0,<5.0 + wagtail5.2: wagtail>=5.2,<5.3 wagtailmain: git+https://github.com/wagtail/wagtail.git postgres: psycopg2>=2.6 [testenv:flake8] -basepython=python3.7 +basepython=python3.11 deps=flake8>=2.2.0 commands=flake8 wagtail_localize_git [testenv:interactive] -basepython = python3.9 +basepython = python3.11 commands_pre = python {toxinidir}/testmanage.py makemigrations diff --git a/wagtail_localize_git/__init__.py b/wagtail_localize_git/__init__.py index dead3af..e2d879d 100644 --- a/wagtail_localize_git/__init__.py +++ b/wagtail_localize_git/__init__.py @@ -1,5 +1,2 @@ -default_app_config = "wagtail_localize_git.apps.WagtailLocalizeGitAppConfig" - - VERSION = (0, 13, 0) __version__ = ".".join(map(str, VERSION)) diff --git a/wagtail_localize_git/migrations/0001_initial.py b/wagtail_localize_git/migrations/0001_initial.py index 327d032..2d677b5 100644 --- a/wagtail_localize_git/migrations/0001_initial.py +++ b/wagtail_localize_git/migrations/0001_initial.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/wagtail_localize_git/models.py b/wagtail_localize_git/models.py index 05cc994..e40a90d 100644 --- a/wagtail_localize_git/models.py +++ b/wagtail_localize_git/models.py @@ -1,8 +1,8 @@ from django.db import models from django.utils.text import slugify -from wagtail.core.models import Locale, Page from wagtail.documents.models import AbstractDocument from wagtail.images.models import AbstractImage +from wagtail.models import Locale, Page from wagtail.snippets.models import get_snippet_models from wagtail_localize.models import TranslatableObject diff --git a/wagtail_localize_git/sync.py b/wagtail_localize_git/sync.py index 6b148d9..6c61277 100644 --- a/wagtail_localize_git/sync.py +++ b/wagtail_localize_git/sync.py @@ -8,7 +8,7 @@ from django.conf import settings from django.db import transaction from django.utils.module_loading import import_string -from wagtail.core.models import Locale +from wagtail.models import Locale from wagtail_localize.models import Translation diff --git a/wagtail_localize_git/test/__init__.py b/wagtail_localize_git/test/__init__.py index 2474d05..e69de29 100644 --- a/wagtail_localize_git/test/__init__.py +++ b/wagtail_localize_git/test/__init__.py @@ -1 +0,0 @@ -default_app_config = "wagtail_localize_git.test.apps.WagtailLocalizeGitTestAppConfig" diff --git a/wagtail_localize_git/test/migrations/0001_initial.py b/wagtail_localize_git/test/migrations/0001_initial.py index d314601..8a8c13b 100644 --- a/wagtail_localize_git/test/migrations/0001_initial.py +++ b/wagtail_localize_git/test/migrations/0001_initial.py @@ -3,15 +3,10 @@ from django.db import migrations, models import django.db.models.deletion import uuid - -try: - import wagtail.fields as wagtail_fields -except ImportError: - import wagtail.core.fields as wagtail_fields +import wagtail.fields as wagtail_fields class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/wagtail_localize_git/test/models.py b/wagtail_localize_git/test/models.py index 200be91..b9c6066 100644 --- a/wagtail_localize_git/test/models.py +++ b/wagtail_localize_git/test/models.py @@ -1,21 +1,14 @@ from django.db import models from django.utils.translation import gettext_lazy from modelcluster.models import ClusterableModel +from wagtail.admin.panels import FieldPanel +from wagtail.fields import RichTextField +from wagtail.models import Page, TranslatableMixin from wagtail.snippets.models import register_snippet from wagtail_localize.fields import SynchronizedField, TranslatableField -try: - from wagtail.admin.panels import FieldPanel - from wagtail.fields import RichTextField - from wagtail.models import Page, TranslatableMixin -except ImportError: - from wagtail.admin.edit_handlers import FieldPanel - from wagtail.core.fields import RichTextField - from wagtail.core.models import Page, TranslatableMixin - - class TestPage(Page): test_charfield = models.CharField( gettext_lazy("char field"), max_length=255, blank=True, null=True, default="" diff --git a/wagtail_localize_git/test/settings.py b/wagtail_localize_git/test/settings.py index 1c841af..a8dbea3 100644 --- a/wagtail_localize_git/test/settings.py +++ b/wagtail_localize_git/test/settings.py @@ -52,7 +52,7 @@ "wagtail.contrib.routable_page", "wagtail.contrib.styleguide", "wagtail.sites", - "wagtail.core", + "wagtail", "taggit", "rest_framework", "django.contrib.admin", diff --git a/wagtail_localize_git/test/urls.py b/wagtail_localize_git/test/urls.py index f089f6a..224c12a 100644 --- a/wagtail_localize_git/test/urls.py +++ b/wagtail_localize_git/test/urls.py @@ -1,9 +1,8 @@ -from django.conf.urls import include from django.conf.urls.i18n import i18n_patterns from django.contrib import admin -from django.urls import path +from django.urls import include, path +from wagtail import urls as wagtail_urls from wagtail.admin import urls as wagtailadmin_urls -from wagtail.core import urls as wagtail_urls from wagtail.documents import urls as wagtaildocs_urls diff --git a/wagtail_localize_git/tests/test_git.py b/wagtail_localize_git/tests/test_git.py index 9590154..af37abb 100644 --- a/wagtail_localize_git/tests/test_git.py +++ b/wagtail_localize_git/tests/test_git.py @@ -8,7 +8,7 @@ from django.test import TestCase, override_settings from git import PushInfo -from wagtail.core.models import Locale +from wagtail.models import Locale from wagtail_localize_git.git import ( DEFAULT_BRANCH, @@ -256,7 +256,7 @@ def test_read_nonexistent_file(self): reader = self.repo.reader() with self.assertRaises(KeyError) as e: - reader.read_file("foo.txt"), + reader.read_file("foo.txt") self.assertEqual(e.exception.args, ("foo.txt",)) diff --git a/wagtail_localize_git/tests/test_importer.py b/wagtail_localize_git/tests/test_importer.py index b23ea07..51ed644 100644 --- a/wagtail_localize_git/tests/test_importer.py +++ b/wagtail_localize_git/tests/test_importer.py @@ -7,7 +7,7 @@ from django.core.exceptions import ValidationError from django.test import TestCase from django.utils import timezone -from wagtail.core.models import Locale, Page +from wagtail.models import Locale, Page from wagtail_localize.models import ( MissingRelatedObjectError, diff --git a/wagtail_localize_git/tests/test_models.py b/wagtail_localize_git/tests/test_models.py index 907bbe7..cb2a671 100644 --- a/wagtail_localize_git/tests/test_models.py +++ b/wagtail_localize_git/tests/test_models.py @@ -1,8 +1,8 @@ from django.test import TestCase -from wagtail.core.models import Page, Site from wagtail.documents.models import Document from wagtail.images.models import Image from wagtail.images.tests.utils import get_test_image_file +from wagtail.models import Page, Site from wagtail_localize.models import TranslationSource from wagtail_localize_git.models import Resource diff --git a/wagtail_localize_git/tests/test_sync.py b/wagtail_localize_git/tests/test_sync.py index 3e4f11e..5437c72 100644 --- a/wagtail_localize_git/tests/test_sync.py +++ b/wagtail_localize_git/tests/test_sync.py @@ -7,7 +7,7 @@ import pygit2 from django.test import TestCase, override_settings -from wagtail.core.models import Locale, Page +from wagtail.models import Locale, Page from wagtail_localize.models import StringTranslation, Translation, TranslationSource from wagtail_localize_git.models import Resource, SyncLog diff --git a/wagtail_localize_git/tests/test_views.py b/wagtail_localize_git/tests/test_views.py index 2fad791..a0d0fb9 100644 --- a/wagtail_localize_git/tests/test_views.py +++ b/wagtail_localize_git/tests/test_views.py @@ -4,8 +4,8 @@ from django.contrib.auth.models import Group from django.test import TestCase from django.urls import reverse -from wagtail.core.models import Locale, Page -from wagtail.tests.utils import WagtailTestUtils +from wagtail.models import Locale, Page +from wagtail.test.utils import WagtailTestUtils from wagtail_localize.models import Translation, TranslationSource from wagtail_localize_git.models import Resource, SyncLog, SyncLogResource diff --git a/wagtail_localize_git/wagtail_hooks.py b/wagtail_localize_git/wagtail_hooks.py index d8731b0..91dae11 100644 --- a/wagtail_localize_git/wagtail_hooks.py +++ b/wagtail_localize_git/wagtail_hooks.py @@ -1,8 +1,8 @@ from django.urls import include, path, reverse from django.utils.translation import gettext_lazy as _ from django.views.i18n import JavaScriptCatalog +from wagtail import hooks from wagtail.admin.menu import MenuItem -from wagtail.core import hooks from . import views