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): for option in sorted(self.options(), key=get_key):
yield option yield option
def args_to_kw(self, *args): def group_args(self, *values):
Args = tuple(self.args()) args = tuple(self.args())
if len(Args) == 0 and len(args) > 0: if len(args) == 0:
raise errors.ArgumentError(self, 'takes no arguments') if len(values) > 0:
if len(args) > len(Args) and not Args[-1].multivalue: raise errors.ArgumentError(self, 'takes no arguments')
if len(Args) == 1: else:
error = 'takes at most 1 argument' return tuple()
else: if len(values) > len(args) and not args[-1].multivalue:
error = 'takes at most %d arguments' % len(Args) if len(args) == 1:
raise errors.ArgumentError(self, error) error = 'takes at most 1 argument'
MinArgs = sum(int(A.required) for A in Args) else:
if len(args) < MinArgs: error = 'takes at most %d arguments' % len(args)
if MinArgs == 1: 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' error = 'takes at least 1 argument'
else: else:
error = 'takes at least %d arguments' % MinArgs error = 'takes at least %d arguments' % min_args
raise errors.ArgumentError(self, error) 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): def __group_args_iter(self, values, args):
for (i, Arg) in enumerate(self.args()): for (i, arg) in enumerate(args):
if len(args) > i: if len(values) > i:
if Arg.multivalue: if arg.multivalue:
yield (Arg.name, args[i:]) yield values[i:]
else: else:
yield (Arg.name, args[i]) yield values[i]
else: else:
assert not Arg.required assert not arg.required
yield None
class Object(plugable.Plugin): class Object(plugable.Plugin):

View File

@ -550,38 +550,38 @@ class test_Command(ClassChecker):
""" """
assert 'execute' in self.cls.__public__ # Public 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?')) o = self.__get_instance(args=('one', 'two?'))
assert o.args_to_kw(1) == dict(one=1) assert o.group_args(1) == (1, None)
assert o.args_to_kw(1, 2) == dict(one=1, two=2) assert o.group_args(1, 2) == (1, 2)
o = self.__get_instance(args=('one', 'two*')) o = self.__get_instance(args=('one', 'two*'))
assert o.args_to_kw(1) == dict(one=1) assert o.group_args(1) == (1, None)
assert o.args_to_kw(1, 2) == dict(one=1, two=(2,)) assert o.group_args(1, 2) == (1, (2,))
assert o.args_to_kw(1, 2, 3) == dict(one=1, two=(2, 3)) assert o.group_args(1, 2, 3) == (1, (2, 3))
o = self.__get_instance(args=('one', 'two+')) o = self.__get_instance(args=('one', 'two+'))
assert o.args_to_kw(1, 2) == dict(one=1, two=(2,)) assert o.group_args(1, 2) == (1, (2,))
assert o.args_to_kw(1, 2, 3) == dict(one=1, two=(2, 3)) assert o.group_args(1, 2, 3) == (1, (2, 3))
o = self.__get_instance() 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' assert str(e) == 'example takes no arguments'
o = self.__get_instance(args=('one?',)) 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' assert str(e) == 'example takes at most 1 argument'
o = self.__get_instance(args=('one', 'two?')) 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' assert str(e) == 'example takes at most 2 arguments'
o = self.__get_instance(args=('one', 'two?')) 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' assert str(e) == 'example takes at least 1 argument'
o = self.__get_instance(args=('one', 'two', 'three?')) 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' assert str(e) == 'example takes at least 2 arguments'