@@ -268,7 +268,7 @@ class SSLClient:
268268
269269 def __init__ (self , user = 'admin' , password = None , host = None , ip = None , port = 443 , cabundle = None ,
270270 sslverifypeer = True , sslverifyhost = True , credentials = None ,
271- usercert = None , autoconnect = True , proxy = None ):
271+ usercert = None , autoconnect = True , proxy = None , timeout = None ):
272272 """:class:`SSLclient <SSLClient>` constructor.
273273
274274 :param user: Optional user name.
@@ -283,6 +283,7 @@ def __init__(self, user='admin', password=None, host=None, ip=None, port=443, ca
283283 :param usercert: Optional user certificate.
284284 :param autoconnect: Connect to the appliance at initialization
285285 :param proxy: https proxy url (socks5://user:pass@host:port http://user:password@host/)
286+ :param timeout: connection and read timeout in seconds
286287 """
287288
288289 self .user = user
@@ -303,6 +304,7 @@ def __init__(self, user='admin', password=None, host=None, ip=None, port=443, ca
303304 self .dl_crc = ""
304305 self .autoconnect = autoconnect
305306 self .proxy = proxy
307+ self .conn_options = {}
306308
307309 if host is None :
308310 raise MissingHost ("Host parameter must be provided" )
@@ -355,6 +357,9 @@ def __init__(self, user='admin', password=None, host=None, ip=None, port=443, ca
355357 if self .proxy :
356358 self .session .proxies = { "https" : self .proxy }
357359
360+ if timeout is not None :
361+ self .conn_options = { "timeout" : timeout }
362+
358363 self .logger = logging .getLogger ()
359364
360365 if self .autoconnect :
@@ -376,7 +381,7 @@ def connect(self):
376381 # user cert authentication
377382 request = self .session .get (
378383 self .baseurl + '/auth/admin.html?sslcert=1&app={}' .format (self .app ),
379- headers = self .headers )
384+ headers = self .headers , ** self . conn_options )
380385 else :
381386 # password authentication
382387 request = self .session .post (
@@ -385,7 +390,8 @@ def connect(self):
385390 'uid' :base64 .b64encode (self .user .encode ('utf-8' )),
386391 'pswd' :base64 .b64encode (self .password .encode ('utf-8' )),
387392 'app' :self .app },
388- headers = self .headers )
393+ headers = self .headers ,
394+ ** self .conn_options )
389395
390396 self .logger .log (logging .DEBUG , request .text )
391397
@@ -405,7 +411,8 @@ def connect(self):
405411 request = self .session .post (
406412 self .baseurl + '/api/auth/login' ,
407413 data = data ,
408- headers = self .headers )
414+ headers = self .headers ,
415+ ** self .conn_options )
409416
410417 self .logger .log (logging .DEBUG , request .text )
411418
@@ -435,7 +442,7 @@ def disconnect(self):
435442
436443 request = self .session .get (
437444 self .baseurl + '/api/auth/logout?sessionid=' + self .sessionid ,
438- headers = self .headers )
445+ headers = self .headers , ** self . conn_options )
439446
440447 if request .status_code == requests .codes .OK :
441448 self .logger .log (logging .INFO , 'Disconnected from %s' , self .host )
@@ -473,7 +480,7 @@ def send_command(self, command):
473480 request = self .session .get (
474481 self .baseurl + '/api/command?sessionid=' + self .sessionid +
475482 '&cmd=' + requests .compat .quote (command .encode ('utf-8' )), # manually done since we need %20 encoding
476- headers = self .headers )
483+ headers = self .headers , ** self . conn_options )
477484
478485 self .logger .log (logging .DEBUG , request .text )
479486
@@ -524,7 +531,8 @@ def download(self, filename):
524531 request = self .session .get (
525532 self .baseurl + '/api/download/tmp.file?sessionid=' + self .sessionid ,
526533 headers = self .headers ,
527- stream = True )
534+ stream = True ,
535+ ** self .conn_options )
528536
529537 if request .status_code == requests .codes .OK :
530538 size = 0
@@ -569,7 +577,8 @@ def upload(self, filename):
569577 request = self .session .post (
570578 self .baseurl + '/api/upload?sessionid=' + self .sessionid ,
571579 headers = headers ,
572- data = data )
580+ data = data ,
581+ ** self .conn_options )
573582
574583 uploadh .close ()
575584
0 commit comments