From cad924168eebbb3618205651f8c7a30bf00fe47d Mon Sep 17 00:00:00 2001 From: Jason Gerard DeRose Date: Fri, 22 Aug 2008 20:07:17 +0000 Subject: 183: Added public.DefaultFrom class; added corresponding unit tests --- ipalib/public.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'ipalib/public.py') diff --git a/ipalib/public.py b/ipalib/public.py index ff8bd8b0..19a678fb 100644 --- a/ipalib/public.py +++ b/ipalib/public.py @@ -25,6 +25,7 @@ and UI all use. import re import inspect import plugable +from plugable import lock import errors @@ -39,6 +40,26 @@ def is_rule(obj): return callable(obj) and getattr(obj, RULE_FLAG, False) is True +class DefaultFrom(plugable.ReadOnly): + def __init__(self, callback, *keys): + assert callable(callback), 'not a callable: %r' % callback + self.callback = callback + self.keys = keys + lock(self) + + def __call__(self, **kw): + vals = tuple(kw.get(k, None) for k in self.keys) + if None in vals: + return None + try: + ret = self.callback(*vals) + except Exception: + return None + if isinstance(ret, basestring): + return ret + return None + + class option(plugable.Plugin): """ The option class represents a kw argument from a command. -- cgit