registry.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. """Module registry system."""
  2. from __future__ import annotations
  3. import logging
  4. from collections.abc import Iterator
  5. logger = logging.getLogger(__name__)
  6. class ModuleRegistry:
  7. """Simple module registry without magic."""
  8. def __init__(self) -> None:
  9. self._modules = {}
  10. logger.debug("Initializing module registry")
  11. def register(self, module_class: type) -> None:
  12. """Register a module class."""
  13. # Module class defines its own name attribute
  14. logger.debug(f"Attempting to register module class '{module_class.name}'")
  15. if module_class.name in self._modules:
  16. logger.warning(f"Module '{module_class.name}' already registered, replacing with new implementation")
  17. self._modules[module_class.name] = module_class
  18. logger.info(f"Registered module '{module_class.name}' (total modules: {len(self._modules)})")
  19. logger.debug(f"Module '{module_class.name}' details: description='{module_class.description}'")
  20. def iter_module_classes(self) -> Iterator[tuple[str, type]]:
  21. """Yield registered module classes without instantiating them."""
  22. logger.debug(f"Iterating over {len(self._modules)} registered module classes")
  23. for name in sorted(self._modules.keys()):
  24. yield name, self._modules[name]
  25. # Global registry
  26. registry = ModuleRegistry()