Skip to content

Instantly share code, notes, and snippets.

@dirn
Last active March 15, 2016 17:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dirn/0683b3f8ff29890a4150 to your computer and use it in GitHub Desktop.
Save dirn/0683b3f8ff29890a4150 to your computer and use it in GitHub Desktop.
def _split_args(f):
@wraps(f)
def dispatch(parsed_args, *args, **kwargs):
parsed_args = vars(parsed_args)
parsed_args.pop('_functions_stack', None)
return f(**parsed_args)
return dispatch
def register_commands(functions, namespace=None, namespace_kwargs=None,
func_kwargs=None, title=None, description=None, help=None):
to_add = []
for function in functions:
spec = inspect.getfullargspec(function)
if 'app' in spec.args:
function = _split_args(expects_obj(function))
if not spec.defaults:
defaults = {}
else:
defaults = dict(zip(
spec.args[-len(spec.defaults):],
spec.defaults))
for argument in spec.args:
if argument == 'app':
continue
kwargs = {}
with suppress(KeyError):
kwargs['default'] = defaults[argument]
kwargs['nargs'] = '?'
with suppress(KeyError):
kwargs['help'] = spec.annotations[argument]
function = arg(argument, **kwargs)(function)
to_add.append(function)
parser.add_commands(to_add, namespace=namespace)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment