Skip to main content
Glama
__init__.py5.48 kB
""" Events for FreeCAD AI addon. This module contains event handlers for document changes, command execution, and error handling. """ # Import event handlers EVENTS_AVAILABLE = False available_handlers = [] # Try importing each handler individually to be more robust handlers_to_import = [ ("base", "EventHandler"), ("event_router", "EventRouter"), ("event_manager", "EventManager"), ("mcp_integration", "MCPEventIntegration"), ("document_events", "DocumentEventHandler"), ("command_events", "CommandEventHandler"), ("error_events", "ErrorEventHandler"), ] for module_name, class_name in handlers_to_import: try: if module_name == "base": from .base import EventHandler globals()["EventHandler"] = EventHandler available_handlers.append("EventHandler") elif module_name == "event_router": from .event_router import EventRouter globals()["EventRouter"] = EventRouter available_handlers.append("EventRouter") elif module_name == "event_manager": from .event_manager import EventManager globals()["EventManager"] = EventManager available_handlers.append("EventManager") elif module_name == "mcp_integration": from .mcp_integration import MCPEventIntegration globals()["MCPEventIntegration"] = MCPEventIntegration available_handlers.append("MCPEventIntegration") elif module_name == "document_events": from .document_events import DocumentEventProvider as DocumentEventHandler globals()["DocumentEventHandler"] = DocumentEventHandler available_handlers.append("DocumentEventHandler") elif module_name == "command_events": from .command_events import ( CommandExecutionEventProvider as CommandEventHandler, ) globals()["CommandEventHandler"] = CommandEventHandler available_handlers.append("CommandEventHandler") elif module_name == "error_events": from .error_events import ErrorEventProvider as ErrorEventHandler globals()["ErrorEventHandler"] = ErrorEventHandler available_handlers.append("ErrorEventHandler") except ImportError as e: try: import FreeCAD FreeCAD.Console.PrintWarning( f"FreeCAD AI: Failed to import {class_name}: {e}\n" ) except ImportError: print(f"FreeCAD AI: Failed to import {class_name}: {e}") if available_handlers: EVENTS_AVAILABLE = True __all__ = available_handlers + ["EVENTS_AVAILABLE"] # Convenience functions for setting up the events system def create_event_system(freecad_app=None, max_history_size=1000, max_error_history=50, max_command_history=100): """ Create and initialize a complete events system. Args: freecad_app: Optional FreeCAD application instance max_history_size: Maximum size for event router history max_error_history: Maximum size for error history max_command_history: Maximum size for command history Returns: Tuple of (EventManager, MCPEventIntegration) or (None, None) if failed """ if not EVENTS_AVAILABLE: try: import FreeCAD FreeCAD.Console.PrintWarning("FreeCAD AI: Events system not available\n") except ImportError: print("FreeCAD AI: Events system not available") return None, None try: # Create event manager with configurable history sizes event_manager = EventManager( freecad_app, max_history_size=max_history_size, max_error_history=max_error_history, max_command_history=max_command_history ) # Create MCP integration mcp_integration = MCPEventIntegration(event_manager) return event_manager, mcp_integration except Exception as e: try: import FreeCAD FreeCAD.Console.PrintError(f"FreeCAD AI: Failed to create events system: {e}\n") except ImportError: print(f"FreeCAD AI: Failed to create events system: {e}") return None, None async def initialize_event_system(freecad_app=None, max_history_size=1000, max_error_history=50, max_command_history=100): """ Create and initialize a complete events system asynchronously. Args: freecad_app: Optional FreeCAD application instance max_history_size: Maximum size for event router history max_error_history: Maximum size for error history max_command_history: Maximum size for command history Returns: Tuple of (EventManager, MCPEventIntegration) or (None, None) if failed """ event_manager, mcp_integration = create_event_system( freecad_app, max_history_size, max_error_history, max_command_history ) if event_manager is None: return None, None # Initialize the event manager success = await event_manager.initialize() if not success: try: import FreeCAD FreeCAD.Console.PrintError("FreeCAD AI: Failed to initialize events system\n") except ImportError: print("FreeCAD AI: Failed to initialize events system") return None, None return event_manager, mcp_integration

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jango-blockchained/mcp-freecad'

If you have feedback or need assistance with the MCP directory API, please join our Discord server