Mercurial > hg > silvermirror
comparison silvermirror/config.py @ 20:5c5edfb827b7
more the things
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Thu, 16 Jan 2014 04:29:39 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
19:54e9c335e239 | 20:5c5edfb827b7 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 import optparse | |
4 import os | |
5 import sys | |
6 | |
7 from .utils import home | |
8 from martini.config import ConfigMunger | |
9 | |
10 class SilvermirrorConfiguration(object): | |
11 """ | |
12 SilverMirror configuration class | |
13 | |
14 The current form is an .ini file | |
15 [TODO: use `install_requires='configuration'`]: | |
16 | |
17 [::SilverMirror::] | |
18 ... | |
19 """ | |
20 | |
21 main_section = '::SilverMirror::' | |
22 | |
23 def __init__(self, filename=None): | |
24 if filename is not None: | |
25 self.read_config(filename) | |
26 def read_config(self, filename): | |
27 | |
28 # read file | |
29 config = ConfigMunger(filename).dict() | |
30 | |
31 # main configuration | |
32 main = config.pop(, {}) | |
33 main.setdefault('basedir', home()) | |
34 main['ignore'] = main.get('ignore', '').split() # patterns to ignore - | |
35 main['hosts'] = main.get('hosts', '').split() | |
36 main['timeout'] = float(main.get('timeout', '10.')) | |
37 | |
38 # password prompt | |
39 truth = dict([(str(i).lower(), i) for i in (True, False)]) | |
40 password = main.get('password', 'true') | |
41 try: | |
42 main['password'] = truth[password.lower()] | |
43 except KeyError: | |
44 raise KeyError("password must be True or False (You gave: '%s')" % password) | |
45 | |
46 # resources | |
47 for resource in config: | |
48 | |
49 # directory of resource | |
50 directory = config[resource].get('directory', resource) | |
51 if os.path.isabs(directory): | |
52 raise NotImplementedError("absolute directories will not work for now so....don't do this!") | |
53 | |
54 else: | |
55 directory = os.path.join(main['basedir'], directory) | |
56 config[resource]['directory'] = directory.rstrip(os.path.sep) | |
57 | |
58 # per-resource files to ignore | |
59 # XXX regexps for now (see `man unison`) | |
60 # - this is bad as whitespace patterns cannot be ignored | |
61 config[resource]['ignore'] = main['ignore'][:] + config[resource].get('ignore', '').split() | |
62 | |
63 # set + return ditionary of config | |
64 self.main = main | |
65 self.resources = config | |
66 config = (main, config) | |
67 | |
68 def main(args=sys.argv[1:]): | |
69 | |
70 usage = '%prog [options]' | |
71 parser = optparse.OptionParser(usage=usage, description=__doc__) | |
72 options, args = parser.parse_args(args) | |
73 | |
74 if __name__ == '__main__': | |
75 main() |