Only load those arguments into the target that have been configured in the rule defin...
Sapan Bhatia [Mon, 26 Oct 2009 15:20:39 +0000 (15:20 +0000)]
sfatables/runtime.py
sfatables/test.sfarspec
sfatables/xmlrule.py

index e948d05..05e692a 100644 (file)
@@ -74,7 +74,6 @@ class SFATablesRules:
 
         for rule in self.sorted_rule_list:
             intermediate_rspec  = rule.apply_interpreted(intermediate_rspec)
-            intermediate_rspec = XMLRule().wrap_up(intermediate_rspec) 
             if (rule.terminal):
                 break
 
index 6c98180..977c244 100644 (file)
@@ -1,13 +1,7 @@
 <!-- run "runtime.py sfarspec" to apply current rule set to this file -->
 
 <rspec>
-    <rule-context>
-        <argument>
-        <name>blacklist</name>
-        <value>plc.tp</value>
-        </argument>
-    </rule-context>
-
+    <request-context><sfa><user><hrn>plc.princeton.sapanb</hrn></user></sfa></request-context>
      <request>
         <nodespec>
             <node name="plc.princeton.planetlab-01"/>
index d137e4e..4714185 100644 (file)
@@ -63,9 +63,13 @@ class XMLRule:
         else:
             # Add the request context
             matchNode = libxml2.newNode('match-context')
-            matchNode.addChild(self.arguments['match'])
+            for match_argument in self.arguments['match']:
+                matchNode.addChild(match_argument)
+
             targetNode = libxml2.newNode('target-context')
-            targetNode.addChild(self.arguments['target'])
+            for target_argument in self.arguments['target']:
+                targetNode.addChild(target_argument)
+
             context[0].addChild(matchNode)
             context[0].addChild(targetNode)
         p.xpathFreeContext()
@@ -73,7 +77,9 @@ class XMLRule:
         return doc
 
     def apply_interpreted(self, rspec):
-        self.add_rule_context_to_rspec(rspec)
+        import pdb
+        pdb.set_trace()
+        rspec = self.add_rule_context_to_rspec(rspec)
         # Interpreted
         #
         # output =
@@ -107,21 +113,13 @@ class XMLRule:
             self.terminal = 1
         
         self.processors[type] = processor[0].content
-        self.arguments[type] = p.xpathEval('//rule')
+        self.arguments[type] = p.xpathEval('//rule//argument[value!=""]')
 
+        import pdb
+        pdb.set_trace()
         p.xpathFreeContext()
 
 
-    def wrap_rspec (self, type, rspec):
-        argument = self.arguments[type]
-        p = rspec.xmldoc.xpathNewContext()
-        root_node = p.xpathEval('/RSpec')
-        if (not root_node or not root_node):
-            raise Exception('An evil aggregate manager sent me a malformed RSpec. Please see the stack trace to identify it.')
-
-        root_node.addChild(arguments[type])
-        return rspec
-
     def __init__(self, chain=None, rule_number=None):
         self.rule_number = None
         self.chain = None