class for retrieving data from files
[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
7 from sfa.rspecs.rspec_parser import parse_rspec
8 from sface.config import config
9 from distutils.version import LooseVersion
10 from sfa.util.version import version_core
11
12 class SfiData:
13     def __init__(self):
14         pass
15
16     def getAuthorityHrns_old(self, type=None):
17         # DEPRECATED
18         names = []
19         i=0
20         while os.path.exists(config.getAuthorityListRecordFile(i)):
21             rec_file = config.getAuthorityListRecordFile(i)
22             xml = open(rec_file).read()
23             rec = SfaRecord(string = xml)
24             if (type==None) or (type==rec.get_type()):
25                 names.append(rec.get_name())
26             i=i+1
27
28         return names
29
30     def getAuthorityHrns(self, type=None):
31         if LooseVersion(version_core()['code_tag']) <= LooseVersion("1.0-35"):
32             return self.getAuthorityHrns_old(type)
33
34         names = []
35         if os.path.exists(config.getAuthorityListFile()):
36             xml = open(config.getAuthorityListFile()).read()
37             tree = etree.fromstring(xml)
38             records = tree.xpath("//recordlist/record")
39
40             for record in records:
41                 recType = record.attrib.get("type", None)
42                 recHrn = record.attrib.get("hrn", None)
43                 if (type==None) or (type==recType):
44                     names.append(recHrn)
45
46         return names
47
48     def getSliceRecord(self):
49         rec_file = config.getSliceRecordFile()
50         if os.path.exists(rec_file):
51             xml = open(rec_file).read()
52             rec = SliceRecord()
53             rec.load_from_string(xml)
54             return rec
55         return None
56
57     def purgeNonSliceResources(self, rspec):
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 ]
63
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)
68
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)
74
75             self.purgeNonSliceResources(rspec)
76
77             return rspec
78         return None
79
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)
85         return None