class for retrieving data from files
authorsmbaker <smbaker@fc8clean.lan>
Tue, 27 Sep 2011 02:00:01 +0000 (19:00 -0700)
committersmbaker <smbaker@fc8clean.lan>
Tue, 27 Sep 2011 02:00:01 +0000 (19:00 -0700)
sface/sfidata.py [new file with mode: 0644]

diff --git a/sface/sfidata.py b/sface/sfidata.py
new file mode 100644 (file)
index 0000000..aa613c9
--- /dev/null
@@ -0,0 +1,85 @@
+import os
+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 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()
+            tree = etree.fromstring(xml)
+            records = tree.xpath("//recordlist/record")
+
+            for record in records:
+                recType = record.attrib.get("type", None)
+                recHrn = record.attrib.get("hrn", None)
+                if (type==None) or (type==recType):
+                    names.append(recHrn)
+
+        return names
+
+    def getSliceRecord(self):
+        rec_file = config.getSliceRecordFile()
+        if os.path.exists(rec_file):
+            xml = open(rec_file).read()
+            rec = SliceRecord()
+            rec.load_from_string(xml)
+            return rec
+        return None
+
+    def purgeNonSliceResources(self, rspec):
+        networks = rspec.get_networks()
+        for network in networks:
+            all_nodes = rspec.get_nodes(network)
+            sliver_nodes = rspec.get_nodes_with_slivers(network)
+            available_nodes = [ node for node in all_nodes if node not in sliver_nodes ]
+
+            for node in available_nodes:
+                node_elem = rspec.get_node_element(node, network)
+                parent = node_elem.xpath("..")[0]
+                parent.remove(node_elem)
+
+    def getSliceRSpec(self):
+        rspec_file = config.getSliceRSpecFile()
+        if os.path.exists(rspec_file):
+            xml = open(rspec_file).read()
+            rspec = parse_rspec(xml)
+
+            self.purgeNonSliceResources(rspec)
+
+            return rspec
+        return None
+
+    def getResourcesRSpec(self):
+        rspec_file = config.getResourcesRSpecFile()
+        if os.path.exists(rspec_file):
+            xml = open(rspec_file).read()
+            return parse_rspec(xml)
+        return None