diff options
Diffstat (limited to 'ipalib/public.py')
-rw-r--r-- | ipalib/public.py | 48 |
1 files changed, 26 insertions, 22 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): |