287: Renamed Command.args_to_kw() to Command.group_args(), which now returns a tuple instead of dict; updated unit tests

This commit is contained in:
Jason Gerard DeRose 2008-09-10 23:18:29 +00:00
parent 7c40226500
commit c17c5efb4e
2 changed files with 39 additions and 35 deletions

View File

@ -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:
def group_args(self, *values):
args = tuple(self.args())
if len(args) == 0:
if len(values) > 0:
raise errors.ArgumentError(self, 'takes no arguments')
if len(args) > len(Args) and not Args[-1].multivalue:
if len(Args) == 1:
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)
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:
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):

View File

@ -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'