from dotenv import load_dotenv import secrets from typing import Any, Dict, Optional from pydantic import BaseSettings, PostgresDsn, validator class Settings(BaseSettings): # openssl rand -hex 32 SECRET_KEY: str = secrets.token_urlsafe(32) MIDDLEWARE_SECRET_KEY: str = secrets.token_urlsafe(5) ALGORITHM: str = "HS256" JWT_TOKEN_EXPIRE_MINUTES: int = 30 HOST: str = "0.0.0.0" PORT: int = 80 DEBUG: bool = False LOG_LEVEL: str = "NOTSET" POSTGRES_SERVER: str = "" POSTGRES_USER: str = "postgres" POSTGRES_PASSWORD: str = "" POSTGRES_DB: str = "" SQLALCHEMY_DATABASE_URI: Optional[str] = None @validator("SQLALCHEMY_DATABASE_URI", pre=True) def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any: if isinstance(v, str): return v return PostgresDsn.build( scheme="postgresql", user=values.get("POSTGRES_USER"), password=values.get("POSTGRES_PASSWORD"), host=values.get("POSTGRES_SERVER"), path=f"/{values.get('POSTGRES_DB') or ''}", ) ALEMBIC_LOG_LEVEL: str = "INFO" ALEMBIC_SQLALCHEMY_LOG_LEVEL: str = "WARN" class Config: case_sensitive = True env_file = ".env" load_dotenv() settings = Settings()