Skip to content

Commit db3fc50

Browse files
added retryhandler
1 parent ce23990 commit db3fc50

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from http import HTTPStatus
2+
from ..retrysettings import RetrySettings
3+
from .httprequest import HttpRequest
4+
class RetryHandler(object):
5+
6+
ErrorStatusCodes = [
7+
HTTPStatus.INTERNAL_SERVER_ERROR,
8+
HTTPStatus.BAD_GATEWAY,
9+
HTTPStatus.SERVICE_UNAVAILABLE,
10+
HTTPStatus.GATEWAY_TIMEOUT
11+
]
12+
13+
def __init__(self, http_client: HttpRequest, settings: RetrySettings):
14+
15+
self.__http_client = http_client
16+
self.__retry_settings = settings
17+
18+
def send(self, body):
19+
20+
if self.__retry_settings.maximum_number_of_retries == 0:
21+
return self.__http_client.send_request(body)
22+
23+
attempts = 0
24+
25+
return

socketlabs/injectionapi/retrysettings.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ class RetrySettings(object):
1010

1111
def __init__(self, maximum_retries = None):
1212

13-
14-
1513
if maximum_retries:
14+
1615
if maximum_retries < 0:
1716
raise ValueError("maximumNumberOfRetries must be greater than 0")
17+
1818
if maximum_retries > self.__maximum_allowed_number_of_retries:
1919
raise ValueError("The maximum number of allowed retries is ", self.__maximum_allowed_number_of_retries)
20+
2021
self.__maximum_number_of_retries = maximum_retries
22+
2123
else:
2224
self.__maximum_number_of_retries = self.__default_number_of_retries
2325

socketlabs/injectionapi/socketlabsclient.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from .core.httprequest import HttpRequest
77
from .core.injectionrequestfactory import InjectionRequestFactory
88
from .core.sendvalidator import SendValidator
9+
from .core.retryhandler import RetryHandler
10+
from .retrysettings import RetrySettings
911
from .message.basicmessage import BasicMessage
1012
from .message.bulkmessage import BulkMessage
1113
from .proxy import Proxy
@@ -32,6 +34,7 @@ def __init__(self, server_id: int, api_key: str, proxy: Proxy = None):
3234
self._api_key = api_key
3335
self._http_proxy = proxy
3436
self._request_timeout = 120
37+
self._number_of_retries = 0
3538

3639
@property
3740
def __endpoint(self):
@@ -69,6 +72,14 @@ def request_timeout(self, timeout: int):
6972
"""
7073
self._request_timeout = timeout
7174

75+
@property
76+
def number_of_retries(self):
77+
return self._number_of_retries
78+
79+
@number_of_retries.setter
80+
def number_of_retries(self, retries: int):
81+
self._number_of_retries = retries
82+
7283
def __build_http_request(self):
7384
"""
7485
Build the HttpRequest. Will add the proxy, if set
@@ -111,7 +122,8 @@ def __send_basic_message(self, message: BasicMessage):
111122
body = req_factory.generate_request(message)
112123

113124
request = self.__build_http_request()
114-
result = request.send_request(body)
125+
retry_handler = RetryHandler(request, RetrySettings(self.number_of_retries))
126+
result = retry_handler.send(body)
115127
return result
116128

117129
def __send_bulk_message(self, message: BulkMessage):
@@ -130,7 +142,8 @@ def __send_bulk_message(self, message: BulkMessage):
130142
body = req_factory.generate_request(message)
131143

132144
request = self.__build_http_request()
133-
result = request.send_request(body)
145+
retry_handler = RetryHandler(request, RetrySettings(self.number_of_retries))
146+
result = retry_handler.send(body)
134147
return result
135148

136149
def send_async(self, message: BasicMessage, on_success, on_error):

0 commit comments

Comments
 (0)