diff mamba/options.py @ 39:3ab5097e8757

Refactor options.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 15:03:56 +0200
parents
children a70ded879f46
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/options.py	Sun Sep 11 15:03:56 2011 +0200
@@ -0,0 +1,53 @@
+# global options that are set on startup
+
+import optparse
+import os
+from mamba.constants import DEFAULTS
+
+
+class OptionGetter(object):
+    """Object grabber."""
+
+    def __init__(self, options):
+        self._options = options
+        self._finalized = False
+
+    def set_option(self, name, value):
+        if self._finalized:
+            raise RuntimeError("Cannot set option %r to %r after"
+                               "options are finalized." % (name, value))
+        self._options[name] = value
+
+    def finalize(self):
+        self._finalized = True
+
+    def __getattr__(self, name):
+        if name in self._options:
+            return self._options[name]
+        raise AttributeError("Unknown option %r" % (name,))
+
+options = OptionGetter(DEFAULTS.copy())
+
+
+def parse_args(args, options=options):
+    options.set_option('debug', 'DEBUG' in os.environ)
+
+    parser = optparse.OptionParser()
+    parser.add_option("--no-sound", action="store_false", default=True,
+                      dest="sound", help="disable sound")
+
+    if options.debug:
+        parser.add_option("--level", type="str", default=None,
+                dest="level", help="Initial level")
+        parser.add_option('--edit', action="store_true", default=False,
+                dest="edit", help="Edit given level")
+
+    opts, _ = parser.parse_args(args)
+
+    options.set_option('sound', opts.sound)
+
+    if options.debug:
+        options.set_option('level', opts.level)
+        options.set_option('edit', opts.edit)
+
+    options.finalize()