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())
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]
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]
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]
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())
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())
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))
def edit_handler(self): if isinstance(self.instance, Page): return self.instance.get_edit_handler() else: return get_snippet_edit_handler(self.instance.__class__)
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)