Skip to content

Instantly share code, notes, and snippets.

@karmab
Created June 14, 2023 11:04
Show Gist options
  • Save karmab/d3cda6c697255f8aaa8ee287d04d505a to your computer and use it in GitHub Desktop.
Save karmab/d3cda6c697255f8aaa8ee287d04d505a to your computer and use it in GitHub Desktop.
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