From bdc1203514ae0a60bdcdffacb138ec40d1f0b710 Mon Sep 17 00:00:00 2001 From: rlaphoenix Date: Tue, 16 May 2023 20:49:43 +0100 Subject: [PATCH] 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. --- devine/core/downloaders/requests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devine/core/downloaders/requests.py b/devine/core/downloaders/requests.py index 2d1f7f8..57f0e84 100644 --- a/devine/core/downloaders/requests.py +++ b/devine/core/downloaders/requests.py @@ -57,7 +57,7 @@ def requests( for url, out_path in uri: out_path.parent.mkdir(parents=True, exist_ok=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: written = 0 for chunk in stream.iter_content(chunk_size=1024): @@ -77,7 +77,7 @@ def requests( progress(downloaded=f"{filesize.decimal(download_speed)}/s") last_speed_refresh = now download_sizes.clear() - if written < file_size: + if file_size and written < int(file_size): raise ValueError( f"{url} finished downloading unexpectedly, got {decimal(written)}/{decimal(file_size)}")