11from typing import Optional
22
33from requests import Session
4+ from requests .adapters import HTTPAdapter , Retry
45
56from .response import Response
67from .tools import (
@@ -35,6 +36,9 @@ def __init__(
3536 self .idInstance = idInstance
3637 self .apiTokenInstance = apiTokenInstance
3738
39+ self .session = Session ()
40+ self .__prepare_session ()
41+
3842 self .account = account .Account (self )
3943 self .device = device .Device (self )
4044 self .groups = groups .Groups (self )
@@ -59,15 +63,25 @@ def request(
5963 url = url .replace ("{{apiTokenInstance}}" , self .apiTokenInstance )
6064
6165 try :
62- with Session () as session :
63- if not files :
64- response = session .request (
65- method = method , url = url , json = payload
66- )
67- else :
68- response = session .request (
69- method = method , url = url , data = payload , files = files
70- )
66+ if not files :
67+ response = self .session .request (
68+ method = method , url = url , json = payload
69+ )
70+ else :
71+ response = self .session .request (
72+ method = method , url = url , data = payload , files = files
73+ )
7174 except Exception as error :
7275 return Response (None , f"Other error occurred: { error } ." )
7376 return Response (response .status_code , response .text )
77+
78+ def __prepare_session (self ) -> None :
79+ retry = Retry (
80+ total = 3 ,
81+ backoff_factor = 1.0 ,
82+ allowed_methods = None ,
83+ status_forcelist = [400 , 429 ]
84+ )
85+
86+ self .session .mount ("http://" , HTTPAdapter (max_retries = retry ))
87+ self .session .mount ("https://" , HTTPAdapter (max_retries = retry ))
0 commit comments