Adding and formatting documentation for Sphinx.
[sfa.git] / sfa / rspecs / elements / versions / iotlabv1Lease.py
1 from sfa.util.sfalogging import logger
2 from sfa.util.xml import XpathFilter
3 from sfa.util.xrn import Xrn
4
5 #from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
6 #from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
7 from sfa.rspecs.elements.lease import Lease
8
9
10
11 class Iotlabv1Lease:
12
13     @staticmethod
14     def add_leases(xml, leases):
15
16         network_elems = xml.xpath('//network')
17         if len(network_elems) > 0:
18             network_elem = network_elems[0]
19         elif len(leases) > 0:
20             network_urn = Xrn(leases[0]['component_id']).get_authority_urn().split(':')[0]
21             network_elem = xml.add_element('network', name = network_urn)
22         else:
23             network_elem = xml
24
25         lease_elems = []
26         for lease in leases:
27
28             lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration']
29             lease_elem = network_elem.add_instance('lease', lease, lease_fields)
30             lease_elems.append(lease_elem)
31
32
33     @staticmethod
34     def get_leases(xml, filter={}):
35         xpath = '//lease%s | //default:lease%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
36         lease_elems = xml.xpath(xpath)
37         return Iotlabv1Lease.get_lease_objs(lease_elems)
38
39     @staticmethod
40     def get_lease_objs(lease_elems):
41         leases = []
42         for lease_elem in lease_elems:
43             #get nodes
44             node_elems = lease_elem.xpath('./default:node | ./node')
45             for node_elem in node_elems:
46                  lease = Lease(lease_elem.attrib, lease_elem)
47                  lease['slice_id'] = lease_elem.attrib['slice_id']
48                  lease['start_time'] = lease_elem.attrib['start_time']
49                  lease['duration'] = lease_elem.attrib['duration']
50                  lease['component_id'] = node_elem.attrib['component_id']
51                  leases.append(lease)
52
53         return leases