ability for sliceview to display user slices instead of authority slices
[sface.git] / sface / sfidata.py
1 import os
2 from PyQt4.QtCore import *
3 from PyQt4.QtGui import *
4
5 from lxml import etree
6 from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord
7 from sfa.rspecs.rspec_parser import parse_rspec
8 from sface.config import config
9
10 class SfiData:
11     def __init__(self):
12         pass
13
14     def getAuthorityHrns(self, type=None):
15         names = []
16         if os.path.exists(config.getAuthorityListFile()):
17             xml = open(config.getAuthorityListFile()).read()
18             tree = etree.fromstring(xml)
19             records = tree.xpath("//recordlist/record")
20
21             for record in records:
22                 recType = record.attrib.get("type", None)
23                 recHrn = record.attrib.get("hrn", None)
24                 if (type==None) or (type==recType):
25                     names.append(recHrn)
26
27         return names
28
29     def getSliceRecord(self):
30         rec_file = config.getSliceRecordFile()
31         if os.path.exists(rec_file):
32             xml = open(rec_file).read()
33             rec = SliceRecord()
34             rec.load_from_string(xml)
35             return rec
36         return None
37
38     def getUserRecord(self):
39         rec_file = config.getUserRecordFile()
40         if os.path.exists(rec_file):
41             xml = open(rec_file).read()
42             rec = UserRecord()
43             rec.load_from_string(xml)
44             return rec
45         return None
46
47     def getUserSliceHrns(self):
48         rec = self.getUserRecord()
49         if rec:
50             return rec.get_field("slices")
51
52         return []
53
54     def purgeNonSliceResources(self, rspec):
55         # This can probably go away once the new slice manager is fully
56         # deployed.
57         networks = rspec.get_networks()
58         for network in networks:
59             all_nodes = rspec.get_nodes(network)
60             sliver_nodes = rspec.get_nodes_with_slivers(network)
61             available_nodes = [ node for node in all_nodes if node not in sliver_nodes ]
62
63             for node in available_nodes:
64                 node_elem = rspec.get_node_element(node, network)
65                 parent = node_elem.xpath("..")[0]
66                 parent.remove(node_elem)
67
68     def getSliceRSpec(self):
69         rspec_file = config.getSliceRSpecFile()
70         if os.path.exists(rspec_file):
71             xml = open(rspec_file).read()
72             rspec = parse_rspec(xml)
73
74             self.purgeNonSliceResources(rspec)
75
76             return rspec
77         return None
78
79     def getResourcesRSpec(self):
80         rspec_file = config.getResourcesRSpecFile()
81         if os.path.exists(rspec_file):
82             xml = open(rspec_file).read()
83             return parse_rspec(xml)
84         return None