Create helper methods for parsing source code

This commit is contained in:
Bálint Bokros 2017-11-27 18:51:20 +01:00
parent 327376232d
commit b1159d6c3e
1 changed files with 26 additions and 0 deletions

26
lib/source_code.py Normal file
View File

@ -0,0 +1,26 @@
import ast
import inspect
import re
from io import StringIO
def find_local_variable_value(func, local_variable_name):
func_src = inspect.getsource(func)
func_ast = ast.parse(func_src)
for node in ast.walk(func_ast):
if isinstance(node, ast.Assign):
for target in node.targets:
if isinstance(target, ast.Name):
if target.id == local_variable_name:
return node.value.s
def get_source_code(func, strip_comments=False):
source = inspect.getsource(func)
if strip_comments:
# TODO: less fragile way to do this (tokenizer sadly inserts whitespaces all around)
comment_pattern = re.compile('^(\s.*)#.*$')
source = ''.join((
line for line in StringIO(source).readlines() if re.match(comment_pattern, line) is None
))
return source