From: Tony Mack Date: Tue, 25 Oct 2011 23:47:01 +0000 (-0400) Subject: added 'element' class variable X-Git-Tag: sfa-1.1-1~33^2~4 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=8f41e04188ad46b73d2df1ed92c8abe5099cc0e1;p=sfa.git added 'element' class variable --- diff --git a/sfa/rspecs/elements/interface.py b/sfa/rspecs/elements/interface.py index d2022d89..2aadf4db 100644 --- a/sfa/rspecs/elements/interface.py +++ b/sfa/rspecs/elements/interface.py @@ -1,10 +1,12 @@ class Interface(dict): + element = None fields = {'component_id': None, 'role': None, 'client_id': None, - 'ipv4': None + 'ipv4': None, } - def __init__(self, fields={}): + def __init__(self, fields={}, element=None): + self.element = element dict.__init__(self, Interface.fields) self.update(fields) diff --git a/sfa/rspecs/elements/link.py b/sfa/rspecs/elements/link.py index f3a857b3..d916d22f 100644 --- a/sfa/rspecs/elements/link.py +++ b/sfa/rspecs/elements/link.py @@ -1,7 +1,7 @@ from sfa.rspecs.elements.interface import Interface class Link(dict): - + element = None fields = { 'client_id': None, 'component_id': None, @@ -14,10 +14,10 @@ class Link(dict): 'latency': None, 'packet_loss': None, 'description': None, - '_element': None } - def __init__(self, fields={}): + def __init__(self, fields={}, element=None): + self.element = element dict.__init__(self, Link.fields) self.update(fields) diff --git a/sfa/rspecs/elements/versions/pgv2Link.py b/sfa/rspecs/elements/versions/pgv2Link.py index c1efccee..727afaf7 100644 --- a/sfa/rspecs/elements/versions/pgv2Link.py +++ b/sfa/rspecs/elements/versions/pgv2Link.py @@ -1,4 +1,6 @@ from lxml import etree +from sfa.util.plxrn import PlXrn +from sfa.util.xrn import Xrn from sfa.rspecs.elements.link import Link from sfa.rspecs.elements.interface import Interface from sfa.rspecs.rspec_elements import RSpecElement, RSpecElements @@ -43,8 +45,7 @@ class PGv2Link: link_elems = xml.xpath(PGv2Link.elements['link'].path, namespaces=xml.namespaces) for link_elem in link_elems: # set client_id, component_id, component_name - link = Link(link_elem.attrib) - link['_element'] = link_elem + link = Link(link_elem.attrib, link_elem) # set component manager cm = link_elem.xpath('./default:component_manager', namespaces=xml.namespaces) if len(cm) > 0: @@ -70,7 +71,7 @@ class PGv2Link: if_elems = link_elem.xpath(PGv2Link.elements['interface_ref'].path, namespaces=xml.namespaces) ifs = [] for if_elem in if_elems: - if_ref = Interface(if_elem.attrib) + if_ref = Interface(if_elem.attrib, if_elem) ifs.append(if_ref) if len(ifs) > 1: link['interface1'] = ifs[0] @@ -78,7 +79,44 @@ class PGv2Link: links.append(link) return links + @staticmethod + def add_link_requests(xml, link_tuples, append=False): + if not isinstance(link_tuples, set): + link_tuples = set(link_tuples) + + available_links = PGv2Link.get_links(xml) + recently_added = [] + for link in available_links: + auth = Xrn(link['component_id']).get_authority_hrn() + if_name1 = Xrn(link['interface1']['component_id']).get_leaf() + if_name2 = Xrn(link['interface2']['component_id']).get_leaf() + + requested_link = None + l_tup_1 = (if_name1, if_name2) + l_tup_2 = (if_name2, if_name1) + if link_tuples.issuperset([(if_name1, if_name2)]): + requested_link = (if_name1, if_name2) + elif link_tuples.issuperset([(if_name2, if_name2)]): + requested_link = (if_name2, if_name1) + + if requested_link: + # add client id to link ane interface elements + link.element.set('client_id', link['component_name']) + link['interface1'].element.set('client_id', Xrn(link['interface1']['component_id']).get_leaf()) + link['interface2'].element.set('client_id', Xrn(link['interface2']['component_id']).get_leaf()) + recently_added.append(link['component_name']) - def add_link_requests(xml, links_tuple): - available_links = PGv2Link.get_links(xml) - + if not append: + # remove all links that don't have a client id + for link in PGv2Link.get_links(xml): + if not link['client_id'] or link['component_name'] not in recently_added: + parent = link.element.getparent() + parent.remove(link.element) + + @staticmethod + def get_link_requests(xml): + link_requests = [] + for link in PGv2Link.get_links(xml): + if link['client_id']: + link_requests.append(link) + return link_requests