Spaces:
Runtime error
Runtime error
from pathlib import Path | |
from typing import * | |
import requests | |
from tqdm import tqdm | |
__all__ = ["download_file", "download_bytes"] | |
def download_file(url: str, filepath: Union[str, Path], headers: dict = None, resume: bool = True) -> None: | |
# Ensure headers is a dict if not provided | |
headers = headers or {} | |
# Initialize local variables | |
file_path = Path(filepath) | |
downloaded_bytes = 0 | |
# Check if we should resume the download | |
if resume and file_path.exists(): | |
downloaded_bytes = file_path.stat().st_size | |
headers['Range'] = f"bytes={downloaded_bytes}-" | |
# Make a GET request to fetch the file | |
with requests.get(url, stream=True, headers=headers) as response: | |
response.raise_for_status() # This will raise an HTTPError if the status is 4xx/5xx | |
# Calculate the total size to download | |
total_size = downloaded_bytes + int(response.headers.get('content-length', 0)) | |
# Display a progress bar while downloading | |
with ( | |
tqdm(desc=f"Downloading {file_path.name}", total=total_size, unit='B', unit_scale=True, leave=False) as pbar, | |
open(file_path, 'ab') as file, | |
): | |
# Set the initial position of the progress bar | |
pbar.update(downloaded_bytes) | |
# Write the content to the file in chunks | |
for chunk in response.iter_content(chunk_size=4096): | |
file.write(chunk) | |
pbar.update(len(chunk)) | |
def download_bytes(url: str, headers: dict = None) -> bytes: | |
# Ensure headers is a dict if not provided | |
headers = headers or {} | |
# Make a GET request to fetch the file | |
with requests.get(url, stream=True, headers=headers) as response: | |
response.raise_for_status() # This will raise an HTTPError if the status is 4xx/5xx | |
# Read the content of the response | |
return response.content | |