Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ def test_accounts_with_options():
'handle_rate_limit': True,
'retry_max': 1,
'retry_delay': 3000,
'retry_on_status': [404, 500, 503]
'retry_on_status': [404, 500, 503],
'timeout': (1.0, 3.0)
}
)

assert client is not None
assert isinstance(client, Client)
assert len(client.options) == 4
assert len(client.options) == 5
20 changes: 18 additions & 2 deletions twitter_ads/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
else:
import http.client as httplib

from requests.exceptions import Timeout
from requests_oauthlib import OAuth1Session
from twitter_ads.utils import get_version
from twitter_ads.error import Error
Expand Down Expand Up @@ -87,8 +88,11 @@ def __oauth_request(self):
retry_max = self._client.options.get('retry_max', 0)
retry_delay = self._client.options.get('retry_delay', 1500)
retry_on_status = self._client.options.get('retry_on_status', [500, 503])
retry_on_timeouts = self._client.options.get('retry_on_timeouts', False)
timeout = self._client.options.get('timeout', None)
retry_count = 0
retry_after = None
timeout = self._client.options.get('timeout', None)

consumer = OAuth1Session(
self._client.consumer_key,
Expand All @@ -100,8 +104,20 @@ def __oauth_request(self):
method = getattr(consumer, self._method)

while (retry_count <= retry_max):
response = method(url, headers=headers, data=data, params=params,
files=files, stream=stream)
try:
response = method(url, headers=headers, data=data, params=params,
files=files, stream=stream, timeout=timeout)
except Timeout as e:
if retry_on_timeouts:
if retry_count == retry_max:
raise Exception(e)
logger.warning("Timeout occurred: resume in %s seconds"
% (int(retry_delay) / 1000))
time.sleep(int(retry_delay) / 1000)
retry_count += 1
continue
raise Exception(e)

# do not retry on 2XX status code
if 200 <= response.status_code < 300:
break
Expand Down