Skip to main content

A middleware implementing rate policy and retry logic for Swarmauri

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_middleware_ratepolicy


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 MiddlewareBase contract; wrap any callable sequence (FastAPI routes, job runners, etc.).
  • Configurable max_retries and initial_wait seconds. 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_retries small 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.run or anyio.from_thread to 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


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

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

File details

Details for the file swarmauri_middleware_ratepolicy-0.8.3.dev17.tar.gz.

File metadata

  • Download URL: swarmauri_middleware_ratepolicy-0.8.3.dev17.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

Hashes for swarmauri_middleware_ratepolicy-0.8.3.dev17.tar.gz
Algorithm Hash digest
SHA256 a1f070ca74d56446fa4beab023346b6a198003d457c6f712432c9cf083b3e0a2
MD5 17e5d2a7b57f8c3e4d69668f9e266727
BLAKE2b-256 515db41a674ea2206c637aad1be15940307e80195de1b6a7bf511eb7eca72f8d

See more details on using hashes here.

File details

Details for the file swarmauri_middleware_ratepolicy-0.8.3.dev17-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_middleware_ratepolicy-0.8.3.dev17-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

Hashes for swarmauri_middleware_ratepolicy-0.8.3.dev17-py3-none-any.whl
Algorithm Hash digest
SHA256 29a88fef5e5be9512ba9bfb8d1f6db03b0fde51805c54370d0dc10c03ea089fe
MD5 0f1743898c2fef0e1789c44976ba0efc
BLAKE2b-256 b3ee1c90134ef8d7f316899946a73b277d0a77f049b119fa25b1e39f81572e40

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