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
|