from functools import lru_cache from pathlib import Path from typing import Optional from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", populate_by_name=True, extra="ignore", ) api_id: int = Field(..., alias="TELEGRAM_API_ID") api_hash: str = Field(..., alias="TELEGRAM_API_HASH") phone_number: Optional[str] = Field(default=None, alias="TELEGRAM_PHONE") session_name: str = Field(default="telegram", alias="TELEGRAM_SESSION_NAME") session_path: Path = Field(default=Path("data") / "telegram.session", alias="TELEGRAM_SESSION_PATH") database_path: Path = Field(default=Path("data") / "hooks.json", alias="DATABASE_PATH") base_url: str = Field(default="http://localhost:8000", alias="BASE_URL") hook_id_length: int = Field(default=8, alias="HOOK_ID_LENGTH") @lru_cache def get_settings() -> Settings: settings = Settings() settings.session_path.parent.mkdir(parents=True, exist_ok=True) settings.database_path.parent.mkdir(parents=True, exist_ok=True) return settings