from pathlib import Path from typing import List, Optional from pydantic import field_validator from pydantic_settings import BaseSettings class Settings(BaseSettings): """Application settings.""" # API API_V1_STR: str = "/api/v1" # Application PROJECT_NAME: str = "Task Manager API" PROJECT_DESCRIPTION: str = "API for managing tasks and to-do items" VERSION: str = "0.1.0" # CORS CORS_ORIGINS: List[str] = ["*"] # SQLite Database DB_DIR: Path = Path("/app/storage/db") DB_NAME: str = "db.sqlite" SQLALCHEMY_DATABASE_URL: Optional[str] = None @field_validator("SQLALCHEMY_DATABASE_URL", mode="before") def assemble_db_url(cls, v: Optional[str], info) -> str: if v is not None: return v db_dir = info.data.get("DB_DIR") db_name = info.data.get("DB_NAME") db_dir.mkdir(parents=True, exist_ok=True) return f"sqlite:///{db_dir}/{db_name}" settings = Settings()