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 class SfiData: def __init__(self): pass def getAuthorityHrns(self, type=None): 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