Bug 611 Fix unicode parsing at database 44/7044/2
authortierno <alfonso.tiernosepulveda@telefonica.com>
Wed, 5 Dec 2018 16:23:38 +0000 (16:23 +0000)
committertierno <alfonso.tiernosepulveda@telefonica.com>
Mon, 10 Dec 2018 09:48:23 +0000 (09:48 +0000)
Change-Id: I08ea1f463cabf776343d58d48fdff9066c483a89
Signed-off-by: tierno <alfonso.tiernosepulveda@telefonica.com>
openmanod
osm_ro/db_base.py

index 5e9cc92..4ba00fd 100755 (executable)
--- 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
index 7b48f43..e7a4fb3 100644 (file)
@@ -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)):