From 6c20754b16352f2a673ab29125de82994248a27c Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 4 Oct 2011 16:40:24 -0400 Subject: [PATCH] add_slivers() will remove nodes that don't have slivers --- sfa/rspecs/versions/sfav1.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sfa/rspecs/versions/sfav1.py b/sfa/rspecs/versions/sfav1.py index 4712d955..a9c38447 100644 --- a/sfa/rspecs/versions/sfav1.py +++ b/sfa/rspecs/versions/sfav1.py @@ -257,18 +257,24 @@ class SFAv1(BaseVersion): network_tag = network_tags[0] network_tag.set('slice', urn_to_hrn(sliver_urn)[0]) - nodes_with_slivers = self.get_nodes_with_slivers(network) + all_nodes = self.get_nodes() + nodes_with_slivers = [sliver['hostname'] for sliver in slivers] + nodes_without_slivers = set(all_nodes).difference(nodes_with_slivers) + + # add slivers for sliver in slivers: - if isinstance(sliver, basestring): - sliver = {'hostname': sliver} - if sliver['hostname'] in nodes_with_slivers: - continue node_elem = self.get_node_element(sliver['hostname'], network) + if not node_elem: continue sliver_elem = etree.SubElement(node_elem, 'sliver') if 'tags' in sliver: for tag in sliver['tags']: etree.SubElement(sliver_elem, tag['tagname']).text = value=tag['value'] - + + # remove all nodes without slivers + for node in nodes_without_slivers: + node_elem = self.get_node_element(node, network) + parent = node_elem.getparent() + parent.remove(node_elem) def remove_slivers(self, slivers, network=None, no_dupes=False): for sliver in slivers: -- 2.47.0