summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-10 23:18:29 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-10 23:18:29 +0000
commitc17c5efb4e30c78bb53022e86f74b718dd49e758 (patch)
tree3fc4e08320711ba701f56feb885bffd524d2455a
parent7c40226500daa4a27f4430ef7f94ec4520ab72e5 (diff)
downloadfreeipa.git-c17c5efb4e30c78bb53022e86f74b718dd49e758.tar.gz
freeipa.git-c17c5efb4e30c78bb53022e86f74b718dd49e758.tar.xz
freeipa.git-c17c5efb4e30c78bb53022e86f74b718dd49e758.zip
287: Renamed Command.args_to_kw() to Command.group_args(), which now returns a tuple instead of dict; updated unit tests
-rw-r--r--ipalib/public.py48
-rw-r--r--ipalib/tests/test_public.py26
2 files changed, 39 insertions, 35 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index 4c0255ef..84d321be 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -350,34 +350,38 @@ class Command(plugable.Plugin):
for option in sorted(self.options(), key=get_key):
yield option
- def args_to_kw(self, *args):
- Args = tuple(self.args())
- if len(Args) == 0 and len(args) > 0:
- raise errors.ArgumentError(self, 'takes no arguments')
- if len(args) > len(Args) and not Args[-1].multivalue:
- if len(Args) == 1:
- error = 'takes at most 1 argument'
- else:
- error = 'takes at most %d arguments' % len(Args)
- raise errors.ArgumentError(self, error)
- MinArgs = sum(int(A.required) for A in Args)
- if len(args) < MinArgs:
- if MinArgs == 1:
+ def group_args(self, *values):
+ args = tuple(self.args())
+ if len(args) == 0:
+ if len(values) > 0:
+ raise errors.ArgumentError(self, 'takes no arguments')
+ else:
+ return tuple()
+ if len(values) > len(args) and not args[-1].multivalue:
+ if len(args) == 1:
+ error = 'takes at most 1 argument'
+ else:
+ error = 'takes at most %d arguments' % len(args)
+ raise errors.ArgumentError(self, error)
+ min_args = sum(int(a.required) for a in args)
+ if len(values) < min_args:
+ if min_args == 1:
error = 'takes at least 1 argument'
else:
- error = 'takes at least %d arguments' % MinArgs
+ error = 'takes at least %d arguments' % min_args
raise errors.ArgumentError(self, error)
- return dict(self.__args_to_kw_iter(args))
+ return tuple(self.__group_args_iter(values, args))
- def __args_to_kw_iter(self, args):
- for (i, Arg) in enumerate(self.args()):
- if len(args) > i:
- if Arg.multivalue:
- yield (Arg.name, args[i:])
+ 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 (Arg.name, args[i])
+ yield values[i]
else:
- assert not Arg.required
+ assert not arg.required
+ yield None
class Object(plugable.Plugin):
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index 8bff5a19..aac962b5 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -550,38 +550,38 @@ class test_Command(ClassChecker):
"""
assert 'execute' in self.cls.__public__ # Public
- def test_args_to_kw(self):
+ def test_group_args(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)
+ assert o.group_args(1) == (1, None)
+ assert o.group_args(1, 2) == (1, 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))
+ assert o.group_args(1) == (1, None)
+ assert o.group_args(1, 2) == (1, (2,))
+ assert o.group_args(1, 2, 3) == (1, (2, 3))
o = self.__get_instance(args=('one', 'two+'))
- 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))
+ assert o.group_args(1, 2) == (1, (2,))
+ assert o.group_args(1, 2, 3) == (1, (2, 3))
o = self.__get_instance()
- e = raises(errors.ArgumentError, o.args_to_kw, 1)
+ e = raises(errors.ArgumentError, o.group_args, 1)
assert str(e) == 'example takes no arguments'
o = self.__get_instance(args=('one?',))
- e = raises(errors.ArgumentError, o.args_to_kw, 1, 2)
+ e = raises(errors.ArgumentError, o.group_args, 1, 2)
assert str(e) == 'example takes at most 1 argument'
o = self.__get_instance(args=('one', 'two?'))
- e = raises(errors.ArgumentError, o.args_to_kw, 1, 2, 3)
+ e = raises(errors.ArgumentError, o.group_args, 1, 2, 3)
assert str(e) == 'example takes at most 2 arguments'
o = self.__get_instance(args=('one', 'two?'))
- e = raises(errors.ArgumentError, o.args_to_kw)
+ e = raises(errors.ArgumentError, o.group_args)
assert str(e) == 'example takes at least 1 argument'
o = self.__get_instance(args=('one', 'two', 'three?'))
- e = raises(errors.ArgumentError, o.args_to_kw, 1)
+ e = raises(errors.ArgumentError, o.group_args, 1)
assert str(e) == 'example takes at least 2 arguments'