kopia lustrzana https://github.com/wagtail/wagtail
Fix image preview when Willow optimizers are enabled (#12047)
Avoids https://github.com/wagtail/Willow/issues/147stable/5.2.x
rodzic
b82553a653
commit
67a968cb92
|
@ -1,6 +1,12 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
5.2.6 (xx.xx.xxxx) - IN DEVELOPMENT
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Fix: Fix image preview when Willow optimizers are enabled (Alex Tomkins)
|
||||
|
||||
|
||||
5.2.5 (01.05.2024)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import datetime
|
||||
import json
|
||||
import urllib
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.contrib.auth.models import Group, Permission
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile, TemporaryUploadedFile
|
||||
|
@ -12,6 +13,8 @@ from django.utils.encoding import force_str
|
|||
from django.utils.html import escape, escapejs
|
||||
from django.utils.http import RFC3986_SUBDELIMS, urlencode
|
||||
from django.utils.safestring import mark_safe
|
||||
from willow.optimizers.base import OptimizerBase
|
||||
from willow.registry import registry
|
||||
|
||||
from wagtail.admin.admin_url_finder import AdminURLFinder
|
||||
from wagtail.images import get_image_model
|
||||
|
@ -3434,6 +3437,35 @@ class TestPreviewView(WagtailTestUtils, TestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response["Content-Type"], "image/png")
|
||||
|
||||
def test_preview_with_optimizer(self):
|
||||
"""
|
||||
Test that preview works with optimizers
|
||||
|
||||
Willow optimizers require
|
||||
"""
|
||||
|
||||
class DummyOptimizer(OptimizerBase):
|
||||
library_name = "dummy"
|
||||
image_format = "png"
|
||||
|
||||
@classmethod
|
||||
def check_library(cls):
|
||||
return True
|
||||
|
||||
@classmethod
|
||||
def process(cls, file_path: str):
|
||||
pass
|
||||
|
||||
# Get the image
|
||||
with patch.object(registry, "_registered_optimizers", [DummyOptimizer]):
|
||||
response = self.client.get(
|
||||
reverse("wagtailimages:preview", args=(self.image.id, "fill-800x600"))
|
||||
)
|
||||
|
||||
# Check response
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response["Content-Type"], "image/png")
|
||||
|
||||
def test_get_invalid_filter_spec(self):
|
||||
"""
|
||||
Test that an invalid filter spec returns a 400 response
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import os
|
||||
from tempfile import SpooledTemporaryFile
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.paginator import InvalidPage, Paginator
|
||||
from django.http import Http404, HttpResponse, JsonResponse
|
||||
from django.http import FileResponse, Http404, HttpResponse, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import reverse
|
||||
|
@ -333,8 +334,11 @@ def preview(request, image_id, filter_spec):
|
|||
image = get_object_or_404(get_image_model(), id=image_id)
|
||||
|
||||
try:
|
||||
response = HttpResponse()
|
||||
image = Filter(spec=filter_spec).run(image, response)
|
||||
# Temporary image needs to be an instance that Willow can run optimizers on
|
||||
temp_image = SpooledTemporaryFile(max_size=settings.FILE_UPLOAD_MAX_MEMORY_SIZE)
|
||||
image = Filter(spec=filter_spec).run(image, temp_image)
|
||||
temp_image.seek(0)
|
||||
response = FileResponse(temp_image)
|
||||
response["Content-Type"] = "image/" + image.format_name
|
||||
return response
|
||||
except InvalidFilterSpecError:
|
||||
|
|
Ładowanie…
Reference in New Issue