tolerate no slice name in sliverstatus screen
[sface.git] / sface / sfidata.py
index fb98ac5..0adda24 100644 (file)
@@ -1,10 +1,12 @@
 import os
+import pickle
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
 from lxml import etree
-from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord
-from sfa.rspecs.rspec_parser import parse_rspec
+from sfa.util.xrn import hrn_to_urn, urn_to_hrn
+from sfa.storage.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord
+from sfa.rspecs.rspec import RSpec
 from sface.config import config
 
 class SfiData:
@@ -47,7 +49,16 @@ class SfiData:
     def getUserSliceHrns(self):
         rec = self.getUserRecord()
         if rec:
-            return rec.get_field("slices")
+            slices = rec.get_field("slices")
+            if (type(slices)!=list) or (len(slices)<1):
+                return []
+
+            # get_field("slices") is returning [{"text": name}, {"text": name}, ...]
+            if (type(slices[0])==dict):
+                if "text" in slices[0]:
+                    slices = [x["text"] for x in slices]
+
+            return slices
 
         return []
 
@@ -69,9 +80,11 @@ class SfiData:
         rspec_file = config.getSliceRSpecFile()
         if os.path.exists(rspec_file):
             xml = open(rspec_file).read()
-            rspec = parse_rspec(xml)
 
-            self.purgeNonSliceResources(rspec)
+            if (xml.strip()==""):
+               return None
+
+            rspec = RSpec(rspec=xml)
 
             return rspec
         return None
@@ -80,5 +93,35 @@ class SfiData:
         rspec_file = config.getResourcesRSpecFile()
         if os.path.exists(rspec_file):
             xml = open(rspec_file).read()
-            return parse_rspec(xml)
+
+            if (xml.strip()==""):
+                return None
+
+            rspec = RSpec(rspec=xml)
+            return rspec
         return None
+
+    def getSliverStatus(self, slice=None):
+        if not slice:
+            slice = config.getSlice()
+
+        if not slice:
+            return None
+
+        filename = config.fullpath(slice+".sliverstatus")
+
+        if os.path.exists(filename):
+            data = open(filename).read()
+            return pickle.loads(data)
+
+        return None
+
+    def getSliceMgrVersion(self):
+        filename = config.fullpath("slicemgr.version")
+
+        if os.path.exists(filename):
+            data = open(filename).read()
+            return pickle.loads(data)
+
+        return None
+