Решение вступительного задания в школу бэкенд-разработки Яндекса (ссылка на задание).
Данный проект реализовался в целях обучения: поработать с aiohttp
, pytest
, docker
, github-actions
.
Перед тем как запустить приложение необходимо поднять postgres
в docker-контейнере,
либо вручную.
$ docker run --rm --detach --name=analyzer-postgres \
--env POSTGRES_USER=analyzer_user \
--env POSTGRES_PASSWORD=analyzer_password \
--env POSTGRES_DB=analyzer \
--publish 5432:5432 postgres:12.1
Используя Docker
- Загружаем docker-образ
$ docker pull mortalis/analyzer-api:latest
- Применяем миграции
$ docker run --network=host mortalis/analyzer-api:latest analyzer-db upgrade head
- Запускаем приложение
$ docker run --network=host --detach mortalis/analyzer-api:latest
- Клонируем проект с репозитория
$ git clone https://github.com/Mort4lis/analyzer-api.git
$ cd enrollment_2019/
- (Необязательно) Можно создать виртуальное окружение, для того чтобы изолировать данный пакет
$ python -m venv venv
$ source venv/bin/activate
- Устанавливаем пакет, после установки которого у нас появятся две cli-команды
analyzer-api
иanalyzer-db
$ pip install .
- Применяем миграции
$ make migrate
# или
$ analyzer-db upgrade head
- Запускаем приложение
$ analyzer-api
После запуска, приложение по-умолчанию будет доступно на 8081 порту. Для просмотра swagger-документации перейдите по http://127.0.0.1:8081/
Приложение можно конфигурировать cli-аргументами и переменными окружения среды (environment variables
).
Получить более подробную информацию о списке аргументов:
# пример с docker
$ docker run --network=host mortalis/analyzer-api:latest analyzer-api --help
# пример с cli
$ analyzer-api --help
Полный список переменных окружения для конфигурации:
ANALYZER_API_ADDRESS
- IPv4/IPv6-адрес, который будет слушать сервисANALYZER_API_PORT
- tcp-порт, который будет слушать сервисANALYZER_PG_URL
- dsn для подключения кpostgres
ANALYZER_PG_POOL_MIN_SIZE
- минимальный размер пула соединений кpostgres
ANALYZER_PG_POOL_MAX_SIZE
- максимальный размер пула соединений кpostgres
ANALYZER_LOG_LEVEL
- уровень логирования (debug
,info
,warning
,error
,fatal
)ANALYZER_LOG_FORMAT
- формат лога (stream
,color
,json
,syslog
)
Например, можно запустить приложение на порту 8081, указав другое dsn для подключение к postgres
:
$ docker run --network=host --detach \
--env ANALYZER_PG_URL=postgresql://another_user:another_password@localhost/another_db \
mortalis/analyzer-api:latest
Для запуска тестов и просмотра процента покрытия кодовой базы необходимо склонировать проект, находиться в папке с проектом и установить пакет в "режиме разработки".
$ pip install '.[dev]'
Запуск тестов
$ make test
# или
pytest --cov=analyzer --cov-report=term-missing tests/