from typing import Any, Dict, List from django.utils.translation import gettext as _ from zerver.lib.request import JsonableError from zerver.lib.upload import delete_message_image from zerver.models import Attachment, UserProfile def user_attachments(user_profile: UserProfile) -> List[Dict[str, Any]]: attachments = Attachment.objects.filter(owner=user_profile).prefetch_related("messages") return [a.to_dict() for a in attachments] def access_attachment_by_id( user_profile: UserProfile, attachment_id: int, needs_owner: bool = False ) -> Attachment: query = Attachment.objects.filter(id=attachment_id) if needs_owner: query = query.filter(owner=user_profile) attachment = query.first() if attachment is None: raise JsonableError(_("Invalid attachment")) return attachment def remove_attachment(user_profile: UserProfile, attachment: Attachment) -> None: try: delete_message_image(attachment.path_id) except Exception: raise JsonableError( _("An error occurred while deleting the attachment. Please try again later.") ) attachment.delete()