Source code for promptdb.settings

"""Environment-backed application configuration.

All settings are read from ``PROMPTDB_*`` environment variables via
Pydantic Settings. The defaults work for local development with SQLite and
local blob storage — no external services required.

Environment variables:

- ``PROMPTDB_DATABASE_URL`` — SQLAlchemy URL (default: ``sqlite:///./promptdb.sqlite3``)
- ``PROMPTDB_BLOB_ROOT`` — local blob directory (default: ``.blobs``)
- ``PROMPTDB_STORAGE_BACKEND`` — ``local`` or ``minio`` (default: ``local``)
- ``PROMPTDB_API_PREFIX`` — API route prefix (default: ``/api/v1``)
- ``PROMPTDB_MINIO_ENDPOINT`` — MinIO host:port (required if ``minio``)
- ``PROMPTDB_MINIO_ACCESS_KEY`` — MinIO access key
- ``PROMPTDB_MINIO_SECRET_KEY`` — MinIO secret key
- ``PROMPTDB_MINIO_BUCKET`` — MinIO bucket (default: ``promptdb``)
- ``PROMPTDB_ENABLE_METRICS`` — mount Prometheus ``/metrics`` (default: false)
- ``PROMPTDB_ENABLE_OTEL`` — enable OpenTelemetry instrumentation (default: false)
- ``PROMPTDB_LOG_LEVEL`` — root log level (default: ``INFO``)

Usage::

    from promptdb.settings import AppSettings

    settings = AppSettings()                          # from env vars
    settings = AppSettings(database_url="sqlite:///:memory:")  # explicit
"""

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


[docs] class AppSettings(BaseSettings): """Environment-backed application settings. Args: database_url: SQLAlchemy database URL. blob_root: Local blob storage root. storage_backend: ``local`` or ``minio``. api_prefix: API route prefix. service_name: Service name for logs and traces. enable_metrics: Whether to expose metrics. enable_otel: Whether to enable OTel wiring. redis_url: Optional Redis URL. minio_endpoint: MinIO endpoint. minio_access_key: MinIO access key. minio_secret_key: MinIO secret key. minio_bucket: MinIO bucket. minio_secure: Whether MinIO uses TLS. log_level: Root log level. Returns: AppSettings: Loaded settings instance. Raises: None. Examples: >>> AppSettings(database_url="sqlite:///./x.sqlite3").storage_backend 'local' """ model_config = SettingsConfigDict(env_prefix="PROMPTDB_", extra="ignore") database_url: str = "sqlite:///./promptdb.sqlite3" blob_root: str = ".blobs" storage_backend: str = "local" api_prefix: str = "/api/v1" service_name: str = "promptdb-api" enable_metrics: bool = False enable_otel: bool = False redis_url: str | None = None minio_endpoint: str | None = None minio_access_key: str | None = None minio_secret_key: str | None = None minio_bucket: str = "promptdb" minio_secure: bool = False log_level: str = Field(default="INFO")