presentation.routers.api.v1.routes.derivations¶
src.presentation.routers.api.v1.routes.derivations
¶
Derive runtime configurations from route metadata registry.
This module generates runtime configurations (auth dependencies, rate limit rules) from the declarative Route Metadata Registry. This ensures consistency between the registry and actual application behavior.
Two-Tier Rate Limit Configuration
This module implements Tier 2 - Policy Implementation.
Tier 1 (registry.py): Assigns policies to endpoints Example: "Login endpoint uses AUTH_LOGIN policy"
Tier 2 (this file): Defines what each policy means Example: "AUTH_LOGIN = 5 attempts/min per IP"
To Modify Rate Limits
Scenario 1: Change rate limit for ONE specific endpoint Where: registry.py What: Change the rate_limit_policy field Example: Make login more generous rate_limit_policy=RateLimitPolicy.API_READ
Scenario 2: Change rate limit for ALL endpoints using a policy Where: This file (derivations.py) What: Update RateLimitRule in _create_rate_limit_rule() Example: Increase all AUTH_LOGIN endpoints from 5 to 10 RateLimitPolicy.AUTH_LOGIN: RateLimitRule(max_tokens=10, ...)
Functions:
| Name | Description |
|---|---|
build_rate_limit_rules |
Generate rate limit rules dict from registry |
_create_rate_limit_rule |
Map RateLimitPolicy enum to RateLimitRule (Tier 2) |
Reference
- src/presentation/routers/api/v1/routes/registry.py (Tier 1: policy assignment)
- src/infrastructure/rate_limit/config.py (public API for rules)
Classes¶
Functions¶
build_rate_limit_rules
¶
Build rate limit rules dict from route registry.
Generates the RATE_LIMIT_RULES dict by iterating registry and mapping RateLimitPolicy enums to RateLimitRule objects. Endpoint keys use the format "{METHOD} {PATH}" (e.g., "POST /api/v1/sessions").
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
registry
|
list[RouteMetadata]
|
List of route metadata entries from ROUTE_REGISTRY. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, RateLimitRule]
|
Dict mapping endpoint strings to RateLimitRule objects. |
Example
from src.presentation.routers.api.v1.routes.registry import ROUTE_REGISTRY rules = build_rate_limit_rules(ROUTE_REGISTRY) login_rule = rules["POST /api/v1/sessions"] login_rule.max_tokens 5