mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 13:03:29 +00:00
upload: Make closest_thumbnail_format take an HttpRequest.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
f3e12b2403
commit
6006ba4c44
@@ -6,7 +6,7 @@ from unittest.mock import patch
|
||||
import orjson
|
||||
import pyvips
|
||||
from django.conf import settings
|
||||
from django.http.request import MediaType
|
||||
from django.http import HttpRequest
|
||||
from django.test import override_settings
|
||||
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
@@ -920,13 +920,14 @@ class TestThumbnailRetrieval(ZulipTestCase):
|
||||
rendered_formats = [
|
||||
StoredThumbnailFormat(**data) for data in image_attachment.thumbnail_metadata
|
||||
]
|
||||
accepts = [MediaType("image/webp"), MediaType("image/*"), MediaType("*/*;q=0.8")]
|
||||
request = HttpRequest()
|
||||
request.META["HTTP_ACCEPT"] = "image/webp, image/*, */*;q=0.8"
|
||||
|
||||
# Prefer to match -animated, even though we have a .gif
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("gif", 100, 75, animated=True), accepts, rendered_formats
|
||||
ThumbnailFormat("gif", 100, 75, animated=True), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75-anim.webp",
|
||||
@@ -936,7 +937,7 @@ class TestThumbnailRetrieval(ZulipTestCase):
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("gif", 10, 10, animated=False), accepts, rendered_formats
|
||||
ThumbnailFormat("gif", 10, 10, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75.gif",
|
||||
@@ -946,37 +947,39 @@ class TestThumbnailRetrieval(ZulipTestCase):
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("tif", 10, 10, animated=False), accepts, rendered_formats
|
||||
ThumbnailFormat("tif", 10, 10, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"10x10.webp",
|
||||
)
|
||||
request = HttpRequest()
|
||||
request.META["HTTP_ACCEPT"] = "image/webp;q=0.9, image/gif"
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("tif", 10, 10, animated=False),
|
||||
[MediaType("image/webp;q=0.9"), MediaType("image/gif")],
|
||||
rendered_formats,
|
||||
ThumbnailFormat("tif", 10, 10, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75.gif",
|
||||
)
|
||||
request = HttpRequest()
|
||||
request.META["HTTP_ACCEPT"] = "image/gif"
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("tif", 10, 10, animated=False),
|
||||
[MediaType("image/gif")],
|
||||
rendered_formats,
|
||||
ThumbnailFormat("tif", 10, 10, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75.gif",
|
||||
)
|
||||
|
||||
# Closest width
|
||||
request = HttpRequest()
|
||||
request.META["HTTP_ACCEPT"] = "image/webp, image/*, */*;q=0.8"
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("webp", 20, 100, animated=False), accepts, rendered_formats
|
||||
ThumbnailFormat("webp", 20, 100, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"10x10.webp",
|
||||
@@ -984,19 +987,19 @@ class TestThumbnailRetrieval(ZulipTestCase):
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("webp", 80, 10, animated=False), accepts, rendered_formats
|
||||
ThumbnailFormat("webp", 80, 10, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75.webp",
|
||||
)
|
||||
|
||||
# Smallest filesize if they have no media preference
|
||||
request = HttpRequest()
|
||||
request.META["HTTP_ACCEPT"] = "image/gif, image/webp"
|
||||
self.assertEqual(
|
||||
str(
|
||||
closest_thumbnail_format(
|
||||
ThumbnailFormat("tif", 100, 75, animated=False),
|
||||
[MediaType("image/gif"), MediaType("image/webp")],
|
||||
rendered_formats,
|
||||
ThumbnailFormat("tif", 100, 75, animated=False), request, rendered_formats
|
||||
)
|
||||
),
|
||||
"100x75.webp",
|
||||
|
||||
@@ -17,7 +17,6 @@ from django.http import (
|
||||
HttpResponseForbidden,
|
||||
HttpResponseNotFound,
|
||||
)
|
||||
from django.http.request import MediaType
|
||||
from django.shortcuts import redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.cache import patch_cache_control, patch_vary_headers
|
||||
@@ -213,11 +212,11 @@ def preferred_accept(request: HttpRequest, served_types: list[str]) -> str | Non
|
||||
|
||||
def closest_thumbnail_format(
|
||||
requested_format: BaseThumbnailFormat,
|
||||
accepts: list[MediaType],
|
||||
request: HttpRequest,
|
||||
rendered_formats: list[StoredThumbnailFormat],
|
||||
) -> StoredThumbnailFormat:
|
||||
accepted_types = sorted(
|
||||
accepts,
|
||||
request.accepted_types,
|
||||
key=lambda e: float(e.params.get("q", "1.0")),
|
||||
reverse=True,
|
||||
)
|
||||
@@ -331,7 +330,7 @@ def serve_file(
|
||||
# set, or the client is just guessing a format and
|
||||
# hoping.
|
||||
requested_format = closest_thumbnail_format(
|
||||
requested_format, request.accepted_types, rendered_formats
|
||||
requested_format, request, rendered_formats
|
||||
)
|
||||
elif requested_format not in rendered_formats:
|
||||
# They requested a valid format, but one we've not
|
||||
|
||||
Reference in New Issue
Block a user