Source code for metapack_build.package.zip

from os import walk
from os.path import join
import zipfile
from metapack.util import slugify

from .core import PackageBuilder


[docs]class ZipPackageBuilder(PackageBuilder): """A Zip File package""" type_code = 'zip' type_suffix = '.zip' def __init__(self, source_ref=None, package_root=None, callback=None, env=None): super().__init__(source_ref, package_root, callback, env) self.package_path, self.cache_path = self.make_package_path(self.package_root, self.package_name)
[docs] @classmethod def make_package_path(cls, package_root, package_name): cache_path = package_name + cls.type_suffix package_path = package_root.join(cache_path) return package_path, cache_path
[docs] def save(self, path=None): self.check_is_ready() root_dir = slugify(self.doc.find_first_value('Root.Name')) self.prt("Creating ZIP Package at '{}' from filesystem package at '{}'" .format(self.package_path, self.source_dir)) self.zf = zipfile.ZipFile(self.package_path.path, 'w', zipfile.ZIP_DEFLATED) for root, dirs, files in walk(self.source_dir): for f in files: source = join(root, f) rel = source.replace(self.source_dir,'').strip('/') dest = join(root_dir, rel) self.zf.write(source,dest) self.zf.close() return self.package_path