Skip to main content

Concurrent HTTP download orchestration with async I/O

Project description

Rheo

PyPI Python License CI codecov

Concurrent HTTP download orchestration with async I/O

What It Is

A Python library for managing multiple asynchronous HTTP downloads. Built on asyncio and aiohttp, it handles concurrency, tracks state, emits events, and lets you monitor progress.

Installation

pip install rheopy

Quick Start

import asyncio
from pathlib import Path
from rheo import DownloadManager
from rheo.domain import FileConfig

async def main():
    files = [
        FileConfig(url="https://example.com/file1.zip", priority=1),
        FileConfig(url="https://example.com/file2.pdf", priority=2),
    ]

    async with DownloadManager(download_dir=Path("./downloads"), max_concurrent=3) as manager:
        await manager.add(files)
        await manager.wait_until_complete()

    print("All downloads complete!")

asyncio.run(main())

Key Features

  • Concurrent downloads with worker pool
  • Priority queue
  • Hash validation (MD5, SHA256, SHA512)
  • Retry logic with exponential backoff
  • Real-time speed & ETA tracking
  • File exists handling (skip, overwrite, or error)
  • Event-driven architecture with manager.on()/off()
  • CLI tool (rheo download)
  • Full type hints

CLI Usage

# Basic download
rheo download https://example.com/file.zip

# With hash verification
rheo download https://example.com/file.zip --hash sha256:abc123...

# Custom output directory
rheo download https://example.com/file.zip -o /path/to/dir

See CLI Reference for complete command documentation.

Documentation

Listen to Events

Subscribe directly on the manager (shared emitter facade) to react to lifecycle events:

from rheo.events.models import DownloadCompletedEvent

def on_completed(event: DownloadCompletedEvent) -> None:
    print(f"done: {event.download_id}")


async with DownloadManager(download_dir=Path("./downloads")) as manager:
    manager.on("download.completed", on_completed)
    await manager.add([FileConfig(url="https://example.com/file.zip")])
    await manager.wait_until_complete()

Use "*" to receive all events, and manager.off() to unsubscribe.

Examples

Check examples/ for working code:

  • 01_basic_download.py - Simple single file download
  • 02_multiple_with_priority.py - Multiple files with priorities
  • 03_hash_validation.py - File integrity verification
  • 04_progress_display.py - Real-time progress bar with speed/ETA
  • 05_event_logging.py - Lifecycle event debugging
  • 06_batch_summary.py - Batch download with summary report

Project Status

Alpha - Core functionality works, but API may change before 1.0.

  • Python: 3.12+
  • License: MIT

Questions?

Open an issue on GitHub or check the full documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rheopy-0.5.0.tar.gz (50.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rheopy-0.5.0-py3-none-any.whl (71.3 kB view details)

Uploaded Python 3

File details

Details for the file rheopy-0.5.0.tar.gz.

File metadata

  • Download URL: rheopy-0.5.0.tar.gz
  • Upload date:
  • Size: 50.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.14.0 Linux/6.11.0-1018-azure

File hashes

Hashes for rheopy-0.5.0.tar.gz
Algorithm Hash digest
SHA256 f1b0825f5f22f46d5aa730b02789d08f0d4ba123cef2a0e405d851ec8e8455cf
MD5 88b9bd15028130f6f475dc57eea3e58b
BLAKE2b-256 0de09a1e0c068eecd34e04bc9ab38eddd0dd601a36213dd271ed871ed5414a78

See more details on using hashes here.

File details

Details for the file rheopy-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: rheopy-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 71.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.14.0 Linux/6.11.0-1018-azure

File hashes

Hashes for rheopy-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b1ae9d0d393bdc3c962045de4311cc11517cb0f5cf6e4f3d9790442409d9aa1
MD5 543d40d238d79dc90f37d501fe51a515
BLAKE2b-256 12001c35244e39ea2059f412f4e83330fdfc01851e1d1b8fc5bca349109d9e7c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page