Here is a *tested* patch that seems to do the job. Plugins can remove the need for a default config file by setting up a ConfigParser object in their module initialization code and naming it 'module_default_config'
sample your-plugin.py: =========================== import ConfigParser as cp module_default_config = cp.ConfigParser() module_default_config.add_section("main") module_default_config.set("main", "enabled", "0") =========================== If the plugin does not have this code, then normal fallback to config file happens. Additionally, this means that modules can contain their own defaults for any configuration parameters. -- Michael
--- plugins.py-orig 2007-05-07 18:09:21.000000000 -0500 +++ ./plugins.py-meb 2007-05-07 18:09:13.000000000 -0500 @@ -176,18 +176,18 @@ dir, modname = os.path.split(modulefile) modname = modname.split('.py')[0] - conf = self._getpluginconf(modname) - if not conf or not config.getOption(conf, 'main', 'enabled', - config.BoolOption(False)): - self.verbose_logger.debug('"%s" plugin is disabled', modname) - return - fp, pathname, description = imp.find_module(modname, [dir]) try: module = imp.load_module(modname, fp, pathname, description) finally: fp.close() + conf = self._getpluginconf(modname, module) + if not conf or not config.getOption(conf, 'main', 'enabled', + config.BoolOption(False)): + self.verbose_logger.debug('"%s" plugin is disabled', modname) + return + # Check API version required by the plugin if not hasattr(module, 'requires_api_version'): raise Errors.ConfigError( @@ -234,29 +234,28 @@ (modname, getattr(module, funcname)) ) - def _getpluginconf(self, modname): + def _getpluginconf(self, modname, moduleobj): '''Parse the plugin specific configuration file and return a IncludingConfigParser instance representing it. Returns None if there was an error reading or parsing the configuration file. ''' + + parser = ConfigParser.ConfigParser() + if hasattr(moduleobj, "module_default_config"): + parser = moduleobj.module_default_config + + confpp_obj = None for dir in self.pluginconfpath: - conffilename = os.path.join(dir, modname + ".conf") + conffilename= os.path.join(dir, modname + ".conf") if os.access(conffilename, os.R_OK): - # Found configuration file - break - self.verbose_logger.log(logginglevels.INFO_2, "Configuration file %s not found" % conffilename) - else: # for - # Configuration files for the plugin not found - self.verbose_logger.log(logginglevels.INFO_2, "Unable to find configuration file for plugin %s" - % modname) - return None - parser = ConfigParser.ConfigParser() - confpp_obj = ConfigPreProcessor(conffilename) - try: - parser.readfp(confpp_obj) - except ParsingError, e: - raise Errors.ConfigError("Couldn't parse %s: %s" % (conffilename, - str(e))) + try: + confpp_obj = ConfigPreProcessor(conffilename) + parser.readfp(confpp_obj) + except ParsingError, e: + raise Errors.ConfigError("Couldn't parse %s: %s" % (conffilename, + str(e))) + break + return parser def setCmdLine(self, opts, commands):
_______________________________________________ Yum-devel mailing list Yum-devel@linux.duke.edu https://lists.dulug.duke.edu/mailman/listinfo/yum-devel