def plugins_from_data(placeholder, parent, data): for plugin_type, data, children_data in data: try: plugin_class = plugin_pool.get_plugin(plugin_type) except Exception: continue kwargs = dict(data) inlines = kwargs.pop('inlines', []) shared_glossary = kwargs.pop('shared_glossary', None) try: instance = add_plugin(placeholder, plugin_class, language, target=parent, **kwargs) except Exception: continue if isinstance(instance, CascadeElement): instance.plugin_class.add_inline_elements(instance, inlines) instance.plugin_class.add_shared_reference( instance, shared_glossary) # for some unknown reasons add_plugin sets instance.numchild to 0, # but fixing and save()-ing 'instance' executes some filters in an unwanted manner plugins_from_data(placeholder, instance, children_data) if isinstance(instance, Text): # we must convert the old plugin IDs into the new ones, # otherwise links are not displayed id_dict = dict( zip(plugin_tags_to_id_list(instance.body), (t[0] for t in instance.get_children().values_list('id')))) instance.body = replace_plugin_tags(instance.body, id_dict) instance.save()
def plugins_from_data(placeholder, parent, data): for plugin_type, data, children_data in data: try: plugin_class = plugin_pool.get_plugin(plugin_type) except Exception: continue kwargs = dict(data) inlines = kwargs.pop('inlines', []) shared_glossary = kwargs.pop('shared_glossary', None) try: instance = add_plugin(placeholder, plugin_class, language, target=parent, **kwargs) except Exception: continue if isinstance(instance, CascadeElement): instance.plugin_class.add_inline_elements(instance, inlines) instance.plugin_class.add_shared_reference(instance, shared_glossary) # for some unknown reasons add_plugin sets instance.numchild to 0, # but fixing and save()-ing 'instance' executes some filters in an unwanted manner plugins_from_data(placeholder, instance, children_data) if isinstance(instance, Text): # we must convert the old plugin IDs into the new ones, # otherwise links are not displayed id_dict = dict(zip( plugin_tags_to_id_list(instance.body), (t[0] for t in instance.get_children().values_list('id')) )) instance.body = replace_plugin_tags(instance.body, id_dict) instance.save()
def post_copy(self, old_instance, ziplist): """ Fix references to plugins """ replace_ids = {} for new, old in ziplist: replace_ids[old.pk] = new.pk self.body = replace_plugin_tags(old_instance.get_plugin_instance()[0].body, replace_ids) self.save()