3 from PyQt4.QtCore import *
4 from PyQt4.QtGui import *
7 from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord
8 from sfa.rspecs.rspec_parser import parse_rspec
9 from sface.config import config
15 def getAuthorityHrns(self, type=None):
17 if os.path.exists(config.getAuthorityListFile()):
18 xml = open(config.getAuthorityListFile()).read()
19 tree = etree.fromstring(xml)
20 records = tree.xpath("//recordlist/record")
22 for record in records:
23 recType = record.attrib.get("type", None)
24 recHrn = record.attrib.get("hrn", None)
25 if (type==None) or (type==recType):
30 def getSliceRecord(self):
31 rec_file = config.getSliceRecordFile()
32 if os.path.exists(rec_file):
33 xml = open(rec_file).read()
35 rec.load_from_string(xml)
39 def getUserRecord(self):
40 rec_file = config.getUserRecordFile()
41 if os.path.exists(rec_file):
42 xml = open(rec_file).read()
44 rec.load_from_string(xml)
48 def getUserSliceHrns(self):
49 rec = self.getUserRecord()
51 return rec.get_field("slices")
55 def purgeNonSliceResources(self, rspec):
56 # This can probably go away once the new slice manager is fully
58 networks = rspec.get_networks()
59 for network in networks:
60 all_nodes = rspec.get_nodes(network)
61 sliver_nodes = rspec.get_nodes_with_slivers(network)
62 available_nodes = [ node for node in all_nodes if node not in sliver_nodes ]
64 for node in available_nodes:
65 node_elem = rspec.get_node_element(node, network)
66 parent = node_elem.xpath("..")[0]
67 parent.remove(node_elem)
69 def getSliceRSpec(self):
70 rspec_file = config.getSliceRSpecFile()
71 if os.path.exists(rspec_file):
72 xml = open(rspec_file).read()
73 rspec = parse_rspec(xml)
75 self.purgeNonSliceResources(rspec)
80 def getResourcesRSpec(self):
81 rspec_file = config.getResourcesRSpecFile()
82 if os.path.exists(rspec_file):
83 xml = open(rspec_file).read()
84 return parse_rspec(xml)
87 def getSliverStatus(self, slice=None):
89 slice = config.getSlice()
91 filename = config.fullpath(slice+".sliverstatus")
93 if os.path.exists(filename):
94 data = open(filename).read()
95 return pickle.loads(data)