summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/console/line_parsing.py
blob: c1227a393e749b29e9c8db1a6a374fb5abdcc4a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import argparse
from collections import namedtuple
import sys

ArgumentPack = namedtuple('ArgumentPack', ['name_or_flags', 'options'])
# class ArgumentPack(namedtuple('ArgumentPack', ['name_or_flags', 'options'])):
#
#     @property
#     def name_or_flags(self):
#         return self.name_or_flags
#
#     @name_or_flags.setter
#     def name_or_flags(self, val):
#         print "bla"
#         if not isinstance(val, list):
#             self.name_or_flags = [val]
#         else:
#             self.name_or_flags = val


OPTIONS_DB = {'-m': ArgumentPack(['-m', '--multiplier'],
                                 {'help': "Set multiplier for stream", 'dest':"mult"}),
              'file_path': ArgumentPack(['file'],
                                 {'help': "File path to yaml file"})}


class CCmdArgParser(argparse.ArgumentParser):

    def __init__(self, *args, **kwargs):
        super(CCmdArgParser, self).__init__(*args, **kwargs)
        pass

    def error(self, message):
        # self.print_usage(sys.stderr)
        self.print_help()
        return

def gen_parser(op_name, *args):
    parser = CCmdArgParser(prog=op_name, conflict_handler='resolve')
    for param in args:
        try:
            parser.add_argument(*OPTIONS_DB[param].name_or_flags,
                                **OPTIONS_DB[param].options)
        except KeyError, e:
            cause = e.args[0]
            raise KeyError("The attribute '{0}' is missing as a field of the {1} option.\n".format(cause, param))
    return parser

if __name__ == "__main__":
    pass