diff options
Diffstat (limited to 'pyload/utils')
-rw-r--r-- | pyload/utils/__init__.py | 263 | ||||
-rw-r--r-- | pyload/utils/packagetools.py | 155 | ||||
-rw-r--r-- | pyload/utils/printer.py | 16 | ||||
-rw-r--r-- | pyload/utils/pylgettext.py | 60 |
4 files changed, 0 insertions, 494 deletions
diff --git a/pyload/utils/__init__.py b/pyload/utils/__init__.py deleted file mode 100644 index 330ee622c..000000000 --- a/pyload/utils/__init__.py +++ /dev/null @@ -1,263 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: vuolter - -""" Store all useful functions here """ - -import os -import re -import sys -import time - -from gettext import gettext -from htmlentitydefs import name2codepoint -from os.path import join -from string import maketrans -from urllib import unquote - -# abstraction layer for json operations -try: - import simplejson as json -except ImportError: - import json - -json_loads = json.loads -json_dumps = json.dumps - - -def chmod(*args): - try: - os.chmod(*args) - except Exception: - pass - - -def decode(string): - """ Decode string to unicode with utf8 """ - if type(string) == str: - return string.decode("utf8", "replace") - else: - return string - - -def encode(string): - """ Decode string to utf8 """ - if type(string) == unicode: - return string.encode("utf8", "replace") - else: - return string - - -def remove_chars(string, repl): - """ removes all chars in repl from string""" - if type(repl) == unicode: - for badc in list(repl): - string = string.replace(badc, "") - return string - else: - if type(string) == str: - return string.translate(maketrans("", ""), repl) - elif type(string) == unicode: - return string.translate(dict((ord(s), None) for s in repl)) - - -def safe_filename(name): - """ remove bad chars """ - name = unquote(name).encode('ascii', 'replace') # Non-ASCII chars usually breaks file saving. Replacing. - if os.name == 'nt': - return remove_chars(name, u'\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32' - u'\33\34\35\36\37/?%*|"<>') - else: - return remove_chars(name, u'\0\\"') - -#: Deprecated method -def save_path(name): - return safe_filename(name) - - -def safe_join(*args): - """ joins a path, encoding aware """ - return fs_encode(join(*[x if type(x) == unicode else decode(x) for x in args])) - -#: Deprecated method -def save_join(*args): - return safe_join(*args) - - -# File System Encoding functions: -# Use fs_encode before accesing files on disk, it will encode the string properly - -if sys.getfilesystemencoding().startswith('ANSI'): - def fs_encode(string): - return safe_filename(encode(string)) - - fs_decode = decode #decode utf8 - -else: - fs_encode = fs_decode = lambda x: x # do nothing - - -def get_console_encoding(enc): - if os.name == "nt": - if enc == "cp65001": # aka UTF-8 - print "WARNING: Windows codepage 65001 is not supported." - enc = "cp850" - else: - enc = "utf8" - - return enc - - -def compare_time(start, end): - start = map(int, start) - end = map(int, end) - - if start == end: return True - - now = list(time.localtime()[3:5]) - if start < now < end: return True - elif start > end and (now > start or now < end): return True - elif start < now > end < start: return True - else: return False - - -def formatSize(size): - """formats size of bytes""" - size = int(size) - steps = 0 - sizes = ("B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB") - while size > 1000: - size /= 1024.0 - steps += 1 - return "%.2f %s" % (size, sizes[steps]) - - -def formatSpeed(speed): - return formatSize(speed) + "/s" - - -def freeSpace(folder): - if os.name == "nt": - import ctypes - - free_bytes = ctypes.c_ulonglong(0) - ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(folder), None, None, ctypes.pointer(free_bytes)) - return free_bytes.value - else: - s = os.statvfs(folder) - return s.f_frsize * s.f_bavail - - -def fs_bsize(path): - """ get optimal file system buffer size (in bytes) for I/O calls """ - path = fs_encode(path) - - if os.name == "nt": - import ctypes - - drive = "%s\\" % os.path.splitdrive(path)[0] - cluster_sectors, sector_size = ctypes.c_longlong(0) - ctypes.windll.kernel32.GetDiskFreeSpaceW(ctypes.c_wchar_p(drive), ctypes.pointer(cluster_sectors), ctypes.pointer(sector_size), None, None) - return cluster_sectors * sector_size - else: - return os.statvfs(path).f_frsize - - -def uniqify(seq): #: Originally by Dave Kirby - """ Remove duplicates from list preserving order """ - seen = set() - seen_add = seen.add - return [x for x in seq if x not in seen and not seen_add(x)] - - -def parseFileSize(string, unit=None): #returns bytes - if not unit: - m = re.match(r"([\d.,]+) *([a-zA-Z]*)", string.strip().lower()) - if m: - traffic = float(m.group(1).replace(",", ".")) - unit = m.group(2) - else: - return 0 - else: - if isinstance(string, basestring): - traffic = float(string.replace(",", ".")) - else: - traffic = string - - #ignore case - unit = unit.lower().strip() - - if unit in ("eb", "ebyte", "exabyte", "eib", "e"): - traffic *= 1 << 60 - elif unit in ("pb", "pbyte", "petabyte", "pib", "p"): - traffic *= 1 << 50 - elif unit in ("tb", "tbyte", "terabyte", "tib", "t"): - traffic *= 1 << 40 - elif unit in ("gb", "gbyte", "gigabyte", "gib", "g", "gig"): - traffic *= 1 << 30 - elif unit in ("mb", "mbyte", "megabyte", "mib", "m"): - traffic *= 1 << 20 - elif unit in ("kb", "kbyte", "kilobyte", "kib", "k"): - traffic *= 1 << 10 - - return traffic - - -def lock(func): - def new(*args): - #print "Handler: %s args: %s" % (func, args[1:]) - args[0].lock.acquire() - try: - return func(*args) - finally: - args[0].lock.release() - - return new - - -def fixup(m): - text = m.group(0) - if text[:2] == "&#": - # character reference - try: - if text[:3] == "&#x": - return unichr(int(text[3:-1], 16)) - else: - return unichr(int(text[2:-1])) - except ValueError: - pass - else: - # named entity - try: - name = text[1:-1] - text = unichr(name2codepoint[name]) - except KeyError: - pass - - return text # leave as is - - -def has_method(obj, name): - """ Check if "name" was defined in obj, (false if it was inhereted) """ - return hasattr(obj, '__dict__') and name in obj.__dict__ - - -def html_unescape(text): - """Removes HTML or XML character references and entities from a text string""" - return re.sub("&#?\w+;", fixup, text) - - -def versiontuple(v): #: By kindall (http://stackoverflow.com/a/11887825) - return tuple(map(int, (v.split(".")))) - - -def load_translation(name, locale, default="en"): - """ Load language and return its translation object or None """ - try: - gettext.setpaths([path.join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation(name, self.path("locale"), - languages=[locale, default], fallback=True) - except Exception: - return None - else: - translation.install(True) - return translation diff --git a/pyload/utils/packagetools.py b/pyload/utils/packagetools.py deleted file mode 100644 index 9dbde9b50..000000000 --- a/pyload/utils/packagetools.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urlparse - - -endings = ("jdeatme", "3gp", "7zip", "7z", "abr", "ac3", "aiff", "aifc", "aif", "ai", - "au", "avi", "apk", "bin", "bmp", "bat", "bz2", "cbr", "cbz", "ccf", "chm", - "cr2", "cso", "cue", "cvd", "dta", "deb", "divx", "djvu", "dlc", "dmg", "doc", - "docx", "dot", "eps", "epub", "exe", "ff", "flv", "flac", "f4v", "gsd", "gif", - "gpg", "gz", "iwd", "idx", "iso", "ipa", "ipsw", "java", "jar", "jpe?g", "load", - "m2ts", "m4v", "m4a", "md5", "mkv", "mp2", "mp3", "mp4", "mobi", "mov", "movie", - "mpeg", "mpe", "mpg", "mpq", "msi", "msu", "msp", "mv", "mws", "nfo", "npk", "oga", - "ogg", "ogv", "otrkey", "par2", "pkg", "png", "pdf", "pptx?", "ppsx?", "ppz", "pot", - "psd", "qt", "rmvb", "rm", "rar", "ram", "ra", "rev", "rnd", "rpm", "run", "rsdf", - "reg", "rtf", "shnf", "sh(?!tml)", "ssa", "smi", "sub", "srt", "snd", "sfv", "sfx", - "swf", "swc", "tar\.(gz|bz2|xz)", "tar", "tgz", "tiff?", "ts", "txt", "viv", "vivo", - "vob", "vtt", "webm", "wav", "wmv", "wma", "xla", "xls", "xpi", "zeno", "zip", - "[r-z]\d{2}", "_[_a-z]{2}", "\d{3,4}(?=\?|$|\"|\r|\n)") - -rarPats = [re.compile(r'(.*)(\.|_|-)pa?r?t?\.?\d+.(rar|exe)$', re.I), - re.compile(r'(.*)(\.|_|-)part\.?[0]*[1].(rar|exe)$', re.I), - re.compile(r'(.*)\.rar$', re.I), - re.compile(r'(.*)\.r\d+$', re.I), - re.compile(r'(.*)(\.|_|-)\d+$', re.I)] - -zipPats = [re.compile(r'(.*)\.zip$', re.I), - re.compile(r'(.*)\.z\d+$', re.I), - re.compile(r'(?is).*\.7z\.[\d]+$', re.I), - re.compile(r'(.*)\.a.$', re.I)] - -ffsjPats = [re.compile(r'(.*)\._((_[a-z])|([a-z]{2}))(\.|$)'), - re.compile(r'(.*)(\.|_|-)[\d]+(\.(' + '|'.join(endings) + ')$)', re.I)] - -iszPats = [re.compile(r'(.*)\.isz$', re.I), - re.compile(r'(.*)\.i\d{2}$', re.I)] - -pat0 = re.compile(r'www\d*\.', re.I) - -pat1 = re.compile(r'(\.?CD\d+)', re.I) -pat2 = re.compile(r'(\.?part\d+)', re.I) - -pat3 = re.compile(r'(.+)[\.\-_]+$') -pat4 = re.compile(r'(.+)\.\d+\.xtm$') - - -def matchFirst(string, *args): - """ matches against list of regexp and returns first match """ - for patternlist in args: - for pattern in patternlist: - m = pattern.search(string) - if m is not None: - name = m.group(1) - return name - - return string - - -def parseNames(files): - """ Generates packages names from name, data lists - - :param files: list of (name, data) - :return: packagenames mapped to data lists (eg. urls) - """ - packs = {} - - for file, url in files: - patternMatch = False - - if file is None: - continue - - # remove trailing / - name = file.rstrip('/') - - # extract last path part .. if there is a path - split = name.rsplit("/", 1) - if len(split) > 1: - name = split.pop(1) - - #check if an already existing package may be ok for this file - # found = False - # for pack in packs: - # if pack in file: - # packs[pack].append(url) - # found = True - # break - # - # if found: - # continue - - # unrar pattern, 7zip/zip and hjmerge pattern, isz pattern, FFSJ pattern - before = name - name = matchFirst(name, rarPats, zipPats, iszPats, ffsjPats) - if before != name: - patternMatch = True - - # xtremsplit pattern - m = pat4.search(name) - if m is not None: - name = m.group(1) - - # remove part and cd pattern - m = pat1.search(name) - if m is not None: - name = name.replace(m.group(0), "") - patternMatch = True - - m = pat2.search(name) - if m is not None: - name = name.replace(m.group(0), "") - patternMatch = True - - # additional checks if extension pattern matched - if patternMatch: - # remove extension - index = name.rfind(".") - if index <= 0: - index = name.rfind("_") - if index > 0: - length = len(name) - index - if length <= 4: - name = name[:-length] - - # remove endings like . _ - - m = pat3.search(name) - if m is not None: - name = m.group(1) - - # replace . and _ with space - name = name.replace(".", " ") - name = name.replace("_", " ") - - name = name.strip() - else: - name = "" - - # fallback: package by hoster - if not name: - name = urlparse(file).netloc - if name: - name = pat0.sub("", name) - - # fallback : default name - if not name: - name = _("Unnamed package") - - # build mapping - if name in packs: - packs[name].append(url) - else: - packs[name] = [url] - - return packs diff --git a/pyload/utils/printer.py b/pyload/utils/printer.py deleted file mode 100644 index 5d333e238..000000000 --- a/pyload/utils/printer.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: vuolter - -import colorama - -colorama.init(autoreset=True) - -def color(color, text): - return colorama.Fore.(c.upper())(text) - -for c in colorama.Fore: - eval("%(color) = lambda msg: color(%(color), msg)" % {'color': c.lower()} - - -def overline(line, msg): - print "\033[%(line)s;0H\033[2K%(msg)s" % {'line': str(line), 'msg': msg} diff --git a/pyload/utils/pylgettext.py b/pyload/utils/pylgettext.py deleted file mode 100644 index cab631cf4..000000000 --- a/pyload/utils/pylgettext.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -from gettext import * - -_searchdirs = None - -origfind = find - -def setpaths(pathlist): - global _searchdirs - if isinstance(pathlist, list): - _searchdirs = pathlist - else: - _searchdirs = list(pathlist) - - -def addpath(path): - global _searchdirs - if _searchdirs is None: - _searchdirs = list(path) - else: - if path not in _searchdirs: - _searchdirs.append(path) - - -def delpath(path): - global _searchdirs - if _searchdirs is not None: - if path in _searchdirs: - _searchdirs.remove(path) - - -def clearpath(): - global _searchdirs - if _searchdirs is not None: - _searchdirs = None - - -def find(domain, localedir=None, languages=None, all=False): - if _searchdirs is None: - return origfind(domain, localedir, languages, all) - searches = [localedir] + _searchdirs - results = list() - for dir in searches: - res = origfind(domain, dir, languages, all) - if all is False: - results.append(res) - else: - results.extend(res) - if all is False: - results = filter(lambda x: x is not None, results) - if len(results) == 0: - return None - else: - return results[0] - else: - return results - -#Is there a smarter/cleaner pythonic way for this? -translation.func_globals['find'] = find |