-
Notifications
You must be signed in to change notification settings - Fork 1
/
cmdparser.py
63 lines (53 loc) · 2.48 KB
/
cmdparser.py
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
51
52
53
54
55
56
57
58
59
60
61
62
63
import argparse
import sys
import puppeter
from puppeter.presentation.appfactory import AppFactory
class _VersionAction(argparse.Action):
def __init__(self,
option_strings,
version=None,
dest=argparse.SUPPRESS,
default=argparse.SUPPRESS,
help="show program's version number and exit"):
super(_VersionAction, self).__init__(
option_strings=option_strings,
dest=dest,
default=default,
nargs=0,
help=help)
self.version = version
def __call__(self, parser, namespace, values, option_string=None):
version = self.version
if version is None:
version = parser.version
formatter = parser._get_formatter()
formatter.add_text(version)
parser._print_message(formatter.format_help(), sys.stdout)
parser.exit()
class StdErrArgumentParser(argparse.ArgumentParser):
def print_help(self, file=None):
if file is None:
file = sys.stderr
self._print_message(self.format_help(), file)
class CommandLineParser(object):
"""CommandLineParser for Puppeter"""
def __init__(self, argv, appfactory=AppFactory()):
super(CommandLineParser, self).__init__()
self.__argv = argv[1:]
self.__appfactory = appfactory
def parse(self):
parser = StdErrArgumentParser(prog='puppeter', description='Puppeter - an automatic puppet installer',
epilog='By default interactive setup is performed and chosen values can be saved'
' to answer file.')
parser.add_argument('--answers', '-a', type=argparse.FileType('r'),
metavar='FILE',
help='An answer file to be used to perform unattended setup')
parser.add_argument('--verbose', '-v', action='count',
help='Print more verbose output (up to 2 verbosity flags are supported)')
parser.add_argument('--version', action=_VersionAction, version='%(prog)s ' + puppeter.__version__)
parser.add_argument('--execute', '-e', action='store_true',
help='Executes setup commands instead of printing them')
parsed = parser.parse_args(self.__argv)
factory = self.__appfactory.interactive if parsed.answers is None else self.__appfactory.unattended
app = factory(parsed)
return app