added RecordSpec class
[sfa.git] / geni / util / rspec.py
index 6c44074..0831d91 100644 (file)
@@ -178,14 +178,14 @@ class Rspec():
         def elementNode(tagname, rd):
             element = minidom.Element(tagname)
             for key in rd.keys():
-                if isinstance(rd[key], StringTypes):
-                    element.setAttribute(key, rd[key])
+                if isinstance(rd[key], StringTypes) or isinstance(rd[key], int):
+                    element.setAttribute(key, str(rd[key]))
                 elif isinstance(rd[key], dict):
                     child = elementNode(key, rd[key])
                     element.appendChild(child)
                 elif isinstance(rd[key], list):
                     for item in rd[key]:
-                        child = elementNode(key, item)
+                        child = elementNode(key, {key:item})
                         element.appendChild(child)
             return element
         
@@ -264,12 +264,27 @@ class Rspec():
                 self.filter(tagname, attribute, blacklist, whitelist, child) 
 
 
-       def validateDicts(self):
-               types = {
-                       'EInt' : int,
-                       'EString' : str,
-                       'EByteArray' : list,
-                       'EBoolean' : bool,
-                       'EFloat' : float,
-                       'EDate' : date}
+    def validateDicts(self):
+        types = {
+            'EInt' : int,
+            'EString' : str,
+            'EByteArray' : list,
+            'EBoolean' : bool,
+            'EFloat' : float,
+            'EDate' : date}
+
+
+
+class RecordSpec(Rspec):
+
+    def parseDict(self, rdict, include_doc = False):
+        """
+        Convert a dictionary into a dom object and store it.
+        """
+        self.rootNode = self.dict2dom(rdict, include_doc)
+
+    def dict2dom(self, rdict, include_doc = False):
+        record_dict = {'record': rdict}
+        return Rspec.dict2dom(self, record_dict, include_doc)
+        
 # vim:ts=4:expandtab