https://github.com/python/cpython/commit/e9d845b41dca9ad84b76ef777d05e647a4b4d8cd
commit: e9d845b41dca9ad84b76ef777d05e647a4b4d8cd
branch: main
author: Emma Smith <[email protected]>
committer: zooba <[email protected]>
date: 2025-05-28T22:18:34+01:00
summary:
gh-134262: Add retries to downloads in PCbuild\get_external.py (GH-134820)
files:
M PCbuild/get_external.py
diff --git a/PCbuild/get_external.py b/PCbuild/get_external.py
index 4ecc8925349c93..99aff63882f5ba 100755
--- a/PCbuild/get_external.py
+++ b/PCbuild/get_external.py
@@ -9,6 +9,25 @@
from urllib.request import urlretrieve
+def retrieve_with_retries(download_location, output_path, reporthook,
+ max_retries=7):
+ """Download a file with exponential backoff retry and save to disk."""
+ for attempt in range(max_retries):
+ try:
+ resp = urlretrieve(
+ download_location,
+ output_path,
+ reporthook=reporthook,
+ )
+ except ConnectionError as ex:
+ if attempt == max_retries:
+ msg = f"Download from {download_location} failed."
+ raise OSError(msg) from ex
+ time.sleep(2.25**attempt)
+ else:
+ return resp
+
+
def fetch_zip(commit_hash, zip_dir, *, org='python', binary=False, verbose):
repo = f'cpython-{"bin" if binary else "source"}-deps'
url = f'https://github.com/{org}/{repo}/archive/{commit_hash}.zip'
@@ -16,10 +35,10 @@ def fetch_zip(commit_hash, zip_dir, *, org='python',
binary=False, verbose):
if verbose:
reporthook = print
zip_dir.mkdir(parents=True, exist_ok=True)
- filename, headers = urlretrieve(
+ filename, _headers = retrieve_with_retries(
url,
zip_dir / f'{commit_hash}.zip',
- reporthook=reporthook,
+ reporthook
)
return filename
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]