35 lines
941 B
Python
35 lines
941 B
Python
import os
|
|
from typing import Optional
|
|
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class DatabaseSettings(BaseSettings):
|
|
database_url: str = "postgresql+psycopg://postgres:postgres@postgres:5432/xiaoxia_saas"
|
|
pool_size: int = 20
|
|
max_overflow: int = 40
|
|
pool_timeout: int = 30
|
|
pool_recycle: int = 3600
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
case_sensitive=False,
|
|
extra="ignore",
|
|
)
|
|
|
|
|
|
_settings: Optional[DatabaseSettings] = None
|
|
|
|
|
|
def get_database_settings() -> DatabaseSettings:
|
|
global _settings
|
|
if _settings is None:
|
|
env = os.getenv("APP_ENV", "development")
|
|
env_file = f".env.{env}" if env != "development" else ".env"
|
|
if os.path.exists(env_file):
|
|
_settings = DatabaseSettings(_env_file=env_file)
|
|
else:
|
|
_settings = DatabaseSettings()
|
|
return _settings
|