X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=db_base.py;h=4a877213d2689d3d4dd7ce73f1e4eb370c88cd6e;hb=b12711fda02f2bac40a2cc1adfb5a27675bbad61;hp=265752f3ff29826fd9b988cd11d6ff6b99be6ae6;hpb=688b255f3dbde6b78593d0778fb81497341d04f4;p=osm%2FRO.git diff --git a/db_base.py b/db_base.py index 265752f3..4a877213 100644 --- a/db_base.py +++ b/db_base.py @@ -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: @@ -141,7 +145,7 @@ class db_base_Exception(Exception): class db_base(): tables_with_created_field=() - def __init__(self, host=None, user=None, passwd=None, database=None, log_name='db', log_level="ERROR"): + def __init__(self, host=None, user=None, passwd=None, database=None, log_name='db', log_level=None): self.host = host self.user = user self.passwd = passwd @@ -149,7 +153,8 @@ class db_base(): self.con = None self.log_level=log_level self.logger = logging.getLogger(log_name) - self.logger.setLevel( getattr(logging, log_level) ) + if self.log_level: + self.logger.setLevel( getattr(logging, log_level) ) def connect(self, host=None, user=None, passwd=None, database=None): '''Connect to specific data base. @@ -163,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. @@ -259,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)) @@ -271,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])) @@ -283,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), @@ -311,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'''