""" # Getting started ```python from docopt import docopt from magicli import magicli args = magically(docopt(__doc__)) ``` """ import inspect from docopt import docopt def magicli(args, glbls=None): """ Calls all callable functions with all arguments. """ # Get the `globals()` dict of the file from where the function is called. if not glbls: glbls = inspect.currentframe().f_back.f_globals cleaned_args = clean_args(args) args = args_set_in_cli(cleaned_args) for arg in args: if arg in glbls: func = glbls.get(arg) func_args = inspect.getargspec(func).args kwargs = {arg:args[arg] for arg in args if arg in func_args} func(**kwargs) return cleaned_args def clean_args(args): """ Creates a new dict of variables converted to correct function names. """ return {parse_function_name(key): args[key] for key in args} def parse_function_name(func): """ Convert variables to valid python function names. """ for char in ['<', '>', '-']: func = func.strip(char) return func.replace('-', '_') def args_set_in_cli(args): """ Returns a list of all dictionary entries that are specified in cli. """ return {arg:args[arg] for arg in args if args[arg]}