Это должно работать для простого декоратора:
def timing_function(func):
def wrapper(*args, **kwargs):
with app.app_context():
g.db_client = main_client["ondotfreight"]
func(*args, **kwargs)
return wrapper
Декоратор берет func
и возвращает то, что должно его заменить.Чтобы сделать его как можно более общим, внутренняя (замещающая) функция принимает *args
и **kwargs
, но она может быть специализированной.
Она использует глобальные переменные типа g
и app
, что делаетДекоратор очень зависит от среды, в которой он используется, но если ваш код без декоратора сработал, то это тоже должно быть.
Предполагая, что вы захотите добавить параметры в декоратор, например, чтобы передать ключчто входит в main_client
, это будет выглядеть так:
def timing_function(main_client_name)
def wrapper_gen(func):
def wrapper(*args, **kwargs):
with app.app_context():
g.db_client = main_client[main_client_name]
func(*args, **kwargs)
return wrapper
return wrapper_gen
Здесь вы сначала создаете декоратор из аргументов, а затем этот декоратор затем применяется к функции, как в обычном случае без аргументов.С этим вы можете сделать:
@timing_function("ondotfreight")
def test_check_unique(self):
# ...