from gooey.python_bindings import code_prep, source_parser __author__ = 'Chris' """ Pretty Printing util for inspecting the various ast objects """ import ast from _ast import Assign def pretty_print(node, indent): d = node.__dict__ for k, v in d.iteritems(): if isinstance(v, list): print '-' * indent, k, ": " for i in v: pretty_print(i, indent + 2) elif 'ast' in str(type(v)): pretty_print(v, indent + 2) else: print '-' * indent, k, ": ", v if __name__ == '__main__': lines = ''' def main(): x = 1 y = 2 foo, doo = ("poo", "poo") smarser = argparse.ArgumentParser(description='Example Argparse Program', formatter_class=RawDescriptionHelpFormatter) random_junk = 123412353454356 smarser.add_argument("filename", help="Name of the file you want to read") # positional' smarser.add_argument("outfile", help="Name of the file where you'll save the output") # positional bar = x + y baz = random_junk * 5 ''' lines2 = ''' def main(): try: foo, doo = ("poo", "poo") smarser = argparse.ArgumentParser(description='Example Argparse Program', formatter_class=RawDescriptionHelpFormatter) smarser.add_argument("filename", help="Name of the file you want to read") # positional' smarser.add_argument("outfile", help="Name of the file where you'll save the output") # positional smarser.parse_args() except: pass ''' git_example = ''' from argparse import ArgumentParser def main(): """Main""" bar = 'bar' print "Hello!" description='Desc' parser = ArgumentParser(description=bar) parser.add_argument(bar, help=('bar')) ################## return parser # args = parser.parse_args() # print(args) # return True ''' nodes = ast.parse(git_example) assign = source_parser.get_nodes_by_instance_type(nodes, Assign) assignment = source_parser.get_nodes_by_containing_attr(assign, "ArgumentParser") print assignment print assignment[0].__dict__ p = source_parser.convert_to_python(assignment)[0] print p varname, instruction = code_prep.split_line(source_parser.convert_to_python(assignment)[0]) updated_code = git_example.replace(varname, "jello_maker") print 'Fusdo:', updated_code.split('\n')[8] # all_code_leading_up_to_parseargs = '\n'.join(itertools.takewhile(lambda line: 'parse_args()' not in line, updated_code.split('\n'))) # code = compile(all_code_leading_up_to_parseargs, '', 'exec') # exec(code) # parser = main() # print parser._actions # print assign[0].value.func.__dict__ # print assign[0].value.keywords[0].value.__dict__ # pretty_print(assign[0], 1)