FunSearchFlowModule / Loader.py
nbaldwin's picture
first version FunSearch
97e363b
raw
history blame
1.87 kB
import ast
import os
import yaml
class Loader:
def __init__(self, file_path, target_name):
self.py_file_path = file_path
self.target_name = target_name
if not os.path.exists(file_path):
raise ValueError(f"File {file_path} does not exist")
with open(file_path, 'r') as file:
self.source_code = file.read()
def load_target(self):
if self.py_file_path.endswith('.yaml'):
return self.load_yaml()
else:
return self.load_code()
def load_full_file(self):
return self.source_code
def load_code(self):
# Parse the source code into an abstract syntax tree (AST)
tree = ast.parse(self.source_code)
# Find the target node (FunctionDef, ClassDef, or variable)
target_node = None
for node in ast.walk(tree):
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef)) and node.name == self.target_name:
target_node = node
break
elif isinstance(node, ast.Assign):
for target in node.targets:
if isinstance(target, ast.Name) and target.id == self.target_name:
target_node = node
break
if target_node is not None:
# Extract the source code of the target
target_source_code = ast.unparse(target_node)
return target_source_code
else:
raise ValueError(f"Target '{self.target_name}' not found in the module.")
def load_yaml(self):
try:
with open(self.py_file_path, 'r') as yaml_file:
yaml_content = yaml.safe_load(yaml_file)
return yaml_content
except yaml.YAMLError as e:
raise ValueError(f"Error loading YAML file: {e}")