Created
June 14, 2023 11:04
-
-
Save karmab/d3cda6c697255f8aaa8ee287d04d505a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import os | |
import sys | |
PARAMHELP = "specify parameter or keyword for rendering (multiple can be specified)" | |
def get_subparser_print_help(parser, subcommand): | |
subparsers_actions = [ | |
action for action in parser._actions | |
if isinstance(action, argparse._SubParsersAction)] | |
for subparsers_action in subparsers_actions: | |
for choice, subparser in subparsers_action.choices.items(): | |
if choice == subcommand: | |
subparser.print_help() | |
return | |
def get_subparser(parser, subcommand): | |
subparsers_actions = [ | |
action for action in parser._actions | |
if isinstance(action, argparse._SubParsersAction)] | |
for subparsers_action in subparsers_actions: | |
for choice, subparser in subparsers_action.choices.items(): | |
if choice == subcommand: | |
return subparser | |
def burn_rosa(args): | |
print("burning rosa") | |
def burn_hypershift(args): | |
print("burning hypershift") | |
def cli(): | |
parser = argparse.ArgumentParser(description='Mega Burner') | |
parser.add_argument('-d', '--debug', action='store_true') | |
subparsers = parser.add_subparsers(metavar='', title='Available Commands') | |
burn_desc = 'Burn' | |
burn_parser = subparsers.add_parser('burn', description=burn_desc, help=burn_desc) | |
burn_subparsers = burn_parser.add_subparsers(metavar='', dest='subcommand_burn') | |
rosaburn_desc = 'Burn rosa' | |
rosaburn_parser = argparse.ArgumentParser(add_help=False) | |
rosaburn_parser.add_argument('-a', '--aws-account', help='Aws account file') | |
rosaburn_parser.set_defaults(func=burn_rosa) | |
burn_subparsers.add_parser('rosa', parents=[rosaburn_parser], description=rosaburn_desc, help=rosaburn_desc) | |
hypershiftburn_desc = 'Burn hypershift' | |
hypershiftburn_parser = argparse.ArgumentParser(add_help=False) | |
hypershiftburn_parser.add_argument('-a', '--agent', help='Agent type') | |
hypershiftburn_parser.set_defaults(func=burn_hypershift) | |
burn_subparsers.add_parser('hypershift', parents=[hypershiftburn_parser], description=hypershiftburn_desc, | |
help=hypershiftburn_desc) | |
if len(sys.argv) == 1: | |
parser.print_help() | |
os._exit(0) | |
args = parser.parse_args() | |
if not hasattr(args, 'func'): | |
for attr in dir(args): | |
if attr.startswith('subcommand_') and getattr(args, attr) is None: | |
split = attr.split('_') | |
if len(split) == 2: | |
subcommand = split[1] | |
get_subparser_print_help(parser, subcommand) | |
elif len(split) == 3: | |
subcommand = split[1] | |
subsubcommand = split[2] | |
subparser = get_subparser(parser, subcommand) | |
get_subparser_print_help(subparser, subsubcommand) | |
os._exit(0) | |
os._exit(0) | |
args.func(args) | |
if __name__ == '__main__': | |
cli() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment