Skip to content

Commit 04be5e9

Browse files
author
Inbal Tako
committed
Align timeout and default response
1 parent d24d670 commit 04be5e9

File tree

5 files changed

+33
-18
lines changed

5 files changed

+33
-18
lines changed

securenative/api_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def verify(self, event_options):
2323
Logger.debug("Verify event call")
2424
event = SDKEvent(event_options, self.options)
2525
try:
26-
res = json.loads(self.event_manager.send_sync(event, ApiRoute.VERIFY.value, False).text)
26+
res = json.loads(self.event_manager.send_sync(event, ApiRoute.VERIFY.value).text)
2727
return VerifyResult(res["riskLevel"], res["score"], res["triggers"])
2828
except Exception as e:
2929
Logger.debug("Failed to call verify; {}".format(e))

securenative/event_manager.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def flush(self):
5454
for item in self.queue:
5555
self.http_client.post(item.url, item.body)
5656

57-
def send_sync(self, event, resource_path, retry):
57+
def send_sync(self, event, resource_path):
5858
if self.options.disable:
5959
Logger.warning("SDK is disabled. no operation will be performed")
6060
return
@@ -64,17 +64,9 @@ def send_sync(self, event, resource_path, retry):
6464
resource_path,
6565
json.dumps(EventManager.serialize(event))
6666
)
67-
if res.status_code != 200:
68-
Logger.info("SecureNative failed to call endpoint {} with event {}. adding back to queue".format(
69-
resource_path, event))
70-
item = QueueItem(
71-
resource_path,
72-
json.dumps(EventManager.serialize(event)),
73-
retry
74-
)
75-
self.queue.append(item)
76-
if self._is_queue_full():
77-
self.queue = self.queue[:len(self.queue - 1)]
67+
if res is None or res.status_code != 200:
68+
Logger.info("SecureNative failed to call endpoint {} with event {}.".format(resource_path, event))
69+
7870
return res
7971

8072
def _is_queue_full(self):

securenative/http/securenative_http_client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import requests
2+
from requests import Timeout
23

34
from securenative.utils.version_utils import VersionUtils
45

@@ -24,4 +25,8 @@ def _headers(self):
2425

2526
def post(self, path, body):
2627
url = "{}/{}".format(self.options.api_url, path)
27-
return requests.post(url=url, data=body, headers=self._headers())
28+
try:
29+
res = requests.post(url=url, data=body, headers=self._headers(), timeout=self.options.timeout / 1000)
30+
return res
31+
except Timeout:
32+
return None

tests/api_manager_test.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from securenative.enums.event_types import EventTypes
99
from securenative.enums.risk_level import RiskLevel
1010
from securenative.event_manager import EventManager
11-
from securenative.exceptions.securenative_invalid_options_exception import SecureNativeInvalidOptionsException
1211
from securenative.models.event_options import EventOptions
1312
from securenative.models.user_traits import UserTraits
1413
from securenative.models.verify_result import VerifyResult
@@ -49,6 +48,25 @@ def test_track_event(self):
4948
finally:
5049
event_manager.stop_event_persist()
5150

51+
@responses.activate
52+
def test_should_timeout_on_post(self):
53+
options = SecureNativeOptions(api_key="YOUR_API_KEY", auto_send=True, timeout=-1,
54+
api_url="https://api.securenative-stg.com/collector/api/v1")
55+
56+
responses.add(responses.POST, "https://api.securenative-stg.com/collector/api/v1/verify",
57+
json={"event": "SOME_EVENT_NAME"}, status=408)
58+
59+
event_manager = EventManager(options)
60+
event_manager.start_event_persist()
61+
api_manager = ApiManager(event_manager, options)
62+
63+
verify_result = VerifyResult(RiskLevel.LOW.value, 0, None)
64+
res = api_manager.verify(self.event_options)
65+
66+
self.assertEqual(res.risk_level, verify_result.risk_level)
67+
self.assertEqual(res.score, verify_result.score)
68+
self.assertEqual(res.triggers, verify_result.triggers)
69+
5270
@responses.activate
5371
def test_verify_event(self):
5472
options = SecureNativeOptions(api_key="YOUR_API_KEY",

tests/event_manager_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_should_successfully_send_sync_event_with_status_code_200(self):
3737
json=json.loads(res_body), status=200)
3838
event_manager = EventManager(options)
3939

40-
data = event_manager.send_sync(self.event, "some-path/to-api", False)
40+
data = event_manager.send_sync(self.event, "some-path/to-api")
4141
self.assertEqual(res_body, data.text)
4242

4343
@responses.activate
@@ -49,7 +49,7 @@ def test_should_send_sync_event_and_fail_when_status_code_401(self):
4949
json={}, status=401)
5050
event_manager = EventManager(options)
5151

52-
res = event_manager.send_sync(self.event, "some-path/to-api", False)
52+
res = event_manager.send_sync(self.event, "some-path/to-api")
5353

5454
self.assertEqual(res.status_code, 401)
5555

@@ -62,6 +62,6 @@ def test_should_send_sync_event_and_fail_when_status_code_500(self):
6262
json={}, status=500)
6363
event_manager = EventManager(options)
6464

65-
res = event_manager.send_sync(self.event, "some-path/to-api", False)
65+
res = event_manager.send_sync(self.event, "some-path/to-api")
6666

6767
self.assertEqual(res.status_code, 500)

0 commit comments

Comments
 (0)