pvl.args: support multiple --config's
authorTero Marttila <terom@paivola.fi>
Fri, 27 Dec 2013 00:35:10 +0200
changeset 28 69e1b91cd83f
parent 27 62159e5b6685
child 29 8fcb140f1ee0
child 30 1053e69664a6
pvl.args: support multiple --config's
pvl/args.py
--- a/pvl/args.py	Sun Dec 22 14:25:35 2013 +0200
+++ b/pvl/args.py	Fri Dec 27 00:35:10 2013 +0200
@@ -31,7 +31,7 @@
     general.add_option('--debug-module',    action='append', metavar='MODULE', 
             help="Enable logging for the given logger/module name")
 
-    parser.add_option('-c', '--config',    metavar='PATH',
+    parser.add_option('-c', '--config',    metavar='PATH',      action='append',
             help="Read option defaults from config")
     parser.add_option('--config-encoding',  metavar='CHARSET',  default='utf-8',
             help="Unicode decoding for config file")
@@ -47,6 +47,7 @@
         logname             = parser.prog,
         loglevel            = logging.WARN,
         debug_module        = [],
+        config              = [],
     )
  
     return general
@@ -146,7 +147,8 @@
             values.ensure_value(dest, ...)
     """
 
-    def __init__ (self, defaults={ }) :
+    def __init__ (self, parser, defaults={ }) :
+        self._parser    = parser
         self._defaults  = defaults
         self._options   = { }
 
@@ -185,6 +187,13 @@
         else :
             raise AttributeError(name)
 
+    def error (self, msg) :
+        """
+            Raises an optparse error.
+        """
+
+        self._parser.error(msg)
+
 def apply_config (options, parser, config, encoding=None) :
     """
         Load options from config.
@@ -195,7 +204,7 @@
     config = configobj.ConfigObj(config,
             encoding        = options.config_encoding if encoding is None else encoding,
     )
-    config_options = Options(options._defaults)
+    config_options = Options(parser, options._defaults)
 
     # load scalars
     for scalar in config.scalars :
@@ -226,10 +235,10 @@
         Parse options, args from argv.
     """
 
-    options, args = parser.parse_args(argv[1:], values=Options(parser.defaults))
+    options, args = parser.parse_args(argv[1:], values=Options(parser, parser.defaults))
 
-    if options.config :
-        options = apply_config(options, parser, options.config)
+    for config in options.config :
+        options = apply_config(options, parser, config)
     
     return options, args