summaryrefslogtreecommitdiffstats
path: root/ipalib/frontend.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-24 21:46:37 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-24 21:46:37 +0000
commit250a01b5b7ee81b19b5da80f1ef47f1ab9174a64 (patch)
tree4f2cf9c4ab46e8baf24d8f05b1351562c61958d1 /ipalib/frontend.py
parent566d5ea02a5dfdf6f0da0ce1a3f0bb656604c233 (diff)
downloadfreeipa.git-250a01b5b7ee81b19b5da80f1ef47f1ab9174a64.tar.gz
freeipa.git-250a01b5b7ee81b19b5da80f1ef47f1ab9174a64.tar.xz
freeipa.git-250a01b5b7ee81b19b5da80f1ef47f1ab9174a64.zip
348: If no keys are passed to DefaultFrom.__init__(), the keys from callback.func_code.co_varnames are used; updated DefaultFrom unit tests to test this usage
Diffstat (limited to 'ipalib/frontend.py')
-rw-r--r--ipalib/frontend.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/ipalib/frontend.py b/ipalib/frontend.py
index 7e22a9fa..1e27d93b 100644
--- a/ipalib/frontend.py
+++ b/ipalib/frontend.py
@@ -61,12 +61,16 @@ class DefaultFrom(plugable.ReadOnly):
:param callback: The callable to call when all ``keys`` are present.
:param keys: The keys used to map from keyword to position arguments.
"""
- assert callable(callback), 'not a callable: %r' % callback
- assert len(keys) > 0, 'must have at least one key'
- for key in keys:
- assert type(key) is str, 'not an str: %r' % key
+ if not callable(callback):
+ raise TypeError('callback must be callable; got %r' % callback)
self.callback = callback
- self.keys = keys
+ if len(keys) == 0:
+ self.keys = callback.func_code.co_varnames
+ else:
+ self.keys = keys
+ for key in self.keys:
+ if type(key) is not str:
+ raise_TypeError(key, str, 'keys')
lock(self)
def __call__(self, **kw):
@@ -77,11 +81,11 @@ class DefaultFrom(plugable.ReadOnly):
"""
vals = tuple(kw.get(k, None) for k in self.keys)
if None in vals:
- return None
+ return
try:
return self.callback(*vals)
- except Exception:
- return None
+ except StandardError:
+ pass
def parse_param_spec(spec):