# HG changeset patch # User Tero Marttila # Date 1402850593 -10800 # Node ID 8fcb140f1ee0981efa5c492756521d21c5475c16 # Parent 69e1b91cd83f99084923ec58ea93e844ecf502ee pvl.args: load default config from /etc/pvl/package/module.conf, if specified to parse(...) diff -r 69e1b91cd83f -r 8fcb140f1ee0 pvl/args.py --- a/pvl/args.py Fri Dec 27 00:35:10 2013 +0200 +++ b/pvl/args.py Sun Jun 15 19:43:13 2014 +0300 @@ -12,6 +12,8 @@ import logging; log = logging.getLogger('pvl.args') +CONFDIR = '/etc/pvl' + def parser (parser, setuid=None) : """ Return an optparse.OptionGroup. @@ -145,6 +147,8 @@ Passed to OptionParser.parse_args(), called by Option.take_action(): setattr(values, dest, ...) values.ensure_value(dest, ...) + + Implements _merge(...) to merge in options from multiple sources. """ def __init__ (self, parser, defaults={ }) : @@ -230,14 +234,46 @@ return config_options -def parse (parser, argv) : +def apply_core (options) : + """ + Apply the optparse options. + """ + + # configure + logging.basicConfig( + # XXX: log Class.__init__ as Class, not __init__? + format = '%(levelname)8s %(name)20s.%(funcName)s: %(message)s', + level = options.loglevel, + filename = options.log_file, + ) + + # enable debugging for specific targets + for logger in options.debug_module : + logging.getLogger(logger).setLevel(logging.DEBUG) + +def parse (parser, argv, package=None, module=None) : """ Parse options, args from argv. """ + prog = os.path.basename(argv[0]) + options, args = parser.parse_args(argv[1:], values=Options(parser, parser.defaults)) + # XXX: apply the core logging parts... + apply_core(options) + + if package and module: + conf_path = os.path.join(CONFDIR, package, module + '.conf') + + if os.path.exists(conf_path): + log.info("%s", conf_path) + options = apply_config(options, parser, conf_path) + else: + log.debug("%s: skip", conf_path) + for config in options.config : + log.info("%s", config) options = apply_config(options, parser, config) return options, args @@ -262,7 +298,7 @@ # TODO: use --quiet for stdout output? options.quiet = options.loglevel > logging.WARN - + if options.setuid : if options.uid or options.gid or not rootok : # set uid/gid @@ -271,7 +307,8 @@ # enable debugging for specific targets for logger in options.debug_module : logging.getLogger(logger).setLevel(logging.DEBUG) - + + def main (main) : """ Run given main func.