Web-приложение для учёта посещённых доменов. Описание API см. в докстринге
модуля fb_assignment
.
- Redis ≥ 6.0
- Python 3.8
- Pipenv
Получить клон репозитория с приложением:
$ git clone https://github.com/i-zhivetiev/fb-assignment.git
Создать виртуальное окружение и установить зависимости:
$ cd fb-assignment
$ pipenv sync --dev
Убедится, что Redis доступен по адресу localhost:6379
. Например,
$ redis-cli ping
PONG
Запустить приложение:
$ pipenv run uvicorn fb_assignment:app
INFO: Started server process [15771]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
После запуска сервер будет доступен по адресу http://127.0.0.1:8000
.
Приложение настраивается с помощью переменных окружения:
DATABASE_URI
— URI Redis; по умолчанию —redis://localhost:6379
.
Может быть удобно узнать текущую метку времени:
$ python -c 'import datetime; print(round(datetime.datetime.utcnow().timestamp()))'
Выполнить HTTP-запросы. Например, с помощью HTTPie:
$ http ':8000/visited_domains?from=0&to=1700000000'
HTTP/1.1 200 OK
content-length: 28
content-type: application/json
date: Wed, 31 Mar 2021 09:38:58 GMT
server: uvicorn
{
"domains": [],
"status": "ok"
}
$ echo '{ "links": [ "http://example.test/path;parameters?query#fragment" ] }' \
| http POST ':8000/visited_links'
HTTP/1.1 200 OK
content-length: 15
content-type: application/json
date: Wed, 31 Mar 2021 09:42:20 GMT
server: uvicorn
{
"status": "ok"
}
$ http ':8000/visited_domains?from=0&to=1700000000'
HTTP/1.1 200 OK
content-length: 42
content-type: application/json
date: Wed, 31 Mar 2021 09:43:34 GMT
server: uvicorn
{
"domains": [
"example.test"
],
"status": "ok"
}
Для тестов стоит использовать отдельный экземпляр Redis -- база очищается после
каждой тестовой сессии. По умолчанию Redis для тестов должен быть доступен по
адресу localhost:16379
. Другой адрес можно задать с помощью
переменной tests.conftest.DATABASE_URI
.
Чтобы запустить тесты, нужно перейти в директорию с приложением и запустить pytest:
$ cd fb-assignment
$ pipenv run python -m pytest