Skip to content

Commit

Permalink
wagtail 3.0 path updates (#121)
Browse files Browse the repository at this point in the history
Co-authored-by: William <[email protected]>
  • Loading branch information
William-Blackie and William committed Jun 23, 2022
1 parent 2b1b52a commit 1d24848
Show file tree
Hide file tree
Showing 28 changed files with 202 additions and 49 deletions.
3 changes: 3 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ workflows:
- build-and-test:
wagtail-version: "wagtail>=2.16,<2.17"
python-version: "3.10"
- build-and-test:
wagtail-version: "wagtail>=3.0,<3.1"
python-version: "3.10"
nightly:
jobs:
- nightly-wagtail-test
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
Changelog
=========

Unreleased
~~~~~~~~~~~~~~~~~~

* Add support for Wagtail 3.0 (William Blackie)


0.8.4 (09.06.2022)
~~~~~~~~~~~~~~~~~~

Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,6 @@
'Framework :: Django',
'Framework :: Wagtail',
'Framework :: Wagtail :: 2',
'Framework :: Wagtail :: 3',
],
)
12 changes: 9 additions & 3 deletions tests/blocks.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
from wagtail.core.blocks import (
CharBlock, IntegerBlock, RichTextBlock, StreamBlock, StructBlock, ListBlock, PageChooserBlock
)
from wagtail import VERSION as WAGTAIL_VERSION
if WAGTAIL_VERSION >= (3, 0):
from wagtail.blocks import (
CharBlock, IntegerBlock, RichTextBlock, StreamBlock, StructBlock, ListBlock, PageChooserBlock
)
else:
from wagtail.core.blocks import (
CharBlock, IntegerBlock, RichTextBlock, StreamBlock, StructBlock, ListBlock, PageChooserBlock
)


class CaptionedPageLink(StructBlock):
Expand Down
8 changes: 6 additions & 2 deletions tests/migrations/0004_pagewithrichtext.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.fields
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
import wagtail.fields as wagtail_fields
else:
import wagtail.core.fields as wagtail_fields

class Migration(migrations.Migration):

