Skip to content

domain_service

appimage_updater.repositories.domain_service

Domain knowledge service for intelligent repository detection.

DomainKnowledgeService(config_manager=None)

Service for managing domain knowledge and repository detection.

Source code in src/appimage_updater/repositories/domain_service.py
def __init__(self, config_manager: GlobalConfigManager | None = None):
    self.config_manager = config_manager or GlobalConfigManager()
    self.registry = get_repository_registry()

config_manager = config_manager or GlobalConfigManager() instance-attribute

registry = get_repository_registry() instance-attribute

forget_domain(url, failed_handler_name) async

Remove domain from knowledge due to API failure.

Source code in src/appimage_updater/repositories/domain_service.py
async def forget_domain(self, url: str, failed_handler_name: str) -> None:
    """Remove domain from knowledge due to API failure."""
    domain = self._extract_domain(url)
    if not domain:
        return

    try:
        config = self.config_manager.load_config()
        knowledge = config.global_config.domain_knowledge

        # Remove from failed handler's domain list
        updated = self._remove_domain_from_knowledge(knowledge, failed_handler_name, domain)

        if updated:
            self.config_manager.save()
            logger.warning(f"Forgot domain: {domain} (failed as {failed_handler_name})")

    except Exception as e:
        logger.error(f"Failed to forget domain {domain}: {e}")

get_handler_by_domain_knowledge(url)

Get repository handler using domain knowledge (fast path).

Source code in src/appimage_updater/repositories/domain_service.py
def get_handler_by_domain_knowledge(self, url: str) -> RepositoryHandler | None:
    """Get repository handler using domain knowledge (fast path)."""
    domain = self._extract_domain(url)
    if not domain:
        return None

    try:
        knowledge = self._load_domain_knowledge()
        return self._find_handler_for_domain(domain, knowledge)
    except Exception as e:
        logger.debug(f"Error loading domain knowledge: {e}")
        return None

get_handlers_for_url(url)

Get all handlers that can handle the URL, with domain knowledge optimization.

Source code in src/appimage_updater/repositories/domain_service.py
def get_handlers_for_url(self, url: str) -> list[RepositoryHandler]:
    """Get all handlers that can handle the URL, with domain knowledge optimization."""
    # First try fast-path using domain knowledge
    known_handler = self.get_handler_by_domain_knowledge(url)
    if known_handler:
        return [known_handler]

    # Fall back to registry-based detection
    return self.registry.get_handlers_for_url(url)

learn_domain(url, handler_name) async

Persist successful domain detection.

Source code in src/appimage_updater/repositories/domain_service.py
async def learn_domain(self, url: str, handler_name: str) -> None:
    """Persist successful domain detection."""
    domain = self._extract_domain(url)
    if not domain:
        return

    try:
        config = self.config_manager.load_config()
        knowledge = config.global_config.domain_knowledge

        # Add to appropriate domain list
        updated = self._add_domain_to_knowledge(knowledge, handler_name, domain)

        if updated:
            self.config_manager.save()
            logger.debug(f"Learned domain: {domain} -> {handler_name}")

    except Exception as e:
        logger.error(f"Failed to learn domain {domain}: {e}")