X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfatables%2Fcommands%2FList.py;h=95d20381d0419d714ed54e7419f4b49b7280ceb1;hb=56c83fbbe57587bc321f73b1ca31cc3d592a707e;hp=a3cf7135496f8c326d7b591cee76b5e6d7cdac28;hpb=cf277bb46de09662e3c969ec109a47f8e0fbb2c1;p=sfa.git diff --git a/sfatables/commands/List.py b/sfatables/commands/List.py index a3cf7135..95d20381 100644 --- a/sfatables/commands/List.py +++ b/sfatables/commands/List.py @@ -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() - +