Spaces:
Sleeping
Sleeping
File size: 3,914 Bytes
b9bf0fc f0a2335 b9bf0fc f0a2335 b9bf0fc f0a2335 b9bf0fc f0a2335 b9bf0fc f0a2335 b9bf0fc f0a2335 b9bf0fc f0a2335 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import sys
import inspect
import importlib.util
from pathlib import Path
# PATH CONFIGURATION
# 1. Get the folder where this script is (e.g., EngChain/src)
CURRENT_DIR = Path(__file__).resolve().parent
# 2. Get the project root (e.g., EngChain)
PROJECT_ROOT = CURRENT_DIR.parent
# 3. Define where templates live
BASE_DIR = PROJECT_ROOT / "data" / "templates" / "branches"
def get_branches():
if not BASE_DIR.exists(): return []
return sorted([d.name for d in BASE_DIR.iterdir() if d.is_dir() and not d.name.startswith("__")])
def get_areas(branch_name):
branch_path = BASE_DIR / branch_name
if not branch_path.exists(): return []
return sorted([d.name for d in branch_path.iterdir() if d.is_dir() and not d.name.startswith("__")])
def get_template_files(branch_name, area_name):
area_path = BASE_DIR / branch_name / area_name
if not area_path.exists(): return []
return sorted([f.stem for f in area_path.glob("*.py") if f.name not in ["constants.py", "__init__.py"] and not f.name.startswith("__")])
def load_template_functions(branch, area, filename):
file_path = BASE_DIR / branch / area / f"{filename}.py"
if not file_path.exists(): raise FileNotFoundError(f"File not found: {file_path}")
# CRITICAL FIX: Add Project Root to sys.path
# This ensures 'from data...' imports work, preventing the silent crash
if str(PROJECT_ROOT) not in sys.path:
sys.path.append(str(PROJECT_ROOT))
spec = importlib.util.spec_from_file_location(filename, file_path)
module = importlib.util.module_from_spec(spec)
try:
spec.loader.exec_module(module)
except Exception as e:
print(f"!!! Error loading module '{filename}': {e}")
return []
templates = []
for name, obj in inspect.getmembers(module):
if inspect.isfunction(obj) and name.startswith("template_"):
templates.append((name, obj))
return sorted(templates, key=lambda x: x[0])
def get_source_code(func_object):
"""Extracts ONLY the function code, not the whole file."""
try:
return inspect.getsource(func_object)
except OSError:
return "# Error: Source not available."
if __name__ == "__main__":
print(" 1. Testing get_branches ")
branches = get_branches()
print(f"Branches found: {branches}")
if branches:
# Test with the first available branch
selected_branch = branches[0]
print(f"\n 2. Testing get_areas for '{selected_branch}' ")
areas = get_areas(selected_branch)
print(f"Areas found: {areas}")
if areas:
# Test with the first available area
selected_area = areas[0]
print(f"\n 3. Testing get_template_files for '{selected_area}' ")
files = get_template_files(selected_branch, selected_area)
print(f"Files found: {files}")
if files:
# Test with the first available file
selected_file = files[1]
print(f"\n 4. Testing load_template_functions for '{selected_file}' ")
funcs = load_template_functions(selected_branch, selected_area, selected_file)
func_names = [f[0] for f in funcs]
print(f"Functions found: {func_names}")
if funcs:
# Test getting source code for the FIRST function found
first_func_name, first_func_obj = funcs[2]
print(f"\n 5. Testing get_source_code for '{first_func_name}' ")
code = get_source_code(first_func_obj)
print(f"Source code preview:\n{code}...")
else:
print("\n 5. Skipped (No functions found to extract code from) ")
|