Пример #1
0
    def masterinit(self, plugin, webapp, *args, **kwargs):
        """Call back function during plugin instantiation, from
        :class:`pluggdapps.plugin.PluginMeta` class.

        ``plugin``,
            Instantiated plugin. ``plugin`` is automatically populated with
            configuration settings and ``webapp`` attribute.

        ``args`` and ``kwargs``,
            are received from query_plugin's ``args`` and ``kwargs``.
        """
        from pluggdapps.web.webapp import WebApp

        caname = plugin.caname
        if isinstance(plugin, WebApp):  # Ought to be IWebApp plugin
            appsec, netpath, config = webapp
            plugin._settngx.update(args[0][appsec])
            plugin.webapp = plugin
            args = args[1:]

        elif webapp:  # Not a IWebApp plugin
            plugin._settngx.update(webapp.appsettings[h.plugin2sec(caname)])
            plugin.webapp = webapp

        else:  # plugin not under a webapp
            plugin._settngx.update(self.settings[h.plugin2sec(caname)])
            plugin.webapp = None

        plugin.pa = self

        plugin.query_plugins = h.hitch_method(plugin, plugin.__class__,
                                              Webapps.query_plugins, self,
                                              plugin.webapp)
        plugin.query_pluginr = h.hitch_method(plugin, plugin.__class__,
                                              Webapps.query_pluginr, self,
                                              plugin.webapp)
        plugin.query_plugin = h.hitch_method(plugin, plugin.__class__,
                                             Webapps.query_plugin, self,
                                             plugin.webapp)

        plugin.qps = h.hitch_method(plugin, plugin.__class__,
                                    Webapps.query_plugins, self, plugin.webapp)
        plugin.qpr = h.hitch_method(plugin, plugin.__class__,
                                    Webapps.query_pluginr, self, plugin.webapp)
        plugin.qp = h.hitch_method(plugin, plugin.__class__,
                                   Webapps.query_plugin, self, plugin.webapp)

        # Plugin settings
        plugin._settngx.update(kwargs.pop('settings', {}))
        return args, kwargs
Пример #2
0
    def _defaultsettings(self):
        """By now it is expected that all interface specs and plugin
        definitions would have been loaded by loading packages implementing
        them and pluggdapps' plugin meta-classing. This function will collect
        their default settings and return them as settings dictionary,::

          { "plugin:<pkgname>.<pluginname>" : default_settings,
             ...
          }
        """
        from pluggdapps.plugin import PluginMeta

        # Default settings for plugins.
        default = dict(DEFAULT().items())
        defaultsett = {"DEFAULT": deepcopy(default)}

        defaultsett["pluggdapps"] = deepcopy(default)
        defaultsett["pluggdapps"].update(dict(pluggdapps_defaultsett().items()))

        # Fetch all the default-settings for loaded plugins using `ISettings`
        # interface. Plugin inheriting from other plugins will override its
        # base's default_settings() in cls.mro() order.
        for name, info in PluginMeta._pluginmap.items():
            bases = reversed(info["cls"].mro())
            sett = deepcopy(default)
            for b in bases:
                if hasattr(b, "default_settings"):
                    sett.update(dict(b.default_settings().items()))
                    sett = b.normalize_settings(sett)
            defaultsett[h.plugin2sec(name)] = sett

        return defaultsett
Пример #3
0
    def masterinit(self, plugin, *args, **kwargs):
        """Call back function during plugin instantiation, from
        :class:`pluggdapps.plugin.PluginMeta` class.

        ``plugin``,
            Instantiated plugin. ``plugin`` is automatically populated with
            configuration settings.

        ``args`` and ``kwargs``,
            are received from query_plugin's ``args`` and ``kwargs``.
        """
        plugin._settngx.update(self.settings[h.plugin2sec(plugin.caname)])
        plugin.pa = self

        plugin.query_plugins = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_plugins, self)
        plugin.query_pluginr = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_pluginr, self)
        plugin.query_plugin = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_plugin, self)

        plugin.qps = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_plugins, self)
        plugin.qpr = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_pluginr, self)
        plugin.qp = h.hitch_method(plugin, plugin.__class__, Pluggdapps.query_plugin, self)

        # Plugin settings
        plugin._settngx.update(kwargs.pop("settings", {}))

        return args, kwargs
