32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
from functools import lru_cache
|
|
from typing import Literal
|
|
|
|
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")
|
|
|
|
database_url: str = Field(alias="DATABASE_URL")
|
|
|
|
jwt_secret: str = Field(alias="JWT_SECRET")
|
|
jwt_access_ttl_min: int = Field(default=15, alias="JWT_ACCESS_TTL_MIN")
|
|
jwt_refresh_ttl_days: int = Field(default=30, alias="JWT_REFRESH_TTL_DAYS")
|
|
|
|
tracksolid_push_token: str = Field(default="", alias="TRACKSOLID_PUSH_TOKEN")
|
|
tracksolid_api_base_url: str = Field(default="", alias="TRACKSOLID_API_BASE_URL")
|
|
|
|
ntfy_base_url: str = Field(default="", alias="NTFY_BASE_URL")
|
|
ntfy_topic: str = Field(default="fleet-slo-breach", alias="NTFY_TOPIC")
|
|
ntfy_token: str = Field(default="", alias="NTFY_TOKEN")
|
|
|
|
app_mode: Literal["dev", "prod"] = Field(default="prod", alias="APP_MODE")
|
|
app_role: Literal["gateway", "worker", "cron"] = Field(default="gateway", alias="APP_ROLE")
|
|
app_log_level: str = Field(default="INFO", alias="APP_LOG_LEVEL")
|
|
app_git_sha: str = Field(default="unknown", alias="APP_GIT_SHA")
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_settings() -> Settings:
|
|
return Settings()
|