speed up by not calling exiftools always, images now always have figcaptions, catch errors properly

This commit is contained in:
rra 2019-09-04 16:13:29 +02:00
parent dbe0e59b90
commit b613eef36c
2 changed files with 30 additions and 38 deletions

View File

@ -7,27 +7,18 @@ import magic
from PIL import Image from PIL import Image
from distribusi.page_template import html_footer, html_head from distribusi.page_template import html_footer, html_head
from distribusi.mappings import CODE_TYPES, FILE_TYPES
CODE_TYPES = ['x-c', 'html']
FILE_TYPES = {
'image': '<figure><img class="image" src="{}">{}</figure>',
'pdf': (
'<object data="{}" class="pdf" type="application/pdf">'
'<embed src="{}" type="application/pdf" /></object>'
),
'text': '<a href="{}" class="text">{}</a>',
'video': ('<video class="video" controls>' '<source src="{}"></source></video>'),
'audio': ('<audio controls class="audio">' '<source src="{}"></source></audio>'),
}
MIME_TYPE = magic.Magic(mime=True) MIME_TYPE = magic.Magic(mime=True)
def caption(image): def caption(image):
process = subprocess.Popen(['exiftool', '-Comment', image], stdout=subprocess.PIPE) try:
out, err = process.communicate() process = subprocess.Popen(['exiftool', '-Comment', image], stdout=subprocess.PIPE)
out, err = process.communicate()
except Exception as e:
print(e)
print('Do you have exiftool installed?')
try: try:
caption = out.decode("utf-8").split(": ", 1)[1] caption = out.decode("utf-8").split(": ", 1)[1]
except: except:
@ -36,21 +27,25 @@ def caption(image):
def thumbnail(image, name, args): def thumbnail(image, name, args):
size = (450, 450) try:
im = Image.open(image) size = (450, 450)
im.thumbnail(size) im = Image.open(image)
output = BytesIO() im.thumbnail(size)
im.save(output, format='JPEG') output = BytesIO()
im_data = output.getvalue() im.save(output, format='JPEG')
data_url = base64.b64encode(im_data).decode() im_data = output.getvalue()
cap = caption(image) data_url = base64.b64encode(im_data).decode()
if cap and args.captions: if args.captions:
cap = "<figcaption>{}</figcaption>".format(cap) cap = caption(image)
else: else:
cap = '' cap = name
return ( return (
"<figure><a href='{}'><img class='thumbnail' src='data:image/jpg;base64,{}'></a>{}</figure>" "<figure><a href='{}'><img class='thumbnail' src='data:image/jpg;base64,{}'></a><figcaption>{}</figcaption></figure>"
).format(name, data_url, cap) ).format(name, data_url, cap)
except Exception as e:
print(e)
return "<figure><a href='{}'><img class='thumbnail' src='{}'></a><figcaption>{}</figcaption></figure>".format(name, name,name)
def div(args, mime, tag, *values): def div(args, mime, tag, *values):
@ -60,7 +55,7 @@ def div(args, mime, tag, *values):
else: else:
filename = '' filename = ''
if 'image' in mime: if 'image' in mime:
html = '<div id="{}">{}' + filename + '</div>' html = '<div id="{}">{}</div>'
elif 'pdf' in mime: elif 'pdf' in mime:
html = '<div id="{}">{}' + filename + '</div>' html = '<div id="{}">{}' + filename + '</div>'
else: else:
@ -103,11 +98,10 @@ def distribusify(args, directory): # noqa
if mime == 'image' and args.thumbnail: if mime == 'image' and args.thumbnail:
a = thumbnail(full_path, name, args) a = thumbnail(full_path, name, args)
else: else:
cap = caption(full_path) if args.captions:
if cap and args.captions: cap = caption(full_path)
cap = "<figcaption>{}</figcaption>".format(cap)
else: else:
cap = '' cap = name
a = FILE_TYPES[mime].format(full_path, cap) a = FILE_TYPES[mime].format(full_path, cap)
if format in FILE_TYPES: if format in FILE_TYPES:

View File

@ -1,8 +1,6 @@
from setuptools import find_packages, setup from setuptools import find_packages, setup
dependencies = [ dependencies = [
# pinned because https://github.com/python-pillow/Pillow/issues/2609
'pillow==4.1',
'python-magic==0.4.15', 'python-magic==0.4.15',
] ]