Add missing while loop to Requests downloader

This commit is contained in:
rlaphoenix 2024-01-21 18:47:19 +00:00
parent 2056e056a4
commit 172ab64017
1 changed files with 31 additions and 30 deletions

View File

@ -67,40 +67,41 @@ def requests(
out_path.parent.mkdir(parents=True, exist_ok=True) out_path.parent.mkdir(parents=True, exist_ok=True)
attempts = 1 attempts = 1
try: while True:
stream = session.get(url, stream=True) try:
stream.raise_for_status() stream = session.get(url, stream=True)
stream.raise_for_status()
if len(uri) == 1 and progress: if len(uri) == 1 and progress:
content_length = int(stream.headers.get("Content-Length", "0")) content_length = int(stream.headers.get("Content-Length", "0"))
if content_length > 0: if content_length > 0:
progress(total=math.ceil(content_length / 1024)) progress(total=math.ceil(content_length / 1024))
with open(out_path, "wb") as f: with open(out_path, "wb") as f:
written = 0 written = 0
for chunk in stream.iter_content(chunk_size=1024): for chunk in stream.iter_content(chunk_size=1024):
download_size = len(chunk) download_size = len(chunk)
f.write(chunk) f.write(chunk)
written += download_size written += download_size
if progress: if progress:
progress(advance=1) progress(advance=1)
now = time.time() now = time.time()
time_since = now - last_speed_refresh time_since = now - last_speed_refresh
download_sizes.append(download_size) download_sizes.append(download_size)
if time_since > 5 or download_size < 1024: if time_since > 5 or download_size < 1024:
data_size = sum(download_sizes) data_size = sum(download_sizes)
download_speed = data_size / (time_since or 1) download_speed = data_size / (time_since or 1)
progress(downloaded=f"{filesize.decimal(download_speed)}/s") progress(downloaded=f"{filesize.decimal(download_speed)}/s")
last_speed_refresh = now last_speed_refresh = now
download_sizes.clear() download_sizes.clear()
break break
except Exception as e: except Exception as e:
if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS: if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS:
raise e raise e
time.sleep(RETRY_WAIT) time.sleep(RETRY_WAIT)
attempts += 1 attempts += 1
return 0 return 0