in sing/fondation/utils.py [0:0]
def download_file(target, url, sha256=None):
"""
Download a file with a progress bar.
Arguments:
target (Path): target path to write to
url (str): url to download
sha256 (str or None): expected sha256 hexdigest of the file
"""
response = requests.get(url, stream=True)
total_length = int(response.headers.get('content-length', 0))
if sha256 is not None:
sha = hashlib.sha256()
update = sha.update
else:
update = lambda x: None
with tqdm.tqdm(total=total_length, unit="B", unit_scale=True) as bar:
with open(target, "wb") as output:
for data in response.iter_content(chunk_size=4096):
output.write(data)
update(data)
bar.update(len(data))
if sha256 is not None:
signature = sha.hexdigest()
if sha256 != signature:
target.unlink()
raise ValueError("Invalid sha256 signature when downloading {}. "
"Expected {} but got {}".format(
url, sha256, signature))