aboutsummaryrefslogtreecommitdiffstats
path: root/debian/lib
diff options
context:
space:
mode:
Diffstat (limited to 'debian/lib')
-rw-r--r--debian/lib/python/debian_linux/utils.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/debian/lib/python/debian_linux/utils.py b/debian/lib/python/debian_linux/utils.py
index abe46b7b3d40..b0ff1a6e2617 100644
--- a/debian/lib/python/debian_linux/utils.py
+++ b/debian/lib/python/debian_linux/utils.py
@@ -1,5 +1,7 @@
import debian, re, os, textwrap
+_marker = object
+
class SortedDict(dict):
__slots__ = '_list',
@@ -36,12 +38,7 @@ class Templates(dict):
self.dirs = dirs
def __getitem__(self, key):
- try:
- return super(Templates, self).__getitem__(key)
- except KeyError: pass
- value = self._read(key)
- super(Templates, self).__setitem__(key, value)
- return value
+ return self.get(key)
def __setitem__(self, key, value):
raise NotImplemented()
@@ -56,7 +53,6 @@ class Templates(dict):
if prefix == 'control':
return self._read_control(f)
return f.read()
- raise KeyError(name)
def _read_control(self, f):
entries = []
@@ -93,6 +89,18 @@ class Templates(dict):
return entries
+ def get(self, key, default = _marker):
+ ret = super(Templates, self).get(key, _marker)
+ if ret is not _marker:
+ return ret
+ value = self._read(key)
+ if value is None:
+ if default is _marker:
+ raise KeyError(key)
+ return default
+ super(Templates, self).__setitem__(key, value)
+ return value
+
class TextWrapper(textwrap.TextWrapper):
wordsep_re = re.compile(
r'(\s+|' # any whitespace