Source code for dp_tornado.helper.io.file.zip

# -*- coding: utf-8 -*-


import zipfile

from dp_tornado.engine.helper import Helper as dpHelper


[docs]class ZipHelper(dpHelper):
[docs] def archive(self, destfile, srcfiles, mode='w', compression=zipfile.ZIP_STORED, allowZip64=False): archive = zipfile.ZipFile(file=destfile, mode=mode, compression=compression, allowZip64=allowZip64) if not isinstance(srcfiles, (list, tuple)): srcfiles = (srcfiles, ) for srcfile in srcfiles: arcname = None compress_type = None if isinstance(srcfile, (tuple, list)): filename = srcfile[0] arcname = srcfile[1] if len(srcfile) > 1 else arcname compress_type = srcfile[2] if len(srcfile) > 2 else compress_type else: filename = srcfile self._archive_append(archive, filename, arcname, compress_type) archive.close() return True
def _archive_append(self, archive, path, arcname, compress_type): if self.helper.io.path.is_file(path): archive.write(filename=path, arcname=arcname, compress_type=compress_type) elif self.helper.io.path.is_dir(path): for e in self.helper.io.path.browse(path): self._archive_append(archive=archive, path=e, arcname=arcname, compress_type=compress_type)
[docs] def unarchive(self, srcfile, destpath, mode='r', compression=zipfile.ZIP_STORED, allowZip64=False): with zipfile.ZipFile(file=srcfile, mode=mode, compression=compression, allowZip64=allowZip64) as archive: archive.extractall(destpath) return True