33For example internet radios from: Medion, Hama, Auna, ...
44"""
55import requests
6+ from requests .adapters import HTTPAdapter
7+ from requests .packages .urllib3 .util .retry import Retry
68import logging
79import traceback
810from lxml import objectify
@@ -26,11 +28,17 @@ def __init__(self, fsapi_device_url, pin, timeout=DEFAULT_TIMEOUT_IN_SECONDS):
2628 self .fsapi_device_url = fsapi_device_url
2729 self .timeout = timeout
2830
31+ self .session = requests .Session ()
32+ retry = Retry (connect = 3 , backoff_factor = 0.5 )
33+ adapter = HTTPAdapter (max_retries = retry )
34+ self .session .mount ('http://' , adapter )
35+ self .session .mount ('https://' , adapter )
36+
2937 self .webfsapi = self .get_fsapi_endpoint ()
3038 self .sid = self .create_session ()
3139
3240 def get_fsapi_endpoint (self ):
33- endpoint = requests . get (self .fsapi_device_url , timeout = self .timeout )
41+ endpoint = self . session . get (self .fsapi_device_url , timeout = self .timeout )
3442 doc = objectify .fromstring (endpoint .content )
3543 return doc .webfsapi .text
3644
@@ -54,7 +62,7 @@ def call(self, path, extra=None):
5462
5563 params .update (** extra )
5664
57- result = requests . get ('%s/%s' % (self .webfsapi , path ), params = params , timeout = self .timeout )
65+ result = self . session . get ('%s/%s' % (self .webfsapi , path ), params = params , timeout = self .timeout )
5866 if result .status_code == 404 :
5967 return None
6068
0 commit comments