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): mock_user_email: str = "test@test.com" 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")) host: str = Field(default=os.getenv("PG_HOST")) port: int = Field(default=os.getenv("PG_PORT")) class _Settings(_BaseConfig): app: _AppSettings = _AppSettings() db: _DbSettings = _DbSettings() @lru_cache def get_settings() -> _Settings: return _Settings()