Coverage for openhcs/microscopes/handler_registry_service.py: 81.2%
26 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 18:33 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 18:33 +0000
1"""
2Microscope handler automatic discovery service.
4Eliminates hardcoded imports by using pkgutil.walk_packages to discover
5all handler implementations following OpenHCS generic solution principles.
6"""
8import pkgutil
9import importlib
10import logging
11from typing import List
13from .microscope_base import MICROSCOPE_HANDLERS
15logger = logging.getLogger(__name__)
17_discovery_completed = False
20def discover_all_handlers() -> None:
21 """Discover all microscope handlers by importing all modules."""
22 global _discovery_completed
23 if _discovery_completed:
24 return
26 import openhcs.microscopes
27 for importer, modname, ispkg in pkgutil.walk_packages(
28 openhcs.microscopes.__path__,
29 prefix="openhcs.microscopes."
30 ):
31 if ispkg or 'handler_registry_service' in modname:
32 continue
33 try:
34 importlib.import_module(modname)
35 except ImportError:
36 continue
38 _discovery_completed = True
39 logger.debug(f"Discovered {len(MICROSCOPE_HANDLERS)} microscope handlers")
42def get_all_handler_types() -> List[str]:
43 """Get list of all discovered handler types."""
44 discover_all_handlers()
45 return list(MICROSCOPE_HANDLERS.keys())
48def is_handler_available(handler_type: str) -> bool:
49 """Check if a handler type is available."""
50 discover_all_handlers()
51 return handler_type in MICROSCOPE_HANDLERS