-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscanExportImSwitchManagers.py
142 lines (126 loc) · 6.93 KB
/
scanExportImSwitchManagers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import pkgutil
import inspect
import importlib
def categorize_classes(found_classes):
categorized = {
"DetectorManager": [],
"LaserManager": [],
"LEDMatrixManager": [],
"PositionerManager": [],
"StandsManager": [],
"RotatorManager": [],
"SuperScanManager": [],
"SignalInterface": []
}
# Iterate over the found classes and their parents
for class_path, parents in found_classes.items():
# Check if any of the manager classes are in the parents list
for manager in categorized.keys():
if manager in parents:
# Append the class (with its path) to the corresponding category
categorized[manager].append(class_path)
break # Assume each class belongs to only one category for simplicity
return categorized
def list_classes_and_parents(package, package_name=None, package_prefix="manager"):
found_classes = {}
if package_name is None:
package_name = package.__name__
# Iterate over all modules and sub-packages in the given package
for finder, modname, ispkg in pkgutil.walk_packages(package.__path__, prefix=package.__name__+'.'):
# For a sub-package, recursively call this function
if ispkg:
subpackage = importlib.import_module(modname)
found_classes.update(list_classes_and_parents(subpackage, package_name=modname))
else:
# Import the module
try:
module = importlib.import_module(modname)
except Exception as e:
#print(f"Error importing {modname}: {e}")
continue
# Iterate over all members of the module
for name, obj in inspect.getmembers(module, inspect.isclass):
# Filter classes that are defined in this module (to avoid imported ones)
if obj.__module__.startswith(package_name):
if obj.__module__.lower().find(package_prefix)>=0:
#print(obj.__module__)
# Get parent classes excluding 'object'
parents = [base.__name__ for base in inspect.getmro(obj) if base.__name__ != 'object' and base.__module__.startswith(package_name)]
found_classes[obj.__module__ + "." + name] = parents
return found_classes
# Example usage:
# First, import the package you're interested in
import imswitch
# Then, call the function with the package as argument
classes_and_parents = list_classes_and_parents(imswitch, "manager")
categorized_classes = categorize_classes(classes_and_parents)
for manager, classes in categorized_classes.items():
print(f"{manager}:")
for cls in classes:
print(f" - {cls}")
'''RESULT'''
allManagers = {
"DetectorManager":[
"imswitch.imcontrol.model.managers.detectors.APDManager.APDManager",
"imswitch.imcontrol.model.managers.detectors.DetectorManager.DetectorManager",
"imswitch.imcontrol.model.managers.detectors.AVManager.AVManager",
"imswitch.imcontrol.model.managers.detectors.BaslerManager.BaslerManager",
"imswitch.imcontrol.model.managers.detectors.ESP32CamManager.ESP32CamManager",
"imswitch.imcontrol.model.managers.detectors.ESP32SerialCamManager.ESP32SerialCamManager",
"imswitch.imcontrol.model.managers.detectors.GXPIPYManager.GXPIPYManager",
"imswitch.imcontrol.model.managers.detectors.HamamatsuManager.HamamatsuManager",
"imswitch.imcontrol.model.managers.detectors.HikCamManager.HikCamManager",
"imswitch.imcontrol.model.managers.detectors.JetsonCamManager.JetsonCamManager",
"imswitch.imcontrol.model.managers.detectors.OFMCamManager.OFMCamManager",
"imswitch.imcontrol.model.managers.detectors.OpenCVCamManager.OpenCVCamManager",
"imswitch.imcontrol.model.managers.detectors.PCOManager.PCOManager",
"imswitch.imcontrol.model.managers.detectors.PhotometricsManager.PhotometricsManager",
"imswitch.imcontrol.model.managers.detectors.PiCamManager.PiCamManager",
"imswitch.imcontrol.model.managers.detectors.TEMPLATECamManager.TEMPLATECamManager",
"imswitch.imcontrol.model.managers.detectors.TISManager.TISManager",
"imswitch.imcontrol.model.managers.detectors.ThorCamSciManager.ThorCamSciManager",
"imswitch.imcontrol.model.managers.detectors.ThorCamSciManager__.ThorCamSciManager",
"..."
],
"LaserManager":[
"imswitch.imcontrol.model.managers.lasers.AAAOTFLaserManager.AAAOTFLaserManager",
"imswitch.imcontrol.model.managers.lasers.LaserManager.LaserManager",
"imswitch.imcontrol.model.managers.lasers.Cobolt0601LaserManager.Cobolt0601LaserManager",
"imswitch.imcontrol.model.managers.lasers.LantzLaserManager.LantzLaserManager",
"imswitch.imcontrol.model.managers.lasers.CoboltLaserManager.CoboltLaserManager",
"imswitch.imcontrol.model.managers.lasers.CoolLEDLaserManager.CoolLEDLaserManager",
"imswitch.imcontrol.model.managers.lasers.ESP32LEDLaserManager.ESP32LEDLaserManager",
"imswitch.imcontrol.model.managers.lasers.ESP32LightSheetManager.ESP32LightsheetManager",
"imswitch.imcontrol.model.managers.lasers.PyMicroscopeLaserManager.PyMicroscopeLaserManager",
"imswitch.imcontrol.model.managers.lasers.SQUIDLaserManager.SQUIDLaserManager",
"imswitch.imcontrol.model.managers.lasers.SQUIDLedManager.SQUIDLedManager",
"imswitch.imcontrol.model.managers.lasers.VirtualLaserManager.VirtualLaserManager"
],
"LEDMatrixManager":[
"imswitch.imcontrol.model.managers.LEDMatrixs.ESP32LEDMatrixManager.ESP32LEDMatrixManager",
"imswitch.imcontrol.model.managers.LEDMatrixs.LEDMatrixManager.LEDMatrixManager"
],
"PositionerManager":[
"imswitch.imcontrol.model.managers.positioners.ESP32StageManager.ESP32StageManager",
"imswitch.imcontrol.model.managers.positioners.PositionerManager.PositionerManager",
"imswitch.imcontrol.model.managers.positioners.MHXYStageManager.MHXYStageManager",
"imswitch.imcontrol.model.managers.positioners.MockPositionerManager.MockPositionerManager",
"imswitch.imcontrol.model.managers.positioners.OFMStageManager.OFMStageManager",
"imswitch.imcontrol.model.managers.positioners.PiezoconceptZManager.PiezoconceptZManager",
"imswitch.imcontrol.model.managers.positioners.VirtualStageManager.VirtualStageManager"
],
"StandsManager":[
],
"RotatorManager":[
],
"SuperScanManager":[
"imswitch.imcontrol.model.managers.ScanManagerBase.ScanManagerBase",
"imswitch.imcontrol.model.managers.ScanManagerMoNaLISA.ScanManagerMoNaLISA",
"imswitch.imcontrol.model.managers.ScanManagerPointScan.ScanManagerPointScan",
"imswitch.imcontrol.model.managers.ScanManager.ScanManager",
"imswitch.imcontrol.model.managers.ScanManager.SuperScanManager",
"imswitch.imcontrol.model.managers.ScanManagerBase.SuperScanManager"
],
"SignalInterface":[
]
}