From: tierno Date: Wed, 5 Dec 2018 16:23:38 +0000 (+0000) Subject: Bug 611 Fix unicode parsing at database X-Git-Tag: v5.0.3~14 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=refs%2Fchanges%2F44%2F7044%2F2;p=osm%2FRO.git Bug 611 Fix unicode parsing at database Change-Id: I08ea1f463cabf776343d58d48fdff9066c483a89 Signed-off-by: tierno --- diff --git a/openmanod b/openmanod index 5e9cc92f..4ba00fd0 100755 --- a/openmanod +++ b/openmanod @@ -50,8 +50,8 @@ import osm_ro __author__ = "Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ = "$26-aug-2014 11:09:29$" -__version__ = "0.6.00" -version_date = "Nov 2018" +__version__ = "0.6.01" +version_date = "Dec 2018" database_version = 34 # expected database schema version global global_config diff --git a/osm_ro/db_base.py b/osm_ro/db_base.py index 7b48f43c..e7a4fb32 100644 --- a/osm_ro/db_base.py +++ b/osm_ro/db_base.py @@ -169,11 +169,11 @@ class db_base(): def escape(self, value): return self.con.escape(value) - def escape_string(self, value): + if isinstance(value, "unicode"): + value = value.encode("utf8") return self.con.escape_string(value) - def get_db_version(self): ''' Obtain the database schema version. Return: (negative, text) if error or version 0.0 where schema_version table is missing @@ -274,13 +274,13 @@ class db_base(): httperrors.Internal_Server_Error) def __str2db_format(self, data): - '''Convert string data to database format. + """Convert string data to database format. If data is None it returns the 'Null' text, otherwise it returns the text surrounded by quotes ensuring internal quotes are escaped. - ''' - if data==None: + """ + if data is None: return 'Null' - elif isinstance(data[1], str): + elif isinstance(data[1], (str, unicode)): return json.dumps(data) else: return json.dumps(str(data)) @@ -294,9 +294,9 @@ class db_base(): B can be also a dict with special keys: {"INCREMENT": NUMBER}, then it produce "A=A+NUMBER" """ - if data[1] == None: + if data[1] is None: return str(data[0]) + "=Null" - elif isinstance(data[1], str): + elif isinstance(data[1], (str, unicode)): return str(data[0]) + '=' + json.dumps(data[1]) elif isinstance(data[1], dict): if "INCREMENT" in data[1]: @@ -341,9 +341,13 @@ class db_base(): for v2 in v: if v2 is None: cmd2.append(k.replace("=", " is").replace("<>", " is not") + " Null") + elif isinstance(v2, (str, unicode)): + cmd2.append(k + json.dumps(v2)) else: cmd2.append(k + json.dumps(str(v2))) cmd.append("(" + " OR ".join(cmd2) + ")") + elif isinstance(v, (str, unicode)): + cmd.append(k + json.dumps(v)) else: cmd.append(k + json.dumps(str(v))) elif isinstance(data, (tuple, list)):