From bb5d7d7bc05a86d092e8b7a0086a22d182b4a5b8 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Mon, 13 Aug 2018 20:43:18 +0200 Subject: [PATCH] Fix for #574 --- cps/worker.py | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/cps/worker.py b/cps/worker.py index bc2e1d12..6ac5fbf2 100644 --- a/cps/worker.py +++ b/cps/worker.py @@ -139,7 +139,7 @@ class email(smtplib.SMTP): # Class for sending ssl encrypted email with ability to get current progress -class email_SSL(email): +class email_SSL(email, smtplib.SMTP_SSL): def __init__(self, *args, **kwargs): smtplib.SMTP_SSL.__init__(self, *args, **kwargs) @@ -235,9 +235,12 @@ class WorkerThread(threading.Thread): self.UIqueue[self.current]['message'] = error_message return try: - p = subprocess.Popen( - (web.ub.config.config_converterpath + " \"" + file_path + u".epub\"").encode(sys.getfilesystemencoding()), - stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + command = (web.ub.config.config_converterpath + " \"" + file_path + u".epub\"").encode(sys.getfilesystemencoding()) + if sys.version_info > (3, 0): + p = subprocess.Popen(command.decode('Utf-8'), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + else: + p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + except Exception: error_message = _(u"kindlegen failed, no execution permissions") web.app.logger.error("convert_kindlegen: " + error_message) @@ -251,7 +254,9 @@ class WorkerThread(threading.Thread): # Poll process for new output until finished while True: nextline = p.stdout.readline() - if nextline == '' and p.poll() is not None: + if sys.version_info > (3, 0): + nextline = nextline.decode('Utf-8','backslashreplace') + if nextline == u'' and p.poll() is not None: break if nextline != "\r\n": # Format of error message (kindlegen translates its output texts): @@ -259,8 +264,13 @@ class WorkerThread(threading.Thread): conv_error = re.search(".*\(.*\):(E\d+):\s(.*)", nextline) # If error occoures, log in every case if conv_error: - error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s", + if sys.version_info > (3, 0): + error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s", + error=conv_error.group(1), message=conv_error.group(2)) + else: + error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s", error=conv_error.group(1), message=conv_error.group(2).decode('utf-8')) + web.app.logger.info("convert_kindlegen: " + error_message) web.app.logger.info(nextline.strip('\r\n')) else: @@ -311,10 +321,13 @@ class WorkerThread(threading.Thread): self.UIqueue[self.current]['message'] = error_message return try: - command = ("\"" + web.ub.config.config_converterpath + "\" \"" + file_path + u".epub\" \"" + command = (u"\"" + web.ub.config.config_converterpath + u"\" \"" + file_path + u".epub\" \"" + file_path + u".mobi\" " + web.ub.config.config_calibre).encode(sys.getfilesystemencoding()) - p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) - except Exception: + if sys.version_info > (3, 0): + p = subprocess.Popen(command.decode('Utf-8'), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + else: + p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + except Exception as e: error_message = _(u"Ebook-convert failed, no execution permissions") web.app.logger.error("convert_calibre: " + error_message) self.queue[self.current]['status'] = STAT_FAIL @@ -327,12 +340,18 @@ class WorkerThread(threading.Thread): # Poll process for new output until finished while True: nextline = p.stdout.readline() + if sys.version_info > (3, 0): + nextline = nextline.decode('Utf-8','backslashreplace') if nextline == '' and p.poll() is not None: break progress = re.search("(\d+)%\s.*", nextline) if progress: self.UIqueue[self.current]['progress'] = progress.group(1) + '%' - web.app.logger.debug(nextline.strip('\r\n').decode(sys.getfilesystemencoding())) + if sys.version_info > (3, 0): + web.app.logger.debug(nextline.strip('\r\n')) + else: + web.app.logger.debug(nextline.strip('\r\n').decode(sys.getfilesystemencoding())) + check = p.returncode if check == 0: