chore: minor cleanups and perf tweaks from code review (#2910)

* chore: minor cleanups and perf tweaks from code review

- util/file.py, util/python_build_standalone.py: use hashlib.file_digest
  for streaming SHA-256 verification instead of loading whole archives
  into memory with read_bytes()
- logger.py: convert colors/symbols properties to functools.cached_property
  so the Colors/Symbols objects are constructed only once per Logger instance
- platforms/windows.py: remove redundant .strip() on where_pip (already
  stripped at assignment)
- util/python_build_standalone.py: remove unreachable python_base_dir.exists()
  guard (callers always pass a fresh temp subdirectory)
- util/file.py: add comment explaining the getattr shim for
  tar_.extraction_filter and when it can be removed

Assisted-by: ClaudeCode:claude-fable-5

* revert: restore assertion to check python_base_dir existence
This commit is contained in:
Henry Schreiner
2026-06-12 16:03:36 +01:00
committed by GitHub
parent 01265e5db0
commit 42aa1345c3
4 changed files with 10 additions and 8 deletions
+2 -2
View File
@@ -375,11 +375,11 @@ class Logger:
out.write("\n") out.write("\n")
return out.getvalue() return out.getvalue()
@property @functools.cached_property
def colors(self) -> Colors: def colors(self) -> Colors:
return Colors(enabled=self.colors_enabled) return Colors(enabled=self.colors_enabled)
@property @functools.cached_property
def symbols(self) -> Symbols: def symbols(self) -> Symbols:
return Symbols(unicode=self.unicode_enabled) return Symbols(unicode=self.unicode_enabled)
+1 -1
View File
@@ -348,7 +348,7 @@ def setup_python(
assert (venv_path / "Scripts" / "pip.exe").exists() assert (venv_path / "Scripts" / "pip.exe").exists()
where_pip = call("where", "pip", env=env, capture_stdout=True).splitlines()[0].strip() where_pip = call("where", "pip", env=env, capture_stdout=True).splitlines()[0].strip()
print(where_pip) print(where_pip)
if where_pip.strip() != str(venv_path / "Scripts" / "pip.exe"): if where_pip != str(venv_path / "Scripts" / "pip.exe"):
msg = "pip available on PATH doesn't match our installed instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert pip above it." msg = "pip available on PATH doesn't match our installed instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert pip above it."
raise errors.FatalError(msg) raise errors.FatalError(msg)
call("pip", "--version", env=env) call("pip", "--version", env=env)
+4 -1
View File
@@ -99,7 +99,8 @@ def download(url: str, dest: Path, *, sha256: str | None = None) -> None:
time.sleep(3) time.sleep(3)
if sha256: if sha256:
computed = hashlib.sha256(dest.read_bytes()).hexdigest() with dest.open("rb") as f:
computed = hashlib.file_digest(f, "sha256").hexdigest()
if computed != sha256: if computed != sha256:
dest.unlink(missing_ok=True) dest.unlink(missing_ok=True)
msg = f"SHA256 mismatch for {url}: expected {sha256!r}, got {computed!r}" msg = f"SHA256 mismatch for {url}: expected {sha256!r}, got {computed!r}"
@@ -130,6 +131,8 @@ def extract_tar(tar_src: Path, dest: Path) -> None:
See: https://docs.python.org/3/library/tarfile.html#tarfile.tar_filter for filter details See: https://docs.python.org/3/library/tarfile.html#tarfile.tar_filter for filter details
""" """
with tarfile.open(tar_src) as tar_: with tarfile.open(tar_src) as tar_:
# getattr shim needed while Python 3.11.0-3.11.3 are supported;
# once the minimum is 3.11.4+/3.12, replace with: tar_.extractall(dest, filter="tar")
tar_.extraction_filter = getattr(tarfile, "tar_filter", (lambda member, _: member)) tar_.extraction_filter = getattr(tarfile, "tar_filter", (lambda member, _: member))
tar_.extractall(dest) tar_.extractall(dest)
+3 -4
View File
@@ -154,7 +154,8 @@ def _download_or_get_from_cache(
asset_cache_path = cache_dir / asset_filename asset_cache_path = cache_dir / asset_filename
if asset_cache_path.is_file(): if asset_cache_path.is_file():
if sha256: if sha256:
computed = hashlib.sha256(asset_cache_path.read_bytes()).hexdigest() with asset_cache_path.open("rb") as f:
computed = hashlib.file_digest(f, "sha256").hexdigest()
if computed != sha256: if computed != sha256:
print( print(
f"Cached python_build_standalone SHA256 mismatch for {asset_cache_path}; redownloading." f"Cached python_build_standalone SHA256 mismatch for {asset_cache_path}; redownloading."
@@ -229,9 +230,7 @@ def create_python_build_standalone_environment(
) )
python_base_dir = temp_dir / "pbs" python_base_dir = temp_dir / "pbs"
if python_base_dir.exists(): assert not python_base_dir.exists()
msg = f"python-build-standalone directory already exists: {python_base_dir}"
raise PythonBuildStandaloneError(msg)
extract_tar(archive_path, python_base_dir) extract_tar(archive_path, python_base_dir)
return _find_python_executable(python_base_dir) return _find_python_executable(python_base_dir)