@@ -673,7 +673,7 @@ class _Client(_http_client.JsonHttpClient):
673
673
674
674
_DEFAULT_AUTH_OVERRIDE = '_admin_'
675
675
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 ):
677
677
"""Creates a new _Client from the given parameters.
678
678
679
679
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):
686
686
auth_override: A dictionary representing auth variable overrides or None (optional).
687
687
Default value provides admin privileges. A None value here provides un-authenticated
688
688
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.
689
691
"""
690
692
_http_client .JsonHttpClient .__init__ (
691
693
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):
694
696
self ._auth_override = 'auth_variable_override={0}' .format (encoded )
695
697
else :
696
698
self ._auth_override = None
699
+ self ._timeout = timeout
697
700
698
701
@classmethod
699
702
def from_app (cls , app ):
700
703
"""Creates a new _Client for a given App"""
704
+ credential = app .credential .get_credential ()
701
705
db_url = cls ._get_db_url (app )
702
706
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 )
705
709
706
710
@classmethod
707
711
def _get_db_url (cls , app ):
@@ -737,6 +741,10 @@ def _get_auth_override(cls, app):
737
741
def auth_override (self ):
738
742
return self ._auth_override
739
743
744
+ @property
745
+ def timeout (self ):
746
+ return self ._timeout
747
+
740
748
def request (self , method , url , ** kwargs ):
741
749
"""Makes an HTTP call using the Python requests library.
742
750
@@ -762,6 +770,8 @@ def request(self, method, url, **kwargs):
762
770
else :
763
771
params = self ._auth_override
764
772
kwargs ['params' ] = params
773
+ if self ._timeout :
774
+ kwargs ['timeout' ] = self ._timeout
765
775
try :
766
776
return super (_Client , self ).request (method , url , ** kwargs )
767
777
except requests .exceptions .RequestException as error :
0 commit comments