Пример #4
0
    def _defaultsettings(self):
        """By now it is expected that all interface specs and plugin
        definitions would have been loaded by loading packages implementing
        them and pluggdapps' plugin meta-classing. This function will collect
        their default settings and return them as settings dictionary,::

          { "plugin:<pkgname>.<pluginname>" : default_settings,
             ...
          }
        """
        from pluggdapps.plugin import PluginMeta

        # Default settings for plugins.
        default = dict(DEFAULT().items())
        defaultsett = {'DEFAULT': deepcopy(default)}

        defaultsett['pluggdapps'] = deepcopy(default)
        defaultsett['pluggdapps'].update(dict(
            pluggdapps_defaultsett().items()))

        # Fetch all the default-settings for loaded plugins using `ISettings`
        # interface. Plugin inheriting from other plugins will override its
        # base's default_settings() in cls.mro() order.
        for name, info in PluginMeta._pluginmap.items():
            bases = reversed(info['cls'].mro())
            sett = deepcopy(default)
            for b in bases:
                if hasattr(b, 'default_settings'):
                    sett.update(dict(b.default_settings().items()))
                    sett = b.normalize_settings(sett)
            defaultsett[h.plugin2sec(name)] = sett

        return defaultsett
Пример #5
0
    def masterinit(self, plugin, *args, **kwargs):
        """Call back function during plugin instantiation, from
        :class:`pluggdapps.plugin.PluginMeta` class.

        ``plugin``,
            Instantiated plugin. ``plugin`` is automatically populated with
            configuration settings.

        ``args`` and ``kwargs``,
            are received from query_plugin's ``args`` and ``kwargs``.
        """
        plugin._settngx.update(self.settings[h.plugin2sec(plugin.caname)])
        plugin.pa = self

        plugin.query_plugins = h.hitch_method(plugin, plugin.__class__,
                                              Pluggdapps.query_plugins, self)
        plugin.query_pluginr = h.hitch_method(plugin, plugin.__class__,
                                              Pluggdapps.query_pluginr, self)
        plugin.query_plugin = h.hitch_method(plugin, plugin.__class__,
                                             Pluggdapps.query_plugin, self)

        plugin.qps = h.hitch_method(plugin, plugin.__class__,
                                    Pluggdapps.query_plugins, self)
        plugin.qpr = h.hitch_method(plugin, plugin.__class__,
                                    Pluggdapps.query_pluginr, self)
        plugin.qp = h.hitch_method(plugin, plugin.__class__,
                                   Pluggdapps.query_plugin, self)

        # Plugin settings
        plugin._settngx.update(kwargs.pop('settings', {}))

        return args, kwargs
Пример #6
0
 def findapp(self, appname=None, appsec=None):
     appsec = appsec or (h.plugin2sec(appname) if appname else None)
     if appsec:
         for asec, netpath, config in self.webapps.keys():
             if appsec == asec: return self.webapps[(asec, netpath, config)]
         else:
             return None
     return None
Пример #7
0
 def findapp(self, appname=None, appsec=None):
     appsec = appsec or (h.plugin2sec(appname) if appname else None)
     if appsec:
         for asec, netpath, config in self.webapps.keys():
             if appsec == asec:
                 return self.webapps[(asec, netpath, config)]
         else:
             return None
     return None
