Source code for ds_protocol_http_py_lib.utils.http.config
"""
**File:** ``config.py``
**Region:** ``ds_protocol_http_py_lib/utils/http/config``
Configuration for the HTTP client.
Example:
>>> config = HttpConfig(timeout_seconds=10, user_agent="MyUA/1.0")
>>> retry = RetryConfig(total=3, backoff_factor=0.2, status_forcelist=(429, 500, 502, 503, 504))
>>> http = Http(config=config, retry=retry)
>>> response = http.get("https://api.example.com/data")
>>> data = response.json()
"""
from collections.abc import Mapping
from dataclasses import dataclass, field
# ---------- Config ----------
[docs]
@dataclass(frozen=True, kw_only=True)
class RetryConfig:
"""
Retry policy (urllib3 Retry via requests).
- total: max attempts (includes first request)
- backoff_factor: sleep = factor * (2 ** (retry_num - 1))
- status_forcelist: statuses that trigger retry
- allowed_methods: methods eligible for retry
- respect_retry_after_header: honor Retry-After on 429/503
"""
total: int = 3
backoff_factor: float = 0.2
status_forcelist: tuple[int, ...] = (429, 500, 502, 503, 504)
allowed_methods: tuple[str, ...] = ("GET", "POST", "PUT", "DELETE", "PATCH")
raise_on_status: bool = False
respect_retry_after_header: bool = True
[docs]
@dataclass(frozen=True, kw_only=True)
class HttpConfig:
"""
Configuration for the HTTP client.
- headers: applied to all requests (overridable per call)
- timeout_seconds: connect+read timeout seconds (or (connect, read) per call)
- user_agent: user agent for all requests
- pool_maxsize: maximum number of connections in the pool
- pool_connections: maximum number of connections in the pool
- raise_for_status: raise for status for all requests
- retry: RetryConfig
"""
# Headers configuration
headers: Mapping[str, str] = field(default_factory=dict)
# Request configuration
timeout_seconds: int | float = 10
user_agent: str = field(default="Http/1.0")
pool_maxsize: int = field(default=32)
pool_connections: int = field(default=10)
# Retry configuration
retry: RetryConfig = field(default_factory=RetryConfig)