File size: 1,275 Bytes
1c6c5d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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()