view 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 source

# 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()