Files
mywhoosh2garmin/app/config.py
Bastian Wagner 2aba1265af mail notification
2026-08-15 20:47:02 +02:00

44 lines
1.7 KiB
Python

from functools import lru_cache
from pathlib import Path
from pydantic import Field, PositiveInt, model_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env", extra="ignore", case_sensitive=False)
admin_password: str = Field(alias="ADMIN_PASSWORD", min_length=1)
secret_key: str = Field(alias="SECRET_KEY", min_length=16)
credential_encryption_key: str = Field(alias="CREDENTIAL_ENCRYPTION_KEY", min_length=1)
data_dir: Path = Field(default=Path("/data"), alias="DATA_DIR")
database_url: str | None = Field(default=None, alias="DATABASE_URL")
sync_interval_minutes: PositiveInt = Field(default=5, alias="SYNC_INTERVAL_MINUTES")
session_https_only: bool = Field(default=False, alias="SESSION_HTTPS_ONLY")
smtp_host: str | None = Field(default=None, alias="SMTP_HOST")
smtp_port: int = Field(default=587, alias="SMTP_PORT")
smtp_username: str | None = Field(default=None, alias="SMTP_USERNAME")
smtp_password: str | None = Field(default=None, alias="SMTP_PASSWORD")
smtp_from_address: str | None = Field(default=None, alias="SMTP_FROM_ADDRESS")
smtp_use_tls: bool = Field(default=True, alias="SMTP_USE_TLS")
@model_validator(mode="after")
def derive_paths(self) -> "Settings":
self.data_dir = self.data_dir.expanduser().resolve()
if self.database_url is None:
self.database_url = f"sqlite:///{self.data_dir / 'app.db'}"
return self
@property
def tokens_dir(self) -> Path:
return self.data_dir / "tokens"
@property
def activities_dir(self) -> Path:
return self.data_dir / "activities"
@lru_cache
def get_settings() -> Settings:
return Settings()