Source code for uhugo.download

import os.path
import platform
import tempfile

import requests
from rich.progress import Progress, TextColumn, BarColumn, DownloadColumn, TransferSpeedColumn, TimeRemainingColumn

progress = Progress(
    TextColumn("[bold blue]{task.fields[filename]}", justify="right"),
    BarColumn(),
    "[progress.percentage]{task.percentage:>3.1f}%",
    "•",
    DownloadColumn(),
    "•",
    TransferSpeedColumn(),
    "•",
    TimeRemainingColumn(),
    transient=True,
)


[docs] def download_hugo_zip(version: str, os_type: str = None, download_to: str = None) -> str: """ Download the Hugo file to temp folder. :param os_type: OS type :param version: Version number to download :param download_to: Path to download to """ if not os_type: os_type = platform.system() if not download_to: download_to = tempfile.gettempdir() download_to = os.path.join(download_to, f"hugo_{version}") with progress: task_id = progress.add_task("download", filename=f"hugo_{version}", start=False) with open(download_to, "wb") as file: if os_type == "Darwin": response = requests.get( f"https://github.com/gohugoio/hugo/releases/download/v{version}/" f"hugo_extended_{version}_darwin-universal.tar.gz", stream=True, ) elif os_type == "Windows" or os_type == "nt": response = requests.get( f"https://github.com/gohugoio/hugo/releases/download/v{version}/" f"hugo_extended_{version}_windows-amd64.zip", stream=True, ) elif os_type == "posix" or os_type == "Linux": response = requests.get( f"https://github.com/gohugoio/hugo/releases/download/v{version}/" f"hugo_extended_{version}_linux-amd64.tar.gz", stream=True, ) else: raise OSError(f"{os_type} not supported.") if response.headers.get("Status") == "404 Not Found": raise requests.exceptions.HTTPError("File not found") total_length = int(response.headers.get("content-length")) if total_length is None: progress.console.print(f"- Downloading Hugo v{version}") file.write(response.content) progress.update(task_id, completed=True) progress.console.print("- Hugo downloaded") else: progress.console.print(f"- Downloading Hugo v{version}") progress.update(task_id, total=total_length) progress.start_task(task_id) for data in response.iter_content(chunk_size=4096): file.write(data) progress.update(task_id, advance=len(data)) progress.console.print("- Hugo downloaded") return download_to