Add API rate limits
This commit is contained in:
17
config.py
17
config.py
@@ -7,6 +7,9 @@ Environment Variables:
|
||||
ELASTIC_INDEX: Target index name (default: this_little_corner_py).
|
||||
LOCAL_DATA_DIR: Root folder containing JSON metadata (default: ../data/video_metadata).
|
||||
YOUTUBE_API_KEY: Optional API key for pulling metadata directly from YouTube.
|
||||
RATE_LIMIT_ENABLED: Toggle API rate limiting (default: 1).
|
||||
RATE_LIMIT_REQUESTS: Max requests per window per client (default: 60).
|
||||
RATE_LIMIT_WINDOW_SECONDS: Window size in seconds (default: 60).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -53,11 +56,19 @@ class YoutubeSettings:
|
||||
api_key: Optional[str]
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class RateLimitSettings:
|
||||
enabled: bool
|
||||
requests: int
|
||||
window_seconds: int
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class AppConfig:
|
||||
elastic: ElasticSettings
|
||||
data: DataSettings
|
||||
youtube: YoutubeSettings
|
||||
rate_limit: RateLimitSettings
|
||||
qdrant_url: str
|
||||
qdrant_collection: str
|
||||
qdrant_vector_name: Optional[str]
|
||||
@@ -94,10 +105,16 @@ def load_config() -> AppConfig:
|
||||
)
|
||||
data = DataSettings(root=data_root)
|
||||
youtube = YoutubeSettings(api_key=_env("YOUTUBE_API_KEY"))
|
||||
rate_limit = RateLimitSettings(
|
||||
enabled=_env("RATE_LIMIT_ENABLED", "1") in {"1", "true", "True"},
|
||||
requests=max(int(_env("RATE_LIMIT_REQUESTS", "60")), 0),
|
||||
window_seconds=max(int(_env("RATE_LIMIT_WINDOW_SECONDS", "60")), 1),
|
||||
)
|
||||
return AppConfig(
|
||||
elastic=elastic,
|
||||
data=data,
|
||||
youtube=youtube,
|
||||
rate_limit=rate_limit,
|
||||
qdrant_url=_env("QDRANT_URL", "http://localhost:6333"),
|
||||
qdrant_collection=_env("QDRANT_COLLECTION", "tlc_embeddings"),
|
||||
qdrant_vector_name=_env("QDRANT_VECTOR_NAME"),
|
||||
|
||||
Reference in New Issue
Block a user