diff --git a/zerver/lib/import_realm.py b/zerver/lib/import_realm.py index 74cb75ba31..155c8c9e63 100644 --- a/zerver/lib/import_realm.py +++ b/zerver/lib/import_realm.py @@ -4,7 +4,6 @@ import os import shutil from concurrent.futures import ProcessPoolExecutor, as_completed from datetime import datetime, timezone -from mimetypes import guess_type from typing import Any, Dict, List, Optional, Set, Tuple import bmemcached @@ -28,6 +27,7 @@ from zerver.lib.export import DATE_FIELDS, Field, Path, Record, TableData, Table from zerver.lib.markdown import markdown_convert from zerver.lib.markdown import version as markdown_version from zerver.lib.message import get_last_message_id +from zerver.lib.mime_types import guess_type from zerver.lib.push_notifications import sends_notifications_directly from zerver.lib.remote_server import maybe_enqueue_audit_log_upload from zerver.lib.server_initialization import create_internal_realm, server_initialized diff --git a/zerver/lib/mime_types.py b/zerver/lib/mime_types.py new file mode 100644 index 0000000000..208123eba5 --- /dev/null +++ b/zerver/lib/mime_types.py @@ -0,0 +1,14 @@ +import sys +from mimetypes import add_type +from mimetypes import guess_type as guess_type + +add_type("audio/flac", ".flac") +add_type("audio/mp4", ".m4a") +add_type("audio/wav", ".wav") +add_type("audio/webm", ".weba") +add_type("image/apng", ".apng") + +if sys.version_info < (3, 11): # nocoverage + # https://github.com/python/cpython/issues/89802 + add_type("image/avif", ".avif") + add_type("image/webp", ".webp") diff --git a/zerver/lib/transfer.py b/zerver/lib/transfer.py index e80709f28b..a20cfb40bc 100644 --- a/zerver/lib/transfer.py +++ b/zerver/lib/transfer.py @@ -1,7 +1,6 @@ import logging import os from concurrent.futures import ProcessPoolExecutor, as_completed -from mimetypes import guess_type import bmemcached from django.conf import settings @@ -9,6 +8,7 @@ from django.core.cache import cache from django.db import connection from zerver.lib.avatar_hash import user_avatar_path +from zerver.lib.mime_types import guess_type from zerver.lib.upload.s3 import S3UploadBackend, upload_image_to_s3 from zerver.models import Attachment, RealmEmoji, UserProfile diff --git a/zerver/lib/upload/__init__.py b/zerver/lib/upload/__init__.py index d41f85fde9..7c2d6755e9 100644 --- a/zerver/lib/upload/__init__.py +++ b/zerver/lib/upload/__init__.py @@ -1,7 +1,6 @@ import io import logging from datetime import datetime -from mimetypes import guess_type from typing import IO, Any, BinaryIO, Callable, Iterator, List, Optional, Tuple, Union from urllib.parse import unquote, urljoin @@ -10,6 +9,7 @@ from django.core.files.uploadedfile import UploadedFile from django.utils.translation import gettext as _ from zerver.lib.exceptions import ErrorCode, JsonableError +from zerver.lib.mime_types import guess_type from zerver.lib.outgoing_http import OutgoingSession from zerver.lib.upload.base import ZulipUploadBackend from zerver.models import Attachment, Message, Realm, RealmEmoji, ScheduledMessage, UserProfile diff --git a/zerver/lib/upload/s3.py b/zerver/lib/upload/s3.py index bdbc0083cd..98ed7de301 100644 --- a/zerver/lib/upload/s3.py +++ b/zerver/lib/upload/s3.py @@ -2,7 +2,6 @@ import logging import os import secrets from datetime import datetime -from mimetypes import guess_type from typing import IO, Any, BinaryIO, Callable, Iterator, List, Literal, Optional, Tuple from urllib.parse import urljoin, urlsplit, urlunsplit @@ -14,6 +13,7 @@ from mypy_boto3_s3.service_resource import Bucket, Object from typing_extensions import override from zerver.lib.avatar_hash import user_avatar_path +from zerver.lib.mime_types import guess_type from zerver.lib.upload.base import ( INLINE_MIME_TYPES, MEDIUM_AVATAR_SIZE, diff --git a/zerver/views/upload.py b/zerver/views/upload.py index 07230e0d9f..a33d74f715 100644 --- a/zerver/views/upload.py +++ b/zerver/views/upload.py @@ -2,7 +2,6 @@ import base64 import binascii import os from datetime import timedelta -from mimetypes import guess_type from typing import List, Optional, Union from urllib.parse import quote, urlsplit @@ -28,6 +27,7 @@ from zerver.context_processors import get_valid_realm_from_request from zerver.decorator import zulip_redirect_to_login from zerver.lib.attachments import validate_attachment_request from zerver.lib.exceptions import JsonableError +from zerver.lib.mime_types import guess_type from zerver.lib.response import json_success from zerver.lib.storage import static_path from zerver.lib.upload import (