pvl/args.py
changeset 0 91c739202f06
child 86 5bd98d185c48
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pvl/args.py	Wed Oct 10 21:39:54 2012 +0300
@@ -0,0 +1,50 @@
+"""
+    CLI argument handling; common stuff: logging
+"""
+
+import optparse
+import logging
+
+def parser (parser) :
+    """
+        Return an optparse.OptionGroup.
+    """
+
+    general = optparse.OptionGroup(parser, "General options")
+
+    general.add_option('-q', '--quiet',     dest='loglevel', action='store_const', const=logging.ERROR, help="Less output")
+    general.add_option('-v', '--verbose',   dest='loglevel', action='store_const', const=logging.INFO,  help="More output")
+    general.add_option('-D', '--debug',     dest='loglevel', action='store_const', const=logging.DEBUG, help="Even more output")
+    general.add_option('--debug-module',    action='append', metavar='MODULE', 
+            help="Enable logging for the given logger/module name")
+
+    # defaults
+    parser.set_defaults(
+        logname             = parser.prog,
+        loglevel            = logging.WARN,
+        debug_module        = [],
+    )
+ 
+    return general
+
+def apply (options, logname=None) :
+    """
+        Apply the optparse options.
+    """
+
+    if logname :
+        prefix = options.logname + ': '
+    else :
+        prefix = ''
+
+    # configure
+    logging.basicConfig(
+        # XXX: log Class.__init__ as Class, not __init__?
+        format  = prefix + '%(name)-20s: %(levelname)5s %(funcName)s: %(message)s',
+        level   = options.loglevel,
+    )
+
+    # enable debugging for specific targets
+    for logger in options.debug_module :
+        logging.getLogger(logger).setLevel(logging.DEBUG)
+