Expand All @@ -17,7 +21,7 @@ class Migration(migrations.Migration):
name='PageWithRichText',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
('body', wagtail.core.fields.RichTextField(max_length=255)),
('body', wagtail_fields.RichTextField(max_length=255)),
],
options={
'abstract': False,
Expand Down
12 changes: 9 additions & 3 deletions tests/migrations/0005_pagewithstreamfield.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@

from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
import wagtail.blocks as wagtail_blocks
import wagtail.fields as wagtail_fields
else:
import wagtail.core.blocks as wagtail_blocks
import wagtail.core.fields as wagtail_fields


class Migration(migrations.Migration):
Expand All @@ -18,7 +24,7 @@ class Migration(migrations.Migration):
name='PageWithStreamField',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
('body', wagtail.core.fields.StreamField([('link_block', wagtail.core.blocks.StructBlock([('page', wagtail.core.blocks.PageChooserBlock()), ('text', wagtail.core.blocks.CharBlock(max_length=250))])), ('page', wagtail.core.blocks.PageChooserBlock()), ('stream', wagtail.core.blocks.StreamBlock([('page', wagtail.core.blocks.PageChooserBlock())])), ('rich_text', wagtail.core.blocks.RichTextBlock()), ('list_of_pages', wagtail.core.blocks.ListBlock(wagtail.core.blocks.PageChooserBlock()))], blank=True, verbose_name='Page body')),
('body', wagtail_fields.StreamField([('link_block', wagtail_blocks.StructBlock([('page', wagtail_blocks.PageChooserBlock()), ('text', wagtail_blocks.CharBlock(max_length=250))])), ('page', wagtail_blocks.PageChooserBlock()), ('stream', wagtail_blocks.StreamBlock([('page', wagtail_blocks.PageChooserBlock())])), ('rich_text', wagtail_blocks.RichTextBlock()), ('list_of_pages', wagtail_blocks.ListBlock(wagtail_blocks.PageChooserBlock()))], blank=True, verbose_name='Page body')),
],
options={
'abstract': False,
Expand Down
13 changes: 10 additions & 3 deletions tests/migrations/0013_pagechooserblock_nonrequired.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
# Generated by Django 3.0.4 on 2020-03-25 17:38

from django.db import migrations
import wagtail.core.blocks
import wagtail.core.fields

from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
import wagtail.blocks as wagtail_blocks
import wagtail.fields as wagtail_fields
else:
import wagtail.core.blocks as wagtail_blocks
import wagtail.core.fields as wagtail_fields


class Migration(migrations.Migration):
Expand All @@ -15,6 +22,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='pagewithstreamfield',
name='body',
field=wagtail.core.fields.StreamField([('link_block', wagtail.core.blocks.StructBlock([('page', wagtail.core.blocks.PageChooserBlock(required=False)), ('text', wagtail.core.blocks.CharBlock(max_length=250))])), ('page', wagtail.core.blocks.PageChooserBlock()), ('stream', wagtail.core.blocks.StreamBlock([('page', wagtail.core.blocks.PageChooserBlock())])), ('rich_text', wagtail.core.blocks.RichTextBlock()), ('list_of_pages', wagtail.core.blocks.ListBlock(wagtail.core.blocks.PageChooserBlock()))], blank=True, verbose_name='Page body'),
field=wagtail_fields.StreamField([('link_block', wagtail_blocks.StructBlock([('page', wagtail_blocks.PageChooserBlock(required=False)), ('text', wagtail_blocks.CharBlock(max_length=250))])), ('page', wagtail_blocks.PageChooserBlock()), ('stream', wagtail_blocks.StreamBlock([('page', wagtail_blocks.PageChooserBlock())])), ('rich_text', wagtail_blocks.RichTextBlock()), ('list_of_pages', wagtail_blocks.ListBlock(wagtail_blocks.PageChooserBlock()))], blank=True, verbose_name='Page body'),
),
]
9 changes: 7 additions & 2 deletions tests/migrations/0014_rich_text_nullable.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
# Generated by Django 3.0.4 on 2020-03-30 10:25

from django.db import migrations
import wagtail.core.fields
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
import wagtail.fields as wagtail_fields
else:
import wagtail.core.fields as wagtail_fields


class Migration(migrations.Migration):
Expand All @@ -14,6 +19,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='pagewithrichtext',
name='body',
field=wagtail.core.fields.RichTextField(blank=True, max_length=255, null=True),
field=wagtail_fields.RichTextField(blank=True, max_length=255, null=True),
),
]
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# Generated by Django 4.0 on 2022-06-09 15:17

from django.db import migrations, models
import wagtail.core.blocks
import wagtail.core.fields
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
import wagtail.blocks as wagtail_blocks
import wagtail.fields as wagtail_fields
else:
import wagtail.core.blocks as wagtail_blocks
import wagtail.core.fields as wagtail_fields


