rate_limit
rate_limit
¶
Rate limiting middleware for Marianne Dashboard.
Provides configurable rate limiting to protect API endpoints from abuse. Uses a sliding window algorithm with in-memory storage.
Attributes¶
Classes¶
RateLimitConfig
dataclass
¶
RateLimitConfig(enabled=True, requests_per_minute=RATE_LIMIT_REQUESTS_PER_MINUTE, requests_per_hour=RATE_LIMIT_REQUESTS_PER_HOUR, burst_limit=RATE_LIMIT_BURST_LIMIT, excluded_paths=(lambda: ['/health', '/docs', '/openapi.json', '/redoc', '/static', '/', '/jobs', '/monitor', '/templates', '/editor', '/api/dashboard', '/api/templates', '/api/monitor'])(), by_api_key=False)
Rate limiting configuration.
Attributes:
| Name | Type | Description |
|---|---|---|
enabled |
bool
|
Whether rate limiting is active |
requests_per_minute |
int
|
Max requests per minute per client |
requests_per_hour |
int
|
Max requests per hour per client |
burst_limit |
int
|
Max burst requests in 1 second |
excluded_paths |
list[str]
|
Paths exempt from rate limiting |
by_api_key |
bool
|
Use API key for rate limit tracking (vs IP) |
SlidingWindowCounter
¶
Sliding window rate limiter implementation.
Uses a time-bucketed approach for efficient memory usage while maintaining accuracy of the sliding window algorithm.
Initialize counter.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
window_seconds
|
int
|
Time window in seconds |
required |
max_requests
|
int
|
Maximum requests allowed in window |
required |
Source code in src/marianne/dashboard/auth/rate_limit.py
Functions¶
is_allowed
¶
Check if request is allowed and record it.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Client identifier (IP or API key) |
required |
Returns:
| Type | Description |
|---|---|
tuple[bool, int, int]
|
Tuple of (allowed, remaining_requests, reset_time_seconds) |
Source code in src/marianne/dashboard/auth/rate_limit.py
check_only
¶
Check if request would be allowed without recording it.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Client identifier (IP or API key) |
required |
Returns:
| Type | Description |
|---|---|
tuple[bool, int, int]
|
Tuple of (allowed, remaining_requests, reset_time_seconds) |
Source code in src/marianne/dashboard/auth/rate_limit.py
record
¶
get_count
¶
Get current request count for key.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Client identifier |
required |
Returns:
| Type | Description |
|---|---|
int
|
Number of requests in current window |
Source code in src/marianne/dashboard/auth/rate_limit.py
reset
¶
Reset counter for a key or all keys.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str | None
|
Client identifier or None to reset all |
None
|
Source code in src/marianne/dashboard/auth/rate_limit.py
RateLimiter
¶
Combined rate limiter with multiple windows.
Enforces limits at second (burst), minute, and hour granularity.
Initialize rate limiter.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config
|
RateLimitConfig | None
|
Rate limiting configuration |
None
|
Source code in src/marianne/dashboard/auth/rate_limit.py
Functions¶
check
¶
Check if request is allowed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Client identifier |
required |
Returns:
| Type | Description |
|---|---|
tuple[bool, dict[str, Any]]
|
Tuple of (allowed, rate_limit_info dict) |
Source code in src/marianne/dashboard/auth/rate_limit.py
reset
¶
Reset rate limits for key or all.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str | None
|
Client identifier or None for all |
None
|
Source code in src/marianne/dashboard/auth/rate_limit.py
RateLimitMiddleware
¶
Bases: BaseHTTPMiddleware
Rate limiting middleware for FastAPI.
Applies configurable rate limits and returns appropriate headers.
Initialize middleware.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
app
|
ASGIApp
|
ASGI application (FastAPI or Starlette app) |
required |
config
|
RateLimitConfig | None
|
Rate limit configuration |
None
|
Source code in src/marianne/dashboard/auth/rate_limit.py
Functions¶
dispatch
async
¶
Process rate limiting for each request.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
Incoming request |
required |
call_next
|
RequestResponseEndpoint
|
Next middleware/handler |
required |
Returns:
| Type | Description |
|---|---|
Response
|
Response with rate limit headers |
Source code in src/marianne/dashboard/auth/rate_limit.py
Functions¶
get_client_identifier
¶
Get client identifier for rate limiting.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request |
required |
by_api_key
|
bool
|
Use API key if present |
False
|
Returns:
| Type | Description |
|---|---|
str
|
Client identifier string |