Evaluate filter.spec as a list rather than a string when looking for preserve-svg

Also, avoid modifying the Filter object in-place, as the calling code could potentially want to re-use it.
pull/12087/merge
Matt Westcott 2025-05-19 23:45:27 +01:00 zatwierdzone przez Thibaud Colas
rodzic 361fc13b38
commit 12b77ac51d
1 zmienionych plików z 8 dodań i 5 usunięć

Wyświetl plik

@ -519,19 +519,22 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
"Unrecognised filter format - string or Filter instance expected"
)
if "preserve-svg" in filter.spec:
spec_elements = filter.spec.split("|")
if "preserve-svg" in spec_elements:
# remove 'preserve-svg' from filter specs for all image types
filter.spec = "|".join(
item for item in filter.spec.split("|") if item != "preserve-svg"
clean_spec = "|".join(
item for item in spec_elements if item != "preserve-svg"
)
if not filter.spec:
if not clean_spec:
# no formatting directives were included in filter
raise InvalidFilterSpecError(
"Filter should include at least one formatting directive other than 'preserve-svg'"
)
if self.is_svg():
# remove rasterizing directives
filter.spec = to_svg_safe_spec(filter.spec)
clean_spec = to_svg_safe_spec(clean_spec)
filter = Filter(spec=clean_spec)
try:
rendition = self.find_existing_rendition(filter)