X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfatables%2Fcommands%2FList.py;fp=sfatables%2Fcommands%2FList.py;h=3a0bb396611d3b6677e74038a1809f9f8025721e;hb=2e0fbfbdfd45bf70b92d8fa3866bcbbd2f49fe64;hp=b3385e4c51dc954361f7126d49eb1a6ec3259fd7;hpb=816d72d56f350bf15faf9d80ce71e8ce3e95784a;p=sfa.git diff --git a/sfatables/commands/List.py b/sfatables/commands/List.py index b3385e4c..3a0bb396 100644 --- a/sfatables/commands/List.py +++ b/sfatables/commands/List.py @@ -1,4 +1,9 @@ import os, time +import libxml2 +import pdb + +from globals import * +from pretty import Pretty from sfatables.command import Command class List(Command): @@ -11,10 +16,64 @@ class List(Command): def __init__(self): return - def call(self): - # Override this function - return True - def __call__(self, option, opt_str, value, parser, *args, **kwargs): + def get_info(self, xmlextension_path): + xmldoc = libxml2.parseFile(xmlextension_path) + p = xmldoc.xpathNewContext() + + ext_name_node = p.xpathEval("/match/@name") + ext_name = ext_name_node[0].content + + name_nodes = p.xpathEval("//rule/argument[value!='']/name") + value_nodes = p.xpathEval("//rule/argument[value!='']/value") + + names = [n.content for n in name_nodes] + values = [v.content for v in value_nodes] + + 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'} + + def call(self, command_options, match_options, target_options): + chain = command_options.args[0] + chain_dir = sfatables_config + "/" + chain + rule_list = [] + broken_semantics = os.walk(chain_dir) + for (root, dirs, files) in broken_semantics: + for file in files: + if (file.startswith('sfatables')): + (magic,number,type) = file.split('-') + rule_list.append(int(number)) + + rule_list.sort() + + pretty = Pretty(['Rule','Match','Target','Arguments']) + + for number in rule_list: + match_file = "sfatables-%d-%s"%(number,'match') + target_file = "sfatables-%d-%s"%(number,'target') + + match_path = sfatables_config + '/' + chain + '/' + match_file + target_path = sfatables_config + '/' + chain + '/' + target_file + + match_info = self.get_info (match_path) + target_info = self.get_info (target_path) + + pretty.push_row(["%d"%number, match_info['name'], match_info['arguments'], target_info['arguments']]) + + + pretty.pprint() + + + + + + + - return self.call(option)