X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Fsfidata.py;h=284c090f6db24a848efda857b60bc3fc0c00cf6c;hp=aa613c9ec956c514af9c01fbfd52cfdd6a2c3fba;hb=ebc6f2825a983bf1cef33831349643577a32336c;hpb=16876384173c217448f977faac6daa95702aea58 diff --git a/sface/sfidata.py b/sface/sfidata.py index aa613c9..284c090 100644 --- a/sface/sfidata.py +++ b/sface/sfidata.py @@ -1,36 +1,74 @@ 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.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord +from sfa.rspecs.rspec import RSpec from sface.config import config -from distutils.version import LooseVersion -from sfa.util.version import version_core + +# SfaceRSpec +# temporary, until these references are tracked down and replaced with +# rspec.version + +class SfaceRSpec(RSpec): + def __init__(self, rspec="", version=None, user_options={}): + RSpec.__init__(self, rspec, version, user_options) + + def get_networks(self): + return self.version.get_networks() + + def get_nodes(self, network): + return self.version.get_nodes(network) + + def get_nodes_with_slivers(self, network): + return self.version.get_nodes_with_slivers(network) + + def get_node_element(self, node, network=None): + return self.version.get_node_element(node, network) + + def get_default_sliver_attributes(self, network): + return self.version.get_default_sliver_attributes(network) + + def get_sliver_attributes(self, node, network): + return self.version.get_sliver_attributes(node, network) + + def remove_slivers(self, slivers, network=None, no_dupes=False): + return self.version.remove_slivers(slivers, network, no_dupes) + + def add_default_sliver_attribute(self, name, value, network=None): + self.version.add_default_sliver_attribute(name, value, network) + + def add_sliver_attribute(self, hostname, name, value, network=None): + self.version.add_sliver_attribute(hostname, name, value, network) + + def remove_default_sliver_attribute(self, name, value, network=None): + self.version.remove_default_sliver_attribute(name, value, network) + + def remove_sliver_attribute(self, hostname, name, value, network=None): + self.version.remove_sliver_attribute(hostname, name, value, network) + + def merge_node(self, source_node_tag, network, no_dupes=False): + return self.version.merge_node(source_node_tag, network, no_dupes) + + def get_node_sliver_type(self, node, network): + node = self.get_node_element(node, network) + if node is None: + return "" + + sliver_types = node.xpath("sliver_type") + if len(sliver_types)>0: + return sliver_types[0].attrib.get("name", "") + + return "" 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() @@ -54,7 +92,34 @@ class SfiData: return rec return None + def getUserRecord(self): + rec_file = config.getUserRecordFile() + if os.path.exists(rec_file): + xml = open(rec_file).read() + rec = UserRecord() + rec.load_from_string(xml) + return rec + return None + + 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 +135,9 @@ class SfiData: rspec_file = config.getSliceRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - rspec = parse_rspec(xml) + rspec = SfaceRSpec(rspec=xml) #rspec = parse_rspec(xml) - self.purgeNonSliceResources(rspec) + #self.purgeNonSliceResources(rspec) return rspec return None @@ -81,5 +146,28 @@ class SfiData: rspec_file = config.getResourcesRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - return parse_rspec(xml) + rspec = SfaceRSpec(rspec=xml) #rspec= parse_rspec(xml) + return rspec + return None + + def getSliverStatus(self, slice=None): + if not slice: + slice = config.getSlice() + + filename = config.fullpath(slice+".sliverstatus") + + if os.path.exists(filename): + data = open(filename).read() + return pickle.loads(data) + 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 +