I am writing a decorator that needs to call other functions prior to call of the function that it is decorating. The decorated function may have positional arguments, but the functions the decorator will call can only accept keyword arguments. Does anyone have a handy way of converting positional arguments into keyword arguments?
I know that I can get a list of the variable names of the decorated function:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
But I can't figure out how to tell what was passed in positionally and what was as keyword.
My decorator looks like this:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
Is there a way other than just comparing kwargs and co_varnames, adding to kwargs anything not in there, and hoping for the best?