forked from DRMTalks/devine
Only verify download size in requests downloader if possible
Some Servers may not response with the Content-Length header, even if it's from segmented media. I.e., if it's a subtitle URL. The requests downloader required the header to be present as it downloads each URL, which is not possible. Now it tries to get it if possible, and verifies the download size with the Content-Length value if it could be obtained.
This commit is contained in:
parent
2a4e9505f1
commit
bdc1203514
|
@ -57,7 +57,7 @@ def requests(
|
||||||
for url, out_path in uri:
|
for url, out_path in uri:
|
||||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
stream = session.get(url, stream=True)
|
stream = session.get(url, stream=True)
|
||||||
file_size = int(stream.headers["Content-Length"])
|
file_size = stream.headers.get("Content-Length")
|
||||||
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):
|
||||||
|
@ -77,7 +77,7 @@ def requests(
|
||||||
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()
|
||||||
if written < file_size:
|
if file_size and written < int(file_size):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"{url} finished downloading unexpectedly, got {decimal(written)}/{decimal(file_size)}")
|
f"{url} finished downloading unexpectedly, got {decimal(written)}/{decimal(file_size)}")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue