- FastApi
- Pydantic
- Async SQLAlchemy
- Kafka
- Dependency Ijector
- PyTest
- Создайте свой .env на основе .env.template
- Запустите сервис через docker-compose
docker-compose build
docker-compose up --remove-orphans -d
Модели должны быть импортированы в application/{имя вашего приложения}/models/init.py
Для локальной установки окружения нужна librdkafka.
Mac os:
brew install librdkafka
Если при poetry install
будут возникать ошибки установки
confluent-kafka используйте:
C_INCLUDE_PATH=/opt/homebrew/Cellar/librdkafka/{Версия librdkafka}/include \
LIBRARY_PATH=/opt/homebrew/Cellar/librdkafka/{Версия librdkafka}/lib \
poetry install
Необходимо глобально установить pre-commit
pip install pre-commit
Создаем виртуальное окружение (необходимо для корректной работы mypy):
poetry install
В папке проекта выполните следующую команду, чтобы производились проверки перед каждым коммитом:
pre-commit install
Pre-commit запускается авторматически при коммите.
Ручной запуск pre-commit
pre-commit run --all-files
Использование black:
black --config pyproject.toml .
Использование isort:
isort --sp pyproject.toml .
Использование mypy:
poetry run mypy --config-file pyproject.toml .
Если проект предварительно не запущен:
docker-compose run --rm app pytest
Если проект предварительно запущен:
docker-compose exec app pytest
Параллельно:
docker-compose exec app pytest -n auto
Для работы с api в тестах использовать фикстуру test_client:
test_client: AsyncClient
Получить сессию можно через фикстуру db_session:
async def test_example(db_session: AsyncSession) -> None:
await db_session.commit()
После каждого теста происходит rollback и бд очищается. Во время тестирования, сессия подменяется на тестовую через override контейнера, что делает её общей и для тестов и для тестируемого кода.
Для Фабрик используйте AsyncSQLAlchemyModelFactory:
await SomeAsyncSQLAlchemyModelFactory(name="test")