from sfa.util.sfalogging import logger
from sfa.util.xml import XpathFilter
from sfa.util.xrn import Xrn
+from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.node import Node
+from sfa.rspecs.elements.node import NodeElement
from sfa.rspecs.elements.sliver import Sliver
from sfa.rspecs.elements.location import Location
from sfa.rspecs.elements.hardware_type import HardwareType
from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
from sfa.rspecs.elements.lease import Lease
+from sfa.rspecs.elements.channel import Channel
+
-from sfa.nitos.nitosxrn import xrn_to_hostname
class NITOSv1Lease:
lease_elems = []
for lease in grouped_leases:
- #lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration']
+ #lease[0]['start_time'] = datetime_to_string(utcparse(lease[0]['start_time']))
+
lease_fields = ['slice_id', 'start_time', 'duration']
lease_elem = network_elem.add_instance('lease', lease[0], lease_fields)
lease_elems.append(lease_elem)
# add reserved channels of this lease
#channels = [{'channel_id': 1}, {'channel_id': 2}]
for channel in channels:
+ #channel['start_time'] = datetime_to_string(utcparse(channel['start_time']))
if channel['slice_id'] == lease[0]['slice_id'] and channel['start_time'] == lease[0]['start_time'] and channel['duration'] == lease[0]['duration']:
- lease_elem.add_instance('channel', channel, ['channel_num'])
+ lease_elem.add_instance('channel', channel, ['component_id'])
@staticmethod
- def get_leases(xml, filter={}):
+ def get_leases(xml, filter=None):
+ if filter is None: filter={}
xpath = '//lease%s | //default:lease%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
lease_elems = xml.xpath(xpath)
return NITOSv1Lease.get_lease_objs(lease_elems)
@staticmethod
def get_lease_objs(lease_elems):
leases = []
+ channels = []
for lease_elem in lease_elems:
- lease = Lease(lease_elem.attrib, lease_elem)
- if lease.get('lease_id'):
- lease['lease_id'] = lease_elem.attrib['lease_id']
- lease['component_id'] = lease_elem.attrib['component_id']
- lease['slice_id'] = lease_elem.attrib['slice_id']
- lease['start_time'] = lease_elem.attrib['start_time']
- lease['duration'] = lease_elem.attrib['duration']
+ #get nodes
+ node_elems = lease_elem.xpath('./default:node | ./node')
+ for node_elem in node_elems:
+ lease = Lease(lease_elem.attrib, lease_elem)
+ lease['slice_id'] = lease_elem.attrib['slice_id']
+ #lease['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
+ lease['start_time'] = lease_elem.attrib['start_time']
+ lease['duration'] = lease_elem.attrib['duration']
+ lease['component_id'] = node_elem.attrib['component_id']
+ lease['type'] = 'node'
+ leases.append(lease)
+ #get channels
+ channel_elems = lease_elem.xpath('./default:channel | ./channel')
+ for channel_elem in channel_elems:
+ channel = Channel(channel_elem.attrib, channel_elem)
+ channel['slice_id'] = lease_elem.attrib['slice_id']
+ #channel['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
+ channel['start_time'] = lease_elem.attrib['start_time']
+ channel['duration'] = lease_elem.attrib['duration']
+ channel['component_id'] = channel_elem.attrib['component_id']
+ channel['type'] = 'channel'
+ channels.append(channel)
- leases.append(lease)
- return leases
+ return leases + channels