1313from gql .transport .requests import RequestsHTTPTransport
1414from requests import Response as RequestsResponse
1515from requests import Session
16+ from requests .adapters import HTTPAdapter
17+ from urllib3 .util .retry import Retry
1618
1719if TYPE_CHECKING :
1820 from simple_github .auth import Auth
@@ -132,6 +134,13 @@ def _get_requests_session(self) -> Session:
132134 assert session .transport .session
133135 return session .transport .session
134136
137+ def _get_retry_session (self ) -> Session :
138+ session = self ._get_requests_session ()
139+ retry = Retry (total = 5 , backoff_factor = 1 , status_forcelist = {500 , 502 , 503 , 504 })
140+ adapter = HTTPAdapter (max_retries = retry )
141+ session .mount ("https://" , adapter )
142+ return session
143+
135144 def request (self , method : str , query : str , ** kwargs ) -> RequestsResponse :
136145 """Make a request to Github's REST API.
137146
@@ -145,7 +154,7 @@ def request(self, method: str, query: str, **kwargs) -> RequestsResponse:
145154 Dict: The JSON result of the request.
146155 """
147156 url = f"{ GITHUB_API_ENDPOINT } /{ query .lstrip ('/' )} "
148- session = self ._get_requests_session ()
157+ session = self ._get_retry_session ()
149158
150159 with session .request (method , url , ** kwargs ) as resp :
151160 return resp
0 commit comments