diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2024-09-11 22:33:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-11 22:33:07 -0400 |
commit | ba687d9481c04fd160795ff8d8568f5c9f877128 (patch) | |
tree | 03845d8195b86add0ced1e72f55b1e556c0c5b80 /Lib/test/test_importlib/resources/zip.py | |
parent | 3bd942f106aa36c261a2d90104c027026b2a8fb6 (diff) | |
download | cpython-ba687d9481c04fd160795ff8d8568f5c9f877128.tar.gz cpython-ba687d9481c04fd160795ff8d8568f5c9f877128.zip |
gh-121735: Fix module-adjacent references in zip files (#123037)
* gh-116608: Apply style and compatibility changes from importlib_metadata.
* gh-121735: Ensure module-adjacent resources are loadable from a zipfile.
* gh-121735: Allow all modules to be processed by the ZipReader.
* Add blurb
* Remove update-zips script, unneeded.
* Remove unnecessary references to removed static fixtures.
* Remove zipdata fixtures, unused.
Diffstat (limited to 'Lib/test/test_importlib/resources/zip.py')
-rwxr-xr-x | Lib/test/test_importlib/resources/zip.py | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/Lib/test/test_importlib/resources/zip.py b/Lib/test/test_importlib/resources/zip.py index 4dcf6facc77..fc453f02060 100755 --- a/Lib/test/test_importlib/resources/zip.py +++ b/Lib/test/test_importlib/resources/zip.py @@ -2,29 +2,23 @@ Generate zip test data files. """ -import contextlib -import os -import pathlib import zipfile -def make_zip_file(src, dst): +def make_zip_file(tree, dst): """ - Zip the files in src into a new zipfile at dst. + Zip the files in tree 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) + for name, contents in walk(tree): + zf.writestr(name, contents) 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 +def walk(tree, prefix=''): + for name, contents in tree.items(): + if isinstance(contents, dict): + yield from walk(contents, prefix=f'{prefix}{name}/') + else: + yield f'{prefix}{name}', contents |