aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_importlib/resources/zip.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2024-09-11 22:33:07 -0400
committerGitHub <noreply@github.com>2024-09-11 22:33:07 -0400
commitba687d9481c04fd160795ff8d8568f5c9f877128 (patch)
tree03845d8195b86add0ced1e72f55b1e556c0c5b80 /Lib/test/test_importlib/resources/zip.py
parent3bd942f106aa36c261a2d90104c027026b2a8fb6 (diff)
downloadcpython-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-xLib/test/test_importlib/resources/zip.py26
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