registry.py 1.5 KB

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