Skip to content

base

appimage_updater.repositories.base

Base repository interface for AppImage Updater.

This module defines the abstract base class that all repository implementations must inherit from, providing a consistent interface for fetching release information.

RepositoryClient(timeout=30, user_agent=None, **kwargs)

Abstract base class for repository clients.

All repository implementations (GitHub, GitLab, etc.) must inherit from this class and implement the required methods.

Parameters:

Name Type Description Default
timeout int

Request timeout in seconds

30
user_agent str | None

Custom user agent string

None
**kwargs Any

Repository-specific configuration options

{}
Source code in src/appimage_updater/repositories/base.py
def __init__(
    self,
    timeout: int = 30,
    user_agent: str | None = None,
    **kwargs: Any,
) -> None:
    """Initialize repository client.

    Args:
        timeout: Request timeout in seconds
        user_agent: Custom user agent string
        **kwargs: Repository-specific configuration options
    """
    self.timeout = timeout
    self.user_agent = user_agent or self._get_default_user_agent()

repository_type abstractmethod property

Get the repository type identifier (e.g., 'github', 'gitlab').

timeout = timeout instance-attribute

user_agent = user_agent or self._get_default_user_agent() instance-attribute

detect_repository_type(url) abstractmethod

Check if this client can handle the given repository URL.

Parameters:

Name Type Description Default
url str

Repository URL

required

Returns:

Type Description
bool

True if this client can handle the URL, False otherwise

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
def detect_repository_type(self, url: str) -> bool:
    """Check if this client can handle the given repository URL.

    Args:
        url: Repository URL

    Returns:
        True if this client can handle the URL, False otherwise
    """

generate_pattern_from_releases(url) abstractmethod async

Generate file pattern from actual releases.

Parameters:

Name Type Description Default
url str

Repository URL

required

Returns:

Type Description
str | None

Regex pattern string or None if generation fails

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
async def generate_pattern_from_releases(self, url: str) -> str | None:
    """Generate file pattern from actual releases.

    Args:
        url: Repository URL

    Returns:
        Regex pattern string or None if generation fails
    """

get_latest_release(repo_url) abstractmethod async

Get the latest stable release for a repository.

Parameters:

Name Type Description Default
repo_url str

Repository URL

required

Returns:

Type Description
Release

Release object with release information

Raises:

Type Description
RepositoryError

If the operation fails

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
async def get_latest_release(self, repo_url: str) -> Release:
    """Get the latest stable release for a repository.

    Args:
        repo_url: Repository URL

    Returns:
        Release object with release information

    Raises:
        RepositoryError: If the operation fails
    """

get_latest_release_including_prerelease(repo_url) abstractmethod async

Get the latest release including prereleases.

Parameters:

Name Type Description Default
repo_url str

Repository URL

required

Returns:

Type Description
Release

Release object with release information

Raises:

Type Description
RepositoryError

If the operation fails

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
async def get_latest_release_including_prerelease(self, repo_url: str) -> Release:
    """Get the latest release including prereleases.

    Args:
        repo_url: Repository URL

    Returns:
        Release object with release information

    Raises:
        RepositoryError: If the operation fails
    """

get_releases(repo_url, limit=10) abstractmethod async

Get recent releases for a repository.

Parameters:

Name Type Description Default
repo_url str

Repository URL

required
limit int

Maximum number of releases to fetch

10

Returns:

Type Description
list[Release]

List of Release objects

Raises:

Type Description
RepositoryError

If the operation fails

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
async def get_releases(self, repo_url: str, limit: int = 10) -> list[Release]:
    """Get recent releases for a repository.

    Args:
        repo_url: Repository URL
        limit: Maximum number of releases to fetch

    Returns:
        List of Release objects

    Raises:
        RepositoryError: If the operation fails
    """

normalize_repo_url(url) abstractmethod

Normalize repository URL and detect if it was corrected.

Parameters:

Name Type Description Default
url str

Repository URL

required

Returns:

Type Description
tuple[str, bool]

Tuple of (normalized_url, was_corrected)

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
def normalize_repo_url(self, url: str) -> tuple[str, bool]:
    """Normalize repository URL and detect if it was corrected.

    Args:
        url: Repository URL

    Returns:
        Tuple of (normalized_url, was_corrected)
    """

parse_repo_url(url) abstractmethod

Parse repository URL to extract owner and repo name.

Parameters:

Name Type Description Default
url str

Repository URL

required

Returns:

Type Description
tuple[str, str]

Tuple of (owner, repo_name)

Raises:

Type Description
RepositoryError

If URL format is invalid

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
def parse_repo_url(self, url: str) -> tuple[str, str]:
    """Parse repository URL to extract owner and repo name.

    Args:
        url: Repository URL

    Returns:
        Tuple of (owner, repo_name)

    Raises:
        RepositoryError: If URL format is invalid
    """

should_enable_prerelease(url) abstractmethod async

Check if prerelease should be automatically enabled for a repository.

Parameters:

Name Type Description Default
url str

Repository URL

required

Returns:

Type Description
bool

True if only prereleases are found, False if stable releases exist

Source code in src/appimage_updater/repositories/base.py
@abstractmethod
async def should_enable_prerelease(self, url: str) -> bool:
    """Check if prerelease should be automatically enabled for a repository.

    Args:
        url: Repository URL

    Returns:
        True if only prereleases are found, False if stable releases exist
    """

RepositoryError

Base exception for repository operations.