"""Application configuration""" import os from pydantic_settings import BaseSettings from functools import lru_cache class Settings(BaseSettings): """Application settings""" # База данных POSTGRES_USER: str = "postgres" POSTGRES_PASSWORD: str = "postgres" POSTGRES_HOST: str = "postgres" POSTGRES_PORT: str = "5432" POSTGRES_DB: str = "app" POSTGRES_TEST_DB: str = "test_app" DATABASE_URL: str | None = None # JWT SECRET_KEY: str = "your-secret-key" ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 # Режим тестирования TESTING: bool = bool(os.getenv("TESTING")) # Redis REDIS_HOST: str = "redis" REDIS_PORT: int = 6379 REDIS_DB: int = 0 REDIS_TEST_DB: int = 1 def get_database_url(self) -> str: """Get database URL""" if self.DATABASE_URL: return self.DATABASE_URL if self.TESTING: return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@localhost:5432/{self.POSTGRES_TEST_DB}" return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" def get_redis_url(self) -> str: """Get Redis URL""" db = self.REDIS_TEST_DB if self.TESTING else self.REDIS_DB host = "localhost" if self.TESTING else self.REDIS_HOST return f"redis://{host}:{self.REDIS_PORT}/{db}" # Telegram TELEGRAM_BOT_TOKEN: str = os.getenv("TELEGRAM_BOT_TOKEN", "") TELEGRAM_CHAT_ID: str = os.getenv("TELEGRAM_CHAT_ID", "") class Config: """Pydantic config""" env_file = ".env" case_sensitive = True @lru_cache() def get_settings() -> Settings: """Get cached settings""" return Settings() settings = get_settings()