69 lines
1.8 KiB
Python
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()
|