Skip to content

distribution_selector

appimage_updater.distribution_selector

Distribution-aware asset selection for multi-platform releases.

This module provides intelligent asset selection when multiple distribution-specific releases are available (e.g., ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, fedora). It selects the best compatible asset based on the current system, or presents options to the user when automatic selection isn't possible.

DistributionSelector(console=None, interactive=True)

Selects the best asset for the current distribution.

Parameters:

Name Type Description Default
console Console | None

Rich console for user interaction (optional)

None
interactive bool

Whether to allow interactive selection (default: True)

True
Source code in src/appimage_updater/distribution_selector.py
def __init__(self, console: Console | None = None, interactive: bool = True):
    """Initialize with current system information.

    Args:
        console: Rich console for user interaction (optional)
        interactive: Whether to allow interactive selection (default: True)
    """
    self.console = console or Console()
    self.interactive = interactive
    self.current_dist = self._detect_current_distribution()
    self.system_info = get_system_info()
    logger.debug(
        f"Detected current system: {self.current_dist.id} {self.current_dist.version}, "
        f"arch: {self.system_info.architecture}, platform: {self.system_info.platform}"
    )

console = console or Console() instance-attribute

current_dist = self._detect_current_distribution() instance-attribute

interactive = interactive instance-attribute

system_info = get_system_info() instance-attribute

select_best_asset(assets)

Select the best asset for the current system or prompt the user.

Source code in src/appimage_updater/distribution_selector.py
def select_best_asset(self, assets: list[Asset]) -> Asset:
    """Select the best asset for the current system or prompt the user."""
    # Check for simple cases first
    single_asset = self._validate_assets_input(assets)
    if single_asset is not None:
        return single_asset

    # Process and score all assets
    asset_infos = self._process_and_score_assets(assets)
    best_info = asset_infos[0]

    # Try high-confidence auto-selection
    high_score_asset = self._handle_high_score_selection(best_info)
    if high_score_asset is not None:
        return high_score_asset

    # Handle cases requiring user input or fallback
    return self._handle_user_input_selection(asset_infos, best_info)

select_best_distribution_asset(assets, console=None, interactive=True)

Convenience function to select the best asset for the current distribution.

Parameters:

Name Type Description Default
assets list[Asset]

List of available assets

required
console Console | None

Rich console for user interaction (optional)

None
interactive bool

Whether to allow interactive selection (default: True)

True

Returns:

Type Description
Asset

The best matching asset

Raises:

Type Description
ValueError

If no assets provided or user cancels selection

Source code in src/appimage_updater/distribution_selector.py
def select_best_distribution_asset(
    assets: list[Asset], console: Console | None = None, interactive: bool = True
) -> Asset:
    """Convenience function to select the best asset for the current distribution.

    Args:
        assets: List of available assets
        console: Rich console for user interaction (optional)
        interactive: Whether to allow interactive selection (default: True)

    Returns:
        The best matching asset

    Raises:
        ValueError: If no assets provided or user cancels selection
    """
    selector = DistributionSelector(console=console, interactive=interactive)
    return selector.select_best_asset(assets)