angrybeanie_wagtail/env/lib/python3.12/site-packages/wagtail/images/api/fields.py
2025-07-25 21:32:16 +10:00

59 lines
1.7 KiB
Python

from collections import OrderedDict
from rest_framework.fields import Field
from ..models import SourceImageIOError
from ..utils import to_svg_safe_spec
class ImageRenditionField(Field):
"""
A field that generates a rendition with the specified filter spec, and serialises
details of that rendition.
Example:
"thumbnail": {
"url": "/media/images/myimage.max-165x165.jpg",
"full_url": "https://media.example.com/media/images/myimage.max-165x165.jpg",
"width": 165,
"height": 100,
"alt": "Image alt text"
}
If there is an error with the source image. The dict will only contain a single
key, "error", indicating this error:
"thumbnail": {
"error": "SourceImageIOError"
}
"""
def __init__(self, filter_spec, preserve_svg=False, *args, **kwargs):
self.filter_spec = filter_spec
self.preserve_svg = preserve_svg
super().__init__(*args, **kwargs)
def to_representation(self, image):
try:
if image.is_svg() and self.preserve_svg:
filter_spec = to_svg_safe_spec(self.filter_spec)
else:
filter_spec = self.filter_spec
thumbnail = image.get_rendition(filter_spec)
return OrderedDict(
[
("url", thumbnail.url),
("full_url", thumbnail.full_url),
("width", thumbnail.width),
("height", thumbnail.height),
("alt", thumbnail.alt),
]
)
except SourceImageIOError:
return OrderedDict(
[
("error", "SourceImageIOError"),
]
)