def check_panels_patching(self, model, model_fields):
        patched_edit_handler = get_snippet_edit_handler(model)

        if VERSION[0] < 2:
            form = patched_edit_handler.get_form_class(model)
        else:
            form = patched_edit_handler.get_form_class()

        try:
            # python 3
            self.assertEqual(model_fields, list(form.base_fields.keys()))
        except AttributeError:
            # python 2.7
            self.assertItemsEqual(model_fields, form.base_fields.keys())
示例#2
0
    def setUp(self):
        model = SnippetChooserModel
        self.advert_text = 'Test advert text'
        test_snippet = model.objects.create(
            advert=Advert.objects.create(text=self.advert_text))

        self.edit_handler_class = get_snippet_edit_handler(model)
        self.form_class = self.edit_handler_class.get_form_class(model)
        form = self.form_class(instance=test_snippet)
        edit_handler = self.edit_handler_class(instance=test_snippet, form=form)

        self.snippet_chooser_panel = [
            panel for panel in edit_handler.children
            if getattr(panel, 'field_name', None) == 'advert'][0]
示例#3
0
    def setUp(self):
        model = SnippetChooserModelWithCustomPrimaryKey
        self.advert_text = 'Test advert text'
        test_snippet = model.objects.create(
            advertwithcustomprimarykey=AdvertWithCustomPrimaryKey.objects.create(
                advert_id="advert/02",
                text=self.advert_text
            )
        )

        self.edit_handler = get_snippet_edit_handler(model)
        self.form_class = self.edit_handler.get_form_class()
        form = self.form_class(instance=test_snippet)
        edit_handler = self.edit_handler.bind_to_instance(instance=test_snippet, form=form)

        self.snippet_chooser_panel = [
            panel for panel in edit_handler.children
            if getattr(panel, 'field_name', None) == 'advertwithcustomprimarykey'][0]
示例#4
0
    def setUp(self):
        self.request = RequestFactory().get('/')
        user = AnonymousUser()  # technically, Anonymous users cannot access the admin
        self.request.user = user

        model = SnippetChooserModel
        self.advert_text = 'Test advert text'
        test_snippet = model.objects.create(
            advert=Advert.objects.create(text=self.advert_text))

        self.edit_handler = get_snippet_edit_handler(model)
        self.form_class = self.edit_handler.get_form_class()
        form = self.form_class(instance=test_snippet)
        edit_handler = self.edit_handler.bind_to(
            instance=test_snippet, form=form, request=self.request)

        self.snippet_chooser_panel = [
            panel for panel in edit_handler.children
            if getattr(panel, 'field_name', None) == 'advert'][0]
示例#5
0
    def setUp(self):
        self.request = RequestFactory().get('/')
        user = AnonymousUser(
        )  # technically, Anonymous users cannot access the admin
        self.request.user = user

        model = SnippetChooserModelWithCustomPrimaryKey
        self.advert_text = 'Test advert text'
        test_snippet = model.objects.create(
            advertwithcustomprimarykey=AdvertWithCustomPrimaryKey.objects.
            create(advert_id="advert/02", text=self.advert_text))

        self.edit_handler = get_snippet_edit_handler(model)
        self.form_class = self.edit_handler.get_form_class()
        form = self.form_class(instance=test_snippet)
        edit_handler = self.edit_handler.bind_to_instance(
            instance=test_snippet, form=form, request=self.request)

        self.snippet_chooser_panel = [
            panel for panel in edit_handler.children if getattr(
                panel, 'field_name', None) == 'advertwithcustomprimarykey'
        ][0]
    def test_snippet_form(self):
        """
        In this test we use the InlinePanelSnippet model because it has all the possible "patchable" fields
        so if the created form has all fields the the form was correctly patched
        """
        snippet_edit_handler = get_snippet_edit_handler(models.InlinePanelSnippet)

        if VERSION < (2,):
            form = snippet_edit_handler.get_form_class(models.InlinePanelSnippet)
        else:
            form = snippet_edit_handler.get_form_class()

        inline_model_fields = ['field_name_de', 'field_name_en', 'image_chooser_de', 'image_chooser_en',
                               'fieldrow_name_de', 'fieldrow_name_en', 'name_de', 'name_en', 'image_de', 'image_en',
                               'other_name_de', 'other_name_en']

        related_formset_form = form.formsets['related_snippet_model'].form

        try:
            # python 3
            self.assertCountEqual(inline_model_fields, related_formset_form.base_fields.keys())
        except AttributeError:
            # python 2.7
            self.assertItemsEqual(inline_model_fields, related_formset_form.base_fields.keys())
