Files
2025-01-04 23:38:55 +00:00

105 lines
3.8 KiB
Python

"""Generate tooltip stubs for node classes"""
import os
from pathlib import Path
def generate_tooltip_file(category: str, node_classes: list) -> str:
"""Generate tooltip file content"""
lines = [
f'"""Tooltips for {category}-related nodes."""',
"",
"from ..tooltip_manager import TooltipManager",
"",
"def register_tooltips():",
f' """Register tooltips for {category} nodes"""',
""
]
for node_class in node_classes:
class_name = node_class["name"]
bases = node_class["bases"]
# Add class comment
if bases:
lines.append(f" # {class_name} tooltips (inherits from: {', '.join(bases)})")
else:
lines.append(f" # {class_name} tooltips")
# Start tooltip registration
lines.append(f' TooltipManager.register_tooltips("{class_name}", {{')
lines.append(' # TODO: Add parameter tooltips')
# Close registration
if bases:
# For multiple inheritance, pass all bases
if len(bases) > 1:
lines.append(f" }}, inherits_from={repr(bases)})")
else:
lines.append(f" }}, inherits_from='{bases[0]}')")
else:
lines.append(" })")
lines.append("")
return "\n".join(lines)
def main():
"""Main function"""
# Create output directories
tooltips_dir = Path("tooltips")
categories_dir = tooltips_dir / "categories"
categories_dir.mkdir(parents=True, exist_ok=True)
print(f"Created directories: {tooltips_dir}, {categories_dir}")
# Create __init__.py files
(tooltips_dir / "__init__.py").write_text('"""Tooltip system"""\n')
(categories_dir / "__init__.py").write_text('"""Tooltip categories"""\n')
# Process each category directory
nodes_dir = Path("nodes")
print(f"Looking for nodes in: {nodes_dir}")
for category_dir in nodes_dir.iterdir():
if not category_dir.is_dir() or category_dir.name.startswith("_"):
continue
category = category_dir.name
print(f"\nProcessing category: {category}")
node_classes = []
# Find all Python files
for py_file in category_dir.glob("*.py"):
if py_file.name.startswith("_"):
continue
print(f" Processing file: {py_file.name}")
# Read file content
content = py_file.read_text()
# Find class definitions
in_class = False
class_name = None
bases = []
for line in content.split("\n"):
if line.strip().startswith("class "):
class_def = line.strip().replace("class ", "").replace(":", "")
if "(" in class_def:
class_name = class_def.split("(")[0].strip()
bases = [b.strip() for b in class_def.split("(")[1].rstrip(")").split(",")]
# Clean up any empty bases
bases = [b for b in bases if b]
else:
class_name = class_def.strip()
bases = []
print(f" Found class: {class_name} (bases: {bases})")
node_classes.append({
"name": class_name,
"bases": bases
})
if node_classes:
# Generate and write tooltip file
tooltip_file = categories_dir / f"{category}.py"
tooltip_file.write_text(generate_tooltip_file(category, node_classes))
print(f"Generated {tooltip_file} with {len(node_classes)} classes")
if __name__ == "__main__":
main()