diff --git a/CHANGES.rst b/CHANGES.rst index f711dd2c..31d4bd7c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,5 +1,7 @@ Changelog ========= +* 3.0.5 + * Increased default request timeout to 90 seconds. This can also be set by the `INTERCOM_REQUEST_TIMEOUT` environment variable. (`#154 `_) * 3.0.4 * Added `resource_type` attribute to lightweight classes. (`#153 `_) * 3.0.3 diff --git a/intercom/__init__.py b/intercom/__init__.py index dba9b528..feca8295 100644 --- a/intercom/__init__.py +++ b/intercom/__init__.py @@ -6,7 +6,7 @@ MultipleMatchingUsersError, RateLimitExceeded, ResourceNotFound, ServerError, ServiceUnavailableError, UnexpectedError, TokenUnauthorizedError) -__version__ = '3.0.4' +__version__ = '3.0.5' RELATED_DOCS_TEXT = "See https://github.com/jkeyes/python-intercom \ diff --git a/intercom/request.py b/intercom/request.py index ca664c6e..820f8599 100644 --- a/intercom/request.py +++ b/intercom/request.py @@ -7,21 +7,31 @@ import certifi import json import logging +import os import requests logger = logging.getLogger('intercom.request') +def configure_timeout(): + """Configure the request timeout.""" + timeout = os.getenv('INTERCOM_REQUEST_TIMEOUT', '90') + try: + return int(timeout) + except ValueError: + logger.warning('%s is not a valid timeout value.', timeout) + return 90 + + class Request(object): - timeout = 10 + timeout = configure_timeout() def __init__(self, http_method, path, http_session=None): self.http_method = http_method self.path = path self.http_session = http_session - def execute(self, base_url, auth, params): return self.send_request_to_path(base_url, auth, params) diff --git a/tests/unit/test_request.py b/tests/unit/test_request.py index bcd12405..fdfa7794 100644 --- a/tests/unit/test_request.py +++ b/tests/unit/test_request.py @@ -332,6 +332,25 @@ def it_needs_encoding_or_apparent_encoding(self): @istest def it_allows_the_timeout_to_be_changed(self): from intercom.request import Request - eq_(10, Request.timeout) - Request.timeout = 3 - eq_(3, Request.timeout) + try: + eq_(90, Request.timeout) + Request.timeout = 3 + eq_(3, Request.timeout) + finally: + Request.timeout = 90 + + @istest + def it_allows_the_timeout_to_be_configured(self): + import os + from intercom.request import configure_timeout + + # check the default + eq_(90, configure_timeout()) + + # override the default + os.environ['INTERCOM_REQUEST_TIMEOUT'] = '20' + eq_(20, configure_timeout()) + + # ignore bad timeouts, reset to default 90 + os.environ['INTERCOM_REQUEST_TIMEOUT'] = 'abc' + eq_(90, configure_timeout())