https://github.com/python/cpython/commit/7762de2527db63f2d25c1693bbb63f8921bddebb commit: 7762de2527db63f2d25c1693bbb63f8921bddebb branch: 3.13 author: Emma Smith <e...@emmatyping.dev> committer: emmatyping <e...@emmatyping.dev> date: 2025-08-06T15:58:08-07:00 summary:
[3.13] gh-134262: Add retries to generate_sbom.py (GH-134263) (#137468) (cherry picked from commit 0c5a8b0b55238a45b9073d06a10c3a59568cdf3c) Co-authored-by: Semyon Moroz <donbar...@proton.me> files: M Tools/build/generate_sbom.py diff --git a/Tools/build/generate_sbom.py b/Tools/build/generate_sbom.py index 3299e4479e4a2e..450d163fd3b7a6 100644 --- a/Tools/build/generate_sbom.py +++ b/Tools/build/generate_sbom.py @@ -7,6 +7,9 @@ from pathlib import Path, PurePosixPath, PureWindowsPath import subprocess import sys +import time +import typing +import urllib.error import urllib.request import typing @@ -163,6 +166,21 @@ def get_externals() -> list[str]: return externals +def download_with_retries(download_location: str, + max_retries: int = 5, + base_delay: float = 2.0) -> typing.Any: + """Download a file with exponential backoff retry.""" + for attempt in range(max_retries): + try: + resp = urllib.request.urlopen(download_location) + except urllib.error.URLError as ex: + if attempt == max_retries: + raise ex + time.sleep(base_delay**attempt) + else: + return resp + + def check_sbom_packages(sbom_data: dict[str, typing.Any]) -> None: """Make a bunch of assertions about the SBOM package data to ensure it's consistent.""" @@ -177,7 +195,7 @@ def check_sbom_packages(sbom_data: dict[str, typing.Any]) -> None: # and that the download URL is valid. if "checksums" not in package or "CI" in os.environ: download_location = package["downloadLocation"] - resp = urllib.request.urlopen(download_location) + resp = download_with_retries(download_location) error_if(resp.status != 200, f"Couldn't access URL: {download_location}'") package["checksums"] = [{ _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: arch...@mail-archive.com