View | Details | Raw Unified | Return to bug 33101
Collapse All | Expand All

(-)a/base/univention-config-registry/python/univention/config_registry/backend.py (-36 / +13 lines)
 Lines 36-41   import fcntl Link Here 
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:
(-)a/base/univention-config-registry/python/univention/config_registry/interfaces.py (-4 lines)
 Lines 193-202   class VengefulConfigRegistry(ConfigRegistry): Link Here 
193
				ConfigRegistry.CUSTOM):
193
				ConfigRegistry.CUSTOM):
194
			try:
194
			try:
195
				registry = self._registry[reg]
195
				registry = self._registry[reg]
196
				# BUG: _ConfigRegistry[key] does not raise a KeyError for unset
197
				# keys, but returns ''
198
				if key not in registry:
199
					raise KeyError(key)
200
				value = registry[key]
196
				value = registry[key]
201
				return value
197
				return value
202
			except KeyError:
198
			except KeyError:

Return to bug 33101