def download_file(url, destination, verbose=False): r""" Download a file from a URL to a path, optionally reporting the progress Parameters ---------- url : `str` The URL of a remote resource that should be downloaded destination : `Path` The path on disk that the file will be downloaded to verbose : `bool`, optional If ``True``, report the progress of the download dynamically. """ from menpo.visualize.textutils import print_progress, bytes_str req = urlopen(url) chunk_size_bytes = 512 * 1024 with open(str(destination), 'wb') as fp: # Retrieve a generator that we can keep yielding from to download the # file in chunks. copy_progress = copy_and_yield(req, fp, length=chunk_size_bytes) if verbose: # wrap the download object with print progress to log the status n_bytes = int(req.headers['content-length']) n_items = int(ceil((1.0 * n_bytes) / chunk_size_bytes)) prefix = 'Downloading {}'.format(bytes_str(n_bytes)) copy_progress = print_progress(copy_progress, n_items=n_items, show_count=False, prefix=prefix) for _ in copy_progress: pass req.close()
def download_file(url, dest_path): r""" Download a file to a path, reporting the progress with a progress bar """ from menpo.visualize.textutils import print_progress, bytes_str req = urlopen(url) n_bytes = int(req.headers['content-length']) chunk_size_bytes = 512 * 1024 n_items = int(ceil((1.0 * n_bytes) / chunk_size_bytes)) prefix = 'Downloading {}'.format(bytes_str(n_bytes)) with open(str(dest_path), 'wb') as fp: for _ in print_progress(copy_and_yield(req, fp, length=chunk_size_bytes), n_items=n_items, show_count=False, prefix=prefix): pass req.close()