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.

93 lines
2.7 KiB

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)