mirror of
https://github.com/ihabunek/twitch-dl
synced 2024-08-30 18:32:25 +00:00
da60560b63
* allow resuming * retry downloads * add timeouts
39 lines
812 B
Python
39 lines
812 B
Python
import os
|
|
import requests
|
|
|
|
from requests.exceptions import RequestException
|
|
|
|
|
|
CHUNK_SIZE = 1024
|
|
CONNECT_TIMEOUT = 5
|
|
|
|
|
|
class DownloadFailed(Exception):
|
|
pass
|
|
|
|
|
|
def _download(url, path):
|
|
tmp_path = path + ".tmp"
|
|
response = requests.get(url, stream=True, timeout=CONNECT_TIMEOUT)
|
|
size = 0
|
|
with open(tmp_path, 'wb') as target:
|
|
for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
|
|
target.write(chunk)
|
|
size += len(chunk)
|
|
|
|
os.rename(tmp_path, path)
|
|
return size
|
|
|
|
|
|
def download_file(url, path, retries=3):
|
|
if os.path.exists(path):
|
|
return 0
|
|
|
|
for _ in range(retries):
|
|
try:
|
|
return _download(url, path)
|
|
except RequestException as e:
|
|
print("Download failed: {}".format(e))
|
|
|
|
raise DownloadFailed(":(")
|