Merge pull request #1013 from taigaio/url-fetcher-for-cairo-svg
Fix problem with fetch urls from cairoSVGremotes/origin/fix-throttling-bug
commit
a0f83fef64
|
@ -33,15 +33,22 @@ from io import BytesIO
|
||||||
# SVG thumbnail generator
|
# SVG thumbnail generator
|
||||||
try:
|
try:
|
||||||
from cairosvg.surface import PNGSurface
|
from cairosvg.surface import PNGSurface
|
||||||
|
from cairosvg.url import fetch
|
||||||
import magic
|
import magic
|
||||||
|
|
||||||
|
def url_fetcher(url, resource_type):
|
||||||
|
if url.startswith("data:"):
|
||||||
|
return fetch(url, resource_type)
|
||||||
|
return b""
|
||||||
|
|
||||||
|
|
||||||
def svg_image_factory(fp, filename):
|
def svg_image_factory(fp, filename):
|
||||||
mime_type = magic.from_buffer(fp.read(1024), mime=True)
|
mime_type = magic.from_buffer(fp.read(1024), mime=True)
|
||||||
if mime_type != "image/svg+xml":
|
if mime_type != "image/svg+xml":
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
fp.seek(0)
|
fp.seek(0)
|
||||||
png_data = PNGSurface.convert(fp.read())
|
png_data = PNGSurface.convert(fp.read(), url_fetcher=url_fetcher)
|
||||||
return PngImageFile(BytesIO(png_data))
|
return PngImageFile(BytesIO(png_data))
|
||||||
|
|
||||||
Image.register_mime("SVG", "image/svg+xml")
|
Image.register_mime("SVG", "image/svg+xml")
|
||||||
|
@ -50,11 +57,14 @@ try:
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
Image.init()
|
||||||
# PSD thumbnail generator
|
# PSD thumbnail generator
|
||||||
def psd_image_factory(data, *args):
|
def psd_image_factory(data, *args):
|
||||||
return PSDImage.from_stream(data).as_PIL()
|
try:
|
||||||
|
return PSDImage.from_stream(data).as_PIL()
|
||||||
|
except Exception:
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
Image.init()
|
|
||||||
Image.register_open("PSD", psd_image_factory)
|
Image.register_open("PSD", psd_image_factory)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue