import os import requests from typing import Dict, Any, Optional, TypedDict, Literal class EndpointSchema(TypedDict): route: str method: Literal['GET', 'POST'] name: str description: str payload: Dict[str, Any] class RapidDataProviderBase: def __init__(self, base_url: str, endpoints: Dict[str, EndpointSchema]): self.base_url = base_url self.endpoints = endpoints def get_endpoints(self): return self.endpoints def call_endpoint( self, route: str, payload: Optional[Dict[str, Any]] = None ): """ Call an API endpoint with the given parameters and data. Args: endpoint (EndpointSchema): The endpoint configuration dictionary params (dict, optional): Query parameters for GET requests payload (dict, optional): JSON payload for POST requests Returns: dict: The JSON response from the API """ if route.startswith("/"): route = route[1:] endpoint = self.endpoints.get(route) if not endpoint: raise ValueError(f"Endpoint {route} not found") url = f"{self.base_url}{endpoint['route']}" headers = { "x-rapidapi-key": os.getenv("RAPID_API_KEY"), "x-rapidapi-host": url.split("//")[1].split("/")[0], "Content-Type": "application/json" } method = endpoint.get('method', 'GET').upper() if method == 'GET': response = requests.get(url, params=payload, headers=headers) elif method == 'POST': response = requests.post(url, json=payload, headers=headers) else: raise ValueError(f"Unsupported HTTP method: {method}") return response.json()