# ๐Ÿงก OxideDonationAlerts **OxideDonationAlerts** is a high-performance Python client for the [DonationAlerts API](https://www.donationalerts.com/apidoc), built on the [OxideHTTP](https://git.miwory.dev/OxideHTTP/OxideHTTP) core. It leverages Rust-powered HTTP calls to provide a type-safe, rate-limited, and cached interface for managing donations and alerts. --- ## ๐Ÿ”ฅ Why OxideDonationAlerts? Managing real-time donations requires reliability and speed. OxideDonationAlerts simplifies the integration: * **โšก Rust-Powered Core:** Utilizes `pyreqwest` via OxideHTTP for ultra-fast underlying networking. * **๐Ÿ›ก๏ธ Distributed Rate Limiting:** Integrates with Redis to manage DonationAlerts' thresholds (60 requests/min) across multiple processes using the GCRA algorithm. * **๐Ÿ’พ Smart Caching:** Built-in support for caching API responses (like user profiles or donation history) to reduce latency and API load. * **๐Ÿ—๏ธ Pydantic Validation:** All responses are fully validated against Pydantic models for perfect type hinting and data integrity. --- ## ๐Ÿ“ฆ Installation Configure your private registry in your `uv` environment, then install: ```bash uv add oxidedonationalerts ``` --- ## ๐Ÿ›  Quick Start ### Basic Usage: Fetching Donations OxideDonationAlerts manages the `base_url` and provides a clean interface for paginated data. ```python import asyncio from oxidedonationalerts.api import DonationAlertsAPIClient async def main(): async with DonationAlertsAPIClient( redis_url="redis://localhost:6379" ) as client: # Fetch the first page of donations donations = await client.alerts_donations( access_token="your_token", page=1 ) for donation in donations.data: print(f"Donor: {donation.username} | Amount: {donation.amount} {donation.currency}") asyncio.run(main()) ``` ### Subscribing to Real-time Events The client supports Centrifuge subscription calls for handling WebSocket-based real-time alerts. ```python async def setup_realtime(client, token): # Get credentials for WebSocket connection channels = ["$alerts:donation_741", "$goals:goal_123"] subs = await client.centrifuge_subscribe( access_token=token, client="client_uuid_from_frontend", subscriptions=channels ) print(f"Subscription Token: {subs.channels[0].token}") ``` --- ## โš™๏ธ Advanced: Configuration Ensure your `pyproject.toml` points to the correct registry for both **OxideDonationAlerts** and its core dependency **OxideHTTP**: ```toml [[tool.uv.index]] name = "OxideHTTP" url = "https://git.miwory.dev/api/packages/OxideHTTP/pypi/simple" ``` ### API Implementation Status The client is currently optimized for the following scopes: * **User Data:** `oauth-user-show` * **Donations:** `oauth-donation-index` * **Real-time:** `oauth-centrifuge-subscribe` --- Would you like me to generate the **Pydantic schemas** for the `UserOauth` or `AlertsDonations` models to match the official documentation?