MFZipFile

Python’s ZipFile doesn’t preserve file permissions at extraction time. The MFZipFile subclass:

  • modifies ZipFile.extract() to preserve permissions per the recommendation here

  • adds a static ZipFile.compressall() method to create a zip file from files and directories

  • maintains an otherwise identical API

compressall

The compressall method is a static method that creates a zip file from lists of files and/or directories. It is a convenience method that wraps ZipFile.write(), ZipFile.close(), etc.

from zipfile import ZipFile
from modflow_devtools.zip import MFZipFile

def test_compressall(function_tmpdir):
    zip_file = function_tmpdir / "output.zip"
    
    input_dir = function_tmpdir / "input"
    input_dir.mkdir()

    with open(input_dir / "data.txt", "w") as f:
        f.write("hello world")

    MFZipFile.compressall(str(zip_file), dir_pths=str(input_dir))
    assert zip_file.exists()

    output_dir = function_tmpdir / "output"
    output_dir.mkdir()

    ZipFile(zip_file).extractall(path=str(output_dir))
    assert (output_dir / "data.txt").is_file()