Source code for promptdb.settings
"""Application settings for :mod:`promptdb`.
Purpose:
Centralize environment-backed configuration for the API, database, storage,
and observability layers.
Design:
The settings model reads environment variables only. Adapters and services
are constructed elsewhere.
Attributes:
AppSettings: Typed settings model.
Examples:
>>> AppSettings(database_url="sqlite:///./promptdb.sqlite3").api_prefix
'/api/v1'
"""
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")