summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_importlib/resources/zip.py
blob: 4dcf6facc770cb4cbd3a1bf42671dc950e005960 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"""
Generate zip test data files.
"""

import contextlib
import os
import pathlib
import zipfile


def make_zip_file(src, dst):
    """
    Zip the files in src into a new zipfile at dst.
    """
    with zipfile.ZipFile(dst, 'w') as zf:
        for src_path, rel in walk(src):
            dst_name = src.name / pathlib.PurePosixPath(rel.as_posix())
            zf.write(src_path, dst_name)
        zipfile._path.CompleteDirs.inject(zf)
    return dst


def walk(datapath):
    for dirpath, dirnames, filenames in os.walk(datapath):
        with contextlib.suppress(ValueError):
            dirnames.remove('__pycache__')
        for filename in filenames:
            res = pathlib.Path(dirpath) / filename
            rel = res.relative_to(datapath)
            yield res, rel