|
36 |
import re |
36 |
import re |
37 |
import errno |
37 |
import errno |
38 |
import time |
38 |
import time |
|
|
39 |
from collections import MutableMapping |
39 |
|
40 |
|
40 |
__all__ = ['StrictModeException', 'exception_occured', |
41 |
__all__ = ['StrictModeException', 'exception_occured', |
41 |
'SCOPE', 'ConfigRegistry'] |
42 |
'SCOPE', 'ConfigRegistry'] |
Lines 59-65
def exception_occured(out=sys.stderr):
|
Link Here
|
---|
|
59 |
SCOPE = ['normal', 'ldap', 'schedule', 'forced', 'custom'] |
60 |
SCOPE = ['normal', 'ldap', 'schedule', 'forced', 'custom'] |
60 |
|
61 |
|
61 |
|
62 |
|
62 |
class ConfigRegistry(dict): |
63 |
class ConfigRegistry(MutableMapping): |
63 |
|
64 |
|
64 |
""" |
65 |
""" |
65 |
Merged persistent value store. |
66 |
Merged persistent value store. |
Lines 75-81
class ConfigRegistry(dict):
|
Link Here
|
---|
|
75 |
} |
76 |
} |
76 |
|
77 |
|
77 |
def __init__(self, filename=None, write_registry=NORMAL): |
78 |
def __init__(self, filename=None, write_registry=NORMAL): |
78 |
dict.__init__(self) |
79 |
super(ConfigRegistry, self).__init__() |
79 |
self.file = os.getenv('UNIVENTION_BASECONF') or filename or None |
80 |
self.file = os.getenv('UNIVENTION_BASECONF') or filename or None |
80 |
if self.file: |
81 |
if self.file: |
81 |
self.scope = ConfigRegistry.CUSTOM |
82 |
self.scope = ConfigRegistry.CUSTOM |
Lines 145-152
class ConfigRegistry(dict):
|
Link Here
|
---|
|
145 |
del registry[key] |
146 |
del registry[key] |
146 |
|
147 |
|
147 |
def __getitem__(self, key): |
148 |
def __getitem__(self, key): |
148 |
"""Return registry value.""" |
149 |
"""Return registry value. |
149 |
return self.get(key) |
150 |
Bug: for historic reasons ucr[key] must return '' instead of raising KeyError - it would break all UCR templates! |
|
|
151 |
""" |
152 |
return self.get(key, '') |
150 |
|
153 |
|
151 |
def __setitem__(self, key, value): |
154 |
def __setitem__(self, key, value): |
152 |
"""Set registry value.""" |
155 |
"""Set registry value.""" |
Lines 165-177
class ConfigRegistry(dict):
|
Link Here
|
---|
|
165 |
return True |
168 |
return True |
166 |
return False |
169 |
return False |
167 |
|
170 |
|
168 |
def iterkeys(self): |
171 |
def __iter__(self): |
169 |
"""Iterate over all registry keys.""" |
172 |
"""Iterate over all registry keys.""" |
170 |
merge = self._merge() |
173 |
merge = self._merge() |
171 |
for key in merge: |
174 |
for key in merge: |
172 |
yield key |
175 |
yield key |
173 |
|
176 |
|
174 |
__iter__ = iterkeys |
177 |
def __len__(self): |
|
|
178 |
"""Return length.""" |
179 |
merge = self._merge() |
180 |
return len(merge) |
175 |
|
181 |
|
176 |
def get(self, key, default=None, getscope=False): |
182 |
def get(self, key, default=None, getscope=False): |
177 |
"""Return registry value (including optional scope).""" |
183 |
"""Return registry value (including optional scope).""" |
Lines 182-191
class ConfigRegistry(dict):
|
Link Here
|
---|
|
182 |
ConfigRegistry.CUSTOM): |
188 |
ConfigRegistry.CUSTOM): |
183 |
try: |
189 |
try: |
184 |
registry = self._registry[reg] |
190 |
registry = self._registry[reg] |
185 |
# BUG: _ConfigRegistry[key] does not raise a KeyError for unset |
|
|
186 |
# keys, but returns '' |
187 |
if key not in registry: |
188 |
continue |
189 |
value = registry[key] |
191 |
value = registry[key] |
190 |
if getscope: |
192 |
if getscope: |
191 |
return (reg, value) |
193 |
return (reg, value) |
Lines 218-244
class ConfigRegistry(dict):
|
Link Here
|
---|
|
218 |
continue |
220 |
continue |
219 |
for key, value in registry.items(): |
221 |
for key, value in registry.items(): |
220 |
if key not in merge: |
222 |
if key not in merge: |
221 |
if getscope: |
223 |
merge[key] = (reg, value) if getscope else value |
222 |
merge[key] = (reg, value) |
|
|
223 |
else: |
224 |
merge[key] = registry[key] |
225 |
return merge |
224 |
return merge |
226 |
|
225 |
|
227 |
def items(self, getscope=False): |
|
|
228 |
"""Return all registry entries a 2-tuple (key, value).""" |
229 |
merge = self._merge(getscope=getscope) |
230 |
return merge.items() |
231 |
|
232 |
def keys(self): |
233 |
"""Return all registry keys.""" |
234 |
merge = self._merge() |
235 |
return merge.keys() |
236 |
|
237 |
def values(self): |
238 |
"""Return all registry values.""" |
239 |
merge = self._merge() |
240 |
return merge.values() |
241 |
|
242 |
def __str__(self): |
226 |
def __str__(self): |
243 |
"""Return registry content as string.""" |
227 |
"""Return registry content as string.""" |
244 |
merge = self._merge() |
228 |
merge = self._merge() |
Lines 410-422
class _ConfigRegistry(dict):
|
Link Here
|
---|
|
410 |
"""Un-lock sub registry file.""" |
394 |
"""Un-lock sub registry file.""" |
411 |
self.lock_file.close() |
395 |
self.lock_file.close() |
412 |
|
396 |
|
413 |
def __getitem__(self, key): |
|
|
414 |
"""Return value from sub registry.""" |
415 |
try: |
416 |
return dict.__getitem__(self, key) |
417 |
except KeyError: |
418 |
return '' |
419 |
|
420 |
def __setitem__(self, key, value): |
397 |
def __setitem__(self, key, value): |
421 |
"""Set value in sub registry.""" |
398 |
"""Set value in sub registry.""" |
422 |
if self.strict_encoding: |
399 |
if self.strict_encoding: |