remove sqlalchemy dependency
[sface.git] / sface / sfidata.py
index aa613c9..6f7b265 100644 (file)
@@ -1,36 +1,19 @@
+import json
 import os
+import pickle
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
 from lxml import etree
-from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord
-from sfa.rspecs.rspec_parser import parse_rspec
+from sfa.util.xrn import hrn_to_urn, urn_to_hrn
+from sfa.rspecs.rspec import RSpec
 from sface.config import config
-from distutils.version import LooseVersion
-from sfa.util.version import version_core
 
 class SfiData:
     def __init__(self):
         pass
 
-    def getAuthorityHrns_old(self, type=None):
-        # DEPRECATED
-        names = []
-        i=0
-        while os.path.exists(config.getAuthorityListRecordFile(i)):
-            rec_file = config.getAuthorityListRecordFile(i)
-            xml = open(rec_file).read()
-            rec = SfaRecord(string = xml)
-            if (type==None) or (type==rec.get_type()):
-                names.append(rec.get_name())
-            i=i+1
-
-        return names
-
     def getAuthorityHrns(self, type=None):
-        if LooseVersion(version_core()['code_tag']) <= LooseVersion("1.0-35"):
-            return self.getAuthorityHrns_old(type)
-
         names = []
         if os.path.exists(config.getAuthorityListFile()):
             xml = open(config.getAuthorityListFile()).read()
@@ -45,16 +28,41 @@ class SfiData:
 
         return names
 
-    def getSliceRecord(self):
-        rec_file = config.getSliceRecordFile()
+    def getRecord(self, rec_file):
         if os.path.exists(rec_file):
+            from sfa.storage.record import Record
             xml = open(rec_file).read()
-            rec = SliceRecord()
-            rec.load_from_string(xml)
-            return rec
-        return None
+            rec = Record(xml=xml)
+            return rec.todict()
+        return None         
+
+    def getSliceRecord(self):
+        rec_file = config.getSliceRecordFile()
+        return self.getRecord(rec_file)
+
+    def getUserRecord(self):
+        rec_file = config.getUserRecordFile()
+        return self.getRecord(rec_file)
+
+    def getUserSliceHrns(self):
+        rec = self.getUserRecord()
+        if rec:
+            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 []
 
     def purgeNonSliceResources(self, rspec):
+        # This can probably go away once the new slice manager is fully
+        # deployed.
         networks = rspec.get_networks()
         for network in networks:
             all_nodes = rspec.get_nodes(network)
@@ -70,9 +78,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
@@ -81,5 +91,42 @@ 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()
+            try:
+                if hasattr(json, "loads"):
+                     return json.loads(data)   # python 2.6
+                else:
+                     return json.read(data)    # python 2.5
+            except:
+                print "Exception in getSliverStatus"
+                return None
+
+        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
+