X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfatables%2Fsfatables;h=924c90579b0ca87632965f886a27b71728132a3e;hb=78e5fb75e3793ae9dfce7f1bbd4a2b0f27b7ecc6;hp=9abcf6cda0d808ff5a2d231ce03ffdb31bfb85c0;hpb=483772a0716028a34cb98012fbe252ffd445fedf;p=sfa.git diff --git a/sfatables/sfatables b/sfatables/sfatables index 9abcf6cd..924c9057 100755 --- a/sfatables/sfatables +++ b/sfatables/sfatables @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # This file parses an sfatables command and generates XML files that parameterize # matches and targets. Each such XML file defines a rule. Rules are dropped in directories @@ -8,13 +8,12 @@ import sys import os -import pdb -import libxml2 +import glob from optparse import OptionParser -from sfatables import commands, matches, targets +from sfatables import commands from sfatables.xmlextension import Xmlextension -from sfatables.globals import * +from sfatables.globals import target_dir, match_dir def load_commands(module, list): command_dict={} @@ -26,11 +25,14 @@ def load_commands(module, list): return command_dict -def load_xml_extensions(module, dir, list): +def load_xml_extensions(module, ext_dir): ext_dict={} - for ext_name in list: - module = Xmlextension(dir, ext_name) + exts = glob.glob(ext_dir + os.path.sep + "*") + for ext in exts: + module = Xmlextension(ext) + # get the filename and get rid of the ".xml" extension + ext_name = os.path.extsep.join(os.path.splitext(os.path.basename(ext))[:-1]) ext_dict[ext_name]=module return ext_dict @@ -40,7 +42,7 @@ def create_parser(command_dict): parser = OptionParser(usage="sfatables [command] [chain] [match] [target]", description='See "man sfatables" for more detail.') - for k in command_dict.keys(): + for k in list(command_dict.keys()): command = command_dict[k] for (short_option,long_option) in command.options: parser.add_option(short_option,long_option,dest=command.type,action=command.action,const=k,help=command.help,metavar="CHAIN") @@ -51,7 +53,7 @@ def create_parser_xml_ext(ext_dict): parser = OptionParser(usage="sfatables [command] [chain] [match] [target]", description='See "man sfatables" for more detail.') - for k in ext_dict.keys(): + for k in list(ext_dict.keys()): command = ext_dict[k] for arg in command.arguments: parser.add_option('',"--"+arg['name'],dest=arg['name'],help=arg['help'],metavar=arg['target']) @@ -87,18 +89,18 @@ def main(): if (command.matches): if (len(pargs)<2): raise Exception("Must specify match for this command") - match_dict = load_xml_extensions("sfatables.matches",match_dir, matches.all) + match_dict = load_xml_extensions("sfatables.matches",match_dir) match_parser = create_parser_xml_ext(match_dict) - matches_str = ",".join(match_dict.keys()) + matches_str = ",".join(list(match_dict.keys())) match_parser.add_option('-m','--match',dest='name',help='Match name (one of %s)'%matches_str, metavar = 'MATCH') - match_parser.add_option('-n','--negate',dest='negate',help='Negate result',action=store_true) + match_parser.add_option('-n','--negate',dest='negate',help='Negate result',action='store_true') (match_options, args) = match_parser.parse_args(pargs[1]) try: name = match_options.name except Exception: - print "Must specify match name with -m" + print("Must specify match name with -m") - if (match_dict.has_key(name)): + if (name in match_dict): setattr(match_options, 'arguments', match_dict[name].arguments) else: raise Exception('Match %s not found'%name) @@ -109,17 +111,18 @@ def main(): if (command.targets): if (len(pargs)<3): raise Exception("Must specify a target for this command") - target_dict = load_xml_extensions("sfatables.targets",target_dir,targets.all) + target_dict = load_xml_extensions("sfatables.targets",target_dir) target_parser = create_parser_xml_ext(target_dict) - targets_str = ",".join(target_dict.keys()) - target_parser.add_option('-j','--jump',dest='name',help='Target name (one of %s)'%targets, metavar = 'TARGET') + targets_str = ",".join(list(target_dict.keys())) + target_parser.add_option('-j','--jump',dest='name',help='Target name (one of %s)'%targets_str, metavar = 'TARGET') + target_parser.add_option('-e','--element',dest='element',help='Element name', metavar = 'ELEMENT') (target_options, args) = target_parser.parse_args(pargs[2]) try: name = target_options.name except Exception: - print "Must specify target name with -m" + print("Must specify target name with -j") - if (target_dict.has_key(name)): + if (name in target_dict): setattr(target_options, 'arguments', target_dict[name].arguments) else: raise Exception('Target %s not found'%name)