import argparse
from exceptions.ohos_exception import OHOSException
from containers.status import throw_exception
class ArgsFactory():
@staticmethod
@throw_exception
def genetic_add_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
if arg['arg_type'] == 'bool':
return _add_bool_option(parser, arg)
elif arg['arg_type'] == 'str':
return _add_str_option(parser, arg)
elif arg['arg_type'] == 'list':
return _add_list_option(parser, arg)
elif arg['arg_type'] == 'subparsers':
return _add_list_option(parser, arg)
else:
raise OHOSException('Unknown arg type "{}" for arg "{}"'
.format(arg['arg_type'], arg['arg_name']), "0003")
def _add_bool_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
if arg['arg_attribute'].get('abbreviation'):
return _add_bool_abbreviation_option(parser, arg)
else:
return parser.add_argument(arg['arg_name'], help=arg['arg_help'], nargs='?',
default=arg['argDefault'])
def _add_str_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
if arg['arg_attribute'].get('optional'):
if arg['arg_attribute'].get('abbreviation'):
return _add_str_optional_abbreviation_option(parser, arg)
else:
return _add_str_optional_option(parser, arg)
elif arg['arg_attribute'].get('abbreviation'):
return _add_str_abbreviation_option(parser, arg)
else:
return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
default=arg['argDefault'])
def _add_list_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
if arg['arg_attribute'].get('abbreviation'):
return _add_list_abbreviation_option(parser, arg)
else:
return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
nargs='*', default=arg['argDefault'], action='append')
def _add_bool_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
nargs='?', default=arg['argDefault'])
def _add_str_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
default=arg['argDefault'])
def _add_str_optional_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
default=arg['argDefault'], choices=arg['arg_attribute'].get('optional'))
def _add_str_optional_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
default=arg['argDefault'], choices=arg['arg_attribute'].get('optional'))
def _add_list_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
nargs='*', default=arg['argDefault'], action='append')