41 lines
1 KiB
Python
41 lines
1 KiB
Python
import argparse
|
|
|
|
# for python 3, use https://github.com/coagulant/progressbar-python3
|
|
from progressbar import ProgressBar, Percentage, RotatingMarker, ETA, \
|
|
FileTransferSpeed, Bar
|
|
|
|
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_file(url, dest=None):
|
|
if dest is None:
|
|
dest = urlparse(url).path.split('/')[-1]
|
|
|
|
widgets = ['Download: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
|
|
' ', ETA(), ' ', FileTransferSpeed()]
|
|
bar = ProgressBar(widgets=widgets).start()
|
|
|
|
def download_progress(_, current, total):
|
|
bar.maxval = total
|
|
bar.update(current)
|
|
|
|
dl = Download(url, dest, progress=download_progress)
|
|
dl.start()
|
|
dl.wait()
|
|
bar.finish()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
options = parse_args()
|
|
try:
|
|
download_file(options.url)
|
|
except KeyboardInterrupt:
|
|
print("\nInterrupted.")
|