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 from sfa.rspecs.elements.element import Element
6 from sfa.rspecs.elements.node import Node
7 from sfa.rspecs.elements.sliver import Sliver
8 from sfa.rspecs.elements.location import Location
9 from sfa.rspecs.elements.hardware_type import HardwareType
10
11
12
13
14 from sfa.rspecs.elements.versions.slabv1Sliver import Slabv1Sliver
15 #from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
16 #from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
17 from sfa.rspecs.elements.lease import Lease
18
19 from sfa.planetlab.plxrn import xrn_to_hostname
20
21 class Slabv1Lease:
22
23     @staticmethod
24     def add_leases(xml, leases):
25         
26         network_elems = xml.xpath('//network')
27         if len(network_elems) > 0:
28             network_elem = network_elems[0]
29         elif len(leases) > 0:
30             network_urn = Xrn(leases[0]['component_id']).get_authority_urn().split(':')[0]
31             network_elem = xml.add_element('network', name = network_urn)
32         else:
33             network_elem = xml
34          
35         lease_elems = []       
36         for lease in leases:
37             lease_fields = ['lease_id', 'component_id', 'slice_id', 't_from', 't_until']
38             lease_elem = network_elem.add_instance('lease', lease, lease_fields)
39             lease_elems.append(lease_elem)
40
41
42     @staticmethod
43     def get_leases(xml, filter={}):
44         xpath = '//lease%s | //default:lease%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
45         lease_elems = xml.xpath(xpath)
46         return Slabv1Lease.get_lease_objs(lease_elems)
47
48     @staticmethod
49     def get_lease_objs(lease_elems):
50         leases = []    
51         for lease_elem in lease_elems:
52             lease = Lease(lease_elem.attrib, lease_elem)
53             if lease.get('lease_id'):
54                lease['lease_id'] = lease_elem.attrib['lease_id']
55             lease['component_id'] = lease_elem.attrib['component_id']
56             lease['slice_id'] = lease_elem.attrib['slice_id']
57             lease['t_from'] = lease_elem.attrib['t_from']
58             lease['t_until'] = lease_elem.attrib['t_until']
59
60             leases.append(lease)
61         return leases