From d9e40a47ba20996dbd2dc879e6fdea8fecc2336d Mon Sep 17 00:00:00 2001 From: Matteo Lodi <30625432+mlodic@users.noreply.github.com> Date: Thu, 23 Mar 2023 12:05:33 +0100 Subject: [PATCH 1/2] added timeout option --- OTXv2.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OTXv2.py b/OTXv2.py index 9c14f6f..328865f 100755 --- a/OTXv2.py +++ b/OTXv2.py @@ -95,7 +95,7 @@ class OTXv2(object): def __init__( self, api_key, proxy=None, proxy_https=None, server="https://otx.alienvault.com", project="SDK", - user_agent=None, verify=True, cert=None + user_agent=None, verify=True, cert=None, timeout=None ): self.key = api_key self.server = server @@ -114,6 +114,7 @@ def __init__( 'User-Agent': user_agent or 'OTX Python {}/1.5.12'.format(project), 'Content-Type': 'application/json' } + self.timeout = timeout def session(self): if self.request_session is None: @@ -181,6 +182,7 @@ def get(self, url, **kwargs): proxies=self.proxies, verify=self.verify, cert=self.cert, + timeout=self.timeout ) return self.handle_response_errors(response).json() except requests.exceptions.RetryError: @@ -201,6 +203,7 @@ def patch(self, url, body, **kwargs): proxies=self.proxies, verify=self.verify, cert=self.cert, + timeout=self.timeout ) return self.handle_response_errors(response).json() @@ -222,6 +225,7 @@ def post(self, url, body=None, headers=None, files=None, **kwargs): proxies=self.proxies, verify=self.verify, cert=self.cert, + timeout=self.timeout ) return self.handle_response_errors(response).json() From 0a260a1cfecfe6ba4cfd45a8114318ac2eae5984 Mon Sep 17 00:00:00 2001 From: Matteo Lodi <30625432+mlodic@users.noreply.github.com> Date: Thu, 23 Mar 2023 12:14:47 +0100 Subject: [PATCH 2/2] added TimeoutError --- OTXv2.py | 60 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/OTXv2.py b/OTXv2.py index 328865f..ebe8b3c 100755 --- a/OTXv2.py +++ b/OTXv2.py @@ -88,6 +88,14 @@ def __str__(self): return repr(self.value) +class TimeoutError(Exception): + def __init__(self, value=None): + self.value = value or "TimeoutError" + + def __str__(self): + return repr(self.value) + + class OTXv2(object): """ Main class to interact with the AlienVault OTX API. @@ -187,6 +195,8 @@ def get(self, url, **kwargs): return self.handle_response_errors(response).json() except requests.exceptions.RetryError: raise RetryError() + except requests.exceptions.Timeout: + raise TimeoutError() def patch(self, url, body, **kwargs): """ @@ -195,17 +205,19 @@ def patch(self, url, body, **kwargs): :param body: HTTP Body to send in request :return: response as dict """ - - response = self.session().patch( - self.create_url(url, **kwargs), - data=json.dumps(body), - headers=self.headers, - proxies=self.proxies, - verify=self.verify, - cert=self.cert, - timeout=self.timeout - ) - return self.handle_response_errors(response).json() + try: + response = self.session().patch( + self.create_url(url, **kwargs), + data=json.dumps(body), + headers=self.headers, + proxies=self.proxies, + verify=self.verify, + cert=self.cert, + timeout=self.timeout + ) + return self.handle_response_errors(response).json() + except requests.exceptions.Timeout: + raise TimeoutError() def post(self, url, body=None, headers=None, files=None, **kwargs): """ @@ -216,18 +228,20 @@ def post(self, url, body=None, headers=None, files=None, **kwargs): :param files: (optional) list of file tuples, if posting multipart form data :return: response as dict """ - - response = self.session().post( - self.create_url(url, **kwargs), - data=json.dumps(body) if body else None, - files=files, - headers=headers or self.headers, - proxies=self.proxies, - verify=self.verify, - cert=self.cert, - timeout=self.timeout - ) - return self.handle_response_errors(response).json() + try: + response = self.session().post( + self.create_url(url, **kwargs), + data=json.dumps(body) if body else None, + files=files, + headers=headers or self.headers, + proxies=self.proxies, + verify=self.verify, + cert=self.cert, + timeout=self.timeout + ) + return self.handle_response_errors(response).json() + except requests.exceptions.Timeout: + raise TimeoutError() def create_pulse(self, **kwargs): """