Merge pull request #1013 from taigaio/url-fetcher-for-cairo-svg

Fix problem with fetch urls from cairoSVG
remotes/origin/fix-throttling-bug
Alejandro 2017-07-21 09:47:18 +02:00 committed by GitHub
commit a0f83fef64
1 changed files with 13 additions and 3 deletions

View File

@ -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):
try:
return PSDImage.from_stream(data).as_PIL() 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)