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", populate_by_name=True, extra="ignore", ) data_dir: Path = Field(default=Path("/data"), alias="DATA_DIR") admin_password: str = Field(default="changeme", alias="ADMIN_PASSWORD") secret_key: str = Field(default="dev-secret-change-me", alias="SECRET_KEY") max_upload_mb: int = Field(default=200, alias="MAX_UPLOAD_MB") rate_limit_per_second: int = Field(default=2, alias="RATE_LIMIT_PER_SECOND") jwt_expire_hours: int = Field(default=12, alias="JWT_EXPIRE_HOURS") host: str = Field(default="0.0.0.0", alias="HOST") port: int = Field(default=8080, alias="PORT") @property def db_url(self) -> str: return f"sqlite:///{self.data_dir / 'mincedpad.db'}" @property def uploads_dir(self) -> Path: return self.data_dir / "uploads" settings = Settings()