registry.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. """Module registry system."""
  2. from __future__ import annotations
  3. import logging
  4. from typing import Iterator, Type
  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(
  17. f"Module '{module_class.name}' already registered, replacing with new implementation"
  18. )
  19. self._modules[module_class.name] = module_class
  20. logger.info(
  21. f"Registered module '{module_class.name}' (total modules: {len(self._modules)})"
  22. )
  23. logger.debug(
  24. f"Module '{module_class.name}' details: description='{module_class.description}'"
  25. )
  26. def iter_module_classes(self) -> Iterator[tuple[str, Type]]:
  27. """Yield registered module classes without instantiating them."""
  28. logger.debug(f"Iterating over {len(self._modules)} registered module classes")
  29. for name in sorted(self._modules.keys()):
  30. yield name, self._modules[name]
  31. # Global registry
  32. registry = ModuleRegistry()