Mercurial > hg > configuration
annotate configuration/config.py @ 10:c782d750fd6d
comment
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 26 Mar 2012 09:14:04 -0700 |
parents | b28ec204df23 |
children | e00afe2c83bf |
rev | line source |
---|---|
0 | 1 #!/usr/bin/env python |
2 | |
3 """ | |
4 multi-level unified configuration | |
5 """ | |
6 | |
7 import sys | |
8 import optparse | |
9 | |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
10 # imports for contigent configuration providers |
4 | 11 try: |
12 import json | |
13 except ImportError: | |
14 try: | |
15 import simplejson as json | |
16 except ImportError: | |
17 json = None | |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
18 try: |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
19 import yaml |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
20 except ImportError: |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
21 yaml = None |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
22 |
6 | 23 __all__ = ['Configuration', 'configuration_providers'] |
24 | |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
25 configuration_providers = [] |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
26 if json: |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
27 class JSON(object): |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
28 extensions = ['json'] |
7 | 29 def read(self, filename): |
9 | 30 return json.loads(file(filename).read()) |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
31 configuration_providers.append(JSON) |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
32 |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
33 if yaml: |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
34 class YAML(object): |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
35 extensions = ['yml'] |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
36 def read(self, filename): |
6 | 37 f = file(filename) |
38 config = yaml.load(f) | |
39 f.close() | |
40 return config | |
41 | |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
42 configuration_providers.append(YAML) |
4 | 43 |
44 | |
1 | 45 class Configuration(object): |
46 options = {} | |
47 | |
6 | 48 def __init__(self, configuration_providers=configuration_providers): |
2 | 49 self.config = {} |
6 | 50 self.configuration_providers = configuration_providers |
2 | 51 |
6 | 52 def check(self, config): |
2 | 53 """check validity of configuration""" |
54 | |
6 | 55 # TODO: ensure options in configuration are in self.options |
56 unknown_options = [] | |
57 | |
10 | 58 # TODO: ensure options are of the right type (if specified) |
6 | 59 |
2 | 60 def __call__(self, *args): |
61 """add items to configuration and check it""" | |
62 | |
63 def add(self, config): | |
64 """update configuration: not undoable""" | |
6 | 65 |
66 self.check(config) | |
67 | |
2 | 68 self.config.update(config) |
69 # TODO: option to extend; augment lists/dicts | |
70 | |
8
975fbc45cfcd
note TODO: returning OptionParser
Jeff Hammel <jhammel@mozilla.com>
parents:
7
diff
changeset
|
71 def parser(self): |
975fbc45cfcd
note TODO: returning OptionParser
Jeff Hammel <jhammel@mozilla.com>
parents:
7
diff
changeset
|
72 """return OptionParser""" |
975fbc45cfcd
note TODO: returning OptionParser
Jeff Hammel <jhammel@mozilla.com>
parents:
7
diff
changeset
|
73 raise NotImplementedError("TODO") |
975fbc45cfcd
note TODO: returning OptionParser
Jeff Hammel <jhammel@mozilla.com>
parents:
7
diff
changeset
|
74 |
0 | 75 def main(args=sys.argv[:]): |
76 | |
77 # parse command line options | |
78 usage = '%prog [options]' | |
79 class PlainDescriptionFormatter(optparse.IndentedHelpFormatter): | |
80 """description formatter for console script entry point""" | |
81 def format_description(self, description): | |
82 if description: | |
83 return description.strip() + '\n' | |
84 else: | |
85 return '' | |
86 parser = optparse.OptionParser(usage=usage, description=__doc__, formatter=PlainDescriptionFormatter()) | |
87 options, args = parser.parse_args(args) | |
88 | |
89 if __name__ == '__main__': | |
90 main() | |
91 |