"""
http_config - HTTP client configuration for USPTO API requests
This module provides configuration for HTTP transport-level settings including
timeouts, retries, connection pooling, and custom headers.
"""
import os
from dataclasses import dataclass, field
from typing import Dict, List, Optional
[docs]
@dataclass
class HTTPConfig:
"""HTTP client configuration for request handling.
This class separates transport-level HTTP concerns from API-level
configuration, allowing fine-grained control over request behavior.
Attributes:
timeout: Read timeout in seconds for requests (default: 30.0)
connect_timeout: Connection establishment timeout in seconds (default: 10.0)
max_retries: Maximum number of retry attempts (default: 3)
backoff_factor: Exponential backoff multiplier for retries (default: 1.0)
retry_status_codes: HTTP status codes that trigger retries
pool_connections: Number of connection pools to cache (default: 10)
pool_maxsize: Maximum number of connections per pool (default: 10)
custom_headers: Additional headers to include in all requests
"""
# Timeout configuration
timeout: Optional[float] = 30.0
connect_timeout: Optional[float] = 10.0
# Retry configuration
max_retries: int = 3
backoff_factor: float = 1.0
retry_status_codes: List[int] = field(
default_factory=lambda: [429, 500, 502, 503, 504]
)
# Connection pooling
pool_connections: int = 10
pool_maxsize: int = 10
# Custom headers (User-Agent, tracking, etc.)
custom_headers: Optional[Dict[str, str]] = None
[docs]
@classmethod
def from_env(cls) -> "HTTPConfig":
"""Create HTTPConfig from environment variables.
Environment variables:
USPTO_REQUEST_TIMEOUT: Request timeout in seconds
USPTO_CONNECT_TIMEOUT: Connection timeout in seconds
USPTO_MAX_RETRIES: Maximum retry attempts
USPTO_BACKOFF_FACTOR: Retry backoff factor
USPTO_POOL_CONNECTIONS: Connection pool size
USPTO_POOL_MAXSIZE: Max connections per pool
Returns:
HTTPConfig instance with values from environment or defaults
"""
return cls(
timeout=float(os.environ.get("USPTO_REQUEST_TIMEOUT", "30.0")),
connect_timeout=float(os.environ.get("USPTO_CONNECT_TIMEOUT", "10.0")),
max_retries=int(os.environ.get("USPTO_MAX_RETRIES", "3")),
backoff_factor=float(os.environ.get("USPTO_BACKOFF_FACTOR", "1.0")),
pool_connections=int(os.environ.get("USPTO_POOL_CONNECTIONS", "10")),
pool_maxsize=int(os.environ.get("USPTO_POOL_MAXSIZE", "10")),
)
[docs]
def get_timeout_tuple(self) -> tuple[Optional[float], Optional[float]]:
"""Get timeout as tuple for requests library.
Returns:
Tuple of (connect_timeout, read_timeout) for requests
"""
return (self.connect_timeout, self.timeout)