deepfuze
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import os
|
||||
import subprocess
|
||||
import ssl
|
||||
import urllib.request
|
||||
from typing import List
|
||||
from functools import lru_cache
|
||||
from tqdm import tqdm
|
||||
|
||||
import deepfuze.globals
|
||||
from deepfuze import wording
|
||||
from deepfuze.common_helper import is_macos
|
||||
from deepfuze.filesystem import get_file_size, is_file
|
||||
|
||||
if is_macos():
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
|
||||
|
||||
def conditional_download(download_directory_path : str, urls : List[str]) -> None:
|
||||
print("here..",download_directory_path)
|
||||
for url in urls:
|
||||
download_file_path = os.path.join(download_directory_path, os.path.basename(url))
|
||||
initial_size = get_file_size(download_file_path)
|
||||
download_size = get_download_size(url)
|
||||
if initial_size < download_size:
|
||||
with tqdm(total = download_size, initial = initial_size, desc = wording.get('downloading'), unit = 'B', unit_scale = True, unit_divisor = 1024, ascii = ' =', disable = deepfuze.globals.log_level in [ 'warn', 'error' ]) as progress:
|
||||
subprocess.Popen([ 'curl', '--create-dirs', '--silent', '--insecure', '--location', '--continue-at', '-', '--output', download_file_path, url ])
|
||||
current_size = initial_size
|
||||
while current_size < download_size:
|
||||
if is_file(download_file_path):
|
||||
current_size = get_file_size(download_file_path)
|
||||
progress.update(current_size - progress.n)
|
||||
if download_size and not is_download_done(url, download_file_path):
|
||||
os.remove(download_file_path)
|
||||
conditional_download(download_directory_path, [ url ])
|
||||
|
||||
|
||||
@lru_cache(maxsize = None)
|
||||
def get_download_size(url : str) -> int:
|
||||
try:
|
||||
response = urllib.request.urlopen(url, timeout = 10)
|
||||
return int(response.getheader('Content-Length'))
|
||||
except (OSError, ValueError):
|
||||
return 0
|
||||
|
||||
|
||||
def is_download_done(url : str, file_path : str) -> bool:
|
||||
if is_file(file_path):
|
||||
return get_download_size(url) == get_file_size(file_path)
|
||||
return False
|
||||
Reference in New Issue
Block a user