# -*- coding: utf-8 -*- import hashlib import os import shutil from tempfile import NamedTemporaryFile import requests from megfile import smart_copy, smart_getmd5, smart_getsize from tqdm import tqdm from ..logger import get_logger logger = get_logger(__name__) CHUNK_SIZE = 1024 HTTP_CONNECTION_TIMEOUT = 5 class HTTPDownloadError(BaseException): r"""The class that represents http request error.""" class Bar: def __init__(self, total=100): self._bar = tqdm(total=total, unit="iB", unit_scale=True, ncols=80) def __call__(self, bytes_num): self._bar.update(bytes_num) def download_from_url(url: str, dst: str): r"""Downloads file from given url to ``dst``. Args: url: source URL. dst: saving path. """ dst = os.path.expanduser(dst) smart_copy(url, dst, callback=Bar(total=smart_getsize(url))) return smart_getmd5(dst)