Fixed minor bug when editing sdn-controller. Modified test_RO.py according to openman...
[osm/RO.git] / db_base.py
index f6a5c59..4a87721 100644 (file)
@@ -75,7 +75,7 @@ def _convert_datetime2str(var):
         for v in var:
             _convert_datetime2str(v)
 
-def _convert_bandwidth(data, reverse=False):
+def _convert_bandwidth(data, reverse=False, logger=None):
     '''Check the field bandwidth recursivelly and when found, it removes units and convert to number 
     It assumes that bandwidth is well formed
     Attributes:
@@ -87,7 +87,7 @@ def _convert_bandwidth(data, reverse=False):
     if type(data) is dict:
         for k in data.keys():
             if type(data[k]) is dict or type(data[k]) is tuple or type(data[k]) is list:
-                _convert_bandwidth(data[k], reverse)
+                _convert_bandwidth(data[k], reverse, logger)
         if "bandwidth" in data:
             try:
                 value=str(data["bandwidth"])
@@ -102,12 +102,13 @@ def _convert_bandwidth(data, reverse=False):
                     if value % 1000 == 0: data["bandwidth"]=str(value/1000) + " Gbps"
                     else: data["bandwidth"]=str(value) + " Mbps"
             except:
-                print "convert_bandwidth exception for type", type(data["bandwidth"]), " data", data["bandwidth"]
+                if logger:
+                    logger.error("convert_bandwidth exception for type '%s' data '%s'", type(data["bandwidth"]), data["bandwidth"])
                 return
     if type(data) is tuple or type(data) is list:
         for k in data:
             if type(k) is dict or type(k) is tuple or type(k) is list:
-                _convert_bandwidth(k, reverse)
+                _convert_bandwidth(k, reverse, logger)
 
 def _convert_str2boolean(data, items):
     '''Check recursively the content of data, and if there is an key contained in items, convert value from string to boolean 
@@ -124,8 +125,11 @@ def _convert_str2boolean(data, items):
                 _convert_str2boolean(data[k], items)
             if k in items:
                 if type(data[k]) is str:
-                    if   data[k]=="false" or data[k]=="False": data[k]=False
-                    elif data[k]=="true"  or data[k]=="True":  data[k]=True
+                    if   data[k]=="false" or data[k]=="False" or data[k]=="0": data[k]=False
+                    elif data[k]=="true"  or data[k]=="True" or data[k]=="1":  data[k]=True
+                elif type(data[k]) is int:
+                    if   data[k]==0: data[k]=False
+                    elif  data[k]==1:  data[k]=True
     if type(data) is tuple or type(data) is list:
         for k in data:
             if type(k) is dict or type(k) is tuple or type(k) is list:
@@ -164,10 +168,11 @@ class db_base():
             if database:    self.database = database
 
             self.con = mdb.connect(self.host, self.user, self.passwd, self.database)
-            print "DB: connected to %s@%s -> %s" % (self.user, self.host, self.database)
-        except mdb.Error, e:
-            raise db_base_Exception("Cannot connect to DB {}@{} -> {} Error {}: {}".format(self.user, self.host, self.database, e.args[0], e.args[1]),
-                                    code = HTTP_Internal_Server_Error )
+            self.logger.debug("DB: connected to '%s' at '%s@%s'", self.database, self.user, self.host)
+        except mdb.Error as e:
+            raise db_base_Exception("Cannot connect to DataBase '{}' at '{}@{}' Error {}: {}".format(
+                                    self.database, self.user, self.host, e.args[0], e.args[1]),
+                                    http_code = HTTP_Unauthorized )
         
     def get_db_version(self):
         ''' Obtain the database schema version.
@@ -260,6 +265,8 @@ class db_base():
         '''
         if data==None:
             return 'Null'
+        elif isinstance(data[1], str):
+            return json.dumps(data)
         else:
             return json.dumps(str(data))
     
@@ -272,6 +279,8 @@ class db_base():
         '''
         if data[1]==None:
             return str(data[0]) + "=Null"
+        elif isinstance(data[1], str):
+            return str(data[0]) + '=' + json.dumps(data[1])
         else:
             return str(data[0]) + '=' + json.dumps(str(data[1]))
     
@@ -284,24 +293,10 @@ class db_base():
         '''
         if data[1]==None:
             return str(data[0]) + " is Null"
-        
-#         if type(data[1]) is tuple:  #this can only happen in a WHERE_OR clause
-#             text =[]
-#             for d in data[1]:
-#                 if d==None:
-#                     text.append(str(data[0]) + " is Null")
-#                     continue
-#                 out=str(d)
-#                 if "'" not in out:
-#                     text.append( str(data[0]) + "='" + out + "'" )
-#                 elif '"' not in out:
-#                     text.append( str(data[0]) + '="' + out + '"' )
-#                 else:
-#                     text.append( str(data[0]) + '=' + json.dumps(out) )
-#             return " OR ".join(text)
-
-        out=str(data[1])
-        return str(data[0]) + '=' + json.dumps(out)
+        elif isinstance(data[1], str):
+            return str(data[0]) + '=' + json.dumps(data[1])
+        else:
+            return str(data[0]) + '=' + json.dumps(str(data[1]))
 
     def __tuple2db_format_where_not(self, data):
         '''Compose the needed text for a SQL WHERE(not). parameter 'data' is a pair tuple (A,B),
@@ -312,8 +307,10 @@ class db_base():
         '''
         if data[1]==None:
             return str(data[0]) + " is not Null"
-        out=str(data[1])
-        return str(data[0]) + '<>' + json.dumps(out)
+        elif isinstance(data[1], str):
+            return str(data[0]) + '<>' + json.dumps(data[1])
+        else:
+            return str(data[0]) + '<>' + json.dumps(str(data[1]))
     
     def __remove_quotes(self, data):
         '''remove single quotes ' of any string content of data dictionary'''