Git Product home page Git Product logo

service-diff-of-set's Introduction

Тестовое задание Perx Soft

Build Status

Описание

Реализовать веб-приложение, которое предоставляет API со следующим функционалом:

  • возможность загрузить и обработать файл в формате excel
  • возможность получить статус обработки загруженного файла, который должен включать следующую информацию:
    • дата и время загрузки
    • дата и время окончания обработки, если обработка завершена
    • статус обработки (загружено, обрабатывается, обработано)
    • результат обработки
  • API должен быть защищён авторизацией
    • авторизация должна производиться с помощью токена или пары имя пользователя, пароль
    • в базе данных эти данные, используемые для авторизации, хранить не требуется

О структуре загружаемого файла

  • загружаемый файл представляет собой файл Excel (xls или xlsx)
  • файл состоит из нескольких листов, каждый из которых имеет свой набор колонок или не имеет вообще никаких данных
  • количество колонок, а также их порядок не фиксирован
  • в первой строке указаны заголовки колонок
  • последней колонкой на листе считается та, у которой справа от её заголовка находится пустая ячейка
  • данные в колонке также ограничены пустой ячейкой снизу
  • на одном из листов содержатся колонки с заголовками before и after
  • далее речь идёт о только колонках before и after
  • одна из колонок содержит список L1 из N положительных целых чисел
  • другая колонка содержит список L2 из N+1 положительных целых чисел
  • известно, что набор из L2 состоит из набора L1 и ещё некоего числа X
  • порядок следования общих чисел в наборах может различаться

Что необходимо сделать в процессе обработки:

  • необходимо определить число X
  • если набор L1 находился в колонке before, то в результат обработки поместить added: X
  • если набор L1 находился в колонке after, то в результат обработки поместить removed: X
  • время обработки должно быть линейным

Приложение может быть реализовано с использованием любого фреймворка. Для определения числа X нельзя использовать специализированные библиотеки обработки данных, такие как pandas. Дополнительным плюсом будет размещение приложения в контейнере Docker. Разработанное приложение необходимо размесить в github-репозитории.

Зависимости

  • python 3.9+
  • fastapi
  • sqlite
  • docker
  • docker-compose
  • mypy
  • flake8
  • pytest

Установка

Локальная установка

  • Клонируем
git clone https://github.com/mitrofun/service-diff-of-set.git
  • Создаем необходимые переменные окружения для работы приложения
cd service-diff-of-set
cp example.env config.env
  • Создаем виртуальное окружение и активируем его
virtualenv .venv
source .venv/bin/activate
  • Устанавливаем poetry и зависимости проекта
pip install poetry && poetry install
  • Создать папку для базы данных
mkdir data
  • Выполнить миграции
alembic upgrade head
  • Запуск приложения
uvicorn src.main:app --reload

Алиасы для локальной разработки

  • Запуск миграций
make migration  
  • Запуск локального сервера разработки
make run  
  • Запуск линтера
make linter  
  • Запуск тестов
make qa  

Установка и запуск через docker-compose

  • Клонируем
git clone https://github.com/mitrofun/service-diff-of-set.git
  • Создаем необходимые переменные окружения для работы приложения
cd service-diff-of-set
cp example.env config.env
  • Запускаем docker-compose для локальной среды разработки
docker-compose up
  • Запускаем docker-compose на production окружении
docker-compose -f docker-compose.yml -f deploy/docker-compose.prod.yml up -d --build

Роутинг

  • GET /docs - swagger
  • GET /calculations - список всех вычислений
  • POST /calculations - добавление файла для вычисления
  • GET /calculations/:id - Детальные данные о вычислении по ключу id

service-diff-of-set's People

Contributors

mitrofun avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.