Fix bugs in remove_slivers
[sfa.git] / sfa / rspecs / sfa_rspec.py
index ea4544e..bc12200 100755 (executable)
@@ -4,14 +4,25 @@ from StringIO import StringIO
 from sfa.rspecs.rspec import RSpec 
 from sfa.util.xrn import *
 from sfa.util.plxrn import hostname_to_urn
-from sfa.util.config import Config  
+from sfa.util.config import Config
+from sfa.rspecs.rspec_version import RSpecVersion  
 
 
+_version = { 'type': 'SFA', 
+             'version': '1' 
+}
+
+sfa_rspec_version = RSpecVersion(_version)
+
 class SfaRSpec(RSpec):
     xml = None
     header = '<?xml version="1.0"?>\n'
-    namespaces = {}
-    format = 'sfa'
+    version = sfa_rspec_version
+
+    def create(self):
+        RSpec.create(self)
+        self.xml.set('type', 'SFA')
+
     ###################
     # Parser
     ###################
@@ -192,7 +203,7 @@ class SfaRSpec(RSpec):
             if 'interfaces' in node:
                 for interface in node['interfaces']:
                     if 'bwlimit' in interface and interface['bwlimit']:
-                        bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').tet = str(interface['bwlimit']/1000)
+                        bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').text = str(interface['bwlimit']/1000)
             if 'tags' in node:
                 for tag in node['tags']:
                    # expose this hard wired list of tags, plus the ones that are marked 'sfa' in their category 
@@ -211,10 +222,8 @@ class SfaRSpec(RSpec):
     def add_links(self, links):
         pass
     
-    def add_slivers(self, slivers, network=None, no_dupes=False):
-        if not isinstance(slivers, list):
-            slivers = [slivers]
-
+    def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False):
+        slivers = self._process_slivers(slivers)
         nodes_with_slivers = self.get_nodes_with_slivers(network)
         for sliver in slivers:
             if sliver['hostname'] in nodes_with_slivers:
@@ -223,16 +232,15 @@ class SfaRSpec(RSpec):
             sliver_elem = etree.SubElement(node_elem, 'sliver')
             if 'tags' in sliver:
                 for tag in sliver['tags']:
-                    etree.SubElement(sliver_elem, tag['name'], value=tag['value'])
+                    etree.SubElement(sliver_elem, tag['tagname'], value=tag['value'])
 
     def remove_slivers(self, slivers, network=None, no_dupes=False):
-        if not isinstance(slivers, list):
-            slivers = [slivers]
+        slivers = self._process_slivers(slivers)
         for sliver in slivers:
             node_elem = self.get_node_element(sliver['hostname'], network)
-            sliver_elem = node.find('sliver')
+            sliver_elem = node_elem.find('sliver')
             if sliver_elem != None:
-                node_elem.remove(sliver)                 
+                node_elem.remove(sliver_elem)
     
     def add_default_sliver_attribute(self, name, value, network=None):
         if network: