pvl.args: load default config from /etc/pvl/package/module.conf, if specified to parse(...)
--- 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.