示例#7
0
    def test_snippet_form(self):
        """
        In this test we use the InlinePanelSnippet model because it has all the possible "patchable" fields
        so if the created form has all fields the the form was correctly patched
        """
        snippet_edit_handler = get_snippet_edit_handler(models.InlinePanelSnippet)

        if VERSION[0] < 2:
            form = snippet_edit_handler.get_form_class(models.InlinePanelSnippet)
        else:
            form = snippet_edit_handler.get_form_class()

        inline_model_fields = ['field_name_de', 'field_name_en', 'image_chooser_de', 'image_chooser_en',
                               'fieldrow_name_de', 'fieldrow_name_en', 'name_de', 'name_en', 'image_de', 'image_en',
                               'other_name_de', 'other_name_en']

        related_formset_form = form.formsets['related_snippet_model'].form

        try:
            # python 3
            self.assertCountEqual(inline_model_fields, related_formset_form.base_fields.keys())
        except AttributeError:
            # python 2.7
            self.assertItemsEqual(inline_model_fields, related_formset_form.base_fields.keys())
示例#8
0
 def test_fancy_edit_handler(self):
     edit_handler = get_snippet_edit_handler(FancySnippet)
     form_class = edit_handler.get_form_class()
     self.assertTrue(issubclass(form_class, WagtailAdminModelForm))
     self.assertTrue(issubclass(form_class, FancySnippetForm))
示例#9
0
 def test_fancy_edit_handler(self):
     edit_handler = get_snippet_edit_handler(FancySnippet)
     form_class = edit_handler.get_form_class()
     self.assertTrue(issubclass(form_class, WagtailAdminModelForm))
     self.assertTrue(issubclass(form_class, FancySnippetForm))
示例#10
0
 def edit_handler(self):
     if isinstance(self.instance, Page):
         return self.instance.get_edit_handler()
     else:
         return get_snippet_edit_handler(self.instance.__class__)
示例#11
0
 def test_standard_edit_handler(self):
     edit_handler_class = get_snippet_edit_handler(StandardSnippet)
     form_class = edit_handler_class.get_form_class(StandardSnippet)
     self.assertTrue(issubclass(form_class, WagtailAdminModelForm))
     self.assertFalse(issubclass(form_class, FancySnippetForm))
    def __init__(self, model):

        # Check if this class was already patched
        if model in WagtailTranslator._patched_models:
            return

        WagtailTranslator._base_model = model
        WagtailTranslator._required_fields = {}

        # CONSTRUCT TEMPORARY EDIT HANDLER
        if issubclass(model, Page):
            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)

        defined_tabs = WagtailTranslator._fetch_defined_tabs(model)

        for tab_name, tab in defined_tabs:
            patched_tab = []

            for panel in tab:
                trtab = WagtailTranslator._patch_panel(model, panel)

                if trtab:
                    for x in trtab:
                        patched_tab.append(x)

            setattr(model, tab_name, patched_tab)

        # DELETE TEMPORARY EDIT HANDLER IN ORDER TO LET WAGTAIL RECONSTRUCT
        # NEW EDIT HANDLER BASED ON NEW TRANSLATION PANELS
        if issubclass(model, Page):
            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]
            edit_handler_class = get_snippet_edit_handler(model)

        # Set the required of the translated fields that were required on the original field
        form = edit_handler_class.get_form_class(model)
        for fname, f in form.base_fields.items():
            if fname in WagtailTranslator._required_fields[model]:
                f.required = True

        # Do the same to the formsets
        for related_name, formset in iteritems(form.formsets):
            if (formset.model in WagtailTranslator._required_fields
                    and WagtailTranslator._required_fields[formset.model]):
                for fname, f in formset.form.base_fields.items():
                    if fname in WagtailTranslator._required_fields[
                            formset.model]:
                        f.required = True

        # Overide page methods
        if issubclass(model, Page):
            model.move = _new_move
            model.set_url_path = _new_set_url_path
            model.route = _new_route
            model.get_site_root_paths = _new_get_site_root_paths
            model.relative_url = _new_relative_url
            model.url = _new_url
            _patch_clean(model)
            _patch_elasticsearch_fields(model)

        WagtailTranslator._patched_models.append(model)