Files
beavergram/backend/src/utils/env.py
T
2026-05-30 01:32:35 +02:00

69 lines
1.8 KiB
Python

import os
from pydantic import Field, SecretStr
from pydantic_settings import BaseSettings, SettingsConfigDict
class DatabaseSettings(BaseSettings):
host: str = "postgres"
port: int = 5432
user: str = "beavergram"
password: SecretStr = SecretStr("beavergram")
db_name: str = "beavergram"
min_pool_size: int = 5
max_pool_size: int = 20
scripts_connection_url: str = (
"postgresql://beavergram:beavergram@localhost:5433/beavergram"
)
@property
def connection_url(self) -> str:
if os.getenv("RUN_ENVIRONMENT") != "prod":
return self.scripts_connection_url
return (
f"postgresql://{self.user}:{self.password.get_secret_value()}"
f"@{self.host}:{self.port}/{self.db_name}"
)
class TelegramSettings(BaseSettings):
session_name: str = "beavergram"
sessions_dir: str = "sessions"
class ApiSettings(BaseSettings):
host: str = "0.0.0.0" # noqa: S104
port: int = 8080
class AuthSettings(BaseSettings):
token: SecretStr | None = None
class StorageSettings(BaseSettings):
root: str = "storage"
shard_depth: int = 2
class LogSettings(BaseSettings):
level: str = "INFO"
level_external: str = "WARNING"
show_time: bool = False
console_width: int = 150
class Settings(BaseSettings):
db: DatabaseSettings = Field(default_factory=DatabaseSettings)
tg: TelegramSettings = Field(default_factory=TelegramSettings)
api: ApiSettings = Field(default_factory=ApiSettings)
auth: AuthSettings = Field(default_factory=AuthSettings)
storage: StorageSettings = Field(default_factory=StorageSettings)
log: LogSettings = Field(default_factory=LogSettings)
model_config = SettingsConfigDict(
case_sensitive=False, env_file=".env", env_nested_delimiter="__", extra="ignore"
)
env = Settings()