rename type to format
[sfa.git] / sfa / rspecs / sfa_rspec.py
index 7f0c10e..5ff743e 100755 (executable)
@@ -11,7 +11,7 @@ class SfaRSpec(RSpec):
     xml = None
     header = '<?xml version="1.0"?>\n'
     namespaces = {}
-
+    format = 'sfa'
     ###################
     # Parser
     ###################
@@ -170,7 +170,7 @@ class SfaRSpec(RSpec):
             if 'network' in node:
                 network = node['network']
                 network_tags = self.xml.xpath('//network[@name="%s"]' % network, self.namespaces)
-                if not network_tag:
+                if not network_tags:
                     network_tag = etree.SubElement(self.xml, 'network', name=network)
                 else:
                     network_tag = network_tags[0]
@@ -209,10 +209,8 @@ class SfaRSpec(RSpec):
         for hostname in hostnames:
             node = self.get_node_element(hostname, network)
             sliver = node.find('sliver')
-            if sliver:    
+            if sliver != None:
                 node.remove(sliver)                 
-
-    
     
     def add_default_sliver_attribute(self, name, value, network=None):
         if network:
@@ -260,6 +258,24 @@ class SfaRSpec(RSpec):
         for vlink in vlinks:
             vlink.getparent().remove(vlink)
 
+
+    def merge(self, in_rspec):
+        """
+        Merge contents for specified rspec with current rspec 
+        """
+
+        # just copy over all networks
+        current_networks = self.get_networks()
+        rspec = SfaRSpec(rspec=in_rspec)
+        networks = rspec.get_network_elements()
+        for network in networks:
+            current_network = network.get('name')
+            if not current_network in current_networks:
+                self.xml.append(network)
+                current_networks.append(current_network)
+        
+         
+
 if __name__ == '__main__':
     rspec = SfaRSpec()
     nodes = [
@@ -267,7 +283,17 @@ if __name__ == '__main__':
      'hostname': 'node1.planet-lab.org',
      'site_urn': 'urn:publicid:IDN+plc+authority+cm',
       'node_id': 1,
-    }
+    },
+    {'network': 'plc',
+     'hostname': 'node2.planet-lab.org',
+     'site_urn': 'urn:publicid:IDN+plc+authority+cm',
+      'node_id': 1,
+    },
+    {'network': 'ple',
+     'hostname': 'node1.planet-lab.eu',
+     'site_urn': 'urn:publicid:IDN+plc+authority+cm',
+      'node_id': 1,
+    },
     ]
     rspec.add_nodes(nodes)
     print rspec