from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict(env_prefix="GG_", env_file=".env", extra="ignore") env: str = Field(default="development") http_addr: str = Field(default="0.0.0.0:8081") grpc_addr: str = Field(default="0.0.0.0:9091") nats_url: str = Field(default="nats://localhost:4222") stream_name: str = Field(default="GUESTGUARD") consumer_durable: str = Field(default="fraud-engine-access") # Tier 2 Block G — geolocation enrichment. # provider: "auto" picks MaxMind when GG_GEOIP_DB_PATH points to an # existing .mmdb, else falls back to the free ip-api.com endpoint. # "null" turns geolocation off entirely (useful for tests). geoip_provider: str = Field(default="auto") geoip_db_path: str | None = Field(default=None) # Redis URL for caching geo lookups (30-day TTL). Empty means # uncached — every miss hits the upstream resolver. redis_url: str = Field(default="redis://redis:6379") @property def host(self) -> str: return self.http_addr.split(":", 1)[0] or "0.0.0.0" @property def port(self) -> int: parts = self.http_addr.rsplit(":", 1) if len(parts) == 2 and parts[1].isdigit(): return int(parts[1]) return 8081 def load_settings() -> Settings: return Settings()