31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from pydantic.generics import GenericModel
|
|
import re
|
|
import os
|
|
|
|
class Settings(GenericModel):
|
|
DB_HOST: str = os.getenv("DB_HOST", "postgres")
|
|
DB_PORT: int = int(os.getenv("DB_PORT", "5432"))
|
|
DB_USER: str = os.getenv("DB_USER", "postgres")
|
|
DB_PASS: str = os.getenv("DB_PASS", "")
|
|
DB_NAME: str = os.getenv("DB_NAME", "syte")
|
|
|
|
@classmethod
|
|
def validate_db_port(cls, v):
|
|
# Проверка и преобразование DB_PORT
|
|
if isinstance(v, str):
|
|
# Используем регулярное выражение для извлечения целого числа
|
|
match = re.search(r'\d+', v)
|
|
if match:
|
|
return int(match.group())
|
|
else:
|
|
raise ValueError(f"Invalid DB_PORT value: {v}")
|
|
return v
|
|
|
|
@property
|
|
def DATABASE_URL_asyncpg(self) -> str:
|
|
return f"postgresql+asyncpg://{self.DB_USER}:{self.DB_PASS}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
|
|
|
|
@property
|
|
def DATABASE_URL_syncpg(self) -> str:
|
|
return f"postgresql+psycopg2://{self.DB_USER}:{self.DB_PASS}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
|