diff options
author | 2015-01-27 17:48:25 +0100 | |
---|---|---|
committer | 2015-01-27 17:48:25 +0100 | |
commit | 8848a359a43316fb346b728d1d79d7b72d27e5a0 (patch) | |
tree | a9604ae6ddbc34713cbac0090a29e2e6e88c6556 /module/plugins/internal/UnZip.py | |
parent | [ClickAndLoad] Use self.manager instead hookManager (diff) | |
download | pyload-8848a359a43316fb346b728d1d79d7b72d27e5a0.tar.xz |
Update Extractor (again)
Diffstat (limited to 'module/plugins/internal/UnZip.py')
-rw-r--r-- | module/plugins/internal/UnZip.py | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/module/plugins/internal/UnZip.py b/module/plugins/internal/UnZip.py index 888ae7ebe..026503be5 100644 --- a/module/plugins/internal/UnZip.py +++ b/module/plugins/internal/UnZip.py @@ -1,51 +1,52 @@ # -*- coding: utf-8 -*- +from __future__ import with_statement + +import os import sys import zipfile -from module.plugins.internal.Extractor import Extractor, WrongPassword, ArchiveError +from module.plugins.internal.Extractor import Extractor, ArchiveError, CRCError, PasswordError class UnZip(Extractor): __name__ = "UnZip" - __version__ = "1.02" + __version__ = "1.03" __description__ = """Zip extractor plugin""" __license__ = "GPLv3" - __authors__ = [("RaNaN", "RaNaN@pyload.org")] + __authors__ = [("RaNaN", "RaNaN@pyload.org"), + ("Walter Purcaro", "vuolter@gmail.com")] - @staticmethod - def checkDeps(): - return sys.version_info[:2] >= (2, 6) + EXTENSIONS = [".zip", ".zip64"] - @staticmethod - def getTargets(files_ids): - result = [] + @classmethod + def checkDeps(cls): + return sys.version_info[:2] >= (2, 6) - for file, id in files_ids: - if file.endswith(".zip"): - result.append((file, id)) - return result + @classmethod + def getTargets(cls, files_ids): + return [(filename, id) for filename, id in files_ids if cls.isArchive(filename)] - def extract(self, progress, password=None): + def extract(self, password=None): try: - z = zipfile.ZipFile(self.file) - self.files = z.namelist() - z.extractall(self.out, pwd=password) + with zipfile.ZipFile(self.target, 'r', allowZip64=True) as z: + z.setpassword(self.password) + if not z.testzip(): + z.extractall(self.out) + self.files = z.namelist() + else: + raise CRCError except (BadZipfile, LargeZipFile), e: raise ArchiveError(e) except RuntimeError, e: - if e is "Bad password for file": - raise WrongPassword + if "encrypted" in e: + raise PasswordError else: raise ArchiveError(e) - - - def getDeleteFiles(self): - return [self.file] |