dbuscron uses optparse instead of getopt
authorKonstantin Stepanov <kstep@p-nut.info>
Mon, 13 Dec 2010 23:19:19 +0000 (01:19 +0200)
committerKonstantin Stepanov <kstep@p-nut.info>
Mon, 13 Dec 2010 23:22:10 +0000 (01:22 +0200)
dbuscron.py
dbuscron/parser.py

index a2a17b3..89d3130 100755 (executable)
@@ -17,17 +17,21 @@ if __name__ == '__main__':
 
     from dbuscron import Logger, OptionsParser
 
-    options = OptionsParser('fqvc:l:')
-    daemon = not options.f
+    options = OptionsParser(
+            daemon=dict(names=('-f', '--nodaemon'), action='store_false', default=True),
+            quiet=dict(names=('--quiet', '-q'), action='count', default=0),
+            verbose=dict(names=('--verbose', '-v'), action='count', default=0),
+            config=dict(names=('--conf', '--config', '-c'), default='/etc/dbuscrontab'),
+            logfile=dict(names=('--log', '--logfile', '-l')))
 
     logout = sys.stderr
-    if options.l:
-        logout = open(options.l, 'wb')
+    if options.logfile:
+        logout = open(options.logfile, 'wb')
 
     log = Logger(__name__, out=logout)
-    log.level = options.v - options.q + Logger.WARNING
+    log.level = options.verbose - options.quiet + Logger.WARNING
 
-    if daemon:
+    if options.daemon:
         from dbuscron.daemonize import daemonize
         daemonize(
             pidfile='/var/run/dbuscron.pid',
@@ -39,7 +43,7 @@ if __name__ == '__main__':
     bus = DbusBus()
     commands = Commands()
 
-    crontab = CrontabParser(options.c or '/etc/dbuscrontab')
+    crontab = CrontabParser(options.config)
 
     def load_config(parser):
         for rule, cmd in parser:
index a6f1c1d..46f3f94 100644 (file)
@@ -1,3 +1,4 @@
+# encoding: utf-8
 from __future__ import with_statement
 import re
 from dbuscron.bus import DbusBus
@@ -111,39 +112,14 @@ class CrontabParser(object):
 
                     yield ruled, command
 
-class OptionsParser(dict):
-    def __init__(self, opts, args=None):
-        super(OptionsParser, self).__init__()
+def OptionsParser(args=None, help=u'', **opts):
 
-        if args is None:
-            import sys
-            args = sys.argv[1:]
+    from optparse import OptionParser
+    parser = OptionParser(usage=help)
+    for opt, desc in opts.iteritems():
+        names = desc.pop('names')
+        desc['dest'] = opt
+        parser.add_option(*names, **desc)
 
-        from getopt import getopt
-        go, _ = getopt(args, opts)
-
-        for o, v in go:
-            k = o.strip('-')
-            withval = k+':' in opts
-
-            if self.has_key(k):
-                if withval:
-                    if isinstance(self[k], list):
-                        self[k].append(v)
-                    else:
-                        self[k] = [ self[k], v ]
-
-                else:
-                    self[k] += 1
-
-            else:
-                self[k] = v if withval else 1
-
-    def __getitem__(self, k):
-        if not self.has_key(k):
-            return False
-        return super(OptionsParser, self).__getitem__(k)
-
-    def __getattr__(self, k):
-        return self[k]
+    return parser.parse_args(args)[0]