python-gRPC
46 строк · 1.5 Кб
1from dataclasses import dataclass2from os import getenv3from sqlalchemy.engine import URL4from dotenv import load_dotenv5
6load_dotenv()7
8
9@dataclass
10class DataBaseConfig:11name_db: str | None = getenv("POSTGRES_DB_NAME")12user: str | None = getenv("POSTGRES_USERNAME")13password: str | None = getenv("POSTGRES_PASSWORD")14port: str | None = getenv("POSTGRES_PORT")15host: str | None = getenv("POSTGRES_HOST")16
17driver: str = "asyncpg"18database_system = "postgresql"19
20def __post_init__(self):21required_vars = ["name_db", "user", "password", "port", "host"]22for var in required_vars:23if getattr(self, var) is None:24raise ValueError(25f"Нет переменной {var} для коннекта БД в окружении проекта."26)27
28def build_connection_str(self) -> str:29return URL.create(30drivername=f"{self.database_system}+{self.driver}",31username=self.user,32password=self.password,33host=self.host,34port=self.port,35database=self.name_db,36).render_as_string(hide_password=False)37
38
39def get_connection_params():40return {41"database": getenv("POSTGRES_DB_NAME", None),42"user": getenv("POSTGRES_USERNAME", None),43"password": getenv("POSTGRES_PASSWORD", None),44"host": getenv("POSTGRES_HOST", "localhost"),45"port": getenv("POSTGRES_PORT", "5432"),46}47