f1tness_parser/backend/app/config.py

43 lines
1.4 KiB
Python

from typing import Optional
from urllib.parse import quote
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
# Base app settings
model_config = SettingsConfigDict(env_file=".env", extra="ignore")
app_name: str = "F1tness Parser API"
version: str = "0.0.1"
debug: bool = False
# Auth: JWT_SECRET signs access tokens, it must be long and random (see .env.example)
JWT_SECRET: str = ""
ACCESS_TOKEN_TTL_MINUTES: int = 15
REFRESH_TOKEN_TTL_DAYS: int = 30
# The refresh cookie of the web client is sent only over HTTPS when this is on
COOKIE_SECURE: bool = False
# Postgres database settings
POSTGRES_DATABASE_URL: Optional[str] = None
POSTGRES_DATABASE_HOST: str = "localhost"
POSTGRES_DATABASE_PORT: int = 5432
POSTGRES_DATABASE_DB: str = "f1tness_db"
POSTGRES_DATABASE_USER: str = "postgres"
POSTGRES_DATABASE_PASSWORD: str = "password"
def get_postgres_database_url(self) -> str:
"""SQLAlchemy async URL. POSTGRES_DATABASE_URL, if set, takes precedence."""
if self.POSTGRES_DATABASE_URL:
return self.POSTGRES_DATABASE_URL
return (
f"postgresql+asyncpg://{quote(self.POSTGRES_DATABASE_USER)}"
f":{quote(self.POSTGRES_DATABASE_PASSWORD)}"
f"@{self.POSTGRES_DATABASE_HOST}"
f":{self.POSTGRES_DATABASE_PORT}/{self.POSTGRES_DATABASE_DB}"
)
settings = Settings()