Skip to main content

lexigram-resilience

Resilience patterns for the Lexigram Framework (circuit breaker, retry, bulkhead, rate limiting, throttle, fallback)


Overview

lexigram-resilience provides circuit breakers, retry policies, bulkhead isolation, timeouts, rate limiting, throttling, fallback patterns, resilience pipelines, and idempotency key management. All implementations are async-first and designed for high-concurrency workloads. Distributed backends are available for circuit breakers, rate limiters, and idempotency stores when shared state across instances is required.


Full documentation: docs.lexigram.dev

Install

uv add lexigram-resilience
# Optional extras
uv add "lexigram-resilience[idempotency-redis,idempotency-database]"

Quick Start

from lexigram import Application
from lexigram.di.module import Module, module

# Import the module from the package
from lexigram.resilience import ResilienceModule

@module(imports=[ResilienceModule.configure()])
class AppModule(Module):
    pass

app = Application(modules=[AppModule])
if __name__ == "__main__":
    app.run()

Configuration

Zero-config usage: Call ResilienceModule.configure() with no arguments to use defaults.

Option 1 — YAML file

# application.yaml
resilience:
  circuit_breaker:
    failure_threshold: 5
    recovery_timeout: 60.0
  retry:
    max_attempts: 3
    base_delay: 1.0
  bulkhead:
    max_concurrent: 10

Option 2 — Profiles + Environment Variables (recommended)

export LEX_RESILIENCE__ENABLED=true
# Environment variables for each field

Option 3 — Python

from lexigram.resilience.config import ResilienceConfig
from lexigram.resilience import ResilienceModule

config = ResilienceConfig(...)
ResilienceModule.configure(config)

Config reference

Field Default Env var Description
circuit_breaker.failure_threshold 5 LEX_RESILIENCE__CIRCUIT_BREAKER__FAILURE_THRESHOLD Failures required to open the circuit
circuit_breaker.recovery_timeout 60.0 LEX_RESILIENCE__CIRCUIT_BREAKER__RECOVERY_TIMEOUT Seconds in open state before half-open probe
circuit_breaker.success_threshold 3 LEX_RESILIENCE__CIRCUIT_BREAKER__SUCCESS_THRESHOLD Successes in half-open state to close the circuit
retry.max_attempts 3 LEX_RESILIENCE__RETRY__MAX_ATTEMPTS Total attempts including initial call
retry.base_delay 1.0 LEX_RESILIENCE__RETRY__BASE_DELAY Base delay between retries in seconds
retry.max_delay 60.0 LEX_RESILIENCE__RETRY__MAX_DELAY Maximum retry delay cap in seconds
retry.backoff_factor 2.0 LEX_RESILIENCE__RETRY__BACKOFF_FACTOR Exponential multiplier applied to base delay
bulkhead.max_concurrent 10 LEX_RESILIENCE__BULKHEAD__MAX_CONCURRENT Maximum concurrent calls
bulkhead.queue_size 100 LEX_RESILIENCE__BULKHEAD__QUEUE_SIZE Waiting queue depth before rejection
timeout.timeout 30.0 LEX_RESILIENCE__TIMEOUT__TIMEOUT Default operation timeout in seconds
idempotency.ttl 3600 LEX_RESILIENCE__IDEMPOTENCY__TTL Cached result TTL in seconds

Module Factory Methods

Method Description
ResilienceModule.configure(config) Configure with explicit ResilienceConfig
ResilienceModule.stub() Minimal config for testing

Key Features

  • CircuitBreaker — Opens circuit after repeated failures, prevents cascading failures
  • CircuitBreakerRegistry — Named circuit breaker lookup and management
  • RetryPolicy — Exponential backoff, jitter, retry on specific exceptions
  • Bulkhead — Semaphore-based concurrency limiting with queue support
  • TimeoutManager — Async context manager for operation timeouts
  • RateLimiter — Token bucket, sliding window, and distributed rate limiting
  • Throttler — Request throttling with configurable limits and windows
  • ResiliencePipeline — Composable pipeline chaining multiple resilience patterns
  • Idempotency subsystem — Idempotency key management with in-memory, database, and Redis backends

Testing

async with Application.boot(modules=[ResilienceModule.stub()]) as app:
    # your test code
    ...

In-memory backends are safe for testing with no external dependencies:

from lexigram.resilience import (
    InMemoryCircuitBreakerBackend,
    InMemoryIdempotencyStore,
)

cb = CircuitBreaker(name="test_cb")  # Uses InMemoryCircuitBreakerBackend
store = InMemoryIdempotencyStore()   # Local-only

Key Source Files

File What it contains
src/lexigram/resilience/module.py ResilienceModule class with factory methods
src/lexigram/resilience/di/provider.py ResilienceProvider — wires resilience protocols into DI container
src/lexigram/resilience/config.py ResilienceConfig and BulkheadConfig
src/lexigram/resilience/circuit/ Circuit breaker implementations (in-memory + distributed backends)
src/lexigram/resilience/retry/ Retry policy implementations with backoff strategies
src/lexigram/resilience/bulkhead/ Bulkhead semaphore-based concurrency control
src/lexigram/resilience/rate_limiter/ Token bucket, sliding window, distributed rate limiters
src/lexigram/resilience/idempotency/ Idempotency decorator, stores, middleware, config

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

lexigram_resilience-0.1.3005-py3-none-any.whl (76.1 kB view details)

Uploaded Python 3

File details

Details for the file lexigram_resilience-0.1.3005-py3-none-any.whl.

File metadata

File hashes

Hashes for lexigram_resilience-0.1.3005-py3-none-any.whl
Algorithm Hash digest
SHA256 06835a6e8b3a5b4bdb962c69077b832750ce85808d1d54c9b46c3243d7693c5c
MD5 afc02c075ca0ade2ed391b21f9293f75
BLAKE2b-256 04b5a2ec03aefef9dc5a782cae3d445b96f32712b1278947cd28df51de98a04c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.5008

1 file

0.1.5004

2 files

0.1.5001

2 files

0.1.3007

1 file

0.1.3006

1 file

This release

0.1.3005 This release

1 file

0.1.4

2 files

0.1.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page