pvl.args: load default config from /etc/pvl/package/module.conf, if specified to parse(...)
authorTero Marttila <terom@paivola.fi>
Sun, 15 Jun 2014 19:43:13 +0300
changeset 29 8fcb140f1ee0
parent 28 69e1b91cd83f
child 31 d03919dc11cc
pvl.args: load default config from /etc/pvl/package/module.conf, if specified to parse(...)
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.