From 67736fe1877bb6c8f2d194a4fa756c5813810eb0 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Thu, 18 Apr 2019 21:17:59 +0200 Subject: [PATCH] Catch errors on loading pickle file Fix for cover images without Pillow --- cps/book_formats.py | 12 ++++++++++-- cps/helper.py | 10 +++++++--- cps/web.py | 11 ++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/cps/book_formats.py b/cps/book_formats.py index a5448e4d..125e0b99 100644 --- a/cps/book_formats.py +++ b/cps/book_formats.py @@ -64,6 +64,7 @@ except ImportError as e: try: from PIL import Image + from PIL import __version__ as PILversion use_PIL = True except ImportError: 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" img.save(filename=os.path.join(tmp_dir, cover_file_name)) return cover_file_name - # img.save(obj[1:] + ".png") except Exception as ex: print(ex) try: @@ -206,4 +206,12 @@ def get_versions(): XVersion = 'v'+'.'.join(map(str, lxmlversion)) else: 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} diff --git a/cps/helper.py b/cps/helper.py index 79cf92af..287479f7 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -482,11 +482,11 @@ def save_cover_from_filestorage(filepath, saved_filename, img): # saves book cover to gdrive or locally def save_cover(img, book_path): 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 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 if content_type in ('image/png', 'image/webp'): if hasattr(img,'stream'): @@ -497,6 +497,10 @@ def save_cover(img, book_path): tmp_bytesio = io.BytesIO() im.save(tmp_bytesio, format='JPEG') 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: tmpDir = gettempdir() diff --git a/cps/web.py b/cps/web.py index 9b6f47af..3e19d2cc 100644 --- a/cps/web.py +++ b/cps/web.py @@ -201,9 +201,14 @@ lm.anonymous_user = ub.Anonymous app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT') db.setup_db() -with open(os.path.join(config.get_main_dir, 'cps/translations/iso639.pickle'), 'rb') as f: - language_table = cPickle.load(f) - +try: + 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(): return os.path.exists(os.path.join(config.get_main_dir, 'settings.yaml')) and \