Как использовать аргумент, возвращаемый декоратором в другом декораторе, который вызывается после первого декоратора
Я использую два декоратора для украшения функции "add_user", первый из которых @auth_user аутентифицирует вошедшего пользователя через заголовки запроса веб-токена json и возвращает информацию пользователя в качестве аргумента "user_info" обратно в оформленную функцию add_user. Второй декоратор @has_permission должен проверить, есть ли у пользователя разрешения на запрашиваемый ресурс. Я хотел передать информацию пользователя, возвращенную как user_info @auth_user в @has_permission, но не знаю, как это сделать, вот код до сих пор:
Что я уже пробовал:
@has_permission @auth_user def add_user(user_info): """ do something """ return None
Оформитель:
def auth_user(f): @wraps(f) def wrapper(*args, **kwargs): data = jwt.decode(request.headers['some-access-token'], some_secret_key) try: user_info = User.query.filter(User.id==data['user_id']).first() except: return jsonify({"message" : "error"}), 401 return f(user_info, *args, **kwargs) return wrapper
и:
def has_permission(f): wraps(f) def wrapper(*args, **kwargs): # This is where I want to access the user information instead of processing the key again # # return some new_args ... # return f(*args, **kwargs) return wrapper
Каков наилучший способ достичь этого?
Спасибо.