77 lines
1.8 KiB
Python
77 lines
1.8 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
|
|
|
|
# Observability
|
|
sentry_dsn: str = ""
|
|
otel_exporter_otlp_endpoint: str = ""
|
|
|
|
# CORS
|
|
cors_origins: list[str] = ["http://localhost:5173", "http://localhost:5174", "http://localhost:3000"]
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
|
|
|
|
settings = Settings()
|
|
|
|
|
|
def get_settings():
|
|
"""Get settings instance - for dependency injection"""
|
|
return settings
|