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