Skip to content

sorvihead/md5_light

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание для BostonGene

Веб-сервис позволяет посчитать MD5 хеш от файла расположенного в интернете. Расчет хеша и считывание файла происходят в фоновом режиме. Для локального запуска и хранения данных о задаче используется база данных SQLite3, также сервис можно собрать в Docker, там используется база данных MySQL.
В базе данных хранится одна сущность Task, которая имеет следующие поля:

  • id - уникальный идентификатор задачи
  • url - url по которому нужно забрать файл
  • email - email по которому нужно отправить результат
  • md5 - результат выполнения задачи
  • complete - статус выполнения задачи

Основные методы API

Методы обрабатывают HTTP запросы

Загрузить задачу

Запрос

curl -X POST -d "url=http://site.com/file.txt&email=example@abc.ru" \
http://localhost:8000/submit

Ответ: id созданной задачи или http код ошибки

Проверить статус выполнения задачи

Запрос

curl -X GET \
 http://localhost:8000/check?id=0e4fac17-f367-4807-8c28

Ответ: статус выполнения задачи, с соотвествующим кодом выполнения. Если задача выполнена, то url из первого запроса и результат.

Если был указан электронный адрес, то результат придет и туда.

Проект поддерживает сборку в Docker Сначала нужно установить зависимости (redis, mysql)

sudo docker run --name redis \
 -d -p 6379:6379 \
 redis:3-alpine
sudo docker run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
    -e MYSQL_DATABASE=tc -e MYSQL_USER=tc \
    -e MYSQL_PASSWORD=<DATABASE-PASSWORD> \
    mysql/mysql-server:5.7

Далее необходимо собрать проект

sudo docker build -t tc:latest .

После чего запустить HTTP сервер вместе со всеми зависимостями.

sudo docker run --name tc \
 -d -p 8000:5000 --rm \
 --link mysql:dbserver \
 --link redis:redis-server \
 --env-file ./.env \
 tc:latest

И redis-queue

sudo docker run \
 --name rq-worker \
 -d --rm \
 --link mysql:dbserver \
 --link redis:redis-server \
 --env-file ./.env \
 --entrypoint venv/bin/rq \
 tc:latest \
 worker -u redis://redis-server:6379/0 tc-tasks

Для локальной работы без Docker, необходимы python 3.6+, redis-server.

  • Клонируем проект
  • Создаем виртуальное окружение
python -m venv venv
  • Активируем виртуальное окружение
source venv/bin/activate
  • Устанавливаем зависимости из requirements.txt
  • Устанавливаем переменные окружения
export FLASK_APP=application.py
  • Запускаем http сервер командой flask run, и в другом окне терминала(с включенным виртуальным окружением) redis-queue командой rq worker tc-tasks
  • Запускаем команду
flask db upgrade
  • Убираем из файла .env параметр DATABASE_URI (чтобы использовалась SQLITE3)

При локальном запуске api доступно на порту 5000, при запуске из Docker на порту 8000

Также, для корректной отправки электронной почты необходимо будет отредактировать файл .env поля MAIL_USERNAME, MAIL_PASSWORD

About

Test case for BostonGene

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published