From b1a763675a9c3aa8eb3694d4c143b13710b32e54 Mon Sep 17 00:00:00 2001 From: Noloquideus Date: Tue, 12 May 2026 00:08:30 +0300 Subject: [PATCH] fix: vault database --- src/infrastructure/config/settings.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/infrastructure/config/settings.py b/src/infrastructure/config/settings.py index a2e9bca..dd3fd31 100644 --- a/src/infrastructure/config/settings.py +++ b/src/infrastructure/config/settings.py @@ -1,6 +1,7 @@ from functools import lru_cache import json from typing import Any +from urllib.parse import quote from pydantic import Field,PrivateAttr from pydantic_settings import BaseSettings,SettingsConfigDict from src.infrastructure.vault import VaultClient @@ -67,7 +68,20 @@ class Settings(BaseSettings): @property def DATABASE_URL(self) -> str: - return self._get_vault_secret(self._vault_database_secrets,'DATABASE_URL','database_url') + ready_url = self._get_vault_secret(self._vault_database_secrets,'DATABASE_URL','database_url') + if ready_url: + return ready_url + + host = self._get_vault_secret(self._vault_database_secrets,'host','HOST') + port = self._get_vault_secret(self._vault_database_secrets,'port','PORT') or '5432' + user = self._get_vault_secret(self._vault_database_secrets,'user','USER') + password = self._get_vault_secret(self._vault_database_secrets,'password','PASSWORD') + name = self._get_vault_secret(self._vault_database_secrets,'name','NAME','database','DATABASE') + if not host or not user or not password or not name: + return '' + quoted_user = quote(user,safe='') + quoted_password = quote(password,safe='') + return f'postgresql+asyncpg://{quoted_user}:{quoted_password}@{host}:{port}/{name}' @property