fix: re-initialize resumable upload URL on each retry attempt

The resumable upload URL returned by Google Play is session-specific and
expires after a failed attempt. Retrying with the same URL always fails.
Also broadens the caught exception from HTTPError to RequestException so
timeouts and connection errors are retried too.
This commit is contained in:
Thomas Güttler
2026-05-18 05:06:42 +02:00
parent 0733a4bf8a
commit 83654fb4c9
+15 -14
View File
@@ -31,24 +31,25 @@ def _upload_aab(session: AuthorizedSession, edit_id: str) -> int:
"""Resumable upload of the AAB. Returns the version code."""
file_size = os.path.getsize(AAB_PATH)
init_resp = session.post(
f"{_UPLOAD_BASE}/{PACKAGE_NAME}/edits/{edit_id}/bundles",
params={"uploadType": "resumable"},
headers={
"X-Upload-Content-Type": "application/octet-stream",
"X-Upload-Content-Length": str(file_size),
},
json={},
timeout=30,
)
init_resp.raise_for_status()
upload_url = init_resp.headers["Location"]
with open(AAB_PATH, "rb") as f:
data = f.read()
last_exc = None
for attempt in range(_MAX_UPLOAD_ATTEMPTS):
# Each attempt needs a fresh resumable upload URL — the previous URL expires on failure.
init_resp = session.post(
f"{_UPLOAD_BASE}/{PACKAGE_NAME}/edits/{edit_id}/bundles",
params={"uploadType": "resumable"},
headers={
"X-Upload-Content-Type": "application/octet-stream",
"X-Upload-Content-Length": str(file_size),
},
json={},
timeout=30,
)
init_resp.raise_for_status()
upload_url = init_resp.headers["Location"]
try:
upload_resp = session.put(
upload_url,
@@ -61,7 +62,7 @@ def _upload_aab(session: AuthorizedSession, edit_id: str) -> int:
)
upload_resp.raise_for_status()
return upload_resp.json()["versionCode"]
except requests.HTTPError as exc:
except requests.RequestException as exc:
last_exc = exc
if attempt < _MAX_UPLOAD_ATTEMPTS - 1:
delay = 10 * (2 ** attempt)