10 from demandload import * |
10 from demandload import * |
11 demandload(globals(), "re socket sys util") |
11 demandload(globals(), "re socket sys util") |
12 |
12 |
13 class ui(object): |
13 class ui(object): |
14 def __init__(self, verbose=False, debug=False, quiet=False, |
14 def __init__(self, verbose=False, debug=False, quiet=False, |
15 interactive=True): |
15 interactive=True, parentui=None): |
16 self.overlay = {} |
16 self.overlay = {} |
17 self.cdata = ConfigParser.SafeConfigParser() |
17 self.cdata = ConfigParser.SafeConfigParser() |
18 self.readconfig(util.rcpath) |
18 self.parentui = parentui and parentui.parentui or parentui |
|
19 if parentui is None: |
|
20 self.readconfig(util.rcpath) |
19 |
21 |
20 self.quiet = self.configbool("ui", "quiet") |
22 self.quiet = self.configbool("ui", "quiet") |
21 self.verbose = self.configbool("ui", "verbose") |
23 self.verbose = self.configbool("ui", "verbose") |
22 self.debugflag = self.configbool("ui", "debug") |
24 self.debugflag = self.configbool("ui", "debug") |
23 self.interactive = self.configbool("ui", "interactive", True) |
25 self.interactive = self.configbool("ui", "interactive", True) |
24 |
26 |
25 self.updateopts(verbose, debug, quiet, interactive) |
27 self.updateopts(verbose, debug, quiet, interactive) |
26 self.diffcache = None |
28 self.diffcache = None |
|
29 |
|
30 def __getattr__(self, key): |
|
31 return getattr(self.parentui, key) |
27 |
32 |
28 def updateopts(self, verbose=False, debug=False, quiet=False, |
33 def updateopts(self, verbose=False, debug=False, quiet=False, |
29 interactive=True): |
34 interactive=True): |
30 self.quiet = (self.quiet or quiet) and not verbose and not debug |
35 self.quiet = (self.quiet or quiet) and not verbose and not debug |
31 self.verbose = (self.verbose or verbose) or debug |
36 self.verbose = (self.verbose or verbose) or debug |
47 def config(self, section, name, default=None): |
52 def config(self, section, name, default=None): |
48 if self.overlay.has_key((section, name)): |
53 if self.overlay.has_key((section, name)): |
49 return self.overlay[(section, name)] |
54 return self.overlay[(section, name)] |
50 if self.cdata.has_option(section, name): |
55 if self.cdata.has_option(section, name): |
51 return self.cdata.get(section, name) |
56 return self.cdata.get(section, name) |
52 return default |
57 if self.parentui is None: |
|
58 return default |
|
59 else: |
|
60 return self.parentui.config(section, name, default) |
53 |
61 |
54 def configbool(self, section, name, default=False): |
62 def configbool(self, section, name, default=False): |
55 if self.overlay.has_key((section, name)): |
63 if self.overlay.has_key((section, name)): |
56 return self.overlay[(section, name)] |
64 return self.overlay[(section, name)] |
57 if self.cdata.has_option(section, name): |
65 if self.cdata.has_option(section, name): |
58 return self.cdata.getboolean(section, name) |
66 return self.cdata.getboolean(section, name) |
59 return default |
67 if self.parentui is None: |
|
68 return default |
|
69 else: |
|
70 return self.parentui.configbool(section, name, default) |
60 |
71 |
61 def configitems(self, section): |
72 def configitems(self, section): |
|
73 items = {} |
|
74 if self.parentui is not None: |
|
75 items = dict(self.parentui.configitems(section)) |
62 if self.cdata.has_section(section): |
76 if self.cdata.has_section(section): |
63 return self.cdata.items(section) |
77 items.update(dict(self.cdata.items(section))) |
64 return [] |
78 x = items.items() |
|
79 x.sort() |
|
80 return x |
65 |
81 |
66 def walkconfig(self): |
82 def walkconfig(self, seen=None): |
67 seen = {} |
83 if seen is None: |
|
84 seen = {} |
68 for (section, name), value in self.overlay.iteritems(): |
85 for (section, name), value in self.overlay.iteritems(): |
69 yield section, name, value |
86 yield section, name, value |
70 seen[section, name] = 1 |
87 seen[section, name] = 1 |
71 for section in self.cdata.sections(): |
88 for section in self.cdata.sections(): |
72 for name, value in self.cdata.items(section): |
89 for name, value in self.cdata.items(section): |
73 if (section, name) in seen: continue |
90 if (section, name) in seen: continue |
74 yield section, name, value.replace('\n', '\\n') |
91 yield section, name, value.replace('\n', '\\n') |
75 seen[section, name] = 1 |
92 seen[section, name] = 1 |
|
93 if self.parentui is not None: |
|
94 for parent in self.parentui.walkconfig(seen): |
|
95 yield parent |
76 |
96 |
77 def extensions(self): |
97 def extensions(self): |
78 return self.configitems("extensions") |
98 return self.configitems("extensions") |
79 |
99 |
80 def diffopts(self): |
100 def diffopts(self): |