zip.py 783 B

1234567891011121314151617181920212223242526272829303132
  1. """
  2. Generate zip test data files.
  3. """
  4. import contextlib
  5. import os
  6. import pathlib
  7. import zipfile
  8. import zipp
  9. def make_zip_file(src, dst):
  10. """
  11. Zip the files in src into a new zipfile at dst.
  12. """
  13. with zipfile.ZipFile(dst, 'w') as zf:
  14. for src_path, rel in walk(src):
  15. dst_name = src.name / pathlib.PurePosixPath(rel.as_posix())
  16. zf.write(src_path, dst_name)
  17. zipp.CompleteDirs.inject(zf)
  18. return dst
  19. def walk(datapath):
  20. for dirpath, dirnames, filenames in os.walk(datapath):
  21. with contextlib.suppress(ValueError):
  22. dirnames.remove('__pycache__')
  23. for filename in filenames:
  24. res = pathlib.Path(dirpath) / filename
  25. rel = res.relative_to(datapath)
  26. yield res, rel