def __init__(self, *args, **kwargs): super(TranslationMixin, self).__init__(*args, **kwargs) # if state is not None, no need to patch all the fields # this is necessary for data migrations # if getattr(self, '_state').db is not None: # return TranslationMixin._translation_options = translator.\ get_options_for_model( self.__class__) if self.__class__._translated: return # CONSTRUCT TEMPORARY EDIT HANDLER if issubclass(self.__class__, Page): edit_handler_class = get_page_edit_handler(self.__class__) else: edit_handler_class = get_snippet_edit_handler(self.__class__) TranslationMixin._wgform_class = edit_handler_class.get_form_class( self.__class__) defined_tabs = TranslationMixin._fetch_defined_tabs(self.__class__) for tab_name, tab in defined_tabs: patched_tab = [] for panel in tab: trtab = TranslationMixin._patch_panel(self, panel) if trtab: for x in trtab: patched_tab.append(x) setattr(self.__class__, tab_name, patched_tab) # DELETE TEMPORARY EDIT HANDLER IN ORDER TO LET WAGTAIL RECONSTRUCT # NEW EDIT HANDLER BASED ON NEW TRANSLATION PANELS if issubclass(self.__class__, Page): if self.__class__ in PAGE_EDIT_HANDLERS: del PAGE_EDIT_HANDLERS[self.__class__] edit_handler_class = get_page_edit_handler(self.__class__) else: if self.__class__ in SNIPPET_EDIT_HANDLERS: del SNIPPET_EDIT_HANDLERS[self.__class__] edit_handler_class = get_snippet_edit_handler(self.__class__) form = edit_handler_class.get_form_class(self.__class__) for fname, f in form.base_fields.items(): # set field required on formset level if original field is required # as well if fname in self._required_fields: f.required = True if fname in TranslationMixin._translation_options.fields and TranslationMixin._is_orig_required( fname): f.required = False self.__class__._translated = True
def __init__(self, *args, **kwargs): super(TranslationMixin, self).__init__(*args, **kwargs) # if state is not None, no need to patch all the fields # this is necessary for data migrations if getattr(self, '_state').db is not None: return TranslationMixin._translation_options = translator.\ get_options_for_model( self.__class__) if self.__class__._translated: return # CONSTRUCT TEMPORARY EDIT HANDLER if issubclass(self.__class__, Page): edit_handler_class = get_page_edit_handler(self.__class__) else: edit_handler_class = get_snippet_edit_handler(self.__class__) TranslationMixin._wgform_class = edit_handler_class.get_form_class( self.__class__) defined_tabs = TranslationMixin._fetch_defined_tabs(self.__class__) for tab_name, tab in defined_tabs: patched_tab = [] for panel in tab: trtab = TranslationMixin._patch_panel(self, panel) if trtab: for x in trtab: patched_tab.append(x) setattr(self.__class__, tab_name, patched_tab) # DELETE TEMPORARY EDIT HANDLER IN ORDER TO LET WAGTAIL RECONSTRUCT # NEW EDIT HANDLER BASED ON NEW TRANSLATION PANELS if issubclass(self.__class__, Page): if self.__class__ in PAGE_EDIT_HANDLERS: del PAGE_EDIT_HANDLERS[self.__class__] edit_handler_class = get_page_edit_handler(self.__class__) else: if self.__class__ in SNIPPET_EDIT_HANDLERS: del SNIPPET_EDIT_HANDLERS[self.__class__] edit_handler_class = get_snippet_edit_handler(self.__class__) form = edit_handler_class.get_form_class(self.__class__) for fname, f in form.base_fields.items(): # set field required on formset level if original field is required # as well if fname in self._required_fields: f.required = True if fname in TranslationMixin._translation_options.fields and TranslationMixin._is_orig_required(fname): f.required = False self.__class__._translated = True
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 """ from wagtail.wagtailsnippets.views.snippets import get_snippet_edit_handler snippet_edit_handler = get_snippet_edit_handler( models.InlinePanelSnippet) form = snippet_edit_handler.get_form_class(models.InlinePanelSnippet) 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())
def __init__(self, *args, **kwargs): super(SnippetsTranslationMixin, self).__init__(*args, **kwargs) SnippetsTranslationMixin._translation_options = translator.\ get_options_for_model( self.__class__) if self.__class__._translated: return edit_handler_class = get_snippet_edit_handler(self.__class__) SnippetsTranslationMixin._wgform_class =\ edit_handler_class.get_form_class(self.__class__) defined_tabs =\ SnippetsTranslationMixin._fetch_defined_tabs(self.__class__) for tab_name, tab in defined_tabs: patched_tab = [] for panel in tab: trtab = SnippetsTranslationMixin._patch_panel(self, panel) if trtab: for x in trtab: patched_tab.append(x) setattr(self.__class__, tab_name, patched_tab) # DELETE TEMPORARY EDIT HANDLER IN ORDER TO LET WAGTAIL RECONSTRUCT # NEW EDIT HANDLER BASED ON NEW TRANSLATION PANELS if self.__class__ in SNIPPET_EDIT_HANDLERS: del SNIPPET_EDIT_HANDLERS[self.__class__] edit_handler_class = get_snippet_edit_handler(self.__class__) form = edit_handler_class.get_form_class(self.__class__) for fname, f in form.base_fields.items(): # set field required on formset level if original field is required # as well if fname in self._required_fields: f.required = True if fname in SnippetsTranslationMixin._translation_options.fields\ and SnippetsTranslationMixin._is_orig_required(fname): f.required = False self.__class__._translated = True
def setUp(self): content_type = Advert test_snippet = Advert.objects.get(id=1) edit_handler_class = get_snippet_edit_handler(Advert) form_class = edit_handler_class.get_form_class(Advert) form = form_class(instance=test_snippet) self.snippet_chooser_panel_class = SnippetChooserPanel('text', content_type) self.snippet_chooser_panel = self.snippet_chooser_panel_class(instance=test_snippet, form=form)
def setUp(self): model = SnippetChooserModel self.advert_text = "Test advert text" test_snippet = model.objects.create(advert=Advert.objects.create(text=self.advert_text)) edit_handler_class = get_snippet_edit_handler(model) form_class = edit_handler_class.get_form_class(model) form = form_class(instance=test_snippet) edit_handler = 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]
def setUp(self): model = SnippetChooserModel self.advert_text = 'Test advert text' test_snippet = model.objects.create( advert=Advert.objects.create(text=self.advert_text)) edit_handler_class = get_snippet_edit_handler(model) form_class = edit_handler_class.get_form_class(model) form = form_class(instance=test_snippet) edit_handler = 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]
def setUp(self): content_type = get_content_type_from_url_params("tests", "advert") test_snippet = Advert() test_snippet.text = "test_advert" test_snippet.url = "http://www.example.com/" test_snippet.save() edit_handler_class = get_snippet_edit_handler(Advert) form_class = edit_handler_class.get_form_class(Advert) form = form_class(instance=test_snippet) self.snippet_chooser_panel_class = SnippetChooserPanel("text", content_type) self.snippet_chooser_panel = self.snippet_chooser_panel_class(instance=test_snippet, form=form)
def setUp(self): content_type = get_content_type_from_url_params('tests', 'advert') test_snippet = Advert() test_snippet.text = 'test_advert' test_snippet.url = 'http://www.example.com/' test_snippet.save() edit_handler_class = get_snippet_edit_handler(Advert) form_class = edit_handler_class.get_form_class(Advert) form = form_class(instance=test_snippet) self.snippet_chooser_panel_class = SnippetChooserPanel( 'text', content_type) self.snippet_chooser_panel = self.snippet_chooser_panel_class( instance=test_snippet, form=form)
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 """ from wagtail.wagtailsnippets.views.snippets import get_snippet_edit_handler snippet_edit_handler = get_snippet_edit_handler(models.InlinePanelSnippet) form = snippet_edit_handler.get_form_class(models.InlinePanelSnippet) 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())
def test_fancy_edit_handler(self): edit_handler_class = get_snippet_edit_handler(FancySnippet) form_class = edit_handler_class.get_form_class(FancySnippet) self.assertTrue(issubclass(form_class, WagtailAdminModelForm)) self.assertTrue(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 form.formsets.iteritems(): 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)
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 form.formsets.items(): 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)