_CmdArgs.add_arg()   B
last analyzed

Complexity

Conditions 5

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 5
dl 0
loc 25
rs 8.0894
1
import argparse
2
3
class ArgParseWrapper(argparse.ArgumentParser):
4
    '''Overide the default parse_args to not error out with unused args.'''
5
    def parse_args(self, args=None, namespace=None):
6
        args, argv = self.parse_known_args(args, namespace)
7
        return args
8
9
class _CmdArgs(object):
10
    def __init__(self):
11
        self.parser = ArgParseWrapper(add_help=False)
12
        self.letterArgs = []
13
        self.args = None
14
        self.argsParsed = False
15
16
    def set_description(self, desc):
17
        self.parser.description = desc
18
19
    def add_arg(self, name, argType, argHelp, noShort=False):
20
21
        args = []
22
23
        args.append('--' + name)
24
25
        if not noShort:
26
            # Check through
27
            letter = None
28
            for i in range(len(name)):
29
                if name[i] in self.letterArgs:
30
                    continue
31
                self.letterArgs.append(name[i])
32
33
                letter = name[i]
34
                break
35
            else:
36
                print('All possible short arguments are taken for this name.')
37
                return
38
39
            args.append('-' + letter)
40
41
        self.parser.add_argument(*args, type=argType, help=argHelp)
42
43
        return vars(self.parser.parse_args())[name]
44
45
    def parse_args(self):
46
        # Add the help option/action after all arguments
47
        self.parser.add_argument('-h', '--help',
48
            action='help',
49
            default=argparse.SUPPRESS, help='show this help message and exit')
50
        self.args = vars(self.parser.parse_args())
51
        self.argsParsed = True
52
53
CmdArgs = _CmdArgs()
54
55
__all__ = ['CmdArgs', ]
56