class Migration(migrations.Migration):
Expand All @@ -20,6 +26,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='pagewithstreamfield',
name='body',
field=wagtail.core.fields.StreamField([('link_block', wagtail.core.blocks.StructBlock([('page', wagtail.core.blocks.PageChooserBlock(required=False)), ('text', wagtail.core.blocks.CharBlock(max_length=250))])), ('integer', wagtail.core.blocks.IntegerBlock(required=True)), ('page', wagtail.core.blocks.PageChooserBlock()), ('stream', wagtail.core.blocks.StreamBlock([('page', wagtail.core.blocks.PageChooserBlock())])), ('rich_text', wagtail.core.blocks.RichTextBlock()), ('list_of_pages', wagtail.core.blocks.ListBlock(wagtail.core.blocks.PageChooserBlock())), ('list_of_captioned_pages', wagtail.core.blocks.ListBlock(wagtail.core.blocks.StructBlock([('page', wagtail.core.blocks.PageChooserBlock(required=False)), ('text', wagtail.core.blocks.CharBlock(max_length=250))])))], blank=True, verbose_name='Page body'),
field=wagtail_fields.StreamField([('link_block', wagtail_blocks.StructBlock([('page', wagtail_blocks.PageChooserBlock(required=False)), ('text', wagtail_blocks.CharBlock(max_length=250))])), ('integer', wagtail_blocks.IntegerBlock(required=True)), ('page', wagtail_blocks.PageChooserBlock()), ('stream', wagtail_blocks.StreamBlock([('page', wagtail_blocks.PageChooserBlock())])), ('rich_text', wagtail_blocks.RichTextBlock()), ('list_of_pages', wagtail_blocks.ListBlock(wagtail_blocks.PageChooserBlock())), ('list_of_captioned_pages', wagtail_blocks.ListBlock(wagtail_blocks.StructBlock([('page', wagtail_blocks.PageChooserBlock(required=False)), ('text', wagtail_blocks.CharBlock(max_length=250))])))], blank=True, verbose_name='Page body'),
),
]
11 changes: 8 additions & 3 deletions tests/models.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
from django.db import models
from modelcluster.fields import ParentalKey, ParentalManyToManyField
from taggit.managers import TaggableManager
from wagtail.core.fields import RichTextField, StreamField
from wagtail.core.models import Orderable, Page
from wagtail.snippets.models import register_snippet

from .blocks import BaseStreamBlock
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
from wagtail.fields import RichTextField, StreamField
from wagtail.models import Orderable, Page
else:
from wagtail.core.fields import RichTextField, StreamField
from wagtail.core.models import Orderable, Page


class SimplePage(Page):
Expand Down
8 changes: 7 additions & 1 deletion tests/settings.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
from wagtail import VERSION as WAGTAIL_VERSION


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/checklist/


# Application definition

INSTALLED_APPS = [
'tests',
'wagtail_transfer',
Expand Down Expand Up @@ -36,6 +36,12 @@
'django.contrib.staticfiles',
]

# wagtail.core is now found in wagtail in Wagtail^=3.0
if WAGTAIL_VERSION >= (3, 0):
INSTALLED_APPS[
INSTALLED_APPS.index('wagtail.core')
] = "wagtail"

MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
Expand Down
7 changes: 5 additions & 2 deletions tests/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from django.core.files.images import ImageFile
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase, override_settings
from wagtail.core.models import Page, Collection
from wagtail.images.models import Image
from wagtail.documents.models import Document

Expand All @@ -22,7 +21,11 @@
)

from .utils import has_new_listblock_format

from wagtail import VERSION as WAGTAIL_VERSION
if WAGTAIL_VERSION >= (3, 0):
from wagtail.models import Page, Collection
else:
from wagtail.core.models import Page, Collection

# We could use settings.MEDIA_ROOT here, but this way we avoid clobbering a real media folder if we
# ever run these tests with non-test settings for any reason
Expand Down
12 changes: 9 additions & 3 deletions tests/tests/test_import.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from ensurepip import version
import importlib
import os.path
import shutil
Expand All @@ -9,7 +8,6 @@
from django.contrib.contenttypes.models import ContentType
from django.core.files.images import ImageFile
from django.test import TestCase, override_settings
from wagtail.core.models import Collection, Page
from wagtail.images.models import Image

from wagtail_transfer.models import IDMapping
Expand All @@ -20,6 +18,11 @@
)

from .utils import has_new_listblock_format
from wagtail import VERSION as WAGTAIL_VERSION
if WAGTAIL_VERSION >= (3, 0):
from wagtail.models import Page, Collection
else:
from wagtail.core.models import Page, Collection

# We could use settings.MEDIA_ROOT here, but this way we avoid clobbering a real media folder if we
# ever run these tests with non-test settings for any reason
Expand Down Expand Up @@ -434,7 +437,10 @@ def test_import_page_with_child_models(self):

