move apply_argspec to koji.util

This commit is contained in:
Mike McLean 2017-10-18 12:05:51 -04:00
parent 89825a8d2d
commit d8132543c5
3 changed files with 62 additions and 64 deletions

View file

@ -95,44 +95,6 @@ def safe_rmtree(path, unmount=False, strict=True):
return 0
def apply_argspec(argspec, args, kwargs=None):
"""Apply an argspec to the given args and return a dictionary"""
if kwargs is None:
kwargs = {}
f_args, f_varargs, f_varkw, f_defaults = argspec
data = dict(zip(f_args, args))
if len(args) > len(f_args):
if not f_varargs:
raise koji.ParameterError, "Too many args"
data[f_varargs] = tuple(args[len(f_args):])
elif f_varargs:
data[f_varargs] = ()
if f_varkw:
data[f_varkw] = {}
for arg in kwargs:
if arg in data:
raise koji.ParameterError, "duplicate keyword argument %r" \
% arg
if arg in f_args:
data[arg] = kwargs[arg]
elif not f_varkw:
raise koji.ParameterError, "Unexpected keyword argument %r" \
% (arg)
else:
data[f_varkw][arg] = kwargs[arg]
if f_defaults:
for arg, val in zip(f_args[-len(f_defaults):], f_defaults):
data.setdefault(arg, val)
for n, arg in enumerate(f_args):
if arg not in data:
# missing arg
raise koji.ParameterError, "missing required argument %r (#%i)" \
% (arg, n)
return data
class ServerExit(Exception):
"""Raised to shutdown the server"""
pass
@ -164,7 +126,7 @@ def parse_task_params(method, params):
err = None
for argspec in LEGACY_SIGNATURES[method]:
try:
params = apply_argspec(argspec, args, kwargs)
params = koji.util.apply_argspec(argspec, args, kwargs)
break
except koji.ParameterError, e:
if not err: