Source code for OpenAttack.utils.zip_downloader

import urllib
import zipfile
import os
from tqdm import tqdm


[docs]def make_zip_downloader(URL : str, file_list=None, resource_name = None): """ This function is used to make a zipfile downloader for data. """ if isinstance(file_list, str): file_list = [file_list] use_source = not (URL.startswith("http://") or URL.startswith("https://")) if use_source and URL.startswith("/"): URL = URL[1:] def DOWNLOAD(path : str, source : str): if not source.endswith("/"): source = source + "/" if use_source: remote_url = source + URL else: remote_url = URL if resource_name is None: name = os.path.basename(path) else: name = resource_name with urllib.request.urlopen(remote_url) as fin: CHUNK_SIZE = 4 * 1024 total_length = int(fin.headers["content-length"]) with open(path + ".zip", "wb") as ftmp: with tqdm(total=total_length, unit="B", desc="Downloading %s" % name, unit_scale=True) as pbar: while True: data = fin.read(CHUNK_SIZE) if len(data) == 0: break ftmp.write(data) pbar.update(len(data)) ftmp.flush() zf = zipfile.ZipFile(path + ".zip") os.makedirs(path, exist_ok=True) if file_list is not None: for file in file_list: zf.extract(file, path) else: zf.extractall(path) zf.close() os.remove(path + ".zip") return return DOWNLOAD