- Склонируйте репозиторий при помощи команды
git clone https://github.com/meetinger/WebTronicsTestTaskи перейдите в директорию репозитория - Установите виртуальное окружение(venv или conda) Python(рекомендую установить Python 3.10, т.к. на 3.11 есть проблемы с отображением стека вызовов FastAPI, GitHub Issue)
- Установите нужные зависимости
pip install -r requirements.txt - Установите контейнеры docker
docker-compose up -d(перед этим проверьте конфигурацию контейнеров в файлеdocker-compose.yml, если у Вас уже заняты те или иные параметры(порты, имена контейнеров) тогда измените их)- В случае того, если Вы изменили конфигурацию
docker-compose.yml, отредактируйте файлcore/settings.pyв соответствии с изменёнными параметрами
- В случае того, если Вы изменили конфигурацию
- В файле
core/settings.pyизмените параметрROOT_URLв соответствии с вашим IP-адресом или доменом - Примените миграции для базы данных
alembic upgrade head - Запустите сервер из корня репозитория при помощи команды
uvicorn main:app --host 0.0.0.0- Если Вы хотите запустить сервер на другом порте, то команда будет следующей:
uvicorn main:app --host 0.0.0.0 --port <номер порта>
- Если Вы хотите запустить сервер на другом порте, то команда будет следующей:
- Из корня репозитория запустите команду
pytest tests/ - Для того чтобы посмотреть покрытие кода тестами(на момент написания README 95%), команда будет следующей:
pytest --cov=../ tests/
- Юнит-тесты для функции:
async def logs(cont, name):
conn = aiohttp.UnixConnector(path="/var/run/docker.sock")
async with aiohttp.ClientSession(connector=conn) as session:
async with session.get(f"http://xx/containers/{cont}/logs?follow=1&stdout=1") as resp:
async for line in resp.content:
print(name, line)Находятся в директории form_tasks/unittests
- Эндпоинты для кодирования URL находятся в директории
form_tasks/endpoints
- В структуре БД была применена примесь
db/models/mixins_models.py, что в будущем позволит легко добавить возможность реакций для других сущностей - В задании с юнит-тестами для функции логов докера были применены костыли в связи с тем,
что в исходной функции у line не был вызван метод
.decode() - В задании с эндпоинтом для кодирования URL я сделал два эндпоинта GET и POST
- https://hunter.io/ не верифицирует webmail, так что делать проверку с помощью этого сервиса бессмысленно
Модуль с клиентом на aiohttp Вы можете найти по пути
core/utils/hunter_io.py(токен, найденный на GitHub прилагается) - https://clearbit.com/ также не ищет людей с webmail адресами, так что нет смысла интегрировать этот сервис
Модуль с клиентом на aiohttp Вы можете найти по пути
core/utils/clearbit_com.py(токены, найденные на GitHub прилагаются)