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

25 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Эндпоинт ожидает запрос с методом `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` без описания ошибки