Пример #1
0
    def _loadPlugins(self):
        env.menumanager = menu.MenuManager()
        env.dataprovider = dataprovider.DataProviderManager()
        env.dataprovider.load()
        env.viewmanager = view.ViewManager()

        env.plugins = {}
        for i in pluginmanager.PluginManager("prewikka.plugins"):
            try:
                env.plugins[i.__name__] = i()
            except error.PrewikkaUserError as err:
                env.log.warning("%s: plugin loading failed: %s" %
                                (i.__name__, err))

        # Load views before auth/session to find all permissions
        env.viewmanager.loadViews()

        _AUTH_PLUGINS = pluginmanager.PluginManager("prewikka.auth",
                                                    autoupdate=True)
        _SESSION_PLUGINS = pluginmanager.PluginManager("prewikka.session",
                                                       autoupdate=True)
        cfg = env.config

        if cfg.session:
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       cfg.session.get_instance_name(),
                                       cfg.session)
            if isinstance(env.session, auth.Auth):
                # If the session module is also an auth module, no need to load an auth module
                env.auth = env.session
                if cfg.auth:
                    env.log.error(
                        _("Session '%s' does not accept any authentication module"
                          % cfg.session.get_instance_name()))
            else:
                # If no authentification module defined, we use the session's default auth module
                auth_name = cfg.auth.get_instance_name(
                ) if cfg.auth else env.session.get_default_auth()
                self._load_auth_or_session("auth", _AUTH_PLUGINS, auth_name,
                                           cfg.auth)
        elif cfg.auth:
            # No session module defined, we load the auth module first
            self._load_auth_or_session("auth", _AUTH_PLUGINS,
                                       cfg.auth.get_instance_name(), cfg.auth)
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       env.auth.getDefaultSession())
        else:
            # Nothing defined, we use the anonymous module
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       "anonymous")
            env.auth = env.session

        env.viewmanager.addView(viewhelpers.AjaxHostURL())
        if env.session.can_logout():
            env.viewmanager.addView(Logout())

        env.renderer = renderer.RendererPluginManager()
        list(hookmanager.trigger("HOOK_PLUGINS_LOAD"))
Пример #2
0
    def _load_plugins(self):
        env.pluginmanager = {}
        env.all_plugins = {}

        env.menumanager = menu.MenuManager()
        env.dataprovider = dataprovider.DataProviderManager(
            autoupdate=self.autoupdate)
        env.dataprovider.load()
        env.linkmanager = link.LinkManager()

        env.plugins = {}
        pluginmanager.SimplePluginManager("prewikka.plugins",
                                          autoupdate=self.autoupdate).load()

        # Load views before auth/session to find all permissions
        env.viewmanager.load_views(autoupdate=self.autoupdate)

        _AUTH_PLUGINS = pluginmanager.PluginManager("prewikka.auth",
                                                    autoupdate=True)
        _SESSION_PLUGINS = pluginmanager.PluginManager("prewikka.session",
                                                       autoupdate=True)
        cfg = env.config

        if cfg.session:
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       cfg.session.get_instance_name(),
                                       cfg.session)
            if isinstance(env.session, auth.Auth):
                # If the session module is also an auth module, no need to load an auth module
                env.auth = env.session
                if cfg.auth:
                    env.log.error(
                        _("Session '%s' does not accept any authentication module"
                          % cfg.session.get_instance_name()))
            else:
                # If no authentification module defined, we use the session's default auth module
                auth_name = cfg.auth.get_instance_name(
                ) if cfg.auth else env.session.get_default_auth()
                self._load_auth_or_session("auth", _AUTH_PLUGINS, auth_name,
                                           cfg.auth)
        elif cfg.auth:
            # No session module defined, we load the auth module first
            self._load_auth_or_session("auth", _AUTH_PLUGINS,
                                       cfg.auth.get_instance_name(), cfg.auth)
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       env.auth.get_default_session())
        else:
            # Nothing defined, we use the anonymous module
            self._load_auth_or_session("session", _SESSION_PLUGINS,
                                       "anonymous")
            env.auth = env.session

        env.renderer = renderer.RendererPluginManager(
            autoupdate=self.autoupdate)
        env.renderer.load()
        list(hookmanager.trigger("HOOK_PLUGINS_LOAD"))
Пример #3
0
    def __init__(self, autoupdate=False):
        self._backends = pluginmanager.PluginManager("prewikka.renderer.backend", autoupdate=autoupdate)
        pluginmanager.PluginManager.__init__(self, "prewikka.renderer.type", autoupdate=autoupdate)

        for typ, backend in env.config.renderer_defaults.items():
            self._default_backends[typ] = backend

        self._renderer = {}
Пример #4
0
    def __init__(self):
        self._backends = pluginmanager.PluginManager("prewikka.renderer.backend")
        pluginmanager.PluginManager.__init__(self, "prewikka.renderer.type")

        for typ, backend in env.config.renderer_defaults.items():
            self._default_backends[typ] = backend.value

        self._renderer = {}
        for i in self:
            try:
                self._renderer.setdefault(i.renderer_backend, {})[i.renderer_type] = i()
            except Exception as e:
                env.log.error("%s: %s" % (i.__module__, e))

            if not i.renderer_type in self._default_backends:
                self._default_backends[i.renderer_type] = i.renderer_backend
Пример #5
0
    def loadViews(self):
        # Import here, because of cyclic dependency
        from prewikka.baseview import BaseView
        self.addView(BaseView())

        for view_class in pluginmanager.PluginManager("prewikka.views"):
            try:
                vi = view_class()
            except error.PrewikkaUserError as e:
                logger.warning("%s: plugin loading failed: %s",
                               view_class.__name__, e)
                continue
            except Exception as e:
                logger.exception("%s: plugin loading failed: %s",
                                 view_class.__name__, e)
                continue

            self.addView(vi)
Пример #6
0
    def load(self):
        for plugin in pluginmanager.PluginManager(
                "prewikka.dataprovider.backend"):

            if plugin.type not in self.keys():
                env.log.warning("%s: plugin failed to load: %s" %
                                (plugin.__name__,
                                 _("No handler configured for '%s' datatype" %
                                   plugin.type)))
                continue

            try:
                p = plugin()
            except error.PrewikkaUserError as err:
                env.log.warning("%s: plugin failed to load: %s" %
                                (plugin.__name__, err))
                continue

            if p.type in self._backends:
                raise error.PrewikkaUserError(
                    N_("Configuration error"),
                    N_(
                        "Only one manager should be configured for '%s' backend",
                        p.type))

            self._backends[p.type] = p

        for k in self.keys():
            try:
                p = self[k]()
            except error.PrewikkaUserError as err:
                env.log.warning("%s: plugin failed to load: %s" %
                                (self[k].__name__, err))
                continue

            if not isinstance(p.normalizer,
                              (type(None), DataProviderNormalizer)):
                raise DataProviderError(
                    _("Invalid normalizer for '%s' datatype") % k)

            self._type_handlers[k] = p
Пример #7
0
    def load_views(self, autoupdate=False):
        self._init()
        self.get_baseview()

        pluginmanager.PluginManager("prewikka.views", autoupdate).load()