xref: /OpenGrok/tools/src/main/python/opengrok_tools/utils/parsers.py (revision 2d57dc692b4dd10e696ca6922510f6cecded1bfd)
1*2d57dc69SVladimir Kotalimport argparse
2*2d57dc69SVladimir Kotal
3*2d57dc69SVladimir Kotalfrom .log import add_log_level_argument
4*2d57dc69SVladimir Kotalfrom ..version import __version__ as tools_version
5*2d57dc69SVladimir Kotal
6*2d57dc69SVladimir Kotal
7*2d57dc69SVladimir Kotaldef str2bool(v):
8*2d57dc69SVladimir Kotal    if isinstance(v, bool):
9*2d57dc69SVladimir Kotal        return v
10*2d57dc69SVladimir Kotal
11*2d57dc69SVladimir Kotal    if isinstance(v, str):
12*2d57dc69SVladimir Kotal        v_lower = v.lower()
13*2d57dc69SVladimir Kotal        if v_lower in ('yes', 'true', 'y', '1'):
14*2d57dc69SVladimir Kotal            return True
15*2d57dc69SVladimir Kotal        elif v_lower in ('no', 'false', 'n', '0'):
16*2d57dc69SVladimir Kotal            return False
17*2d57dc69SVladimir Kotal
18*2d57dc69SVladimir Kotal    raise argparse.ArgumentTypeError('Boolean value or its string '
19*2d57dc69SVladimir Kotal                                     'representation expected.')
20*2d57dc69SVladimir Kotal
21*2d57dc69SVladimir Kotal
22*2d57dc69SVladimir Kotaldef get_base_parser(tool_version=None):
23*2d57dc69SVladimir Kotal    """
24*2d57dc69SVladimir Kotal    Get the base parser which supports --version option reporting
25*2d57dc69SVladimir Kotal    the overall version of the tools and the specific version of the
26*2d57dc69SVladimir Kotal    invoked tool.
27*2d57dc69SVladimir Kotal    :param tool_version: the specific version tool if applicable
28*2d57dc69SVladimir Kotal    :return: the parser
29*2d57dc69SVladimir Kotal    """
30*2d57dc69SVladimir Kotal    parser = argparse.ArgumentParser(add_help=False)
31*2d57dc69SVladimir Kotal    add_log_level_argument(parser)
32*2d57dc69SVladimir Kotal    version = tools_version
33*2d57dc69SVladimir Kotal    if tool_version:
34*2d57dc69SVladimir Kotal        version += ' (v{})'.format(tool_version)
35*2d57dc69SVladimir Kotal    parser.add_argument('-v', '--version', action='version', version=version,
36*2d57dc69SVladimir Kotal                        help='Version of the tool')
37*2d57dc69SVladimir Kotal    return parser
38*2d57dc69SVladimir Kotal
39*2d57dc69SVladimir Kotal
40*2d57dc69SVladimir Kotaldef get_java_parser():
41*2d57dc69SVladimir Kotal    parser = argparse.ArgumentParser(add_help=False,
42*2d57dc69SVladimir Kotal                                     parents=[get_base_parser()])
43*2d57dc69SVladimir Kotal    parser.add_argument('-j', '--java',
44*2d57dc69SVladimir Kotal                        help='path to java binary')
45*2d57dc69SVladimir Kotal    parser.add_argument('-J', '--java_opts',
46*2d57dc69SVladimir Kotal                        help='java options. Use one for every java option, '
47*2d57dc69SVladimir Kotal                             'e.g. -J=-server -J=-Xmx16g',
48*2d57dc69SVladimir Kotal                        action='append')
49*2d57dc69SVladimir Kotal    parser.add_argument('-e', '--environment', action='append',
50*2d57dc69SVladimir Kotal                        help='Environment variables in the form of name=value')
51*2d57dc69SVladimir Kotal    parser.add_argument('--doprint', type=str2bool, nargs=1, default=None,
52*2d57dc69SVladimir Kotal                        metavar='boolean',
53*2d57dc69SVladimir Kotal                        help='Enable/disable printing of messages '
54*2d57dc69SVladimir Kotal                             'from the application as they are produced.')
55*2d57dc69SVladimir Kotal
56*2d57dc69SVladimir Kotal    group = parser.add_mutually_exclusive_group(required=True)
57*2d57dc69SVladimir Kotal    group.add_argument('-a', '--jar',
58*2d57dc69SVladimir Kotal                       help='Path to jar archive to run')
59*2d57dc69SVladimir Kotal    group.add_argument('-c', '--classpath',
60*2d57dc69SVladimir Kotal                       help='Class path')
61*2d57dc69SVladimir Kotal
62*2d57dc69SVladimir Kotal    parser.add_argument('options', nargs='+', help='options')
63*2d57dc69SVladimir Kotal
64*2d57dc69SVladimir Kotal    return parser
65