Пример #8
0
    def masterinit(self, plugin, webapp, *args, **kwargs):
        """Call back function during plugin instantiation, from
        :class:`pluggdapps.plugin.PluginMeta` class.

        ``plugin``,
            Instantiated plugin. ``plugin`` is automatically populated with
            configuration settings and ``webapp`` attribute.

        ``args`` and ``kwargs``,
            are received from query_plugin's ``args`` and ``kwargs``.
        """
        from pluggdapps.web.webapp import WebApp

        caname = plugin.caname
        if isinstance(plugin, WebApp):  # Ought to be IWebApp plugin
            appsec, netpath, config = webapp
            plugin._settngx.update(args[0][appsec])
            plugin.webapp = plugin
            args = args[1:]

        elif webapp:  # Not a IWebApp plugin
            plugin._settngx.update(webapp.appsettings[h.plugin2sec(caname)])
            plugin.webapp = webapp

        else:  # plugin not under a webapp
            plugin._settngx.update(self.settings[h.plugin2sec(caname)])
            plugin.webapp = None

        plugin.pa = self

        plugin.query_plugins = h.hitch_method(plugin, plugin.__class__, Webapps.query_plugins, self, plugin.webapp)
        plugin.query_pluginr = h.hitch_method(plugin, plugin.__class__, Webapps.query_pluginr, self, plugin.webapp)
        plugin.query_plugin = h.hitch_method(plugin, plugin.__class__, Webapps.query_plugin, self, plugin.webapp)

        plugin.qps = h.hitch_method(plugin, plugin.__class__, Webapps.query_plugins, self, plugin.webapp)
        plugin.qpr = h.hitch_method(plugin, plugin.__class__, Webapps.query_pluginr, self, plugin.webapp)
        plugin.qp = h.hitch_method(plugin, plugin.__class__, Webapps.query_plugin, self, plugin.webapp)

        # Plugin settings
        plugin._settngx.update(kwargs.pop("settings", {}))
        return args, kwargs
Пример #9
0
    def _mountapps(self):
        """Create application wise settings, using special section
        [mountloc], if any. Also parse referred configuration files."""
        from pluggdapps.plugin import pluginnames, webapps

        settings = self.settings

        # context for parsing ini files.
        _vars = {"here": abspath(dirname(self.inifile))}

        # Fetch special section [mountloc]. And override them with [DEFAULT]
        # settings.
        cp = SafeConfigParser()
        cp.read(self.inifile)
        if cp.has_section("mountloc"):
            mountloc = cp.items("mountloc", vars=_vars)
        else:
            mountloc = []
        settings["mountloc"] = dict(mountloc)
        settings.pop("here", None)  # TODO : how `here` gets populated.

        # Parse mount configuration.
        appsecs = list(map(h.plugin2sec, webapps()))
        mountls = []
        _skipopts = list(_vars.keys()) + list(settings["DEFAULT"].keys())
        for netpath, mounton in mountloc:
            if netpath in _skipopts:
                continue

            parts = [x.strip() for x in mounton.split(",", 1)]
            appname = parts.pop(0)
            configini = parts.pop(0) if parts else None
            appsec = h.plugin2sec(appname)

            if appsec not in appsecs:
                raise Exception("%r application not found." % appname)
            if not configini:
                raise Exception("configuration file %r not supplied" % configini)
            if not isfile(configini):
                raise Exception("configuration file %r not valid" % configini)

            mountls.append((appsec, netpath, configini))

        # Load application configuration from instance configuration file.
        appsettings = {}
        for appsec, netpath, instconfig in mountls:
            appsett = deepcopy(settings)
            [appsett.pop(k) for k in SPECIAL_SECS]
            if instconfig:
                self._loadinstance(appsett, instconfig)
            appsettings[(appsec, netpath, instconfig)] = appsett
        return appsettings
