From 16876384173c217448f977faac6daa95702aea58 Mon Sep 17 00:00:00 2001 From: smbaker Date: Mon, 26 Sep 2011 19:00:01 -0700 Subject: [PATCH] class for retrieving data from files --- sface/sfidata.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sface/sfidata.py diff --git a/sface/sfidata.py b/sface/sfidata.py new file mode 100644 index 0000000..aa613c9 --- /dev/null +++ b/sface/sfidata.py @@ -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 -- 2.43.0