API должен принимать от пользователя файлы произвольного размера и сохранять их в контейнер в облачном хранилище. Нужна возможность посмотреть список загруженных объектов и удалить ненужные. Пользователей нужно авторизовывать и предоставлять доступ только к их данным.
- API должен реализовывать три метода: GET для просмотра списка файлов, PUT для отправки файла, DELETE для удаления файла.
- Данные клиента должны сохраняться в индивидуальный контейнер в облачном хранилище.
- Аутентификация клиента осуществляется заголовком X-Auth-Token с UUID внутри. Авторизация сводится к проверке корректности UUID с последующим маппингом 1:1 в контейнер. Клиент может генерировать произвольный UUID – создавать заранее список доступных не нужно.
-
Просмотр доступных файлов
GET /api/filesВозвращает список загруженых файлов
$ > curl -H "X-Auth-Token: 18ce71ad-1391-46c7-91de-56948fda0d8a" "http://localhost:8080/api/files" ["bash", "bash_profile", "file1", "file3", "file4"]
-
Загрузить новый файл
PUT /api/files/{filename}Возвращает статус
204в случае успехаПример:
$ > curl -H "X-Auth-Token: 18ce71ad-1391-46c7-91de-56948fda0d8a" \ "http://localhost:8080/api/files/new_file.txt" \ --upload-file some_file.txt
-
Удалить файл
DELETE /api/files/{filename}Возвращает статус
204в случае успехаПример:
$ > curl -H "X-Auth-Token: 18ce71ad-1391-46c7-91de-56948fda0d8a" \ -X DELETE \ "http://localhost:8080/api/files/new_file.txt"
Для корректной работы необходим аккаунт в AWS с доступом к S3.
Необходимо поправить поправить конфиг .env или передать следующие переменные через
окружение среды
BUCKET=<S3-bucket-name>
AWS_ACCESS_KEY_ID=<AWS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_KEY>Установить/собрать и запустить сервис можно любым из перечисленных ниже способов
Для установки локально в отдельном виртуальном окружении
> python3 -m venv venv
> . venv/bin/activate
(venv) > pip install -r requirements.txtдля запуска используется gunicorn
(venv) > gunicorn app:app -b 0.0.0.0:8080 --reload -w 1или используя make
(venv) > make start-gunicornСобрать и запустить docker-контейнер
> docker build -t file_uploader:latest . -f docker/Dockerfile
> docker run --name file_uploader -d --env-file .env -p 8080:8080 file_uploader:latestили используя make
> make docker-run # сборка и запуск
> make docker-logs # вывод логовИспользовать docker-compose
> docker-compose -f docker/docker-compose.yml up --build -d
> docker-compose -f docker/docker-compose.yml logs -f file_uploaderили используя make
> make run-dev # сборка и запуск
> make logs # вывод логов
> make stop-dev # остановка и очисткаДля запуска тестов в virtualenv можно использовать
pytest -v