Spaces:
Running
Running
from typing import Dict, Optional, Any | |
from urllib3.util.retry import Retry | |
from requests.adapters import HTTPAdapter | |
import requests | |
class BaseAPI: | |
def __init__( | |
self, | |
url: str, | |
headers: Optional[Dict[str, Any]] = None, | |
total_retries: int = 3, | |
backoff_factor: int = 2 | |
) -> None: | |
total_retries = max(total_retries, 10) | |
adapter = HTTPAdapter( | |
max_retries=Retry( | |
total=total_retries, | |
status_forcelist=[429, 500, 502, 503, 504], | |
allowed_methods=frozenset({"HEAD", "GET", "POST", "OPTIONS"}), | |
backoff_factor=backoff_factor, | |
) | |
) | |
self.session = requests.Session() | |
self.session.mount("https://", adapter) | |
self.session.mount("http://", adapter) | |
self.__url = url | |
self.__headers = headers | |
def get(self, **request_kwargs): | |
r = self.session.get(url=self.__url, headers=self.__headers, params=request_kwargs, timeout=30) | |
r.raise_for_status() | |
return r.json() | |
def post(self, payload: Dict[str, Any]): | |
r = self.session.post(url=self.__url, headers=self.__headers, json=payload, timeout=30) | |
r.raise_for_status() | |
return r.json() | |