def download_file()

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))