Example #1
0
def dwim(f):
    source, filename, first_line = utilities.uncompile(f.func_code)
    tree = ast.parse(source)
    if isinstance(tree, ast.Module):
        fdef = tree.body[0]
        if isinstance(fdef, ast.FunctionDef):
            args = [x.id for x in fdef.args.args]
            if not hasattr(f, '__doc__'):
                raise ValueError("dwim requires docstring")
            question, newargs = terms.make_template(f.__doc__)
            terms.all_templates.add(question)
            permute = utilities.permutation_from(newargs, args)
            setting = terms.Setting()
            setting.append_line(question(*[terms.RefName(name) for name in newargs]))
            queue_to_learn(fdef.body, setting, f.__globals__, filename, first_line)
            terms.template_definitions[question.id] = locations.get_definition(f)
            def stub(*args):
                import runner
                Q = question(*(args[permute[i]] for i in range(len(args))))
                return runner.ask(Q)
            stub.template = question
            return stub
    else:
        raise ValueError()
Example #2
0
def term_from_args(s, args):
    template, keys = make_template(s)
    values = [arg[1] for arg in args]
    input_keys = [arg[0] for arg in args]
    permute = utilities.permutation_from(input_keys, keys)
    return(template(*(values[permute[i]] for i in range(len(keys)))))