29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from pydantic_settings import BaseSettings
|
|
import os
|
|
|
|
def _env(*names, default=None):
|
|
for n in names:
|
|
v = os.getenv(n)
|
|
if v:
|
|
return v
|
|
return default
|
|
|
|
class Settings(BaseSettings):
|
|
# support both custom DB_* names and common POSTGRES_* names from postgres images
|
|
DB_USER: str = _env("DB_USER", "POSTGRES_USER", default="postgres")
|
|
DB_PASS: str = _env("DB_PASS", "POSTGRES_PASSWORD", default="postgres")
|
|
DB_NAME: str = _env("DB_NAME", "POSTGRES_DB", default="vpn_bot_db")
|
|
DB_HOST: str = _env("DB_HOST", "POSTGRES_HOST", "DB_HOST", default="db")
|
|
DB_PORT: str = _env("DB_PORT", "POSTGRES_PORT", default="5432")
|
|
|
|
# If explicit DB_* variables are provided, build DATABASE_URL from them (priority).
|
|
# Otherwise fall back to explicit DATABASE_URL or DATABASE_URL_ASYNC env.
|
|
_built_db_url: str | None = None
|
|
if DB_USER and DB_PASS and DB_NAME and DB_HOST and DB_PORT:
|
|
_built_db_url = f"postgresql+asyncpg://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
|
|
|
|
DATABASE_URL: str = _built_db_url or _env("DATABASE_URL", "DATABASE_URL_ASYNC", default="")
|
|
|
|
|
|
settings = Settings()
|