def test_import_page_with_comments(self):
try:
from wagtail.core.models import Comment
if WAGTAIL_VERSION >= (3, 0):
from wagtail.models import Comment
else:
from wagtail.core.models import Comment
except ImportError:
self.skipTest("Comments not available on this version of Wagtail")
data = """{
Expand Down
8 changes: 6 additions & 2 deletions tests/urls.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import absolute_import, unicode_literals

from django.urls import include, re_path

from wagtail.admin import urls as wagtailadmin_urls
from wagtail.core import urls as wagtail_urls
from wagtail_transfer import urls as wagtailtransfer_urls
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
from wagtail import urls as wagtail_urls
else:
from wagtail.core import urls as wagtail_urls


urlpatterns = [
Expand Down
12 changes: 10 additions & 2 deletions wagtail_transfer/field_adapters.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
from django.utils.functional import cached_property
from modelcluster.fields import ParentalKey
from taggit.managers import TaggableManager
from wagtail.core import hooks
from wagtail.core.fields import RichTextField, StreamField

from .files import File, FileTransferError, get_file_hash, get_file_size
from .locators import get_locator_for_model
Expand All @@ -25,6 +23,16 @@

from django.utils.encoding import is_protected_type

from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
from wagtail import hooks
from wagtail.fields import RichTextField, StreamField
else:
from wagtail.core import hooks
from wagtail.core.fields import RichTextField, StreamField


WAGTAILTRANSFER_FOLLOWED_REVERSE_RELATIONS = getattr(settings, "WAGTAILTRANSFER_FOLLOWED_REVERSE_RELATIONS", [('wagtailimages.image', 'tagged_items', True)])
FOLLOWED_REVERSE_RELATIONS = {
(model_label.lower(), relation.lower()) for model_label, relation, _ in WAGTAILTRANSFER_FOLLOWED_REVERSE_RELATIONS
Expand Down
9 changes: 7 additions & 2 deletions wagtail_transfer/operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@
from django.db import models, transaction
from modelcluster.models import ClusterableModel, get_all_child_relations
from treebeard.mp_tree import MP_Node
from wagtail.core.models import Page

from .field_adapters import adapter_registry
from .locators import get_locator_for_model
from .models import get_base_model, get_base_model_for_path, get_model_for_path

from django.utils.functional import cached_property
from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
from wagtail.models import Page
else:
from wagtail.core.models import Page


# Models which should be updated to their latest version when encountered in object references
default_update_related_models = ['wagtailimages.image']
Expand Down
11 changes: 8 additions & 3 deletions wagtail_transfer/richtext.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
import re
from functools import partial
from .models import get_base_model

from wagtail.core.rich_text import features
from wagtail.core.rich_text.rewriters import extract_attrs
from wagtail import VERSION as WAGTAIL_VERSION

from .models import get_base_model
if WAGTAIL_VERSION >= (3, 0):
from wagtail.rich_text import features
from wagtail.rich_text.rewriters import extract_attrs
else:
from wagtail.core.rich_text import features
from wagtail.core.rich_text.rewriters import extract_attrs

FIND_A_TAG = re.compile(r'<a(\b[^>]*)>(.*?)</a>')
FIND_EMBED_TAG = re.compile(r'<embed(\b[^>]*)/>')
Expand Down
11 changes: 9 additions & 2 deletions wagtail_transfer/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,19 @@
from django.db import models
from django.db.models.constants import LOOKUP_SEP
from treebeard.mp_tree import MP_Node
from wagtail.core import hooks
from wagtail.core.models import Page

from .field_adapters import adapter_registry
from .models import get_base_model

from wagtail import VERSION as WAGTAIL_VERSION

if WAGTAIL_VERSION >= (3, 0):
from wagtail import hooks
from wagtail.models import Page
else:
from wagtail.core import hooks
from wagtail.core.models import Page


def _get_subclasses_recurse(model):
"""
Expand Down
Loading

0 comments on commit 1d24848

Please sign in to comment.