From 083b588289fa6f49b5ff5a7d4220878d84fc94c5 Mon Sep 17 00:00:00 2001 From: proDream Date: Fri, 10 Jan 2025 15:37:29 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BA=20=D0=B1=D0=B0=D0=B7=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D1=81=20=D0=B1=D0=B0=D0=B7?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создан класс `DBSettings` в модуле `settings.py` для хранения параметров подключения к базе данных. - Добавлен класс `DBDependency` в модуль `db_dependency.py`, который управляет взаимодействием с асинхронной базой данных с использованием SQLAlchemy. - Обновлен модуль `__init__.py` для инициализации новых компонентов. --- lkeep/core/core_dependency/__init__.py | 0 lkeep/core/core_dependency/db_dependency.py | 29 ++++++++++++++++++++ lkeep/core/settings.py | 30 +++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 lkeep/core/core_dependency/__init__.py create mode 100644 lkeep/core/core_dependency/db_dependency.py diff --git a/lkeep/core/core_dependency/__init__.py b/lkeep/core/core_dependency/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lkeep/core/core_dependency/db_dependency.py b/lkeep/core/core_dependency/db_dependency.py new file mode 100644 index 0000000..0a1ec29 --- /dev/null +++ b/lkeep/core/core_dependency/db_dependency.py @@ -0,0 +1,29 @@ +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine + + +class DBDependency: + """ + Класс для управления зависимостями базы данных, используя SQLAlchemy. + """ + + def __init__(self, db_url: str, db_echo: bool) -> None: + """ + Инициализирует экземпляр класса, отвечающего за взаимодействие с асинхронной базой данных. + + :param db_url: URL для подключения к базе данных. + :type db_url: str + :param db_echo: Флаг, определяющий вывод подробных логов при взаимодействии с базой данных. + :type db_echo: bool + """ + self._engine = create_async_engine(url=db_url, echo=db_echo) + self._session_factory = async_sessionmaker(bind=self._engine, expire_on_commit=False, autocommit=False) + + @property + def db_session(self) -> async_sessionmaker[AsyncSession]: + """ + Декоратор для создания асинхронной сессии базы данных. + + :returns: Возвращает фабрику асинхронных сессий. + :rtype: async_sessionmaker[AsyncSession] + """ + return self._session_factory diff --git a/lkeep/core/settings.py b/lkeep/core/settings.py index 6124d1f..fc5f241 100644 --- a/lkeep/core/settings.py +++ b/lkeep/core/settings.py @@ -3,6 +3,23 @@ from pydantic_settings import BaseSettings, SettingsConfigDict class DBSettings(BaseSettings): + """ + Класс для настройки параметров подключения к базе данных. + + :ivar db_name: Имя базы данных. + :type db_name: str + :ivar db_user: Логин пользователя для доступа к базе данных. + :type db_user: str + :ivar db_password: Пароль пользователя для доступа к базе данных. Значение хранится в зашифрованном виде. + :type db_password: SecretStr + :ivar db_host: Адрес хоста, на котором размещена база данных. + :type db_host: str + :ivar db_port: Порт, по которому осуществляется подключение к базе данных. + :type db_port: int + :ivar db_echo: Флаг для вывода отладочной информации о запросах к базе данных. + :type db_echo: bool + """ + db_name: str db_user: str db_password: SecretStr @@ -14,10 +31,23 @@ class DBSettings(BaseSettings): @property def db_url(self): + """ + Свойство, возвращающее строку подключения к базе данных PostgreSQL. + + :returns: Строка подключения к базе данных. + :rtype: str + """ return f"postgresql+asyncpg://{self.db_user}:{self.db_password.get_secret_value()}@{self.db_host}:{self.db_port}/{self.db_name}" class Settings(BaseSettings): + """ + Класс Settings используется для хранения настроек приложения. + + :ivar db_settings: Экземпляр класса DBSettings, содержащий настройки базы данных. + :type db_settings: DBSettings + """ + db_settings: DBSettings = DBSettings()