Сначала мой проект выглядит так:
├───api
│ ├───config
│ │ └───config.json
│ ├───namespace
│ │ └───routes.py
│ └───auth.py (where the decorator is)
│ │
│ └───__init__.py (where the config is injected with flask injector)
├───core
└───example_service.py
Я пытался провести рефакторинг некоторого существующего кода в приложении-колбе, чтобы избежать написания URL-адреса проверки в коде. Идея состоит в том, чтобы создать декоратор @authorize, используемый в каждом обработчике маршрута приложения, чтобы проверить, установлен ли заголовок запроса Авторизация и работает ли он.
Сейчас декоратор выглядит так:
def authorize(func):
def decorator(*args, **kwargs):
get_token_info()
return func(*args, **kwargs)
return decorator
И функция проверки выглядит следующим образом:
def get_token_info():
session = requests.Session()
res = session.get('my_auth_url', headers={'Authorization' : request.headers['Authorization']}
if r.status_code != requests.codes.ok:
abort(401)
Теперь у меня есть файл init для моего приложения, где я использую инжектор для фляги, чтобы внедрить конфигурацию моего приложения в мои классы различных служб. Дело в том, что я хотел бы также добавить my_auth_url, а не записывать его непосредственно в код. Но, похоже, инжектор для колб можно вводить только в классы.
Я пытался использовать глобальный контекст фляги, чтобы сделать URL доступным везде в приложении, и понял, что это не его цель, и я действительно не знаю, как это сделать. (Я новичок в Python на самом деле)
Большое спасибо за вашу помощь, и извините, если неясно, проект довольно большой, и трудно быть ясным и кратким одновременно.