diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-14 23:17:36 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-14 23:17:36 +0000 |
commit | 4482c71aeb4f150caeb902c4f784a3b157106c5a (patch) | |
tree | d434a0020fbdbe5be0d4b4fafc27e7ed3ae2c538 /ipalib | |
parent | 5a1abcdf4ff3433bcce15cd336660d73ab7c8d5b (diff) | |
download | freeipa-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.py | 39 | ||||
-rw-r--r-- | ipalib/tests/test_public.py | 15 |
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): """ |