from functools import lru_cache from pathlib import Path from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore") app_name: str = "RF Propagation API" api_v1_prefix: str = "/api/v1" database_url: str = "postgresql+psycopg://radio:radio@postgis:5432/radio" redis_url: str = "redis://redis:6379/0" dem_path: Path = Field(default=Path("/data/dem")) landcover_path: Path = Field(default=Path("/data/landcover")) canopy_path: Path = Field(default=Path("/data/canopy")) buildings_query_limit: int = Field(default=5000, gt=0) p833_gamma_db_per_m: float = Field(default=0.15, ge=0) p833_max_attenuation_db: float = Field(default=25.0, gt=0) @lru_cache def get_settings() -> Settings: return Settings()