Esempio n. 1
0
    def test_plugin_container_wrapping_bibformat_elements(self):
        """pluginutils - wrapping bibformat elements"""

        def format_signature(bfo, *dummy_args, **dummy_argd):
            pass

        def escape_values_signature(bfo):
            pass

        plugin_builder = create_enhanced_plugin_builder(
            compulsory_objects={"format_element": format_signature},
            optional_objects={"escape_values": escape_values_signature},
        )
        bibformat_elements = PluginContainer(
            os.path.join(CFG_BIBFORMAT_ELEMENTS_PATH, "bfe_*.py"), plugin_builder=plugin_builder
        )

        self.failUnless(bibformat_elements["bfe_fulltext"])
        self.failUnless(callable(bibformat_elements["bfe_fulltext"]["format_element"]))
        self.failUnless(len(bibformat_elements) >= 50)
Esempio n. 2
0
    def test_plugin_container_wrapping_bibformat_elements(self):
        """pluginutils - wrapping bibformat elements"""
        def format_signature(bfo, *dummy_args, **dummy_argd):
            pass

        def escape_values_signature(bfo):
            pass

        plugin_builder = create_enhanced_plugin_builder(
            compulsory_objects={
                'format_element' : format_signature,
            },
            optional_objects={
                'escape_values' : escape_values_signature,
            })
        bibformat_elements = PluginContainer(os.path.join(CFG_BIBFORMAT_ELEMENTS_PATH, 'bfe_*.py'),
            plugin_builder=plugin_builder)

        self.failUnless(bibformat_elements['bfe_fulltext'])
        self.failUnless(callable(bibformat_elements['bfe_fulltext']['format_element']))
        self.failUnless(len(bibformat_elements) >= 50)
Esempio n. 3
0
    def _load_upgrades(self, remove_applied=True):
        """
        Load upgrade modules

        Upgrade modules are loaded using pluginutils. The pluginutils module
        is either loaded from site-packages via normal or via a user-loaded
        module supplied in the __init__ method. This is useful when the engine
        is running before actually being installed into site-packages.

        @param remove_applied: if True, already applied upgrades will not
            be included, if False the entire upgrade graph will be
            returned.
        """
        if self.pluginutils is None:
            from invenio.pluginutils import PluginContainer
            from invenio.pluginutils import create_enhanced_plugin_builder
        else:
            PluginContainer = self.pluginutils.PluginContainer
            create_enhanced_plugin_builder = self.pluginutils.create_enhanced_plugin_builder

        if remove_applied:
            self.load_history()

        builder = create_enhanced_plugin_builder(
            compulsory_objects={
                'do_upgrade': dummy_signgature,
                'info': dummy_signgature,
            },
            optional_objects={
                'estimate': dummy_signgature,
                'pre_upgrade': dummy_signgature,
                'post_upgrade': dummy_signgature,
            },
            other_data={
                'depends_on': (list, []),
            },
        )

        # Load all upgrades
        plugins = PluginContainer(
            [os.path.join(p, '*.py') for p in self._paths],
            plugin_builder=builder,
            external=True,
        )

        # Check for broken plug-ins
        broken = plugins.get_broken_plugins()
        if broken:
            messages = []
            import traceback
            for plugin, info in broken.items():
                messages.append(
                    "Failed to load %s:\n"
                    " %s" %
                    (plugin, "".join(traceback.format_exception(*info))))
            raise RuntimeError(*messages)

        # Store name and doc of plug-in in itself
        for plugin_id in plugins.keys():
            plugins[plugin_id]['id'] = plugin_id
            plugins[plugin_id]['repository'] = self._parse_plugin_id(plugin_id)

        return plugins
    def _load_upgrades(self, remove_applied=True):
        """
        Load upgrade modules

        Upgrade modules are loaded using pluginutils. The pluginutils module
        is either loaded from site-packages via normal or via a user-loaded
        module supplied in the __init__ method. This is useful when the engine
        is running before actually being installed into site-packages.

        @param remove_applied: if True, already applied upgrades will not
            be included, if False the entire upgrade graph will be
            returned.
        """
        if self.pluginutils is None:
            from invenio.pluginutils import PluginContainer
            from invenio.pluginutils import create_enhanced_plugin_builder
        else:
            PluginContainer = self.pluginutils.PluginContainer
            create_enhanced_plugin_builder = self.pluginutils.create_enhanced_plugin_builder

        if remove_applied:
            self.load_history()

        builder = create_enhanced_plugin_builder(
            compulsory_objects={
                'do_upgrade': dummy_signgature,
                'info': dummy_signgature,
            },
            optional_objects={
                'estimate': dummy_signgature,
                'pre_upgrade': dummy_signgature,
                'post_upgrade': dummy_signgature,
            },
            other_data={
                'depends_on': (list, []),
            },
        )

        # Load all upgrades
        plugins = PluginContainer(
            [os.path.join(p, '*.py') for p in self._paths],
            plugin_builder=builder,
            external=True,
        )

        # Check for broken plug-ins
        broken = plugins.get_broken_plugins()
        if broken:
            messages = []
            import traceback
            for plugin, info in broken.items():
                messages.append("Failed to load %s:\n"
                                " %s" % (plugin, "".join(traceback.format_exception(*info))))
            raise RuntimeError(*messages)

        # Store name and doc of plug-in in itself
        for plugin_id in plugins.keys():
            plugins[plugin_id]['id'] = plugin_id
            plugins[plugin_id]['repository'] = self._parse_plugin_id(plugin_id)

        return plugins