Mercurial > mamba
view mamba/options.py @ 272:a061dd62127c
Hook up load and new buttons
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 17:09:21 +0200 |
parents | bea4857487de |
children | cc8be536a7fc |
line wrap: on
line source
# global options that are set on startup import optparse import os import sys 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") parser.add_option("--save-location", default=_get_default_save_location(), dest="save_location", help="Saved game location") 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) options.set_option('save_location', opts.save_location) if options.debug: options.set_option('level', opts.level) options.set_option('edit', opts.edit) options.finalize() def check_args(options=options): """Check options and complain if they're invalid.""" if options.edit and options.level is None: print "You must supply --level when using --edit." return False return True def _get_default_save_location(): """Return a default save game location.""" app = "mamba" if sys.platform.startswith("win"): if "APPDATA" in os.environ: return os.path.join(os.environ["APPDATA"], app) return os.path.join(os.path.expanduser("~"), "." + app) elif 'XDG_DATA_HOME' in os.environ: return os.path.join(os.environ["XDG_DATA_HOME"], app) return os.path.join(os.path.expanduser("~"), ".local", "share", app)