Reputation: 317
I have a wrapper defined as follows:
def start_end_date_wrapper_fn(function):
def start_end_date_wrapper_args(**kwargs):
kwargs = kwargs.copy() # only update in fn scope
if kwargs['forecast_or_train'] == 'forecast':
kwargs['start_date'] = kwargs['start_date'] + dt.timedelta(days=-30)
kwargs['end_date'] = kwargs['end_date'] + dt.timedelta(days=30)
del kwargs['train_or_forecast']
return function(**kwargs)
return start_end_date_wrapper_args
wrapped function:
@start_end_date_wrapper_fn
def query_data(start_date, end_date):
# do something
I'm trying to get the names of the arguments of the wrapped function (query_data - start_date, end_date.) Instead the following returns the arguments of the wrapper (kwargs.)
query_data.__code__.co_varnames
Is there a way to get the argument names of the wrapped function?
Upvotes: 0
Views: 67
Reputation: 39354
You could get the decorator to make an attribute on the wrapper containing the original function:
def start_end_date_wrapper_fn(function):
def start_end_date_wrapper_args(**kwargs):
kwargs = kwargs.copy() # only update in fn scope
if kwargs['forecast_or_train'] == 'forecast':
kwargs['start_date'] = kwargs['start_date'] + dt.timedelta(days=-30)
kwargs['end_date'] = kwargs['end_date'] + dt.timedelta(days=30)
del kwargs['train_or_forecast']
return function(**kwargs)
start_end_date_wrapper_args.original = function
return start_end_date_wrapper_args
@start_end_date_wrapper_fn
def query_data(start_date, end_date):
# do something
print(query_data.original.__code__.co_varnames)
Output:
('start_date', 'end_date')
Upvotes: 1