105 lines
3.8 KiB
Python
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() |