"""
Application configuration using Pydantic Settings
"""
from typing import List, Optional
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import AnyHttpUrl, field_validator
[docs]
class Settings(BaseSettings):
# API Settings
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "Tafy Studio Hub"
VERSION: str = "0.0.1"
# CORS Settings
BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = ["http://localhost:3000"]
[docs]
@field_validator("BACKEND_CORS_ORIGINS", mode="before")
@classmethod
def assemble_cors_origins(cls, v: str | List[str]) -> List[str] | str:
if isinstance(v, str) and not v.startswith("["):
return [i.strip() for i in v.split(",")]
elif isinstance(v, (list, str)):
return v
raise ValueError(v)
# NATS Settings
NATS_URL: str = "nats://localhost:4222"
NATS_USER: Optional[str] = None
NATS_PASSWORD: Optional[str] = None
# Database Settings (optional, can use NATS KV instead)
DATABASE_URL: Optional[str] = None
# Redis Settings (optional)
REDIS_URL: Optional[str] = None
# Security Settings
SECRET_KEY: str = "your-secret-key-change-in-production"
ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
# Logging
LOG_LEVEL: str = "INFO"
LOG_FORMAT: str = "json" # json or console
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=True,
)
settings = Settings()