registry.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """Module registry system."""
  2. import logging
  3. logger = logging.getLogger(__name__)
  4. class ModuleRegistry:
  5. """Simple module registry without magic."""
  6. def __init__(self):
  7. self._modules = {}
  8. logger.debug("Initializing module registry")
  9. def register(self, module_class):
  10. """Register a module class."""
  11. # Module class defines its own name attribute
  12. logger.debug(f"Attempting to register module class '{module_class.name}'")
  13. if module_class.name in self._modules:
  14. logger.warning(f"Module '{module_class.name}' already registered, replacing with new implementation")
  15. self._modules[module_class.name] = module_class
  16. logger.info(f"Registered module '{module_class.name}' (total modules: {len(self._modules)})")
  17. logger.debug(f"Module '{module_class.name}' details: description='{module_class.description}', files={module_class.files}")
  18. def create_instances(self):
  19. """Create instances of all registered modules."""
  20. logger.info(f"Creating instances for {len(self._modules)} registered modules")
  21. instances = []
  22. failed_modules = []
  23. for name in sorted(self._modules.keys()):
  24. try:
  25. logger.debug(f"Attempting to create instance of module '{name}'")
  26. instance = self._modules[name]()
  27. instances.append(instance)
  28. logger.debug(f"Successfully instantiated module '{name}'")
  29. except Exception as e:
  30. logger.error(f"Failed to instantiate module '{name}': {e}")
  31. failed_modules.append(name)
  32. print(f"Warning: Could not instantiate {name}: {e}")
  33. if failed_modules:
  34. logger.warning(f"Failed to instantiate {len(failed_modules)} modules: {failed_modules}")
  35. logger.info(f"Successfully created {len(instances)} module instances out of {len(self._modules)} registered")
  36. if instances:
  37. logger.debug(f"Active modules: {[inst.name for inst in instances]}")
  38. return instances
  39. # Global registry
  40. registry = ModuleRegistry()