diff options
Diffstat (limited to 'module/plugins/internal/UnZip.py')
-rw-r--r-- | module/plugins/internal/UnZip.py | 64 |
1 files changed, 15 insertions, 49 deletions
diff --git a/module/plugins/internal/UnZip.py b/module/plugins/internal/UnZip.py index 5ec56cbdf..026503be5 100644 --- a/module/plugins/internal/UnZip.py +++ b/module/plugins/internal/UnZip.py @@ -2,6 +2,7 @@ from __future__ import with_statement +import os import sys import zipfile @@ -10,14 +11,15 @@ from module.plugins.internal.Extractor import Extractor, ArchiveError, CRCError, class UnZip(Extractor): __name__ = "UnZip" - __version__ = "1.01" + __version__ = "1.03" __description__ = """Zip extractor plugin""" __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + __authors__ = [("RaNaN", "RaNaN@pyload.org"), + ("Walter Purcaro", "vuolter@gmail.com")] - EXTENSIONS = ["zip", "zip64"] + EXTENSIONS = [".zip", ".zip64"] @classmethod @@ -26,61 +28,25 @@ class UnZip(Extractor): @classmethod - def isArchive(cls, file): - return zipfile.is_zipfile(file) + def getTargets(cls, files_ids): + return [(filename, id) for filename, id in files_ids if cls.isArchive(filename)] - def verify(self): + def extract(self, password=None): try: - with zipfile.ZipFile(self.file, 'r', allowZip64=True) as z: + with zipfile.ZipFile(self.target, 'r', allowZip64=True) as z: z.setpassword(self.password) - badcrc = z.testzip() + 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 'encrypted' in e: + if "encrypted" in e: raise PasswordError else: raise ArchiveError(e) - - else: - if badcrc: - raise CRCError - - if not self.list(): - raise ArchiveError("Empty archive") - - - def list(self): - try: - with zipfile.ZipFile(self.file, 'r', allowZip64=True) as z: - z.setpassword(self.password) - return z.namelist() - except Exception: - return list() - - - def extract(self, progress=lambda x: None): - try: - with zipfile.ZipFile(self.file, 'r', allowZip64=True) as z: - progress(0) - z.extractall(self.out, pwd=self.password) - progress(100) - - except (BadZipfile, LargeZipFile), e: - raise ArchiveError(e) - - except RuntimeError, e: - if e is "Bad password for file": - raise PasswordError - else: - raise ArchiveError(e) - - finally: - self.files = self.list() - - - def getDeleteFiles(self): - return [self.file] |