Система контроля библиотеки на Flask-Potion, Часть 0: готовим всё, что понадобится
- суббота, 19 октября 2019 г. в 00:33:35
В своей работе я уже некоторое время использую Flask-Potion — фреймворк, основными достоинствами которого являются: весьма удобная интеграция с SQLAlchemy моделями, автогенерация crud-эндпоинтов, наличие клиента potion-client (весьма удобного, если пишешь API сервиса, использование которого понадобится в другом сервисе).
Я заметил, что на русском языке о flask-potion почти ничего нет, но думаю кому-то это данный фреймворк может показаться интересным.
Вместо простой обзорной статьи на этот фреймворк я решил написать несколько статей о создании системы контроля для библиотеки "Furfur" на основе Flask-Potion.
Данная система должна уметь делать следующее:
В этой системе мы воспользуемся следующими инструментами:
Чтобы не собирать скелет для проекта самим, воспользуемся cookiecutter-шаблоном Valefor, который включает в себя все вышеперечисленные зависимости и даже больше.
cookiecutter gh:lemegetonx/valefor
Этот шаблон включает в себя два приложения:
В шаблоне используется poetry для разрешения зависимостей, но с недавних пор pip тоже поддерживает pyproject.toml, поэтому тут выбор за вами. Я воспользуюсь poetry.
poetry install
Для упрощённой конфигурации в шаблоне применена библиотека sitri. Нам понадобится немного изменить настройку объекта Sitri.
from sitri import Sitri
from sitri.contrib.yaml import YamlConfigProvider, YamlCredentialProvider
configuration = Sitri(
config_provider=YamlConfigProvider(yaml_path="./config.yaml"),
credential_provider=YamlCredentialProvider(yaml_path="./credential.yaml"),
)
P.S. подробнее о том, что собственно здесь происходит легче прочитать в документации, если коротко, то сейчас мы просто определили откуда будем брать данные для конфигурации и авторизации.
DB_NAME = configuration.get_credential("db.name", path_mode=True)
DB_HOST = configuration.get_credential("db.host", path_mode=True)
DB_PASSWORD = configuration.get_credential("db.user.password", path_mode=True)
DB_PORT = configuration.get_credential("db.port", path_mode=True)
DB_USER = configuration.get_credential("db.user.name", path_mode=True)
Итак, файл config.yaml уже был в шаблоне, а вот credential.yaml должны написать сами. В реальной жизни подобные файлы обязательно добавляются в .gitignore, но я добавлю шаблон credential.yaml в репозиторий, чтобы его структура была понятна любому, кто зайдёт в проект.
Базовый credential.yaml:
db:
name: furfur_db
host: localhost
port: 5432
user:
password: passwd
name: admin
Следующий этап нашей подготовки — это развертывание СУБД, в данном случае PostgreSQL. Я для удобства сделаю stack.yaml файл, где опишу запуск контейнера postgres с нужными для нас данными.
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: passwd
POSTGRES_USER: admin
POSTGRES_DB: furfur_db
ports:
- 5432:5432
Как говорилось ранее, в состав шаблона valefor входит базовая модель User, нужная для работы JWT (хендлеров), поэтому заключительный этам подготовки БД — это миграция (создание таблицы пользователей).
Находясь в корне проекта исполняем следующие команды:
export FLASK_APP=furfur.app
flask db init
flask db migrate
flask db upgrade
Всё, с подготовкой БД, как и в целом основы для нашей системы, мы закончили.
В следующей части мы рассмотрим простые и модельные ресурсы в flask-potion, автогенерируемую документацию и используемую спецификацию схемы для запросов.