Source code for contree_sdk.config
from __future__ import annotations
import logging
import os
from dataclasses import dataclass, field, replace
logger = logging.getLogger(__name__)
[docs]
@dataclass
class ContreeConfig:
"""Configuration for the Contree SDK client.
Fields ``base_url`` and ``token`` support env var lookup: if the value
matches an existing environment variable name, the value is loaded from it.
"""
base_url: str = field(default="CONTREE_BASE_URL")
"""API server URL or env var name to load from."""
token: str = field(default="CONTREE_TOKEN", repr=False)
"""Auth token or env var name to load from."""
transport_timeout: float = 10.0
"""HTTP timeout in seconds."""
file_upload_chunk_size: int = 1024 * 1024
"""Chunk size in bytes for uploads."""
operation_import_timeout: float | None = None
"""Import operation timeout, falls back to operation_timeout."""
operation_run_timeout: float | None = None
"""Run operation timeout, falls back to operation_timeout."""
operation_timeout: float = 600.0
"""Default timeout for operations."""
operation_poll_secs_min: float = 0.1
"""Min polling interval for operation status checks."""
operation_poll_secs_max: float = 10.0
"""Max polling interval for operation status checks."""
operation_poll_secs_backoff_grow: float = 1.75
"""Backoff multiplier between polls. Higher values mean faster backoff growth; recommended range is 1 to 2."""
images_list_batch_size: int = 100
"""Batch size for listing images."""
def _load_field_from_env(self, field_name: str) -> ContreeConfig:
value = getattr(self, field_name)
if value in os.environ:
logger.info(f"Loading {field_name} from environment variable {value}")
return replace(self, **{field_name: os.environ[value]})
return self