Catch errors on loading pickle file

Fix for cover images without Pillow
This commit is contained in:
Ozzieisaacs 2019-04-18 21:17:59 +02:00
parent 89516fc2d6
commit 67736fe187
3 changed files with 25 additions and 8 deletions

View File

@ -64,6 +64,7 @@ except ImportError as e:
try: try:
from PIL import Image from PIL import Image
from PIL import __version__ as PILversion
use_PIL = True use_PIL = True
except ImportError: except ImportError:
use_PIL = False use_PIL = False
@ -175,7 +176,6 @@ def pdf_preview(tmp_file_path, tmp_dir):
cover_file_name = os.path.splitext(tmp_file_path)[0] + ".cover.png" cover_file_name = os.path.splitext(tmp_file_path)[0] + ".cover.png"
img.save(filename=os.path.join(tmp_dir, cover_file_name)) img.save(filename=os.path.join(tmp_dir, cover_file_name))
return cover_file_name return cover_file_name
# img.save(obj[1:] + ".png")
except Exception as ex: except Exception as ex:
print(ex) print(ex)
try: try:
@ -206,4 +206,12 @@ def get_versions():
XVersion = 'v'+'.'.join(map(str, lxmlversion)) XVersion = 'v'+'.'.join(map(str, lxmlversion))
else: else:
XVersion = _(u'not installed') XVersion = _(u'not installed')
return {'Image Magick': IVersion, 'PyPdf': PVersion, 'lxml':XVersion, 'Wand Version': WVersion} if use_PIL:
PILVersion = 'v' + PILversion
else:
PILVersion = _(u'not installed')
return {'Image Magick': IVersion,
'PyPdf': PVersion,
'lxml':XVersion,
'Wand': WVersion,
'Pillow': PILVersion}

View File

@ -482,11 +482,11 @@ def save_cover_from_filestorage(filepath, saved_filename, img):
# saves book cover to gdrive or locally # saves book cover to gdrive or locally
def save_cover(img, book_path): def save_cover(img, book_path):
content_type = img.headers.get('content-type') content_type = img.headers.get('content-type')
if content_type not in ('image/jpeg', 'image/png', 'image/webp'):
web.app.logger.error("Only jpg/jpeg/png/webp files are supported as coverfile")
return False
if use_PIL: if use_PIL:
if content_type not in ('image/jpeg', 'image/png', 'image/webp'):
web.app.logger.error("Only jpg/jpeg/png/webp files are supported as coverfile")
return False
# convert to jpg because calibre only supports jpg # convert to jpg because calibre only supports jpg
if content_type in ('image/png', 'image/webp'): if content_type in ('image/png', 'image/webp'):
if hasattr(img,'stream'): if hasattr(img,'stream'):
@ -497,6 +497,10 @@ def save_cover(img, book_path):
tmp_bytesio = io.BytesIO() tmp_bytesio = io.BytesIO()
im.save(tmp_bytesio, format='JPEG') im.save(tmp_bytesio, format='JPEG')
img._content = tmp_bytesio.getvalue() img._content = tmp_bytesio.getvalue()
else:
if content_type not in ('image/jpeg'):
web.app.logger.error("Only jpg/jpeg files are supported as coverfile")
return False
if ub.config.config_use_google_drive: if ub.config.config_use_google_drive:
tmpDir = gettempdir() tmpDir = gettempdir()

View File

@ -201,9 +201,14 @@ lm.anonymous_user = ub.Anonymous
app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT') app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT')
db.setup_db() db.setup_db()
with open(os.path.join(config.get_main_dir, 'cps/translations/iso639.pickle'), 'rb') as f: try:
language_table = cPickle.load(f) with open(os.path.join(config.get_main_dir, 'cps/translations/iso639.pickle'), 'rb') as f:
language_table = cPickle.load(f)
except cPickle.UnpicklingError as error:
app.logger.error("Can't read file cps/translations/iso639.pickle: %s", error)
print("Can't read file cps/translations/iso639.pickle: %s" % error)
helper.global_WorkerThread.stop()
sys.exit(1)
def is_gdrive_ready(): def is_gdrive_ready():
return os.path.exists(os.path.join(config.get_main_dir, 'settings.yaml')) and \ return os.path.exists(os.path.join(config.get_main_dir, 'settings.yaml')) and \