A middleware implementing rate policy and retry logic for Swarmauri
Project description
Swarmauri Middleware Ratepolicy
Retry-policy middleware for Swarmauri services. Provides exponential backoff with configurable retry attempts and wait intervals so unreliable upstream calls can be retried transparently.
Features
- Implements Swarmauri's
MiddlewareBasecontract; wrap any callable sequence (FastAPI routes, job runners, etc.). - Configurable
max_retriesandinitial_waitseconds. Wait time doubles on each retry (initial_wait * 2**attempt). - Emits structured logs on retry attempts and successes for observability.
- Simple synchronous dispatch; wrap async callables by providing a sync shim that executes the coroutine (see example below).
Prerequisites
- Python 3.10 or newer.
- A Swarmauri application or FastAPI project that supports middleware registration.
Installation
# pip
pip install swarmauri_middleware_ratepolicy
# poetry
poetry add swarmauri_middleware_ratepolicy
# uv (pyproject-based projects)
uv add swarmauri_middleware_ratepolicy
Quickstart
import logging
from swarmauri_middleware_ratepolicy import RetryPolicyMiddleware
logging.basicConfig(level=logging.INFO)
retry_middleware = RetryPolicyMiddleware(max_retries=3, initial_wait=0.5)
class RequestEnvelope:
def __init__(self, payload: str):
self.payload = payload
request = RequestEnvelope("work-item-123")
def call_next(req: RequestEnvelope):
raise RuntimeError("Simulated upstream failure")
retry_middleware.dispatch(request, call_next)
With Swarmauri's middleware stack (or FastAPI), register it just like other Swarmauri middleware:
from swarmauri_app.middleware import middleware_stack
from swarmauri_middleware_ratepolicy import RetryPolicyMiddleware
middleware_stack.add_middleware(
RetryPolicyMiddleware,
max_retries=4,
initial_wait=0.25,
)
Example: Wrapping an External API Call
import logging
import requests
from swarmauri_middleware_ratepolicy import RetryPolicyMiddleware
logging.basicConfig(level=logging.INFO)
retry = RetryPolicyMiddleware(max_retries=4, initial_wait=0.25)
class RequestWrapper:
def __init__(self, url: str):
self.url = url
wrapper = RequestWrapper("https://api.example.com/data")
response = retry.dispatch(
wrapper,
lambda req: requests.get(req.url, timeout=5),
)
print(response.status_code)
Tips
- Keep
max_retriessmall for user-facing endpoints to avoid long wait chains; rely on background queues for bulk retries. - Combine with the circuit breaker middleware for layered resilience (circuit breaker opens when repeated retries fail).
- When wrapping async callables, convert them to sync functions using
asyncio.runoranyio.from_threadto fit the middleware signature. - Capture logs at INFO level to trace retry attempts in production.
Want to help?
If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swarmauri_middleware_ratepolicy-0.8.3.dev19.tar.gz.
File metadata
- Download URL: swarmauri_middleware_ratepolicy-0.8.3.dev19.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffff1d2aa869b2865009beafef3878cb18b092a30faf02b0b561277cc31f452a
|
|
| MD5 |
badc3f1e88bf3118ad14b8d30caae99a
|
|
| BLAKE2b-256 |
eafddafcc6b28d1e4740adcd1c4c0588705d79ccb8a1f5365bda21b32da2f539
|
File details
Details for the file swarmauri_middleware_ratepolicy-0.8.3.dev19-py3-none-any.whl.
File metadata
- Download URL: swarmauri_middleware_ratepolicy-0.8.3.dev19-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c5250b32705429972a2b77698f3dc09f4521afabfffa1f6de407d69ae4f5aab
|
|
| MD5 |
ae5ce38d5bc4b691d26060eb5998c56a
|
|
| BLAKE2b-256 |
c41b172d8b859a670682fcbc3a7a450fff4a85b19966cd398e5c4ca5fb73451a
|