Source code for pyxel.util.examples

#  Copyright (c) European Space Agency, 2020.
#
#  This file is subject to the terms and conditions defined in file 'LICENCE.txt', which
#  is part of this Pyxel package. No part of the package, including
#  this file, may be copied, modified, propagated, or distributed except according to
#  the terms contained in the file ‘LICENCE.txt’.

"""Pyxel examples downloader."""

import shutil
from pathlib import Path


[docs] def download_examples(foldername: str = "pyxel-examples", force: bool = False) -> None: """Download and save examples from Pyxel Data Gitlab repository in the working directory. Parameters ---------- foldername: str force: bool """ # Late import to speedup start-up time from zipfile import ZipFile import requests from tqdm import tqdm folder: Path = Path(foldername).resolve() if folder.is_dir(): if force: shutil.rmtree(folder) else: raise OSError( f"Folder '{folder}' already exists. Either delete it, " "use a different name, or use the '--force' argument." ) url = "https://gitlab.com/esa/pyxel-data/-/archive/master/pyxel-data-master.zip" response = requests.get(url, stream=True) examples_filename = Path("examples_tmp.zip") total = int(response.headers.get("content-length", 0)) with ( examples_filename.open("wb") as tmp, tqdm( desc="Downloading examples", total=total, unit="B", unit_scale=True, unit_divisor=1024, ) as bar, ): for data in response.iter_content(chunk_size=1024): size = tmp.write(data) bar.update(size) with ZipFile(examples_filename, "r") as zipobj: zipobj.extractall(folder) pyxel_data_folder: Path = folder.joinpath("pyxel-data-master") filename: Path for filename in pyxel_data_folder.glob("*"): relative_filename: Path = filename.relative_to(pyxel_data_folder) shutil.move(src=filename, dst=folder.joinpath(relative_filename)) pyxel_data_folder.rmdir() examples_filename.unlink() print(f"Done in folder '{folder}'.")