Source code for tooluniverse.generate_lazy_registry

#!/usr/bin/env python3
"""
Generate a static lazy registry file for frozen/bundled environments.
Run this script BEFORE building the MCP bundle (e.g., with PyInstaller or Nuitka).
It scans the source code for tools and writes a static mapping to _lazy_registry_static.py.
"""

import os
import sys
import json
from pathlib import Path

# Add src to path to import tooluniverse
src_path = Path(__file__).parent.parent
sys.path.insert(0, str(src_path))

try:
    from tooluniverse.tool_registry import build_lazy_registry
except ImportError:
    print(
        "Error: Could not import tooluniverse. Ensure you are running from the project root or src directory."
    )
    sys.exit(1)


[docs] def main(): print("🔍 Scanning for tools using AST discovery...") # Build the registry using the existing AST logic # This requires the source files to be present (which they are, right now, before build) registry = build_lazy_registry() if not registry: print("⚠️ Warning: No tools discovered! The static registry will be empty.") else: print(f"✅ Discovered {len(registry)} tool classes.") # Generate the static file content output_path = Path(__file__).parent / "_lazy_registry_static.py" content = f'''""" STATIC LAZY REGISTRY - GENERATED FILE Do not edit manually. generated by generate_lazy_registry.py This file allows lazy loading to work in frozen environments where source files are missing. """ # Map of tool_name -> module_name STATIC_LAZY_REGISTRY = {json.dumps(registry, indent=4, sort_keys=True)} ''' print(f"💾 Writing static registry to {output_path}...") output_path.write_text(content, encoding="utf-8") print("✨ Done! You can now build the bundle.")
if __name__ == "__main__": main()