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