Source code for src.bcra_connector.timeout_config

from dataclasses import dataclass, field
from typing import Tuple


[docs] @dataclass(frozen=True) # frozen=True hace la clase inmutable class TimeoutConfig: """Configuration for request timeouts. :param connect: How long to wait for the connection to be established (seconds) :param read: How long to wait for the server to send data (seconds) """ connect: float = field(default=3.05) read: float = field(default=27.0) def __post_init__(self) -> None: """Validate timeout values.""" if self.connect <= 0: raise ValueError("connect timeout must be greater than 0") if self.read <= 0: raise ValueError("read timeout must be greater than 0") @property def as_tuple(self) -> Tuple[float, float]: """Get timeout configuration as a tuple. :return: Tuple of (connect_timeout, read_timeout) """ return self.connect, self.read
[docs] @classmethod def from_total(cls, total: float) -> "TimeoutConfig": """Create a TimeoutConfig from a total timeout value. :param total: Total timeout in seconds, will be split between connect and read :return: TimeoutConfig instance :raises ValueError: If total timeout is less than or equal to 0 """ if total <= 0: raise ValueError("total timeout must be greater than 0") # Allocate 10% to connect timeout and 90% to read timeout return cls(connect=total * 0.1, read=total * 0.9)
[docs] @classmethod def default(cls) -> "TimeoutConfig": """Get the default timeout configuration. :return: TimeoutConfig instance with default values """ return cls()
def __str__(self) -> str: """Get string representation of timeout configuration.""" return f"TimeoutConfig(connect={self.connect:.2f}s, read={self.read:.2f}s)"