from pydantic_settings import BaseSettings, SettingsConfigDict from pydantic import BaseModel class RunSettings(BaseModel): host: str = "0.0.0.0" port: int = 8000 class APIV1Prefix(BaseModel): prefix:str = "/v1" user:str = "/user" login:str = "/login" class APIPrefix(BaseModel): prefix:str = "/api" v1: APIV1Prefix = APIV1Prefix() class DatabaseConfig(BaseModel): url: str echo:bool=False echo_pool:bool=False pool_size: int = 50 max_overflow: int =10 convention:dict = { "ix": "ix_%(column_0_label)s", "uq": "uq_%(table_name)s_%(column_0_name)s", "ck": "ck_%(table_name)s_%(constraint_name)s", "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", "pk": "pk_%(table_name)s", } class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=".env", case_sensitive=False, env_nested_delimiter="__", env_prefix="APP_CONFIG__" ) run: RunSettings = RunSettings() db: DatabaseConfig api: APIPrefix = APIPrefix() settings = Settings()