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