| | import json |
| | import logging |
| | import os |
| | import sys |
| | import threading |
| | import time |
| | import zipfile |
| | from urllib.parse import urlencode |
| | from urllib.request import urlopen, urlretrieve |
| |
|
| |
|
| | |
| | class Spinner: |
| | busy = False |
| | delay = 0.1 |
| |
|
| | @staticmethod |
| | def spinning_cursor(): |
| | while 1: |
| | for cursor in "|/-\\": |
| | yield cursor |
| |
|
| | def __init__(self, delay=None): |
| | self.spinner_generator = self.spinning_cursor() |
| | if delay and float(delay): |
| | self.delay = delay |
| |
|
| | def spinner_task(self): |
| | while self.busy: |
| | sys.stdout.write(next(self.spinner_generator)) |
| | sys.stdout.flush() |
| | time.sleep(self.delay) |
| | sys.stdout.write("\b") |
| | sys.stdout.flush() |
| |
|
| | def __enter__(self): |
| | self.busy = True |
| | threading.Thread(target=self.spinner_task).start() |
| |
|
| | def __exit__(self, exception, value, tb): |
| | self.busy = False |
| | time.sleep(self.delay) |
| | if exception is not None: |
| | return False |
| |
|
| |
|
| | def download_cect_data(bundle_root: str = "."): |
| | base_url = "https://cloud-api.yandex.net/v1/disk/public/resources/download?" |
| | public_key = "https://disk.yandex.ru/d/pWEKt6D3qi3-aw" |
| |
|
| | url = base_url + urlencode(dict(public_key=public_key)) |
| | response = urlopen(url) |
| | filepath = "AVUCTK_cases.zip" |
| | if not os.path.exists(os.path.join(bundle_root, filepath)): |
| | with urlopen(url) as response: |
| | code = response.getcode() |
| | if code == 200: |
| | download_url = json.loads(response.read())["href"] |
| | print("Downloading file...") |
| | with Spinner(): |
| | urlretrieve(download_url, filepath) |
| | else: |
| | raise RuntimeError( |
| | f"Download of file from {url} to {filepath} failed due to network issue or denied permission." |
| | ) |
| | else: |
| | logging.info("zipfile exists, skipping download") |
| | with zipfile.ZipFile(os.path.join(bundle_root, filepath), "r") as zip_ref: |
| | zip_ref.extractall() |
| |
|