def kwargs_as_needed(func):
"""
If function does not specify **kwargs, pass only params which it can accept
"""
spec = inspect.getfullargspec(inspect.unwrap(func))
acceptable_args = set(spec.args or ())
if isinstance(func, MethodType):
acceptable_args -= {spec.args[0]}
@wraps(func)
def inner(*args, **kwargs):
if spec.varkw is None:
kwargs = intersected_dict(kwargs, acceptable_args)
return func(*args, **kwargs)
return inner
评论列表
文章目录