45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
import logging
|
|
|
|
from django.core.files.base import ContentFile
|
|
|
|
from tasks.media import attachment_media_kind, render_attachment_thumbnail
|
|
|
|
from .models import ProcurementItemAttachment
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def procurement_attachment_media_kind(
|
|
attachment: ProcurementItemAttachment,
|
|
) -> str | None:
|
|
return attachment_media_kind(attachment)
|
|
|
|
|
|
def ensure_procurement_attachment_thumbnail(
|
|
attachment: ProcurementItemAttachment,
|
|
) -> bool:
|
|
if attachment.thumbnail:
|
|
return True
|
|
if not procurement_attachment_media_kind(attachment):
|
|
return False
|
|
|
|
try:
|
|
thumbnail = render_attachment_thumbnail(attachment)
|
|
attachment.thumbnail.save(
|
|
(f"procurement-item-{attachment.item_id}-attachment-{attachment.id}.webp"),
|
|
ContentFile(thumbnail),
|
|
save=True,
|
|
)
|
|
return True
|
|
except Exception as error:
|
|
logger.exception(
|
|
"Procurement attachment thumbnail generation failed",
|
|
extra={
|
|
"event": "procurement.attachment.thumbnail_generation_failed",
|
|
"procurement_item_id": attachment.item_id,
|
|
"attachment_id": attachment.id,
|
|
"error_type": type(error).__name__,
|
|
},
|
|
)
|
|
return False
|