Files
fastapi-traffic/CHANGELOG.md

2.5 KiB

Changelog

All notable changes to fastapi-traffic will be documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.2.0] - 2026-02-04

Added

  • Configuration Loader - Load rate limiting configuration from external files:
    • ConfigLoader class for loading RateLimitConfig and GlobalConfig
    • Support for .env files with FASTAPI_TRAFFIC_* prefixed variables
    • Support for JSON configuration files
    • Environment variable loading with load_rate_limit_config_from_env() and load_global_config_from_env()
    • Auto-detection of file format with load_rate_limit_config() and load_global_config()
    • Custom environment variable prefix support
    • Type validation and comprehensive error handling
    • 47 new tests for configuration loading
  • Example 11_config_loader.py demonstrating all configuration loading patterns
  • get_stats() method to MemoryBackend for consistency with RedisBackend
  • Comprehensive test suite with 134 tests covering:
    • All five rate limiting algorithms with timing and concurrency tests
    • Backend tests for Memory and SQLite with edge cases
    • Decorator and middleware integration tests
    • Exception handling and configuration validation
    • End-to-end integration tests with FastAPI apps
  • httpx and pytest-asyncio as dev dependencies for testing

Changed

  • Improved documentation in README.md and DEVELOPMENT.md
  • Added asyncio_default_fixture_loop_scope config for pytest-asyncio compatibility

[0.1.0] - 2025-01-09

Initial release.

Added

  • Core rate limiting with @rate_limit decorator
  • Five algorithms: Token Bucket, Sliding Window, Fixed Window, Leaky Bucket, Sliding Window Counter
  • Three storage backends: Memory (default), SQLite (persistent), Redis (distributed)
  • Middleware support for global rate limiting via RateLimitMiddleware
  • Dependency injection support with RateLimitDependency
  • Custom key extractors for flexible rate limit grouping (by IP, API key, user, etc.)
  • Configurable exemptions with exempt_when callback
  • Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
  • RateLimitExceeded exception with retry_after and limit_info
  • Full async support throughout
  • Strict type hints (pyright/mypy compatible)
  • Redis backend with Lua scripts for atomic operations
  • SQLite backend with WAL mode and connection pooling
  • Memory backend with LRU eviction and TTL cleanup