6 from .functions import none_or
8 logger = logging.getLogger("mw.util.api.session")
15 def __init__(self, uri, headers=None, timeout=None,
16 failure_threshold=None, wait_step=2):
18 raise TypeError("uri must not be None")
21 self.headers = headers if headers is not None else {}
22 self.session = requests.Session()
24 self.failure_threshold = int(failure_threshold or FAILURE_THRESHOLD)
25 self.timeout = float(TIMEOUT)
26 self.wait_step = float(wait_step)
31 time.sleep(self.failed * (self.wait_step ** self.failed))
33 def get(self, params, **kwargs):
34 return self.request('GET', params, **kwargs)
36 def post(self, params, **kwargs):
37 return self.request('POST', params, **kwargs)
39 def request(self, type, params):
41 result = self.session.request(type, self.uri, params=params,
45 except (requests.HTTPError, requests.ConnectionError):
48 if self.failed > self.failure_threshold:
53 self.request(type, params)