- Add ConfigLoader class for loading RateLimitConfig and GlobalConfig - Support .env files with FASTAPI_TRAFFIC_* prefixed variables - Support JSON configuration files with type validation - Add convenience functions: load_rate_limit_config, load_global_config - Add load_rate_limit_config_from_env, load_global_config_from_env - Support custom environment variable prefixes - Add comprehensive error handling with ConfigurationError - Add 47 tests for configuration loading - Add example 11_config_loader.py with 9 usage patterns - Update examples/README.md with config loader documentation - Update CHANGELOG.md with new feature - Fix typo in limiter.py (errant 'fi' on line 4)
53 lines
2.5 KiB
Markdown
53 lines
2.5 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to fastapi-traffic will be documented here.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
### 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
|