Skip to content

Repository files navigation

Загрузка и обработка файлов

Django REST API, который позволяет загружать файлы на сервер, а затем асинхронно обрабатывать их с использованием Celery.

Основные задачи:

  • Модель file
  • Сериализатор модели file
  • Эндпоинт upload/ для загрузки файлов
  • Celery задача для обработки файла
  • Эндпоинт files/ для получения данных загруженных файлов

Задачи "CI/CD":

  • Тесты
  • docker
  • Базовый CI/CD - проверка кода линтерами (flake8) и форматерами (black, isort)

Запуск проекта:

  • перед запуском убедитесь, что у вас установлен redis
  • Склонируйте репозиторий:
    git clone https://github.com/ShadeSWD/file_processor_drf.git
  • Установите пакетный менеджер poetry:
    pip install poetry
  • Создайте базу данных в PostgreSQL и заполните файл .env, воспользовавшись .env.sample
  • Перейдите в папку с проектом и настройте виртуальное окружение
    poetry install
  • Войдите в виртуальное окружение
    poetry shell
  • Накатите миграции:
    manage.py migrate
  • Создайте суперпользователя:
    manage.py createsuperuser
  • Запустите сервер:
    manage.py runserver
  • В другой консоли необходимо перейти в корень проекта, активировать виртуальную среду и запустить celery:
    celery -A config worker --loglevel=info -P eventlet
  • Домашняя страница будет доступна по адресу вашего хоста
  • Перед первым коммитом необходимо выполнить
    pre-commit install
    для автоматического выполнения проверок перед коммитами

Основные задачи

Эндпоинт для загрузки файлов

Эндпоинт upload/, принимает POST-запросы для загрузки файлов. При загрузке файла создаётся объект модели File, и файл сохраняется на сервере. В ответ на успешную загрузку файла вернуть статус 201 и сериализованные данные файла.

После загрузки файла запускается фоновая задача обработки

Пример ответа:

{
  "pk": 7,
  "upload_at": "2024-02-11T22:51:23.537462Z",
  "processed": false,
  "processed_at": null
}

Эндпоинт для получения данных обо всех загруженных файлах

Эндпоинт files/, принимает пустой GET-запрос и возвращает список всех файлов с их данными.

Отложенная задача обработки файлов

После загрузки каждого файла запускается отложенная задача обработки файла. После выполнения задачи поля файла processed меняется на True, а полю procedssed_at присваиваются дата и время окончания обработки.

Задачи "CI/CD"

Тесты

  • Для запуска тестов необходимо находясь в корне проекта активировать виртуальное окружение
    poetry shell
  • запустите тесты:
    manage.py test
  • для просмотра отчета о покрытии тестами выполните
    coverage run --source='.' manage.py test
    coverage report

Контейнеризация (docker)

Для запуска приложения с помощью docker:

  • Склонируйте репозиторий:
    git clone https://github.com/ShadeSWD/file_processor_drf.git
  • перейдите в корневой каталог file_processor_drf
  • Выполните сборку образов
    docker-compose build
  • Запустите контейнер
    docker-compose up
  • Приложение будет доступно по адресу http://localhost:7777/

About

REST API загрузки файлов с асинхронной обработкой через Celery

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages