Source code

Revision control

Copy as Markdown

Other Tools

import argparse
import tqdm
from six.moves.urllib.parse import urlparse
from dlmanager import Download
def parse_args(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument("url", help="url to download")
return parser.parse_args(argv)
def download_progress(bar):
last_b = [0]
def inner(_, current, total):
if total is not None:
bar.total = total
delta = current - last_b[0]
last_b[0] = current
if delta > 0:
bar.update(delta)
return inner
def download_file(url, dest=None):
if dest is None:
dest = urlparse(url).path.split('/')[-1]
with tqdm.tqdm(unit='B', unit_scale=True, miniters=1, dynamic_ncols=True,
desc=dest) as bar:
dl = Download(url, dest, progress=download_progress(bar))
dl.start()
dl.wait()
if __name__ == '__main__':
options = parse_args()
try:
download_file(options.url)
except KeyboardInterrupt:
print("\nInterrupted.")