test_zadanie_S3/DOCS.md
2024-03-23 14:09:12 +03:00

2.3 KiB
Raw Permalink Blame History

Эндпоинт ожидает запрос с методом POST, так как это загрузка файла.

При попытке подать не изображение pillow вызывает исключение UnidentifiedImageError, но если подать gif, то исключения не будет. Задача обрабатывать только png и jpeg, так что в двух случаях выше возвращается HTTP_415_UNSUPPORTED_MEDIA_TYPE.

Если же подать битый png или jpeg файл, то Image.resize вызовет OSError или SyntaxError, так что они отлавливаются отдельно. В таком случае возвращается HTTP_422_UNPROCESSABLE_ENTITY.

Если будет какое-то другое исключение в этом блоке, то вернётся 500 ответ, так как, по моим тестам, никакого другого исключения быть не должно. В этом блоке стоит добавить логирование, если оно имеется.

Саму обработку изображений я делаю через Celery, так как это позволит не давать лишнюю CPU Bound нагрузку на этот поток и работать в асинхронном режиме.

Далее генерируется уникальный UUID для каждого изображения. Использование UUID позволяет не беспокоиться о том, что будет перезаписано старое изображение.

Далее генерируется POST запрос через boto3, отправляется готовое изображение на S3 бакет, генерируется ссылка на него и возвращается в виде JSON {"resized_image_link": response}.

Если в этом блоке будет вызвано исключение, то ошибка никак не связанна с поданными данными, соответственно не стоит давать лишнюю информацию по ней. Возвращается HTTP_500_INTERNAL_SERVER_ERROR без описания ошибки