Как использовать декоратор после ввода конфига в приложение фляги? - PullRequest
0 голосов
/ 19 марта 2019

Сначала мой проект выглядит так:

├───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 на самом деле)

Большое спасибо за вашу помощь, и извините, если неясно, проект довольно большой, и трудно быть ясным и кратким одновременно.

1 Ответ

2 голосов
/ 19 марта 2019

Вы можете получить значение my_auth_url из переменных среды.

def get_token_info():
    my_auth_url = os.getenv('AUTHORIZATION_SERVICE_ENDPOINT')
    session = requests.Session()
    res = session.get(my_auth_url, headers={'Authorization' : request.headers['Authorization']}
    if r.status_code != requests.codes.ok:
        abort(401)
...