qmsk.args: python3/argparse variant of pvl.args
authorTero Marttila <terom@paivola.fi>
Sat, 07 Jun 2014 16:21:54 +0300
changeset 93 7ee3a6608406
parent 92 e5799432071c
child 94 28ae9bc41c63
qmsk.args: python3/argparse variant of pvl.args
qmsk/args.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/args.py	Sat Jun 07 16:21:54 2014 +0300
@@ -0,0 +1,51 @@
+import argparse
+import logging; log = logging.getLogger('qmsk.args')
+import sys
+
+def parser (**opts):
+    parser = argparse.ArgumentParser(**opts)
+
+    args = parser.add_argument_group("Generic options")
+    args.add_argument('-q', '--quiet',      dest='log_level', action='store_const', const=logging.ERROR,
+            help="Less output")
+    args.add_argument('-v', '--verbose',    dest='log_level', action='store_const', const=logging.INFO,
+            help="More output")
+    args.add_argument('-D', '--debug-all',  dest='log_level', action='store_const', const=logging.DEBUG,
+            help="Most output")
+
+    args.add_argument('-d', '--debug-module',   dest='log_debug', action='append',
+            help="Debugging output for given module")
+
+    parser.set_defaults(
+            log_level       = logging.WARNING,
+            log_debug       = [ ],
+    )
+
+    return parser
+
+def parse (parser, argv):
+    """
+        Parse given sys.argv using the ArgumentParser returned by parser()
+    """
+
+    args = parser.parse_args(argv[1:])
+
+    logging.basicConfig(
+            format      = "{levelname:<8} {name:>30}:{funcName:<20}: {message}",
+            style       = '{',
+            level       = args.log_level,
+    )
+
+    for logger in args.log_debug:
+        logging.getLogger(logger).setLevel(logging.DEBUG)
+    
+    log.debug(args)
+
+    return args
+
+def main (main):
+    """
+        Run given main(argv) which returns exit status.
+    """
+
+    sys.exit(main(sys.argv))