87 lines
2.2 KiB
Python
87 lines
2.2 KiB
Python
|
|
from pydantic_settings import BaseSettings
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
# App
|
|
app_env: str = "dev"
|
|
api_base_url: str = "http://localhost:8000"
|
|
|
|
# Auth
|
|
jwt_secret: str
|
|
jwt_alg: str = "HS256"
|
|
jwt_access_ttl_min: int = 15
|
|
jwt_refresh_ttl_days: int = 7
|
|
cookie_domain: str = "localhost"
|
|
cookie_secure: bool = False
|
|
cookie_samesite: str = "Lax"
|
|
|
|
# Database
|
|
mongodb_uri: str
|
|
mongodb_db: str = "accessible_video"
|
|
|
|
# Redis
|
|
redis_url: str
|
|
|
|
# Celery
|
|
celery_broker_url: str = ""
|
|
celery_result_backend: str = ""
|
|
|
|
# GCP
|
|
gcp_project_id: str
|
|
gcs_bucket: str = "accessible-video"
|
|
google_application_credentials: str = ""
|
|
|
|
# AI Services
|
|
gemini_api_key: str
|
|
translate_api_key: str = ""
|
|
elevenlabs_api_key: str = ""
|
|
google_tts_credentials: str = ""
|
|
|
|
# TTS Voice Configuration
|
|
tts_provider: str = "google" # "google" or "elevenlabs"
|
|
google_tts_voices: dict[str, str] = {
|
|
"en-US": "en-US-Neural2-D",
|
|
"es-ES": "es-ES-Neural2-A",
|
|
"fr-FR": "fr-FR-Neural2-A",
|
|
"de-DE": "de-DE-Neural2-B"
|
|
}
|
|
elevenlabs_voices: dict[str, str] = {
|
|
"en-US": "21m00Tcm4TlvDq8ikWAM",
|
|
"es-ES": "VR6AewLTigWG4xSOukaG",
|
|
"fr-FR": "TxGEqnHWrfWFTfGW9XjX",
|
|
"de-DE": "pNInz6obpgDQGcFmaJgB"
|
|
}
|
|
|
|
# Email
|
|
sendgrid_api_key: str
|
|
email_from: str
|
|
client_base_url: str
|
|
|
|
# Microsoft Authentication (Azure AD)
|
|
azure_client_id: str = ""
|
|
azure_authority: str = ""
|
|
azure_redirect_uri: str = ""
|
|
|
|
# Observability
|
|
sentry_dsn: str = ""
|
|
otel_exporter_otlp_endpoint: str = ""
|
|
|
|
# CORS - comma-separated list of allowed origins
|
|
cors_origins: str = "http://localhost:5173,http://localhost:5174,http://localhost:3000,http://localhost:6001"
|
|
|
|
@property
|
|
def cors_origins_list(self) -> list[str]:
|
|
"""Parse CORS origins from comma-separated string to list."""
|
|
return [origin.strip() for origin in self.cors_origins.split(",") if origin.strip()]
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
|
|
|
|
settings = Settings()
|
|
|
|
|
|
def get_settings():
|
|
"""Get settings instance - for dependency injection"""
|
|
return settings
|