[rhmessaging-commits] rhmessaging commits: r2285 - mgmt/trunk/mint/python/mint.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Aug 12 16:25:48 EDT 2008


Author: nunofsantos
Date: 2008-08-12 16:25:47 -0400 (Tue, 12 Aug 2008)
New Revision: 2285

Modified:
   mgmt/trunk/mint/python/mint/schemaparser.py
Log:
handle reserved words based on a defined mapping, not on a case-by-case basis

Modified: mgmt/trunk/mint/python/mint/schemaparser.py
===================================================================
--- mgmt/trunk/mint/python/mint/schemaparser.py	2008-08-12 18:54:32 UTC (rev 2284)
+++ mgmt/trunk/mint/python/mint/schemaparser.py	2008-08-12 20:25:47 UTC (rev 2285)
@@ -27,7 +27,18 @@
     self.dataTypesMap["bool"] = "BoolCol"
     self.dataTypesMap["sstr"] = self.dataTypesMap["lstr"] = "StringCol"
     self.dataTypesMap["map"] = "StringCol"
-    
+    # mapping for identifiers in the XML schema that are reserved words in either SQL or Python
+    self.reservedWords = {"in": "inRsv", "In": "InRsv", 
+                          "connection": "clientConnection", "Connection": "ClientConnection", 
+                          "other": "otherRsv"}
+
+  def renameReservedWord(self, name):
+    if (name in self.reservedWords.keys()):
+      print "Notice: %s is a reserved word, automatically translating to %s" % (name, self.reservedWords[name])
+      return self.reservedWords[name]
+    else:
+      return name
+ 
   def attrNameFromDbColumn(self, name, removeSuffix=""):
     return self.style.dbColumnToPythonAttr(name.replace(removeSuffix, ""))
   
@@ -50,8 +61,7 @@
 
   def generateForeignKeyAttrib(self, name, reference):
     params = "'%s', cascade='null'" % (reference)
-    if (name == "connection"):
-      name = "clientConnection"
+    name = self.renameReservedWord(name)
     self.generateAttrib(name, "ForeignKey", params)
     
   def generateHiLoAttrib(self, name, type):
@@ -78,43 +88,39 @@
     if (schemaName == "JournalStats"):
       print schemaName
     for elem in elements:
-      # special handling due to name conflict with SqlObject.connection
-      if (elem["@name"] == "connection"):
-        elem["@name"] = "clientConnection"
+      elemName = self.renameReservedWord(elem["@name"])
       if (elem["@type"] == "objId"):
-        if (elem["@name"].endswith("Ref")):
+        if (elemName.endswith("Ref")):
           reference = elem["@references"]
           # handle cases where the referenced class is in a different namespace (ie, contains a ".")
           namespaceIndex = reference.find(".")
           if (namespaceIndex > 0):
             reference = reference[namespaceIndex + 1:]
           reference = self.style.dbTableToPythonClass(reference)
-          if (reference == "Connection"):
-            reference = "ClientConnection"
+          reference = self.renameReservedWord(reference)
           attrib = reference[0].lower() + reference[1:]
           self.generateForeignKeyAttrib(attrib, reference)
           self.generateMultipleJoin(reference, self.currentClass)
         else:
           # if reference doesn't have a "Ref" prefix, handle as a large uint
-          self.generateAttrib(self.attrNameFromDbColumn(elem["@name"]), self.dataTypesMap["uint64"])
+          self.generateAttrib(self.attrNameFromDbColumn(elemName), self.dataTypesMap["uint64"])
       elif (elem["@type"].startswith("hilo")):
-        self.generateHiLoAttrib(self.attrNameFromDbColumn(elem["@name"]), self.dataTypesMap[elem["@type"]])
+        self.generateHiLoAttrib(self.attrNameFromDbColumn(elemName), self.dataTypesMap[elem["@type"]])
       elif (elem["@type"].startswith("mma")):
-        self.generateMinMaxAvgAttrib(self.attrNameFromDbColumn(elem["@name"]), self.dataTypesMap[elem["@type"]])
+        self.generateMinMaxAvgAttrib(self.attrNameFromDbColumn(elemName), self.dataTypesMap[elem["@type"]])
       else:
         args = ""
         if (elem["@type"] == "sstr"):
           args += "length=1000"
         elif (elem["@type"] == "lstr" or elem["@type"] == "ftable"):
           args += "length=4000"
-        self.generateAttrib(self.attrNameFromDbColumn(elem["@name"]), self.dataTypesMap[elem["@type"]], args)
+        self.generateAttrib(self.attrNameFromDbColumn(elemName), self.dataTypesMap[elem["@type"]], args)
 
     self.pythonOutput += "\n"
     self.pythonOutput += "  classInfos = dict() # brokerId => classInfo\n"
 
   def startClass(self, schemaName, stats=False):
-    if (schemaName == "Connection"):
-      schemaName = "ClientConnection"
+    schemaName = self.renameReservedWord(schemaName)
     if (stats):
       origPythonName = self.style.dbTableToPythonClass(schemaName)
       pythonName = self.style.dbTableToPythonClass(schemaName + "_stats")




More information about the rhmessaging-commits mailing list