mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
183: Added public.DefaultFrom class; added corresponding unit tests
This commit is contained in:
parent
b0ec8fe551
commit
cad924168e
@ -25,6 +25,7 @@ and UI all use.
|
|||||||
import re
|
import re
|
||||||
import inspect
|
import inspect
|
||||||
import plugable
|
import plugable
|
||||||
|
from plugable import lock
|
||||||
import errors
|
import errors
|
||||||
|
|
||||||
|
|
||||||
@ -39,6 +40,26 @@ def is_rule(obj):
|
|||||||
return callable(obj) and getattr(obj, RULE_FLAG, False) is True
|
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):
|
class option(plugable.Plugin):
|
||||||
"""
|
"""
|
||||||
The option class represents a kw argument from a command.
|
The option class represents a kw argument from a command.
|
||||||
|
@ -63,6 +63,41 @@ def test_is_rule():
|
|||||||
assert not is_rule(call(None))
|
assert not is_rule(call(None))
|
||||||
|
|
||||||
|
|
||||||
|
class test_DefaltFrom(ClassChecker):
|
||||||
|
"""
|
||||||
|
Tests the `public.DefaltFrom` class.
|
||||||
|
"""
|
||||||
|
_cls = public.DefaultFrom
|
||||||
|
|
||||||
|
def test_class(self):
|
||||||
|
assert self.cls.__bases__ == (plugable.ReadOnly,)
|
||||||
|
|
||||||
|
def test_init(self):
|
||||||
|
def callback(*args):
|
||||||
|
return args
|
||||||
|
keys = ('givenname', 'sn')
|
||||||
|
o = self.cls(callback, *keys)
|
||||||
|
assert read_only(o, 'callback') is callback
|
||||||
|
assert read_only(o, 'keys') == keys
|
||||||
|
|
||||||
|
def test_call(self):
|
||||||
|
def callback(givenname, sn):
|
||||||
|
return givenname[0] + sn[0]
|
||||||
|
keys = ('givenname', 'sn')
|
||||||
|
o = self.cls(callback, *keys)
|
||||||
|
kw = dict(
|
||||||
|
givenname='John',
|
||||||
|
sn='Public',
|
||||||
|
hello='world',
|
||||||
|
)
|
||||||
|
assert o(**kw) == 'JP'
|
||||||
|
assert o() is None
|
||||||
|
for key in ('givenname', 'sn'):
|
||||||
|
kw_copy = dict(kw)
|
||||||
|
del kw_copy[key]
|
||||||
|
assert o(**kw_copy) is None
|
||||||
|
|
||||||
|
|
||||||
class test_option(ClassChecker):
|
class test_option(ClassChecker):
|
||||||
"""
|
"""
|
||||||
Tests the `public.option` class.
|
Tests the `public.option` class.
|
||||||
|
Loading…
Reference in New Issue
Block a user