snapdirect/src/config.py

71 lines
1.7 KiB
Python
Raw Normal View History

2026-03-08 12:51:47 +00:00
from os.path import abspath, dirname, join
from typing import Any
2026-03-26 10:58:03 +00:00
from pydantic import PostgresDsn
2026-03-08 12:51:47 +00:00
from pydantic_settings import (
BaseSettings,
SettingsConfigDict,
YamlConfigSettingsSource,
PydanticBaseSettingsSource,
)
from src.constants import Environment
API_README_PATH = abspath(join(dirname(__file__), "API.md"))
with open(API_README_PATH, "r", encoding="utf-8") as f:
API_README_MD = f.read()
class CustomBaseSettings(BaseSettings):
model_config = SettingsConfigDict(
yaml_file="config.yaml", yaml_file_encoding="utf-8", extra="ignore"
)
@classmethod
def settings_customise_sources(
cls,
settings_cls: type[BaseSettings],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> tuple[PydanticBaseSettingsSource, ...]:
return (YamlConfigSettingsSource(settings_cls),)
class Config(CustomBaseSettings):
2026-03-26 10:58:03 +00:00
DATABASE_URL: PostgresDsn
DATABASE_POOL_SIZE: int = 16
DATABASE_POOL_TTL: int = 60 * 20 # 20 minutes
DATABASE_POOL_PRE_PING: bool = True
2026-03-08 12:51:47 +00:00
ENVIRONMENT: Environment = Environment.PRODUCTION
CORS_ORIGINS: list[str] = ["*"]
CORS_ORIGINS_REGEX: str | None = None
CORS_HEADERS: list[str] = ["*"]
2026-03-26 10:58:03 +00:00
API_DOMAIN: str
LINK_DOMAIN: str
INVALID_URL: str
HASH_SECRET_KEY: str
MATOMO_HOST: str
MATOMO_SITE_ID: int
2026-03-08 12:51:47 +00:00
APP_VERSION: str = "0.0.0"
settings = Config()
app_configs: dict[str, Any] = {
"title": "snapdirect",
"version": settings.APP_VERSION,
"description": API_README_MD,
}
if not settings.ENVIRONMENT.is_debug:
app_configs["openapi_url"] = None # hide docs