Mercurial > hg > configuration
annotate configuration/config.py @ 6:dce954a3831f
more stubbing
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 24 Mar 2012 23:14:22 -0700 |
parents | 7910b0ef0bab |
children | 6e3cf8f05464 |
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'] |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
29 configuration_providers.append(JSON) |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
30 |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
31 if yaml: |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
32 class YAML(object): |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
33 extensions = ['yml'] |
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
34 def read(self, filename): |
6 | 35 f = file(filename) |
36 config = yaml.load(f) | |
37 f.close() | |
38 return config | |
39 | |
5
7910b0ef0bab
stub configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
40 configuration_providers.append(YAML) |
4 | 41 |
42 | |
1 | 43 class Configuration(object): |
44 options = {} | |
45 | |
6 | 46 def __init__(self, configuration_providers=configuration_providers): |
2 | 47 self.config = {} |
6 | 48 self.configuration_providers = configuration_providers |
2 | 49 |
6 | 50 def check(self, config): |
2 | 51 """check validity of configuration""" |
52 | |
6 | 53 # TODO: ensure options in configuration are in self.options |
54 unknown_options = [] | |
55 | |
56 # | |
57 | |
2 | 58 def __call__(self, *args): |
59 """add items to configuration and check it""" | |
60 | |
61 def add(self, config): | |
62 """update configuration: not undoable""" | |
6 | 63 |
64 self.check(config) | |
65 | |
2 | 66 self.config.update(config) |
67 # TODO: option to extend; augment lists/dicts | |
68 | |
0 | 69 def main(args=sys.argv[:]): |
70 | |
71 # parse command line options | |
72 usage = '%prog [options]' | |
73 class PlainDescriptionFormatter(optparse.IndentedHelpFormatter): | |
74 """description formatter for console script entry point""" | |
75 def format_description(self, description): | |
76 if description: | |
77 return description.strip() + '\n' | |
78 else: | |
79 return '' | |
80 parser = optparse.OptionParser(usage=usage, description=__doc__, formatter=PlainDescriptionFormatter()) | |
81 options, args = parser.parse_args(args) | |
82 | |
83 if __name__ == '__main__': | |
84 main() | |
85 |