https://github.com/meetinger/webtronicstesttask
FastAPI Test Task
https://github.com/meetinger/webtronicstesttask
Last synced: 9 months ago
JSON representation
FastAPI Test Task
- Host: GitHub
- URL: https://github.com/meetinger/webtronicstesttask
- Owner: meetinger
- License: gpl-3.0
- Created: 2023-01-11T00:35:18.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-02-11T16:05:50.000Z (over 3 years ago)
- Last Synced: 2025-03-16T09:43:01.303Z (over 1 year ago)
- Language: Python
- Homepage:
- Size: 156 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# WebTronicsTestTask
## Тестовое задание WebTronics
### Установка и настройка
1. Склонируйте репозиторий при помощи команды `git clone https://github.com/meetinger/WebTronicsTestTask`
и перейдите в директорию репозитория
2. Установите виртуальное окружение(venv или conda) Python(рекомендую установить Python 3.10,
т.к. на 3.11 есть проблемы с отображением стека вызовов FastAPI,
[GitHub Issue](https://github.com/tiangolo/fastapi/issues/5740))
3. Установите нужные зависимости `pip install -r requirements.txt`
4. Установите контейнеры docker `docker-compose up -d`
(перед этим проверьте конфигурацию контейнеров в файле `docker-compose.yml`,
если у Вас уже заняты те или иные параметры(порты, имена контейнеров) тогда измените их)
1. В случае того, если Вы изменили конфигурацию `docker-compose.yml`, отредактируйте
файл `core/settings.py` в соответствии с изменёнными параметрами
5. В файле `core/settings.py` измените параметр `ROOT_URL` в соответствии с вашим IP-адресом или доменом
6. Примените миграции для базы данных `alembic upgrade head`
7. Запустите сервер из корня репозитория при помощи команды `uvicorn main:app --host 0.0.0.0`
1. Если Вы хотите запустить сервер на другом порте, то команда будет следующей:
`uvicorn main:app --host 0.0.0.0 --port <номер порта>`
### Тестирование API
1. Из корня репозитория запустите команду `pytest tests/`
2. Для того чтобы посмотреть покрытие кода тестами(на момент написания README 95%), команда будет следующей:
`pytest --cov=../ tests/`
### Задания из Google-Формы
1. Юнит-тесты для функции:
```python
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`
2. Эндпоинты для кодирования URL находятся в директории `form_tasks/endpoints`
### Замечания по поводу моего кода
1. В структуре БД была применена примесь `db/models/mixins_models.py`, что в будущем позволит легко добавить возможность
реакций для других сущностей
2. В задании с юнит-тестами для функции логов докера были применены костыли в связи с тем,
что в исходной функции у line не был вызван метод `.decode()`
3. В задании с эндпоинтом для кодирования URL я сделал два эндпоинта GET и POST
### Бонусная секция:
1. https://hunter.io/ не верифицирует webmail, так что делать проверку с помощью этого сервиса бессмысленно
Модуль с клиентом на aiohttp Вы можете найти по пути `core/utils/hunter_io.py` (токен, найденный на GitHub прилагается)
2. https://clearbit.com/ также не ищет людей с webmail адресами, так что нет смысла интегрировать этот сервис
Модуль с клиентом на aiohttp Вы можете найти по пути `core/utils/clearbit_com.py` (токены, найденные на GitHub прилагаются)
# P.S. Репозиторий не мёртв на данный момент, я буду продолжать делать бонусную секцию)