371e47c0b3e90fcdaf149d3b79d65c79cb653087
[sfa.git] / sfa / rspecs / elements / versions / sfav1Lease.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 NodeElement
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 from sfa.rspecs.elements.disk_image import DiskImage
11 from sfa.rspecs.elements.interface import Interface
12 from sfa.rspecs.elements.bwlimit import BWlimit
13 from sfa.rspecs.elements.pltag import PLTag
14 from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
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 SFAv1Lease:
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', 'start_time', 'duration']
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 SFAv1Lease.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['start_time'] = lease_elem.attrib['start_time']
58             lease['duration'] = lease_elem.attrib['duration']
59
60             leases.append(lease)
61         return leases            
62