@@ -673,7 +673,7 @@ class _Client(_http_client.JsonHttpClient):
673673
674674 _DEFAULT_AUTH_OVERRIDE = '_admin_'
675675
676- def __init__ (self , credential , base_url , auth_override = _DEFAULT_AUTH_OVERRIDE ):
676+ def __init__ (self , credential , base_url , auth_override = _DEFAULT_AUTH_OVERRIDE , timeout = None ):
677677 """Creates a new _Client from the given parameters.
678678
679679 This exists primarily to enable testing. For regular use, obtain _Client instances by
@@ -686,6 +686,8 @@ def __init__(self, credential, base_url, auth_override=_DEFAULT_AUTH_OVERRIDE):
686686 auth_override: A dictionary representing auth variable overrides or None (optional).
687687 Default value provides admin privileges. A None value here provides un-authenticated
688688 guest privileges.
689+ timeout: HTTP request timeout in seconds (optional). If not set connections will never
690+ timeout, which is the default behavior of the underlying requests library.
689691 """
690692 _http_client .JsonHttpClient .__init__ (
691693 self , credential = credential , base_url = base_url , headers = {'User-Agent' : _USER_AGENT })
@@ -694,14 +696,16 @@ def __init__(self, credential, base_url, auth_override=_DEFAULT_AUTH_OVERRIDE):
694696 self ._auth_override = 'auth_variable_override={0}' .format (encoded )
695697 else :
696698 self ._auth_override = None
699+ self ._timeout = timeout
697700
698701 @classmethod
699702 def from_app (cls , app ):
700703 """Creates a new _Client for a given App"""
704+ credential = app .credential .get_credential ()
701705 db_url = cls ._get_db_url (app )
702706 auth_override = cls ._get_auth_override (app )
703- credential = app .credential . get_credential ( )
704- return _Client (credential , db_url , auth_override )
707+ timeout = app .options . get ( 'httpTimeout' )
708+ return _Client (credential , db_url , auth_override , timeout )
705709
706710 @classmethod
707711 def _get_db_url (cls , app ):
@@ -737,6 +741,10 @@ def _get_auth_override(cls, app):
737741 def auth_override (self ):
738742 return self ._auth_override
739743
744+ @property
745+ def timeout (self ):
746+ return self ._timeout
747+
740748 def request (self , method , url , ** kwargs ):
741749 """Makes an HTTP call using the Python requests library.
742750
@@ -762,6 +770,8 @@ def request(self, method, url, **kwargs):
762770 else :
763771 params = self ._auth_override
764772 kwargs ['params' ] = params
773+ if self ._timeout :
774+ kwargs ['timeout' ] = self ._timeout
765775 try :
766776 return super (_Client , self ).request (method , url , ** kwargs )
767777 except requests .exceptions .RequestException as error :
0 commit comments