Skip to content

timeout_strategy

appimage_updater.core.timeout_strategy

Timeout strategies for different types of HTTP operations.

ProgressiveTimeoutClient(timeout_strategy)

HTTP client that tries operations with progressively longer timeouts.

Parameters:

Name Type Description Default
timeout_strategy TimeoutStrategy

Timeout strategy to use

required
Source code in src/appimage_updater/core/timeout_strategy.py
def __init__(self, timeout_strategy: TimeoutStrategy):
    """Initialize progressive timeout client.

    Args:
        timeout_strategy: Timeout strategy to use
    """
    self.timeout_strategy = timeout_strategy

timeout_strategy = timeout_strategy instance-attribute

get_with_progressive_timeout(url, operation_types=None, **kwargs) async

Attempt GET request with progressively longer timeouts.

Parameters:

Name Type Description Default
url str

URL to request

required
operation_types list[str] | None

List of operation types to try in order (default: ["quick_check", "fallback"])

None
**kwargs Any

Additional httpx client parameters

{}

Returns:

Type Description
Response

HTTP response

Raises:

Type Description
HTTPError

If all timeout attempts fail

Source code in src/appimage_updater/core/timeout_strategy.py
async def get_with_progressive_timeout(
    self, url: str, operation_types: list[str] | None = None, **kwargs: Any
) -> httpx.Response:
    """Attempt GET request with progressively longer timeouts.

    Args:
        url: URL to request
        operation_types: List of operation types to try in order (default: ["quick_check", "fallback"])
        **kwargs: Additional httpx client parameters

    Returns:
        HTTP response

    Raises:
        httpx.HTTPError: If all timeout attempts fail
    """
    # Prepare operation types and attempt progressive timeouts
    operation_types = self._prepare_operation_types(operation_types)
    return await self._attempt_progressive_timeouts(url, operation_types, **kwargs)

TimeoutStrategy(base_timeout=30)

Manages different timeout strategies for different types of HTTP operations.

Parameters:

Name Type Description Default
base_timeout int

Base timeout in seconds for normal operations

30
Source code in src/appimage_updater/core/timeout_strategy.py
def __init__(self, base_timeout: int = 30):
    """Initialize timeout strategy.

    Args:
        base_timeout: Base timeout in seconds for normal operations
    """
    self.base_timeout = base_timeout

    # Define different timeout strategies
    self.timeouts = {
        "quick_check": 5,  # For initial connectivity/existence checks
        "page_scraping": 10,  # For scraping HTML pages for download links
        "api_request": 15,  # For API requests (GitHub, etc.)
        "download": base_timeout * 10,  # For actual file downloads (much longer)
        "fallback": base_timeout,  # Default fallback timeout
    }

base_timeout = base_timeout instance-attribute

timeouts = {'quick_check': 5, 'page_scraping': 10, 'api_request': 15, 'download': base_timeout * 10, 'fallback': base_timeout} instance-attribute

create_client_config(operation_type='fallback', **kwargs)

Create httpx client configuration with appropriate timeout.

Parameters:

Name Type Description Default
operation_type str

Type of operation

'fallback'
**kwargs Any

Additional client configuration

{}

Returns:

Type Description
dict[str, Any]

Dictionary of client configuration parameters

Source code in src/appimage_updater/core/timeout_strategy.py
def create_client_config(self, operation_type: str = "fallback", **kwargs: Any) -> dict[str, Any]:
    """Create httpx client configuration with appropriate timeout.

    Args:
        operation_type: Type of operation
        **kwargs: Additional client configuration

    Returns:
        Dictionary of client configuration parameters
    """
    timeout = self.get_timeout(operation_type)

    config = {"timeout": timeout, **kwargs}

    logger.debug(f"Creating HTTP client config for {operation_type}: timeout={timeout}s")
    return config

get_timeout(operation_type='fallback')

Get timeout for a specific operation type.

Parameters:

Name Type Description Default
operation_type str

Type of operation (quick_check, page_scraping, api_request, download, fallback)

'fallback'

Returns:

Type Description
float

Timeout in seconds

Source code in src/appimage_updater/core/timeout_strategy.py
def get_timeout(self, operation_type: str = "fallback") -> float:
    """Get timeout for a specific operation type.

    Args:
        operation_type: Type of operation (quick_check, page_scraping, api_request, download, fallback)

    Returns:
        Timeout in seconds
    """
    return self.timeouts.get(operation_type, self.timeouts["fallback"])

create_progressive_client(base_timeout=30)

Create a progressive timeout client with default strategy.

Parameters:

Name Type Description Default
base_timeout int

Base timeout in seconds

30

Returns:

Type Description
ProgressiveTimeoutClient

Progressive timeout client

Source code in src/appimage_updater/core/timeout_strategy.py
def create_progressive_client(base_timeout: int = 30) -> ProgressiveTimeoutClient:
    """Create a progressive timeout client with default strategy.

    Args:
        base_timeout: Base timeout in seconds

    Returns:
        Progressive timeout client
    """
    strategy = get_default_timeout_strategy(base_timeout)
    return ProgressiveTimeoutClient(strategy)

get_default_timeout_strategy(base_timeout=30)

Get the default timeout strategy instance.

Parameters:

Name Type Description Default
base_timeout int

Base timeout in seconds

30

Returns:

Type Description
TimeoutStrategy

Default timeout strategy

Source code in src/appimage_updater/core/timeout_strategy.py
def get_default_timeout_strategy(base_timeout: int = 30) -> TimeoutStrategy:
    """Get the default timeout strategy instance.

    Args:
        base_timeout: Base timeout in seconds

    Returns:
        Default timeout strategy
    """
    global _default_timeout_strategy
    if _default_timeout_strategy is None or _default_timeout_strategy.base_timeout != base_timeout:
        _default_timeout_strategy = TimeoutStrategy(base_timeout)
    return _default_timeout_strategy