def is_archive(path): """ Check if file in path is an ZIP, RAR or 7z file :param path: path to file :return: (zf, status, expected_extension) status: -1==Error/Retry, 0==OK, 1==Ignore """ if zipfile.is_zipfile(path): try: zf = zipfile.ZipFile(path) return 0, zf, '.zip' except: logging.info(T('Cannot read %s'), path, exc_info=True) return -1, None, '' elif misc.is_rarfile(path): try: # Set path to tool to open it rarfile.UNRAR_TOOL = sabnzbd.newsunpack.RAR_COMMAND zf = rarfile.RarFile(path) return 0, zf, '.rar' except: logging.info(T('Cannot read %s'), path, exc_info=True) return -1, None, '' elif is_sevenfile(path): try: zf = SevenZip(path) return 0, zf, '.7z' except: logging.info(T('Cannot read %s'), path, exc_info=True) return -1, None, '' else: logging.info('Archive %s is not a real archive!', os.path.basename(path)) return 1, None, ''
def is_archive(path): """ Check if file in path is an ZIP, RAR or 7z file :param path: path to file :return: (zf, status, expected_extension) status: -1==Error/Retry, 0==OK, 1==Ignore """ if zipfile.is_zipfile(path): try: zf = zipfile.ZipFile(path) return 0, zf, '.zip' except: return -1, None, '' elif rarfile.is_rarfile(path): try: zf = rarfile.RarFile(path) # Set path to tool to open it rarfile.UNRAR_TOOL = sabnzbd.newsunpack.RAR_COMMAND return 0, zf, '.rar' except: return -1, None, '' elif is_sevenfile(path): try: zf = SevenZip(path) return 0, zf, '.7z' except: return -1, None, '' else: return 1, None, ''
def is_archive(path): """ Check if file in path is an ZIP, RAR or 7z file :param path: path to file :return: (zf, status, expected_extension) status: -1==Error/Retry, 0==OK, 1==Ignore """ if zipfile.is_zipfile(path): try: zf = zipfile.ZipFile(path) return 0, zf, '.zip' except: return -1, None, '' elif is_rarfile(path): try: zf = RarFile(path) return 0, zf, '.rar' except: return -1, None, '' elif is_sevenfile(path): try: zf = SevenZip(path) return 0, zf, '.7z' except: return -1, None, '' else: return 1, None, ''
def ProcessArchiveFile(filename, path, pp=None, script=None, cat=None, catdir=None, keep=False, priority=None, url='', nzbname=None, password=None, nzo_id=None): """ Analyse ZIP file and create job(s). Accepts ZIP files with ONLY nzb/nfo/folder files in it. returns (status, nzo_ids) status: -1==Error/Retry, 0==OK, 1==Ignore """ from sabnzbd.nzbqueue import add_nzo nzo_ids = [] if catdir is None: catdir = cat filename, cat = name_to_cat(filename, catdir) if zipfile.is_zipfile(path): try: zf = zipfile.ZipFile(path) except: return -1, [] elif is_rarfile(path): try: zf = RarFile(path) except: return -1, [] elif is_sevenfile(path): try: zf = SevenZip(path) except: return -1, [] else: return 1, [] status = 1 names = zf.namelist() names.sort() nzbcount = 0 for name in names: name = name.lower() if not (name.endswith('.nzb') or name.endswith('.nfo') or name.endswith('/')): status = 1 break elif name.endswith('.nzb'): status = 0 nzbcount += 1 if status == 0: if nzbcount != 1: nzbname = None for name in names: if name.lower().endswith('.nzb'): try: data = zf.read(name) except: zf.close() return -1, [] name = os.path.basename(name) if data: try: nzo = nzbstuff.NzbObject(name, pp, script, data, cat=cat, url=url, priority=priority, nzbname=nzbname) if not nzo.password: nzo.password = password except: nzo = None if nzo: if nzo_id: # Re-use existing nzo_id, when a "future" job gets it payload sabnzbd.nzbqueue.NzbQueue.do.remove(nzo_id, add_to_history=False) nzo.nzo_id = nzo_id nzo_ids.append(add_nzo(nzo)) nzo.update_rating() zf.close() try: if not keep: os.remove(path) except: logging.error(T('Error removing %s'), misc.clip_path(path)) logging.info("Traceback: ", exc_info=True) status = 1 else: zf.close() status = 1 return status, nzo_ids