from abc import ABC, abstractmethod from typing import List, Optional from src.models.search_models import SearchResult class SearchInterface(ABC): @abstractmethod def search_custom_sites( query: str, sites: Optional[List[str]] = None ) -> SearchResult: """ Searches for the given query across a list of custom sites. Args: query (str): The search query string. sites (Optional[List[str]], optional): A list of site URLs or identifiers to restrict the search to. If None, searches all available custom sites. Returns: SearchResult: An object containing the search results. Raises: NotImplementedError: This method must be implemented by subclasses. """ raise NotImplementedError @abstractmethod def search_custom_domains( query: str, domains: Optional[List[str]] = None ) -> SearchResult: """ Searches for the given query within a specified custom domain. Args: query (str): The search query string. domain (Optional[List[str]], optional): The custom domain to restrict the search to. Defaults to None. Returns: SearchResult: The result of the search operation. Raises: NotImplementedError: If the method is not implemented. """ raise NotImplementedError