autopep8
[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.lease import Lease
6
7
8 class Iotlabv1Lease:
9
10     @staticmethod
11     def add_leases(xml, leases):
12
13         network_elems = xml.xpath('//network')
14         if len(network_elems) > 0:
15             network_elem = network_elems[0]
16         elif len(leases) > 0:
17             network_urn = Xrn(leases[0]['component_id']
18                               ).get_authority_urn().split(':')[0]
19             network_elem = xml.add_element('network', name=network_urn)
20         else:
21             network_elem = xml
22
23         lease_elems = []
24         for lease in leases:
25
26             lease_fields = ['lease_id', 'component_id',
27                             'slice_id', 'start_time', 'duration']
28             lease_elem = network_elem.add_instance(
29                 'lease', lease, lease_fields)
30             lease_elems.append(lease_elem)
31
32     @staticmethod
33     def get_leases(xml, filter=None):
34         if filter is None:
35             filter = {}
36         xpath = '//lease%s | //default:lease%s' % (
37             XpathFilter.xpath(filter), XpathFilter.xpath(filter))
38         lease_elems = xml.xpath(xpath)
39         return Iotlabv1Lease.get_lease_objs(lease_elems)
40
41     @staticmethod
42     def get_lease_objs(lease_elems):
43         leases = []
44         for lease_elem in lease_elems:
45             # get nodes
46             node_elems = lease_elem.xpath('./default:node | ./node')
47             for node_elem in node_elems:
48                 lease = Lease(lease_elem.attrib, lease_elem)
49                 lease['slice_id'] = lease_elem.attrib['slice_id']
50                 lease['start_time'] = lease_elem.attrib['start_time']
51                 lease['duration'] = lease_elem.attrib['duration']
52                 lease['component_id'] = node_elem.attrib['component_id']
53                 leases.append(lease)
54
55         return leases