Пример #1
0
    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()
Пример #2
0
    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()
Пример #4
0
 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()