Mercurial > rinkhals
annotate gamelib/config.py @ 411:03d5cb669298
Add config file and command line parameters.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 21 Nov 2009 11:18:08 +0000 |
parents | |
children | 8897a436a8cb |
rev | line source |
---|---|
411
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
1 # level.py |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 from ConfigParser import RawConfigParser |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 from optparse import OptionParser |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 class Config(object): |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 """Container for various global configuration knobs and levers.""" |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
8 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
9 valid_options = { |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
10 'sound': {'type': 'boolean', 'default': 'true'}, |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 'level_name': {'type': 'string', 'default': 'two_weeks'}, |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 } |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
13 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
14 config_filename = 'config.ini' |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
15 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 def configure(self, params=None): |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
17 self._config = RawConfigParser(dict( |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
18 [(k, v['default']) for k, v in self.valid_options.items() if 'default' in v] |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
19 )) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
20 self._config.add_section('Options') |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
21 self._set_up_params(params) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
22 self._config.read(self.config_filename) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
23 self._process_params() |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
24 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
25 def _set_up_params(self, params): |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
26 parser = OptionParser() |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
27 parser.add_option("-c", "--config", metavar="FILE", dest="config_filename", |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
28 help="read configuration from FILE") |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
29 parser.add_option("-l", "--level", metavar="LEVEL", dest="level_name", |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
30 help="select level LEVEL") |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
31 parser.add_option("--sound", action="store_const", const="on", dest="sound", |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
32 help="enable sound") |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
33 parser.add_option("--no-sound", action="store_const", const="off", dest="sound", |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
34 help="disable sound") |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
35 (self._opts, _) = parser.parse_args(params or []) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
36 self.config_filename = self._opts.config_filename or self.config_filename |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
37 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
38 def _process_params(self): |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
39 for name in self.valid_options: |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 opt = getattr(self._opts, name) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 if opt is not None: |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
42 self._config.set('Options', name, opt) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
43 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
44 def __getattr__(self, name): |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 if name not in self.valid_options: |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
46 raise AttributeError(name) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
47 get_methods = { |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
48 'string': lambda n: self._config.get('Options', n), |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
49 'boolean': lambda n: self._config.getboolean('Options', n), |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
50 } |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
51 return get_methods[self.valid_options[name].get('type', 'string')](name) |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
52 |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
53 # Here's a global variable. Don't try this at home, kids! |
03d5cb669298
Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
54 config = Config() |