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

1""" 

2Microscope handler automatic discovery service. 

3 

4Eliminates hardcoded imports by using pkgutil.walk_packages to discover 

5all handler implementations following OpenHCS generic solution principles. 

6""" 

7 

8import pkgutil 

9import importlib 

10import logging 

11from typing import List 

12 

13from .microscope_base import MICROSCOPE_HANDLERS 

14 

15logger = logging.getLogger(__name__) 

16 

17_discovery_completed = False 

18 

19 

20def discover_all_handlers() -> None: 

21 """Discover all microscope handlers by importing all modules.""" 

22 global _discovery_completed 

23 if _discovery_completed: 

24 return 

25 

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 

37 

38 _discovery_completed = True 

39 logger.debug(f"Discovered {len(MICROSCOPE_HANDLERS)} microscope handlers") 

40 

41 

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()) 

46 

47 

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