from functools import lru_cache from pydantic import Field from pydantic_settings import BaseSettings from dotenv import load_dotenv import os load_dotenv() class _BaseConfig(BaseSettings): environment: str = Field(default=os.getenv("ENVIRONMENT", "development")) class _AppSettings(_BaseConfig): pass class _DbSettings(_BaseConfig): username: str = Field(default=os.getenv("PG_USER")) password: str = Field(default=os.getenv("PG_PASSWORD")) db_name: str = Field(default=os.getenv("PG_DB_NAME")) class _Settings(_BaseConfig): app: _AppSettings = _AppSettings() db: _DbSettings = _DbSettings() @lru_cache def get_settings() -> _Settings: return _Settings()