brainsqueeze's picture
First commit
1c6c5d7 verified
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()