Removed a debugging statement
[sfa.git] / sfatables / commands / List.py
index a3cf713..95d2038 100644 (file)
@@ -7,13 +7,14 @@ from sfatables.pretty import Pretty
 from sfatables.command import Command
 
 class List(Command):
-    options = [('-L','--list')]
-    help = 'List a chain'
-    key='list_rule'
-    matches = False
-    targets = False
-
+    
     def __init__(self):
+        self.options = [('-L','--list')]
+        self.help = 'List a chain'
+        self.key='list_rule'
+        self.matches = False
+        self.targets = False
+
         return
 
     def get_info(self, type, xmlextension_path):
@@ -25,19 +26,28 @@ class List(Command):
 
         name_nodes = p.xpathEval("//rule/argument[value!='']/name")
         value_nodes = p.xpathEval("//rule/argument[value!='']/value")
+        element_nodes = p.xpathEval("//argument[value!='']/parent::rule/@element")
+
+        if (len(element_nodes)>1):
+            raise Exception("Invalid rule %s contains multiple elements."%xmlextension_path)
 
-        names = [n.content for n in name_nodes]
-        values = [v.content for v in value_nodes]
+        element = []
+        argument_str = ""
+        if element_nodes:
+            element = element_nodes[0].content
 
-        name_values = zip(names,values)
-        name_value_pairs = map(lambda (n,v):n+'='+v, name_values)
+            names = [n.content for n in name_nodes]
+            values = [v.content for v in value_nodes]
 
-        argument_str = ",".join(name_value_pairs)
+            name_values = zip(names,values)
+            name_value_pairs = map(lambda (n,v):n+'='+v, name_values)
+
+            argument_str = ",".join(name_value_pairs)
 
         p.xpathFreeContext()
         xmldoc.freeDoc()
 
-        return {'name':ext_name, 'arguments':argument_str}
+        return {'name':ext_name, 'arguments':argument_str, 'element':element}
 
     def get_rule_list(self, chain_dir_path):
         broken_semantics = os.walk(chain_dir_path)
@@ -59,11 +69,11 @@ class List(Command):
             return
 
         chain = command_options.args[0]
-        chain_dir = sfatables_config + "/" + chain
+        chain_dir = os.path.join(sfatables_config, chain)
 
         rule_list = self.get_rule_list(chain_dir)
 
-        pretty = Pretty(['Rule','Match','Arguments','Target','Arguments'])
+        pretty = Pretty(['Rule','Match','Arguments','Target','Element','Arguments'])
 
         for number in rule_list:
             match_file = "sfatables-%d-%s"%(number,'match')
@@ -71,16 +81,20 @@ class List(Command):
 
             match_path = sfatables_config + '/' + chain + '/' + match_file
             target_path = sfatables_config + '/' + chain + '/' + target_file
-            
+
             match_info = self.get_info ('match',match_path)
             target_info = self.get_info ('target',target_path)
 
-            pretty.push_row(["%d"%number,  match_info['name'], match_info['arguments'], target_info['name'], target_info['arguments']])
-        
-        
+            pretty.push_row(["%d"%number,
+                             match_info['name'],
+                             match_info['arguments'],
+                             target_info['name'],
+                             target_info['element'],
+                             target_info['arguments']])
+
         pretty.pprint()
 
-            
+