decisionai_plugin/common/util/retryrequests.py (69 lines of code) (raw):
import requests
from requests.adapters import HTTPAdapter
import time
from telemetry import log
# disable certificate warning
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
class CommonException(Exception):
pass
class RetryRequests(object):
def __init__(self, count, interval):
'''
@param count: int, max retry count
@param interval: int, retry interval in mille seconds
'''
self.count = count
self.interval = interval
self.session = requests.Session()
self.session.mount('https://', HTTPAdapter(pool_maxsize=128))
def get(self, *args, **kwargs):
for n in range(self.count - 1, -1, -1):
try:
r = self.session.get(*args, **kwargs)
if not 100 <= r.status_code < 300:
raise CommonException('statuscode: {}, message: {}'.format(r.status_code, r.content))
return r
except (CommonException, requests.exceptions.RequestException) as e:
self.session.close()
if n > 0:
time.sleep(self.interval * 0.001)
else:
raise e
def post(self, *args, **kwargs):
for n in range(self.count - 1, -1, -1):
try:
r = self.session.post(*args, **kwargs)
if not 100 <= r.status_code < 300:
raise CommonException('statuscode: {}, message: {}'.format(r.status_code, r.content))
return r
except (CommonException, requests.exceptions.RequestException) as e:
self.session.close()
if n > 0:
time.sleep(self.interval * 0.001)
else:
raise e
def put(self, *args, **kwargs):
for n in range(self.count - 1, -1, -1):
try:
r = self.session.put(*args, **kwargs)
if not 100 <= r.status_code < 300:
raise CommonException('statuscode: {}, message: {}'.format(r.status_code, r.content))
return r
except (CommonException, requests.exceptions.RequestException) as e:
self.session.close()
if n > 0:
time.sleep(self.interval * 0.001)
else:
raise e
def delete(self, *args, **kwargs):
for n in range(self.count - 1, -1, -1):
try:
r = self.session.delete(*args, **kwargs)
if not 100 <= r.status_code < 300:
raise CommonException('statuscode: {}, message: {}'.format(r.status_code, r.content))
return r
except (CommonException, requests.exceptions.RequestException) as e:
self.session.close()
if n > 0:
time.sleep(self.interval * 0.001)
else:
raise e