dont dispatch the xmlrpc request, use util.api.hanlde to handle either xmlrpc or...
[sfa.git] / geni / util / record.py
index 5829842..72d54c8 100644 (file)
@@ -5,6 +5,7 @@
 ##
 
 import report
+from types import StringTypes
 from gid import *
 from geni.util.rspec import *
 ##
@@ -75,7 +76,7 @@ class GeniRecord:
     # @param gid is a GID object or the string representation of a GID object
 
     def set_gid(self, gid):
-        if isinstance(gid, str):
+        if isinstance(gid, StringTypes):
             self.gid = gid
         else:
             self.gid = gid.save_to_string(save_parents=True)
@@ -105,6 +106,16 @@ class GeniRecord:
     # @param pl_info is a dictionary containing planetlab info
 
     def set_pl_info(self, pl_info):
+        if isinstance(pl_info, list):
+            pl_info = pl_info[0]
+        
+        # Convert any boolean strings to real bools
+        for key in pl_info:
+            if isinstance(pl_info[key], StringTypes):
+                if pl_info[key].lower() in ["true"]:
+                    pl_info[key] = True
+                elif pl_info[key].lower() in ["false"]:
+                    pl_info[key] = False   
         self.pl_info = pl_info
         self.dirty = True
 
@@ -114,6 +125,8 @@ class GeniRecord:
     # @param geni_info is a dictionary containing geni info
 
     def set_geni_info(self, geni_info):
+        if isinstance(geni_info, list):
+            geni_info = geni_info[0]
         self.geni_info = geni_info
         self.dirty = True
 
@@ -229,16 +242,15 @@ class GeniRecord:
 
     def load_from_dict(self, dict):
         self.set_name(dict['name'])
-
         gidstr = dict.get("gid", None)
         if gidstr:
             self.set_gid(dict['gid'])
 
         self.set_type(dict['type'])
         self.set_pointer(dict['pointer'])
-        if "pl_info" in dict:
+        if "pl_info" in dict and dict['pl_info']:
            self.set_pl_info(dict["pl_info"])
-        if "geni_info" in dict:
+        if "geni_info" in dict and dict['geni_info']:
            self.set_geni_info(dict["geni_info"])
 
     ##
@@ -260,10 +272,12 @@ class GeniRecord:
 
     def load_from_string(self, str):
         #dict = xmlrpclib.loads(str)[0][0]
+        
         record = RecordSpec()
         record.parseString(str)
-        dict = record.toDict()
-        self.load_from_dict(dict)
+        record_dict = record.toDict()
+        geni_dict = record_dict['record']
+        self.load_from_dict(geni_dict)
 
     ##
     # Dump the record to stdout
@@ -297,6 +311,10 @@ class GeniRecord:
 
     def getdict(self):
         info = {'hrn': self.name, 'type': self.type, 'gid': self.gid}
-        info.update(getattr(self, "geni_info", {}))
-        info.update(getattr(self, "pl_info", {}))
+        geni_info = getattr(self, "geni_info", {})
+        pl_info = getattr(self, "pl_info", {}) 
+        if geni_info:
+            info.update(geni_info)
+        if pl_info:
+            info.update(pl_info)
         return info