66from madsci .common .types .resource_types import Asset , Consumable , Grid , Pool , Container
77from madsci .common .types .resource_types .definitions import ResourceDefinition
88
9- from ot2_rest_node import OT2Node
109
1110class Opentrons_Resources :
1211 def __init__ (self ):
@@ -25,6 +24,11 @@ def __init__(self):
2524 # dicts for pipette resources
2625 self .pipette_id_to_resource : Dict [str , Any ] = {}
2726 self .pipette_id_to_info : Dict [str , Dict ] = {}
27+
28+ self .logger = None
29+
30+ def initialize (self , logger ):
31+ self .logger = logger
2832
2933
3034 def parse_logfile (self , ot_log ):
@@ -33,66 +37,66 @@ def parse_logfile(self, ot_log):
3337 if not log_path .exists ():
3438 raise FileNotFoundError (f"Log file not found: { log_path } " )
3539
36- OT2Node .logger .log ("Log File" + log_path + " Grabbed" )
40+ self .logger .log ("Log File" + log_path + " Grabbed" )
3741 with open (log_path , 'r' ) as file :
3842 ot_log = json .load (file )
3943
40- OT2Node .logger .log (ot_log )
44+ self .logger .log (ot_log )
4145
4246 #two passes, one for all "load labware" commands, and one for all actions
4347
44- OT2Node .logger .log ("Processing setup commands" )
48+ self .logger .log ("Processing setup commands" )
4549 self .process_setup_commands (ot_log )
46- OT2Node .logger .log ("Processing protocol commands" )
50+ self .logger .log ("Processing protocol commands" )
4751 self .process_protocol_commands (ot_log )
4852
4953 def process_setup_commands (self , ot_log ):
5054 """process setup commands (loadLabware, loadPipette)"""
5155 commands = ot_log .get ('commands' , {}).get ('data' , [])
52- OT2Node .logger .log ("COMMANDS" )
53- OT2Node .logger .log (commands )
56+ self .logger .log ("COMMANDS" )
57+ self .logger .log (commands )
5458
5559 for command in commands :
5660 cmd_type = command .get ('commandType' )
57- OT2Node .logger .log ("COMMAND" )
58- OT2Node .logger .log (command )
59- OT2Node .logger .log ("COMMAND TYPE" )
60- OT2Node .logger .log (cmd_type )
61+ self .logger .log ("COMMAND" )
62+ self .logger .log (command )
63+ self .logger .log ("COMMAND TYPE" )
64+ self .logger .log (cmd_type )
6165
6266 if cmd_type == 'loadLabware' :
63- OT2Node .logger .log ("LOADING LABWARE" )
67+ self .logger .log ("LOADING LABWARE" )
6468 self .load_labware (command , ot_log )
6569 elif cmd_type == 'loadPipette' :
66- OT2Node .logger .log ("LAODING PIPETTE" )
70+ self .logger .log ("LAODING PIPETTE" )
6771 self .load_pipette (command , ot_log )
6872
6973
7074
7175 def process_protocol_commands (self , ot_log ):
7276 """process protocol actions"""
7377 commands = ot_log .get ('commands' , {}).get ('data' , [])
74- OT2Node .logger .log ("COMMANDS" )
75- OT2Node .logger .log (commands )
78+ self .logger .log ("COMMANDS" )
79+ self .logger .log (commands )
7680
7781 for command in commands :
7882 cmd_type = command .get ('commandType' )
79- OT2Node .logger .log ("COMMAND" )
80- OT2Node .logger .log (command )
81- OT2Node .logger .log ("COMMAND TYPE" )
82- OT2Node .logger .log (cmd_type )
83+ self .logger .log ("COMMAND" )
84+ self .logger .log (command )
85+ self .logger .log ("COMMAND TYPE" )
86+ self .logger .log (cmd_type )
8387
8488 try :
8589 if cmd_type == 'pickUpTip' :
8690 self .pick_up_tip (command , ot_log )
87- OT2Node .logger .log ("PICKING UP TIP" )
91+ self .logger .log ("PICKING UP TIP" )
8892 elif cmd_type == 'aspirate' :
89- OT2Node .logger .log ("ASPIRATING" )
93+ self .logger .log ("ASPIRATING" )
9094 self .aspirate (command , ot_log )
9195 elif cmd_type == 'dispense' :
92- OT2Node .logger .log ("DISPENSING" )
96+ self .logger .log ("DISPENSING" )
9397 self .dispense (command , ot_log )
9498 elif cmd_type == 'dropTip' :
95- OT2Node .logger .log ("DROPPING TIP" )
99+ self .logger .log ("DROPPING TIP" )
96100 self .drop_tip (command , ot_log )
97101 except Exception as e :
98102 error_msg = f"Error processing { cmd_type } at { command .get ('id' , 'unknown' )} : { str (e )} "
@@ -102,9 +106,9 @@ def load_labware(self, command, ot_log):
102106 """loads labware, tracks labware present in each deck slot"""
103107 params = command .get ('params' , {})
104108 result = command .get ('result' , {})
105- OT2Node .logger .log ("LABWARE PARAMS AND RESULT" )
106- OT2Node .logger .log ("PARAMS" , params )
107- OT2Node .logger .log ("RESULT" , result )
109+ self .logger .log ("LABWARE PARAMS AND RESULT" )
110+ self .logger .log ("PARAMS" , params )
111+ self .logger .log ("RESULT" , result )
108112
109113 #get labware id
110114 location = params .get ('location' , {})
@@ -113,10 +117,10 @@ def load_labware(self, command, ot_log):
113117 #string number 1-11
114118 slot_name = location .get ('slotName' , 'unknown' )
115119
116- OT2Node .logger .log ("LOCATION, LOADNAME, AND SLOT NAME" )
117- OT2Node .logger .log ("LOCATION" , location )
118- OT2Node .logger .log ("LOADNAME" , load_name )
119- OT2Node .logger .log ("SLOTNAME" , slot_name )
120+ self .logger .log ("LOCATION, LOADNAME, AND SLOT NAME" )
121+ self .logger .log ("LOCATION" , location )
122+ self .logger .log ("LOADNAME" , load_name )
123+ self .logger .log ("SLOTNAME" , slot_name )
120124
121125 #find matching id
122126 labware_id = None
@@ -125,19 +129,19 @@ def load_labware(self, command, ot_log):
125129 if (labware .get ('loadName' ) == load_name and
126130 labware .get ('location' , {}).get ('slotName' ) == slot_name ):
127131 labware_id = labware .get ('id' )
128- OT2Node .logger .log ("MATCHING ID FOUND" )
132+ self .logger .log ("MATCHING ID FOUND" )
129133 break
130134
131135 if not labware_id :
132- OT2Node .logger .log ("MATCHING ID NOT FOUND" )
136+ self .logger .log ("MATCHING ID NOT FOUND" )
133137 #just in case not found
134138 labware_id = f"labware_{ slot_name } _{ load_name } "
135139
136140 slot_name = location .get ('slotName' , 'unknown' )
137141
138142
139143 #store info
140- OT2Node .logger .log ("STORING LABWARE INFO" )
144+ self .logger .log ("STORING LABWARE INFO" )
141145 self .labware_id_to_info [labware_id ] = {
142146 'load_name' : load_name ,
143147 'display_name' : display_name ,
@@ -147,21 +151,21 @@ def load_labware(self, command, ot_log):
147151 }
148152
149153 #get or create labware in deck slot
150- OT2Node .logger .log ("LOOK FOR SLOT NAME IN DECK SLOTS" )
151- OT2Node .logger .log ("SLOT NAME" , slot_name )
152- OT2Node .logger .log ("DECK SLOTS" , self .deck_slots )
154+ self .logger .log ("LOOK FOR SLOT NAME IN DECK SLOTS" )
155+ self .logger .log ("SLOT NAME" , slot_name )
156+ self .logger .log ("DECK SLOTS" , self .deck_slots )
153157 if slot_name in self .deck_slots :
154- OT2Node .logger .log ("FOUND SLOT RESOURCE" , slot_resource )
158+ self .logger .log ("FOUND SLOT RESOURCE" , slot_resource )
155159 slot_resource = self .deck_slots [slot_name ]
156160 try :
157161 # #check if slot already has labware (child)
158162 # # query for existing labware in slot
159163
160164 # # Grid resource if tip rack
161- OT2Node .logger .log ("CHECKING IF RESOURCE IS A TIP RACK" )
162- OT2Node .logger .log ("LOAD NAME LOWER" , load_name .lower ())
165+ self .logger .log ("CHECKING IF RESOURCE IS A TIP RACK" )
166+ self .logger .log ("LOAD NAME LOWER" , load_name .lower ())
163167 if 'tip' in load_name .lower ():
164- OT2Node .logger .log ("IS TIP RACK" )
168+ self .logger .log ("IS TIP RACK" )
165169 #tip rack always 8x12 grid
166170 # labware_resource = Grid(
167171 # resource_name = f"{self.node_name}_{display_name}_{slot_name}",
@@ -175,25 +179,25 @@ def load_labware(self, command, ot_log):
175179 # }
176180 # )
177181 # labware_resource = self.client.add_resource(labware_resource)
178- OT2Node .logger .log ("CREATING TIP RACK RESOURCE FROM TEMPLATE" )
179- OT2Node .logger .log ("TEMPLATE NAME" , load_name )
180- OT2Node .logger .log ("RESOURCE NAME" , labware_id )
182+ self .logger .log ("CREATING TIP RACK RESOURCE FROM TEMPLATE" )
183+ self .logger .log ("TEMPLATE NAME" , load_name )
184+ self .logger .log ("RESOURCE NAME" , labware_id )
181185 labware_resource = self .client .create_resource_from_template (
182186 template_name = load_name ,
183187 resource_name = labware_id
184188 )
185189
186190
187191 #set as child of the deck slot
188- OT2Node .logger .log ("LABWARE RESOURCE" , labware_resource )
189- OT2Node .logger .log ("SETTING LABWARE RESOURCE AS CHILD OF DECK SLOT" )
190- OT2Node .logger .log ("SLOT RESOURCE" , slot_resource )
192+ self .logger .log ("LABWARE RESOURCE" , labware_resource )
193+ self .logger .log ("SETTING LABWARE RESOURCE AS CHILD OF DECK SLOT" )
194+ self .logger .log ("SLOT RESOURCE" , slot_resource )
191195 self .client .set_child (resource = slot_resource , key = "labware" , child = labware_resource )
192196 self .labware_id_to_resource [labware_id ] = labware_resource
193197
194198 elif 'plate' in load_name .lower () or 'well' in load_name .loawer ():
195- OT2Node .logger .log ("RESOURCE IS A PLATE" )
196- OT2Node .logger .log ("LOAD NAME LOWER" , load_name .lower ())
199+ self .logger .log ("RESOURCE IS A PLATE" )
200+ self .logger .log ("LOAD NAME LOWER" , load_name .lower ())
197201 #plate as grid, either 96 or 384
198202 if '96' in load_name :
199203 rows , cols = 8 , 12
@@ -215,23 +219,23 @@ def load_labware(self, command, ot_log):
215219 # }
216220 # )
217221 # labware_resource = self.client.add_resource(labware_resource)
218- OT2Node .logger .log ("CREATING PLATE RESOURCE FROM TEMPLATE" )
219- OT2Node .logger .log ("TEMPLATE NAME" , load_name )
220- OT2Node .logger .log ("RESOURCE NAME" , labware_id )
222+ self .logger .log ("CREATING PLATE RESOURCE FROM TEMPLATE" )
223+ self .logger .log ("TEMPLATE NAME" , load_name )
224+ self .logger .log ("RESOURCE NAME" , labware_id )
221225 labware_resource = self .client .create_resource_from_template (
222226 template_name = load_name ,
223227 resource_name = labware_id
224228 )
225229
226- OT2Node .logger .log ("LABWARE RESOURCE" , labware_resource )
227- OT2Node .logger .log ("SETTING LABWARE RESOURCE AS CHILD OF DECK SLOT" )
228- OT2Node .logger .log ("SLOT RESOURCE" , slot_resource )
230+ self .logger .log ("LABWARE RESOURCE" , labware_resource )
231+ self .logger .log ("SETTING LABWARE RESOURCE AS CHILD OF DECK SLOT" )
232+ self .logger .log ("SLOT RESOURCE" , slot_resource )
229233
230234 self .client .set_child (resource = slot_resource , key = "labware" , child = labware_resource )
231235 self .labware_id_to_resource [labware_id ] = labware_resource
232236
233237 else :
234- OT2Node .logger .log ("REGISTERING AS NEITHER PLATE OR TIP RACK" )
238+ self .logger .log ("REGISTERING AS NEITHER PLATE OR TIP RACK" )
235239 #TODO: add addional labware types, tuberacks and modules etc, generic container for now
236240 # labware_resource = Container(
237241 # resource_name=f"{self.node_name}_{display_name}_{slot_name}",
@@ -261,9 +265,9 @@ def load_pipette(self, command, ot_log):
261265 params = command .get ('params' , {})
262266 result = command .get ('result' , {})
263267
264- OT2Node .logger .log ("PIPETTE PARAMS AND RESULT" )
265- OT2Node .logger .log ("PARAMS" , params )
266- OT2Node .logger .log ("RESULT" , result )
268+ self .logger .log ("PIPETTE PARAMS AND RESULT" )
269+ self .logger .log ("PARAMS" , params )
270+ self .logger .log ("RESULT" , result )
267271
268272 pipette_id = result .get ('pipetteId' , params .get ('pipetteId' ))
269273 mount = params .get ('mount' , 'unknown' )
0 commit comments