summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-14 23:17:36 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-14 23:17:36 +0000
commit4482c71aeb4f150caeb902c4f784a3b157106c5a (patch)
treed434a0020fbdbe5be0d4b4fafc27e7ed3ae2c538 /ipalib
parent5a1abcdf4ff3433bcce15cd336660d73ab7c8d5b (diff)
downloadfreeipa-4482c71aeb4f150caeb902c4f784a3b157106c5a.tar.gz
freeipa-4482c71aeb4f150caeb902c4f784a3b157106c5a.tar.xz
freeipa-4482c71aeb4f150caeb902c4f784a3b157106c5a.zip
292: Added experimental Command.args_to_kw() method
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/public.py39
-rw-r--r--ipalib/tests/test_public.py15
2 files changed, 42 insertions, 12 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index 088e65c55..9a90a97f7 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -333,12 +333,13 @@ class Command(plugable.Plugin):
)
def __call__(self, *args, **kw):
- print ''
- self.print_call('__call__', kw)
+ arg_kw = self.args_to_kw(*args)
+ assert set(arg_kw).intersection(kw) == set()
+ kw.update(arg_kw)
kw = self.normalize(**kw)
+ kw = self.convert(**kw)
kw.update(self.get_default(**kw))
self.validate(**kw)
- self.execute(**kw)
def smart_option_order(self):
def get_key(option):
@@ -373,15 +374,29 @@ class Command(plugable.Plugin):
return tuple(self.__group_args_iter(values, args))
def __group_args_iter(self, values, args):
- for (i, arg) in enumerate(args):
- if len(values) > i:
- if arg.multivalue:
- yield values[i:]
- else:
- yield values[i]
- else:
- assert not arg.required
- yield None
+ for (i, arg) in enumerate(args):
+ if len(values) > i:
+ if arg.multivalue:
+ yield values[i:]
+ else:
+ yield values[i]
+ else:
+ assert not arg.required
+ yield None
+
+ def args_to_kw(self, *values):
+ return dict(self.__args_to_kw_iter(values))
+
+ def __args_to_kw_iter(self, values):
+ multivalue = False
+ for (i, arg) in enumerate(self.args()):
+ assert not multivalue
+ if len(values) > i:
+ if arg.multivalue:
+ multivalue = True
+ yield (arg.name, values[i:])
+ else:
+ yield (arg.name, values[i])
class Object(plugable.Plugin):
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index aac962b53..578332eaa 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -584,6 +584,21 @@ class test_Command(ClassChecker):
e = raises(errors.ArgumentError, o.group_args, 1)
assert str(e) == 'example takes at least 2 arguments'
+ def test_args_to_kw(self):
+ o = self.__get_instance(args=('one', 'two?'))
+ assert o.args_to_kw(1) == dict(one=1)
+ assert o.args_to_kw(1, 2) == dict(one=1, two=2)
+
+ o = self.__get_instance(args=('one', 'two*'))
+ assert o.args_to_kw(1) == dict(one=1)
+ assert o.args_to_kw(1, 2) == dict(one=1, two=(2,))
+ assert o.args_to_kw(1, 2, 3) == dict(one=1, two=(2, 3))
+
+ o = self.__get_instance(args=('one', 'two+'))
+ assert o.args_to_kw(1) == dict(one=1)
+ assert o.args_to_kw(1, 2) == dict(one=1, two=(2,))
+ assert o.args_to_kw(1, 2, 3) == dict(one=1, two=(2, 3))
+
class test_Object(ClassChecker):
"""