core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
This commit is contained in:
parent
ff79fa3ce0
commit
34a6d18475
1 changed files with 18 additions and 8 deletions
|
|
@ -20,6 +20,7 @@
|
|||
from sat.core.i18n import _
|
||||
from sat.core.log import getLogger
|
||||
log = getLogger(__name__)
|
||||
from twisted.python import failure
|
||||
|
||||
|
||||
class MemoryNotInitializedError(Exception):
|
||||
|
|
@ -199,26 +200,35 @@ class LazyPersistentBinaryDict(PersistentBinaryDict):
|
|||
def __iter__(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def _data2value(self, data, key):
|
||||
try:
|
||||
return data[key]
|
||||
except KeyError as e:
|
||||
# we return a Failure here to avoid the jump
|
||||
# into debugger in debug mode.
|
||||
raise failure.Failure(e)
|
||||
|
||||
def __getitem__(self, key):
|
||||
"""get the value as a Deferred"""
|
||||
d = self.storage.getPrivates(self.namespace, keys=[key], binary=self.binary, profile=self.profile)
|
||||
d.addCallback(lambda data: data[key])
|
||||
d = self.storage.getPrivates(self.namespace, keys=[key], binary=self.binary,
|
||||
profile=self.profile)
|
||||
d.addCallback(self._data2value, key)
|
||||
return d
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self.storage.setPrivateValue(self.namespace, key, value, self.binary, self.profile)
|
||||
self.storage.setPrivateValue(self.namespace, key, value, self.binary,
|
||||
self.profile)
|
||||
|
||||
def __delitem__(self, key):
|
||||
self.storage.delPrivateValue(self.namespace, key, self.binary, self.profile)
|
||||
|
||||
def _valueOrDefault(self, value, default):
|
||||
if value is None:
|
||||
return default
|
||||
return value
|
||||
def _defaultOrException(self, failure_, default):
|
||||
failure_.trap(KeyError)
|
||||
return default
|
||||
|
||||
def get(self, key, default=None):
|
||||
d = self.__getitem__(key)
|
||||
d.addCallback(self._valueOrDefault)
|
||||
d.addErrback(self._defaultOrException, default=default)
|
||||
return d
|
||||
|
||||
def setdefault(self, key, default):
|
||||
|
|
|
|||
Loading…
Reference in a new issue