From 9baf8427d8f89169a98a8fa4e0425d0f26babfce Mon Sep 17 00:00:00 2001 From: Alexandre Silva Date: Tue, 15 Mar 2016 10:04:06 +0000 Subject: [PATCH] Fixed incompatibilities with Wagtail 1.4rc1 (thanks @hmartiniano) and updated the tests to support the new version - ref #67. --- runtests.py | 1 + .../patch_wagtailadmin.py | 23 ++++++++++++++----- wagtail_modeltranslation/tests/tests.py | 20 ++++++++++++---- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/runtests.py b/runtests.py index 0f52fc6..e374ca3 100755 --- a/runtests.py +++ b/runtests.py @@ -37,6 +37,7 @@ def runtests(): 'django.contrib.contenttypes', 'django.contrib.auth', 'taggit', + 'rest_framework', 'wagtail.wagtailcore', 'wagtail.wagtailadmin', diff --git a/wagtail_modeltranslation/patch_wagtailadmin.py b/wagtail_modeltranslation/patch_wagtailadmin.py index 6f0cd11..f7827e1 100644 --- a/wagtail_modeltranslation/patch_wagtailadmin.py +++ b/wagtail_modeltranslation/patch_wagtailadmin.py @@ -13,8 +13,6 @@ from django.utils.translation import ugettext as _ from wagtail.wagtailadmin.edit_handlers import FieldPanel, \ MultiFieldPanel, FieldRowPanel from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel -from wagtail.wagtailadmin.views.pages import get_page_edit_handler, \ - PAGE_EDIT_HANDLERS from wagtail.wagtailcore.models import Page, Site from wagtail.wagtailcore.url_routing import RouteResult from wagtail.wagtailimages.edit_handlers import ImageChooserPanel @@ -23,6 +21,12 @@ from wagtail.wagtailsnippets.views.snippets import get_snippet_edit_handler, \ from wagtail_modeltranslation.translator import translator, NotRegistered from .utils import build_localized_fieldname +try: + from wagtail.wagtailadmin.views.pages import get_page_edit_handler, \ + PAGE_EDIT_HANDLERS +except ImportError: + pass + logger = logging.getLogger('wagtail.core') @@ -40,7 +44,10 @@ class WagtailTranslator(object): # CONSTRUCT TEMPORARY EDIT HANDLER if issubclass(model, Page): - edit_handler_class = get_page_edit_handler(model) + if hasattr(model, 'get_edit_handler'): + edit_handler_class = model.get_edit_handler() + else: + edit_handler_class = get_page_edit_handler(model) else: edit_handler_class = get_snippet_edit_handler(model) WagtailTranslator._base_model_form = edit_handler_class.get_form_class(model) @@ -62,9 +69,13 @@ class WagtailTranslator(object): # DELETE TEMPORARY EDIT HANDLER IN ORDER TO LET WAGTAIL RECONSTRUCT # NEW EDIT HANDLER BASED ON NEW TRANSLATION PANELS if issubclass(model, Page): - if model in PAGE_EDIT_HANDLERS: - del PAGE_EDIT_HANDLERS[model] - edit_handler_class = get_page_edit_handler(model) + if hasattr(model, 'get_edit_handler'): + model.get_edit_handler.cache_clear() + edit_handler_class = model.get_edit_handler() + else: + if model in PAGE_EDIT_HANDLERS: + del PAGE_EDIT_HANDLERS[model] + edit_handler_class = get_page_edit_handler(model) else: if model in SNIPPET_EDIT_HANDLERS: del SNIPPET_EDIT_HANDLERS[model] diff --git a/wagtail_modeltranslation/tests/tests.py b/wagtail_modeltranslation/tests/tests.py index 3b00af2..aef4d99 100755 --- a/wagtail_modeltranslation/tests/tests.py +++ b/wagtail_modeltranslation/tests/tests.py @@ -18,7 +18,7 @@ from django.db.models import Q, F, Count from django.test import TestCase, TransactionTestCase from django.test.utils import override_settings from django.utils import six -from django.utils.translation import get_language, override, trans_real +from django.utils.translation import get_language, override, trans_real, ugettext from wagtail_modeltranslation import settings as mt_settings, translator from wagtail_modeltranslation.forms import TranslationModelForm @@ -291,7 +291,10 @@ class ModeltranslationTest(ModeltranslationTestBase): def test_verbose_name(self): verbose_name = models.TestModel._meta.get_field('title_de').verbose_name - self.assertEqual(six.text_type(verbose_name), 'title [de]') + # We use ugettext to get the title since as of Wagtail 1.4 there is a + # german translation for title so the test would fail if we asserted against + # a constant string + self.assertEqual(six.text_type(verbose_name), ugettext('title') + ' [de]') def test_descriptor_introspection(self): # See Django #8248 @@ -498,6 +501,7 @@ class WagtailModeltranslationTest(ModeltranslationTestBase): """ Test of the modeltranslation features with Wagtail models (Page and Snippet) """ + @classmethod def setUpClass(cls): super(WagtailModeltranslationTest, cls).setUpClass() @@ -654,8 +658,16 @@ class WagtailModeltranslationTest(ModeltranslationTestBase): so if the created form has all fields the the form was correctly patched """ models.InlinePanelPage() - from wagtail.wagtailadmin.views.pages import get_page_edit_handler - page_edit_handler = get_page_edit_handler(models.InlinePanelPage) + try: + from wagtail.wagtailadmin.views.pages import get_page_edit_handler, \ + PAGE_EDIT_HANDLERS + except ImportError: + pass + + if hasattr(models.InlinePanelPage, 'get_edit_handler'): + page_edit_handler = models.InlinePanelPage.get_edit_handler() + else: + page_edit_handler = get_page_edit_handler(models.InlinePanelPage) form = page_edit_handler.get_form_class(models.InlinePanelPage) page_base_fields = ['slug_de', 'slug_en', 'seo_title_de', 'seo_title_en', 'search_description_de',