From f5f6562fe94e8dbf564196698085bdfae96dd724 Mon Sep 17 00:00:00 2001 From: Labrys of Knossos Date: Sat, 15 Dec 2018 17:55:35 -0500 Subject: [PATCH] Fix strings for Python 3 `basestring` not available in Python 3 `unicode` not available in Python 3 `str` expected instead of `bytes` --- core/autoProcess/autoProcessTV.py | 1 + core/nzbToMediaUtil.py | 30 ++++++++++++++++-------------- core/transcoder/transcoder.py | 20 +++++++++++--------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/core/autoProcess/autoProcessTV.py b/core/autoProcess/autoProcessTV.py index bacf7b15..473dad91 100644 --- a/core/autoProcess/autoProcessTV.py +++ b/core/autoProcess/autoProcessTV.py @@ -316,6 +316,7 @@ class autoProcessTV(object): else: for line in r.iter_lines(): if line: + line = line.decode('utf-8') logger.postprocess("{0}".format(line), section) if "Moving file from" in line: inputName = os.path.split(line)[1] diff --git a/core/nzbToMediaUtil.py b/core/nzbToMediaUtil.py index 4b52abbd..3b2b68fb 100644 --- a/core/nzbToMediaUtil.py +++ b/core/nzbToMediaUtil.py @@ -202,8 +202,10 @@ def category_search(inputDirectory, inputName, inputCategory, root, categories): def getDirSize(inputPath): from functools import partial prepend = partial(os.path.join, inputPath) - return sum( - [(os.path.getsize(f) if os.path.isfile(f) else getDirSize(f)) for f in map(prepend, os.listdir(unicode(inputPath)))]) + return sum([ + (os.path.getsize(f) if os.path.isfile(f) else getDirSize(f)) + for f in map(prepend, os.listdir(text_type(inputPath))) + ]) def is_minSize(inputName, minSize): @@ -330,7 +332,7 @@ def removeEmptyFolders(path, removeRoot=True): # remove empty subfolders logger.debug("Checking for empty folders in:{0}".format(path)) - files = os.listdir(unicode(path)) + files = os.listdir(text_type(path)) if len(files): for f in files: fullpath = os.path.join(path, f) @@ -338,7 +340,7 @@ def removeEmptyFolders(path, removeRoot=True): removeEmptyFolders(fullpath) # if folder empty, delete it - files = os.listdir(unicode(path)) + files = os.listdir(text_type(path)) if len(files) == 0 and removeRoot: logger.debug("Removing empty folder:{}".format(path)) os.rmdir(path) @@ -417,7 +419,7 @@ def CharReplace(Name): # If there is special character, detects if it is a UTF-8, CP850 or ISO-8859-15 encoding encoded = False encoding = None - if isinstance(Name, unicode): + if isinstance(Name, text_type): return encoded, Name.encode(core.SYS_ENCODING) for Idx in range(len(Name)): # /!\ detection is done 2char by 2char for UTF-8 special character @@ -644,9 +646,9 @@ def getDirs(section, subsection, link='hard'): folders = [] logger.info("Searching {0} for mediafiles to post-process ...".format(path)) - sync = [o for o in os.listdir(unicode(path)) if os.path.splitext(o)[1] in ['.!sync', '.bts']] + sync = [o for o in os.listdir(text_type(path)) if os.path.splitext(o)[1] in ['.!sync', '.bts']] # search for single files and move them into their own folder for post-processing - for mediafile in [os.path.join(path, o) for o in os.listdir(unicode(path)) if + for mediafile in [os.path.join(path, o) for o in os.listdir(text_type(path)) if os.path.isfile(os.path.join(path, o))]: if len(sync) > 0: break @@ -710,11 +712,11 @@ def getDirs(section, subsection, link='hard'): # removeEmptyFolders(path, removeRoot=False) - if os.listdir(unicode(path)): - for dir in [os.path.join(path, o) for o in os.listdir(unicode(path)) if + if os.listdir(text_type(path)): + for dir in [os.path.join(path, o) for o in os.listdir(text_type(path)) if os.path.isdir(os.path.join(path, o))]: - sync = [o for o in os.listdir(unicode(dir)) if os.path.splitext(o)[1] in ['.!sync', '.bts']] - if len(sync) > 0 or len(os.listdir(unicode(dir))) == 0: + sync = [o for o in os.listdir(text_type(dir)) if os.path.splitext(o)[1] in ['.!sync', '.bts']] + if len(sync) > 0 or len(os.listdir(text_type(dir))) == 0: continue folders.extend([dir]) return folders @@ -765,7 +767,7 @@ def onerror(func, path, exc_info): def rmDir(dirName): logger.info("Deleting {0}".format(dirName)) try: - shutil.rmtree(unicode(dirName), onerror=onerror) + shutil.rmtree(text_type(dirName), onerror=onerror) except: logger.error("Unable to delete folder {0}".format(dirName)) @@ -1050,7 +1052,7 @@ def listMediaFiles(path, minSize=0, delete_ignored=0, media=True, audio=True, me return files - for curFile in os.listdir(unicode(path)): + for curFile in os.listdir(text_type(path)): fullCurFile = os.path.join(path, curFile) # if it's a folder do it recursively @@ -1087,7 +1089,7 @@ def find_imdbid(dirName, inputName, omdbApiKey): logger.info("Found imdbID [{0}]".format(imdbid)) return imdbid if os.path.isdir(dirName): - for file in os.listdir(unicode(dirName)): + for file in os.listdir(text_type(dirName)): m = re.search('(tt\d{7})', file) if m: imdbid = m.group(1) diff --git a/core/transcoder/transcoder.py b/core/transcoder/transcoder.py index 68f8fedc..f350fa1e 100644 --- a/core/transcoder/transcoder.py +++ b/core/transcoder/transcoder.py @@ -9,7 +9,7 @@ import shutil import subprocess from babelfish import Language -from six import iteritems +from six import iteritems, text_type, string_types import core from core import logger @@ -117,7 +117,7 @@ def getVideoDetails(videofile, img=None, bitbucket=None): def buildCommands(file, newDir, movieName, bitbucket): - if isinstance(file, basestring): + if isinstance(file, string_types): inputFile = file if 'concat:' in file: file = file.split('|')[0].replace('concat:', '') @@ -480,13 +480,15 @@ def buildCommands(file, newDir, movieName, bitbucket): continue command.extend(['-i', subfile]) lan = os.path.splitext(os.path.splitext(subfile)[0])[1][1:].split('-')[0] + lan = text_type(lan) metlan = None try: if len(lan) == 3: metlan = Language(lan) if len(lan) == 2: metlan = Language.fromalpha2(lan) - except: pass + except: + pass if metlan: meta_cmd.extend(['-metadata:s:s:{x}'.format(x=len(s_mapped) + n), 'language={lang}'.format(lang=metlan.alpha3)]) @@ -616,7 +618,7 @@ def processList(List, newDir, bitbucket): if combine: newList.extend(combineCD(combine)) for file in newList: - if isinstance(file, basestring) and 'concat:' not in file and not os.path.isfile(file): + if isinstance(file, string_types) and 'concat:' not in file and not os.path.isfile(file): success = False break if success and newList: @@ -751,13 +753,13 @@ def Transcode_directory(dirName): return 1, dirName for file in List: - if isinstance(file, basestring) and os.path.splitext(file)[1] in core.IGNOREEXTENSIONS: + if isinstance(file, string_types) and os.path.splitext(file)[1] in core.IGNOREEXTENSIONS: continue command = buildCommands(file, newDir, movieName, bitbucket) newfilePath = command[-1] # transcoding files may remove the original file, so make sure to extract subtitles first - if core.SEXTRACT and isinstance(file, basestring): + if core.SEXTRACT and isinstance(file, string_types): extract_subs(file, newfilePath, bitbucket) try: # Try to remove the file that we're transcoding to just in case. (ffmpeg will return an error if it already exists for some reason) @@ -772,7 +774,7 @@ def Transcode_directory(dirName): print_cmd(command) result = 1 # set result to failed in case call fails. try: - if isinstance(file, basestring): + if isinstance(file, string_types): proc = subprocess.Popen(command, stdout=bitbucket, stderr=bitbucket) else: img, data = next(iteritems(file)) @@ -787,7 +789,7 @@ def Transcode_directory(dirName): except: logger.error("Transcoding of video {0} has failed".format(newfilePath)) - if core.SUBSDIR and result == 0 and isinstance(file, basestring): + if core.SUBSDIR and result == 0 and isinstance(file, string_types): for sub in get_subs(file): name = os.path.splitext(os.path.split(file)[1])[0] subname = os.path.split(sub)[1] @@ -817,7 +819,7 @@ def Transcode_directory(dirName): os.unlink(file) except: pass - if not os.listdir(unicode(newDir)): # this is an empty directory and we didn't transcode into it. + if not os.listdir(text_type(newDir)): # this is an empty directory and we didn't transcode into it. os.rmdir(newDir) newDir = dirName if not core.PROCESSOUTPUT and core.DUPLICATE: # We postprocess the original files to CP/SB