class TestSmartArgumentParser(UnitTest): def setUp(self): self.argparser = SmartArgumentParser() self.subparser = self.argparser.add_subparsers() self.subparser.add_parser("test").set_defaults(test=2) self.argparser.add_argument("entries", nargs="+", type=int) def test_can_add_one_of_each(self): args = vars(self.argparser.parse_args(["test", "1"])) self.assertEqual(args, {'entries': [1], 'test': 2}) def test_can_add_multiple_entries(self): args = vars(self.argparser.parse_args(["test", "1", "2", "3"])) self.assertEqual(args["test"], 2) self.assertSetEqual(set(args["entries"]), {1, 2, 3}) @mute def test_if_wrong_argument(self): self.assertRaises(SystemExit, self.argparser.parse_args, ["test", "1", "2", "-n"])
def parse_args(args: list) -> dict: """ Create a parser for command line attributes and parses them :param args: the arguments to parse :return: parsed arguments """ parser = SmartArgumentParser( description="Triggers some bug in listed programs", parents=[arguments.get_verbosity_parser()] ) plugin_parser = parser.add_subparsers(metavar="plugin") parser.add_argument( "bugs", nargs="+", type=str, help="one of {} or all".format(", ".join(PROGRAMS)), metavar="bug", choices=PROGRAMS + ["all"], ) register_for_trigger(parser=parser, subparser=plugin_parser) parsed_args = parser.parse_args(args) # noinspection PyUnresolvedReferences logging.getLogger().setLevel(parsed_args.logging_level) _bugs = parsed_args.bugs if "all" in _bugs: parsed_args.bugs = [ program for program in PROGRAMS if os.path.exists(get_trigger_conf(program).get("install_directory")) ] else: for _ in _bugs: if _ not in PROGRAMS: parser.print_help() exit(PROGRAM_ARGUMENT_ERROR) return vars(parsed_args)
def parse_args(args: list) -> dict: """ Create a parser for command line attributes and parses them :param args: the arguments to parse :return: parsed arguments """ parser = SmartArgumentParser( description="Triggers some bug in listed programs", parents=[arguments.get_verbosity_parser()]) plugin_parser = parser.add_subparsers(metavar="plugin") parser.add_argument("bugs", nargs="+", type=str, help="one of {} or all".format(", ".join(PROGRAMS)), metavar="bug", choices=PROGRAMS + ["all"]) register_for_trigger(parser=parser, subparser=plugin_parser) parsed_args = parser.parse_args(args) # noinspection PyUnresolvedReferences logging.getLogger().setLevel(parsed_args.logging_level) _bugs = parsed_args.bugs if "all" in _bugs: parsed_args.bugs = [ program for program in PROGRAMS if os.path.exists( get_trigger_conf(program).get("install_directory")) ] else: for _ in _bugs: if _ not in PROGRAMS: parser.print_help() exit(PROGRAM_ARGUMENT_ERROR) return vars(parsed_args)