Mercurial > mamba
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()