64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
"""
|
|
Base handler interface for search APIs.
|
|
All specific API handlers should inherit from this base class.
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import Dict, List, Any, Optional
|
|
|
|
|
|
class BaseSearchHandler(ABC):
|
|
"""Base class for all search API handlers."""
|
|
|
|
@abstractmethod
|
|
def search(self, query: str, num_results: int = 10, **kwargs) -> List[Dict[str, Any]]:
|
|
"""
|
|
Execute a search query and return results.
|
|
|
|
Args:
|
|
query: The search query to execute
|
|
num_results: Number of results to return
|
|
**kwargs: Additional search parameters specific to the API
|
|
|
|
Returns:
|
|
List of search results, each as a dictionary with at least:
|
|
- title: Title of the result
|
|
- url: URL of the result
|
|
- snippet: Text snippet or description
|
|
- source: Source of the result (e.g., "google", "scholar")
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_name(self) -> str:
|
|
"""
|
|
Get the name of the search handler.
|
|
|
|
Returns:
|
|
Name of the search handler (e.g., "google", "scholar")
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def is_available(self) -> bool:
|
|
"""
|
|
Check if the search API is available and properly configured.
|
|
|
|
Returns:
|
|
True if the API is available, False otherwise
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_rate_limit_info(self) -> Dict[str, Any]:
|
|
"""
|
|
Get information about the API's rate limits.
|
|
|
|
Returns:
|
|
Dictionary with rate limit information:
|
|
- requests_per_minute: Maximum requests per minute
|
|
- requests_per_day: Maximum requests per day
|
|
- current_usage: Current usage statistics if available
|
|
"""
|
|
pass
|