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", populate_by_name=True, ) app_name: str = Field(default="py_server", alias="APP_NAME") app_env: str = Field(default="local", alias="APP_ENV") database_path: Path = Field(default=Path("storage/app.db"), alias="DATABASE_PATH") admin_jwt_secret: str = Field( default="dev_admin_secret_change_me", alias="JWT_ADMIN_SECRET", ) admin_jwt_ttl: int = Field(default=3600, alias="ADMIN_JWT_TTL") admin_jwt_refresh_ttl: int = Field(default=7200, alias="ADMIN_JWT_REFRESH_TTL") jwt_blacklist_ttl: int = Field(default=7201, alias="JWT_BLACKLIST_TTL") api_jwt_secret: str = Field(default="dev_api_secret_change_me", alias="JWT_SECRET") api_jwt_ttl: int = Field(default=3600, alias="JWT_TTL") api_jwt_refresh_ttl: int = Field(default=7200, alias="JWT_REFRESH_TTL") admin_seed_username: str = Field(default="admin", alias="ADMIN_SEED_USERNAME") admin_seed_password: str = Field(default="admin", alias="ADMIN_SEED_PASSWORD") cors_allow_origins: list[str] = Field(default=["*"], alias="CORS_ALLOW_ORIGINS") @lru_cache def get_settings() -> Settings: return Settings()