Ignore parts of the RSpec that are not for us
[sfa.git] / sfa / plc / network.py
index d8a71a8..cf22029 100644 (file)
@@ -221,7 +221,10 @@ class Slicetag:
         self.slice_id = network.slice.id
         self.tagname = tagname
         self.value = value
-        self.node_id = node.id
+        if node:
+            self.node_id = node.id
+        else:
+            self.node_id = None
         self.category = tt.category
         self.min_role_id = tt.min_role_id
         self.status = "new"
@@ -417,6 +420,15 @@ class Network:
             message = str(sys.exc_info()[1])
             raise InvalidRSpec(message)
 
+        # Filter out stuff that's not for us
+        rspec = tree.getroot()
+        for network in rspec.iterfind("./network"):
+            if network.get("name") != self.api.hrn:
+                rspec.remove(network)
+        for request in rspec.iterfind("./request"):
+            if request.get("name") != self.api.hrn:
+                rspec.remove(request)
+
         if schema:
             # Validate the incoming request against the RelaxNG schema
             relaxng_doc = etree.parse(schema)
@@ -427,10 +439,9 @@ class Network:
                 message = "%s (line %s)" % (error.message, error.line)
                 raise InvalidRSpec(message)
 
-        rspec = tree.getroot()
         self.rspec = rspec
 
-        defaults = rspec.find("./network/sliver_defaults")
+        defaults = rspec.find(".//sliver_defaults")
         self.__process_attributes(defaults)
 
         # Find slivers under node elements
@@ -489,11 +500,10 @@ class Network:
     def toxml(self):
         xml = XMLBuilder(format = True, tab_step = "  ")
         with xml.RSpec(type=self.type):
-            name = "Public_" + self.type
             if self.slice:
-                element = xml.network(name=name, slice=self.slice.hrn)
+                element = xml.network(name=self.api.hrn, slice=self.slice.hrn)
             else:
-                element = xml.network(name=name)
+                element = xml.network(name=self.api.hrn)
                 
             with element:
                 if self.slice: