From 41aeec8a2198874f707b04d3b2d745850f7a047f Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Fri, 27 Apr 2012 16:05:26 -0400
Subject: [PATCH] replace deprecated urllib with urllib2, and automatic
 reconnection attempts

---
 python_apps/api_clients/api_client.py | 72 +++++++++++----------------
 1 file changed, 30 insertions(+), 42 deletions(-)

diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py
index dfe054c81..3e913aed9 100755
--- a/python_apps/api_clients/api_client.py
+++ b/python_apps/api_clients/api_client.py
@@ -30,10 +30,9 @@ def api_client_factory(config, logger=None):
         temp_logger = logger
     else:
         temp_logger = logging.getLogger()
+        
     if config["api_client"] == "airtime":
         return AirTimeApiClient(temp_logger)
-    elif config["api_client"] == "obp":
-        return ObpApiClient()
     else:
         temp_logger.info('API Client "'+config["api_client"]+'" not supported.  Please check your config file.\n')
         sys.exit()
@@ -175,18 +174,19 @@ class AirTimeApiClient(ApiClientInterface):
         
         while not successful_response:
             try:
-                response = urllib.urlopen(url)
-                data = response.read()
+                response = urllib2.urlopen(url).read()
                 successful_response = True
             except IOError, e:
                 logger.error('Error Authenticating with remote server: %s', e)
             except Exception, e:
                 logger.error('Couldn\'t connect to remote server. Is it running?')
                 logger.error("%s" % e)
+            
             if not successful_response:
+                logger.error("Error connecting to server, waiting 5 seconds and trying again.")
                 time.sleep(5)
             
-        return data
+        return response
         
 
     def __get_airtime_version(self, verbose = True):
@@ -293,8 +293,9 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%schedule_id%%", str(schedule_id))
             logger.debug(url)
             url = url.replace("%%api_key%%", self.config["api_key"])
-            response = urllib.urlopen(url)
-            response = json.loads(response.read())
+                        
+            response = self.get_response_from_server(url)
+            response = json.loads(response)
             logger.info("API-Status %s", response['status'])
             logger.info("API-Message %s", response['message'])
 
@@ -376,8 +377,7 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%djtype%%", dj_type)
             url = url.replace("%%password%%", password)
     
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             import traceback
@@ -434,8 +434,7 @@ class AirTimeApiClient(ApiClientInterface):
                 url = url.replace("%%showinstanceid%%", str(md['MDATA_KEY_TRACKNUMBER']))
                 url = url.replace("%%api_key%%", self.config["api_key"])
 
-                req = urllib2.Request(url)
-                response = urllib2.urlopen(req).read()
+                response = self.get_response_from_server(url)
                 response = json.loads(response)
                 logger.info("associate recorded %s", response)
 
@@ -460,9 +459,8 @@ class AirTimeApiClient(ApiClientInterface):
 
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%dir_id%%", dir_id)
-
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -476,9 +474,8 @@ class AirTimeApiClient(ApiClientInterface):
             url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["list_all_watched_dirs"])
 
             url = url.replace("%%api_key%%", self.config["api_key"])
-
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -493,9 +490,8 @@ class AirTimeApiClient(ApiClientInterface):
 
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%path%%", base64.b64encode(path))
-
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -510,9 +506,8 @@ class AirTimeApiClient(ApiClientInterface):
 
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%path%%", base64.b64encode(path))
-
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+           
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -528,8 +523,7 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%path%%", base64.b64encode(path))
 
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -542,9 +536,8 @@ class AirTimeApiClient(ApiClientInterface):
         try:
             url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["get_stream_setting"])
             
-            url = url.replace("%%api_key%%", self.config["api_key"])
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            url = url.replace("%%api_key%%", self.config["api_key"])         
+            response = self.get_response_from_server(url)
             response = json.loads(response)
         except Exception, e:
             response = None
@@ -565,8 +558,7 @@ class AirTimeApiClient(ApiClientInterface):
             
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%component%%", component)
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            get_response_from_server(url)
         except Exception, e:
             logger.error("Exception: %s", e)
     
@@ -582,8 +574,7 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%stream_id%%", stream_id)
             url = url.replace("%%boot_time%%", time)
             
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            response = self.get_response_from_server(url)
         except Exception, e:
             logger.error("Exception: %s", e)
             
@@ -596,8 +587,7 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%sourcename%%", sourcename)
             url = url.replace("%%status%%", status)
             
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
+            response = self.get_response_from_server(url)
         except Exception, e:
             logger.error("Exception: %s", e)
     
@@ -620,7 +610,8 @@ class AirTimeApiClient(ApiClientInterface):
             
             req = urllib2.Request(url, data)
             response = urllib2.urlopen(req).read()
-            logger.info("update file system mount: %s", response)
+            
+            logger.info("update file system mount: %s", json.loads(response))
         except Exception, e:
             import traceback
             top = traceback.format_exc()
@@ -639,9 +630,8 @@ class AirTimeApiClient(ApiClientInterface):
             url = url.replace("%%api_key%%", self.config["api_key"])
             url = url.replace("%%dir%%", base64.b64encode(dir))
             
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
-            logger.info("update file system mount: %s", response)
+            response = self.get_response_from_server(url)
+            logger.info("update file system mount: %s", json.loads(response))
         except Exception, e:
             import traceback
             top = traceback.format_exc()
@@ -658,10 +648,8 @@ class AirTimeApiClient(ApiClientInterface):
             
             url = url.replace("%%api_key%%", self.config["api_key"])
             
-            req = urllib2.Request(url)
-            response = urllib2.urlopen(req).read()
-            response = json.loads(response)
-            logger.info("Bootstrap info retrieved %s", response)
+            response = self.get_response_from_server(url)
+            logger.info("Bootstrap info retrieved %s", json.loads(response))
         except Exception, e:
             response = None
             import traceback