def main(): global_parser = ArgumentParser() global_parser.add_argument("--debug", action='store_true', help="Enable debug mode") global_parser.add_argument("-h", "--help", action='store_true', help="Show this message and exit") parser = ArgumentParser(prog='maro', description=MARO_BANNER, parents=[global_parser]) parser.set_defaults(func=_help_func(parser=parser)) parser.add_argument('--version', action='store_true', help='Get version info') subparsers = parser.add_subparsers() # maro env parser_env = subparsers.add_parser( 'env', help= ('Get all environment-related information, ' 'such as the supported scenarios, topologies. \n' 'And it is also responsible to generate data to the specific environment, ' 'which has external data dependency.'), parents=[global_parser]) parser_env.set_defaults(func=_help_func(parser=parser_env)) load_parser_env(parser_env, global_parser) # maro data parser_data = subparsers.add_parser( 'data', help="Data processing tools for MARO binary format.", parents=[global_parser]) parser_data.set_defaults(func=_help_func(parser=parser_data)) load_parser_data(prev_parser=parser_data, global_parser=global_parser) # maro meta parser_meta = subparsers.add_parser('meta', help="Manage the meta files for MARO.", parents=[global_parser]) parser_meta.set_defaults(func=_help_func(parser=parser_meta)) load_parser_meta(prev_parser=parser_meta, global_parser=global_parser) # maro grass parser_grass = subparsers.add_parser( "grass", help= "Manage distributed cluster with native virtual machines (for development only).", parents=[global_parser]) parser_grass.set_defaults(func=_help_func(parser=parser_grass)) load_parser_grass(prev_parser=parser_grass, global_parser=global_parser) # maro k8s parser_k8s = subparsers.add_parser( "k8s", help="Manage distributed cluster with Kubernetes.", parents=[global_parser]) parser_k8s.set_defaults(func=_help_func(parser=parser_k8s)) load_parser_k8s(prev_parser=parser_k8s, global_parser=global_parser) # maro inspector parser_inspector = subparsers.add_parser( 'inspector', help=("Display visualization of experimental data."), parents=[global_parser]) parser_inspector.set_defaults(func=_help_func(parser=parser_inspector)) load_parser_inspector(parser_inspector, global_parser) # maro process parser_process = subparsers.add_parser( "process", help="Run application by mulit-process to simulate distributed mode.") parser_process.set_defaults(func=_help_func(parser=parser_process)) load_parser_process(prev_parser=parser_process, global_parser=global_parser) # maro project parser_project = subparsers.add_parser("project", help="Manage maro projects.") parser_project.set_defaults(func=_help_func(parser=load_parser_project)) load_parser_project(prev_parser=parser_project, global_parser=global_parser) args = None try: # Get args and parse global arguments args = parser.parse_args() if args.debug: GlobalParams.LOG_LEVEL = logging.DEBUG else: GlobalParams.LOG_LEVEL = logging.INFO if args.version: logger.info(f'{__version__}') return actual_args = _get_actual_args(namespace=args) # WARNING: We cannot assign any argument like 'func' in the CLI args.func(**actual_args) except CommandNotFoundError as e: logger.error_red(f"{e.__class__.__name__}: {e.get_message()}") logger.info(f"{e.usage}") except CliError as e: if args is None or args.debug: logger.error_red( f"{e.__class__.__name__}: {e.get_message()}\n{traceback.format_exc()}" ) else: logger.error_red(f"{e.__class__.__name__}: {e.get_message()}")
def main(): global_parser = ArgumentParser() global_parser.add_argument("--debug", action='store_true', help="Enable debug mode") global_parser.add_argument("-h", "--help", action='store_true', help="Show this message and exit") parser = ArgumentParser(prog='maro', description=MARO_BANNER, parents=[global_parser]) parser.set_defaults(func=_help_func(parser=parser)) parser.add_argument('--version', action='store_true', help='Get version info') subparsers = parser.add_subparsers() # maro env parser_env = subparsers.add_parser( 'env', help= 'Get all environment-related information, such as the supported scenarios, topologies. And it is also responsible to generate data to the specific environment, which has external data dependency.', parents=[global_parser]) parser_env.set_defaults(func=_help_func(parser=parser_env)) load_parser_env(parser_env, global_parser) # maro data parser_data = subparsers.add_parser( 'data', help="Data processing tools for MARO binary format.", parents=[global_parser]) parser_data.set_defaults(func=_help_func(parser=parser_data)) load_parser_data(prev_parser=parser_data, global_parser=global_parser) # maro meta parser_meta = subparsers.add_parser('meta', help="Manage the meta files for MARO.", parents=[global_parser]) parser_meta.set_defaults(func=_help_func(parser=parser_meta)) load_parser_meta(prev_parser=parser_meta, global_parser=global_parser) # maro grass parser_grass = subparsers.add_parser( 'grass', help= "Manage distributed cluster with native virtual machines (for development only).", parents=[global_parser]) parser_grass.set_defaults(func=_help_func(parser=parser_grass)) load_parser_grass(prev_parser=parser_grass, global_parser=global_parser) # maro k8s parser_k8s = subparsers.add_parser( 'k8s', help="Manage distributed cluster with Kubernetes.", parents=[global_parser]) parser_k8s.set_defaults(func=_help_func(parser=parser_k8s)) load_parser_k8s(prev_parser=parser_k8s, global_parser=global_parser) # Get args and parse global arguments args = parser.parse_args() if args.debug: GlobalParams.LOG_LEVEL = logging.DEBUG else: GlobalParams.LOG_LEVEL = logging.INFO if args.version: logger.info(f'{__version__}') return actual_args = _get_actual_args(namespace=args) # WARNING: We cannot assign any argument like 'func' in the CLI try: args.func(**actual_args) except CliException as e: if args.debug: logger.error_red(f"{e.get_message()}\n{traceback.format_exc()}") else: logger.error_red(e.get_message())