+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