X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Fsfidata.py;h=6f7b26528d5f52eb7a0bcad1596c95106090be39;hp=340548391a05f749231cd60d7e7eab2aa92a619e;hb=9e8c8ba7acb8cfaffade59e58c9f5fff762d56dc;hpb=b4479edcd8022bc11805758a575f7ca96dcdfc04 diff --git a/sface/sfidata.py b/sface/sfidata.py index 3405483..6f7b265 100644 --- a/sface/sfidata.py +++ b/sface/sfidata.py @@ -1,3 +1,4 @@ +import json import os import pickle from PyQt4.QtCore import * @@ -5,74 +6,9 @@ from PyQt4.QtGui import * from lxml import etree 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 -# 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 add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False): - # return self.version.add_slivers(slivers, network, sliver_urn, no_dupes) - - def merge_node(self, source_node_tag, network, no_dupes=False): - return self.version.merge_node(source_node_tag, network, no_dupes) - - # sfav1.add_slivers isn't working for us... - def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False): - # add slice name to network tag - network_tags = self.xml.xpath('//network') - if network_tags: - network_tag = network_tags[0] - network_tag.set('slice', urn_to_hrn(sliver_urn)[0]) - - # add slivers - for sliver in slivers: - node_elem = self.get_node_element(sliver['hostname'], network) - if not node_elem: continue - sliver_elem = etree.SubElement(node_elem, 'sliver') - if 'tags' in sliver: - for tag in sliver['tags']: - etree.SubElement(sliver_elem, tag['tagname']).text = value=tag['value'] - class SfiData: def __init__(self): pass @@ -92,28 +28,35 @@ class SfiData: return names - def getSliceRecord(self): - rec_file = config.getSliceRecordFile() + def getRecord(self, rec_file): if os.path.exists(rec_file): + from sfa.storage.record import Record xml = open(rec_file).read() - rec = SliceRecord() - rec.load_from_string(xml) - return rec - return None + rec = Record(xml=xml) + return rec.todict() + return None + + def getSliceRecord(self): + rec_file = config.getSliceRecordFile() + return self.getRecord(rec_file) 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 + return self.getRecord(rec_file) def getUserSliceHrns(self): rec = self.getUserRecord() if rec: - return rec.get_field("slices") + 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 [] @@ -135,9 +78,11 @@ class SfiData: rspec_file = config.getSliceRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - rspec = SfaceRSpec(rspec=xml) #rspec = parse_rspec(xml) - self.purgeNonSliceResources(rspec) + if (xml.strip()==""): + return None + + rspec = RSpec(rspec=xml) return rspec return None @@ -146,7 +91,11 @@ class SfiData: rspec_file = config.getResourcesRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - rspec = SfaceRSpec(rspec=xml) #rspec= parse_rspec(xml) + + if (xml.strip()==""): + return None + + rspec = RSpec(rspec=xml) return rspec return None @@ -154,11 +103,21 @@ class SfiData: if not slice: slice = config.getSlice() + if not slice: + return None + filename = config.fullpath(slice+".sliverstatus") if os.path.exists(filename): data = open(filename).read() - return pickle.loads(data) + try: + if hasattr(json, "loads"): + return json.loads(data) # python 2.6 + else: + return json.read(data) # python 2.5 + except: + print "Exception in getSliverStatus" + return None return None