mirror of https://github.com/chriskiehl/Gooey.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.7 KiB
79 lines
2.7 KiB
'''
|
|
Created on Jan 15 2019
|
|
|
|
@author: Jonathan Schultz
|
|
|
|
This file contains code that allows the default argument values to be specified
|
|
on the command line.
|
|
'''
|
|
|
|
from argparse import _SubParsersAction
|
|
|
|
def parse_cmd_args(self, args=None):
|
|
|
|
def prepare_to_read_cmd_args(item):
|
|
'''
|
|
Before reading the command-line arguments, we need to fudge a few things:
|
|
1. If there are subparsers, we need a dest in order to know in which
|
|
subparser the command-line values should be stored.
|
|
2. Any required argument or mutex group needs to be made not required,
|
|
otherwise it will be compulsory to enter those values on the command
|
|
line.
|
|
We save the everything as it was before the fudge, so we can restore later.
|
|
'''
|
|
for action in item._actions:
|
|
if isinstance(action, _SubParsersAction):
|
|
action.save_dest = action.dest
|
|
if not action.dest:
|
|
action.dest = '_subparser'
|
|
else:
|
|
action.save_required = action.required
|
|
action.required = False
|
|
action.save_nargs = action.nargs
|
|
if action.nargs == '+':
|
|
action.nargs = '*'
|
|
elif action.nargs is None:
|
|
action.nargs = '?'
|
|
|
|
for mutex_group in item._mutually_exclusive_groups:
|
|
mutex_group.save_required = mutex_group.required
|
|
mutex_group.required = False
|
|
|
|
def overwrite_default_values(item, cmd_args):
|
|
'''
|
|
Subsistute arguments provided on the command line in the place of the
|
|
default values provided to argparse.
|
|
'''
|
|
for action in item._actions:
|
|
if isinstance(action, _SubParsersAction):
|
|
subparser_arg = getattr(cmd_args, action.dest, None)
|
|
if subparser_arg:
|
|
overwrite_default_values(action.choices[subparser_arg], cmd_args)
|
|
else:
|
|
dest = getattr(action, 'dest', None)
|
|
if dest:
|
|
cmd_arg = getattr(cmd_args, dest, None)
|
|
if cmd_arg:
|
|
action.default = cmd_arg
|
|
|
|
def restore_original_configuration(item):
|
|
'''
|
|
Restore the old values as they were to start with.
|
|
'''
|
|
for action in item._actions:
|
|
if isinstance(action, _SubParsersAction):
|
|
action.dest = action.save_dest
|
|
del action.save_dest
|
|
else:
|
|
action.required = action.save_required
|
|
del action.save_required
|
|
action.nargs = action.save_nargs
|
|
del action.save_nargs
|
|
|
|
for mutex_group in item._mutually_exclusive_groups:
|
|
mutex_group.required = mutex_group.save_required
|
|
del mutex_group.save_required
|
|
|
|
prepare_to_read_cmd_args(self)
|
|
overwrite_default_values(self, self.original_parse_args(args))
|
|
restore_original_configuration(self)
|