Пример #10
0
    def _mountapps(self):
        """Create application wise settings, using special section
        [mountloc], if any. Also parse referred configuration files."""
        from pluggdapps.plugin import pluginnames, webapps

        settings = self.settings

        # context for parsing ini files.
        _vars = {'here': abspath(dirname(self.inifile))}

        # Fetch special section [mountloc]. And override them with [DEFAULT]
        # settings.
        cp = SafeConfigParser()
        cp.read(self.inifile)
        if cp.has_section('mountloc'):
            mountloc = cp.items('mountloc', vars=_vars)
        else:
            mountloc = []
        settings['mountloc'] = dict(mountloc)
        settings.pop('here', None)  # TODO : how `here` gets populated.

        # Parse mount configuration.
        appsecs = list(map(h.plugin2sec, webapps()))
        mountls = []
        _skipopts = list(_vars.keys()) + list(settings['DEFAULT'].keys())
        for netpath, mounton in mountloc:
            if netpath in _skipopts: continue

            parts = [x.strip() for x in mounton.split(',', 1)]
            appname = parts.pop(0)
            configini = parts.pop(0) if parts else None
            appsec = h.plugin2sec(appname)

            if appsec not in appsecs:
                raise Exception("%r application not found." % appname)
            if not configini:
                raise Exception("configuration file %r not supplied" %
                                configini)
            if not isfile(configini):
                raise Exception("configuration file %r not valid" % configini)

            mountls.append((appsec, netpath, configini))

        # Load application configuration from instance configuration file.
        appsettings = {}
        for appsec, netpath, instconfig in mountls:
            appsett = deepcopy(settings)
            [appsett.pop(k) for k in SPECIAL_SECS]
            if instconfig:
                self._loadinstance(appsett, instconfig)
            appsettings[(appsec, netpath, instconfig)] = appsett
        return appsettings
Пример #11
0
def get_html_config( request, c ):
    """Full page to configure application -> sections for all loaded
    applications."""
    response = request.response
    common_context( request, c )
    netpath = request.matchdict['netpath']
    section = request.matchdict['section']
    c['pluginname'] = plugin = h.sec2plugin( section )

    # URL.
    c['url_putconfig'] = \
        request.pathfor( 'updateconfig', netpath=netpath, section=section )
    
    #Context
    c['describe'] = h.conf_descriptionfor( plugin )
    # Gather ConfigDict for DEFAULT section, as a fall back in .ttl file.
    c['DEFAULT'] = DEFAULT()

    # Section settings, TODO : What to do about `here` variables in section.
    setts = deepcopy( h.section_settings( request.pa, netpath, section ))
    c['secsetts'] = ( c['describe'].__doc__, setts )

    # Breadcrumbs
    c['navigate'] = [ (netpath, None), (section, None) ]
    appmenu = [
        ( 'platform',
          request.pathfor('htmlconfig1', netpath='platform', section='DEFAULT')
        )
    ]
    for s in request.pa.netpaths :
        appmenu.append(
            ( s,
              request.pathfor('htmlconfig1', netpath=s, section='DEFAULT')
            ))

    secmenu = []
    for pn in h.netpath_settings( request.pa, netpath ).keys() :
        if pn in ['mountloc'] : continue
        name = h.plugin2sec( pn )
        secmenu.append(
            ( name,
              request.pathfor( 'htmlconfig1', netpath=netpath, section=name )
            ))

    c['crumbsmenu'] = { netpath : appmenu, section : secmenu }

    html = response.render(
                request, c, file='pluggdapps:webadmin/templates/config.ttl' )
    response.write( html )
    response.flush( finishing=True )
Пример #12
0
 def _ls_settings(self, args):
     sett = deepcopy(self.pa.settings)
     if args._ls_settings.startswith('spec'):
         print("Special sections")
         pprint({k: sett.pop(k, {})
                 for k in SPECIAL_SECS + ['DEFAULT']},
                indent=2)
     elif args._ls_settings.startswith('plug'):
         print("Plugin sections")
         pprint({k: sett[k]
                 for k in sett if h.is_plugin_section(k)},
                indent=2)
     elif args._ls_settings.startswith('wa') and args.plugin:
         for instkey, webapp in getattr(self.pa, 'webapps', {}).items():
             appsec, netpath, instconfig = instkey
             if h.sec2plugin(appsec) == args.plugin:
                 print("Settings for %r" % (instkey, ))
                 pprint(webapp.appsettings, indent=2)
                 print()
     elif args._ls_settings.startswith('def') and args.plugin:
         print("Default settings for plugin %r" % args.plugin)
         defaultsett = pa.defaultsettings()
         pprint(defaultsett().get(h.plugin2sec(args.plugin), {}), indent=2)