@@ -74,12 +74,18 @@ def __init__(self, db):
7474
7575 def process_slide_manifest_imports (self ):
7676 new_records = self .db .get_new_slide_manifest_import_rows ()
77+ redcap_ids_processed = []
7778 for record in new_records :
7879 record_in_error = False
7980 error_message = ""
8081 kit_id = record ["outside_acc" ]
8182 image_id = record ["image_id" ]
8283 redcap_id = self .db .get_spectrack_redcap_record_id (kit_id )
84+ if redcap_id is None :
85+ error_message = "No redcap_id found for kit_id " + kit_id + "; "
86+ logger .error (error_message )
87+ continue
88+
8389 if record ["accession" ] is not None :
8490 new_file_name = self .determine_new_slide_name (sample_id = record ["accession" ], kit_id = kit_id ,
8591 stain_info = record ["stain" ], block_id = record ["block_id" ])
@@ -99,25 +105,32 @@ def process_slide_manifest_imports(self):
99105 source_file_name = file_location .name
100106 source_folder_name = file_location .parent .name
101107
102- check_missing_slides = self .db .get_missing_slides (redcap_id )
103- if len (check_missing_slides ) >= 1 :
104-
105- slide_scan = SlideScanModel (image_id = image_id , redcap_id = redcap_id , kit_id = kit_id ,
106- new_file_name = new_file_name , source_file_name = source_file_name ,
107- source_folder_name = source_folder_name )
108-
109- self .db .insert_into_slide_scan_curation (slide_scan .get_dmd_tuple ())
110- else :
111-
112- error_message += "There are missing slides for participant " + redcap_id + ";"
113- logger .info (error_message )
108+ slide_scan = SlideScanModel (image_id = image_id , redcap_id = redcap_id , kit_id = kit_id ,
109+ new_file_name = new_file_name , source_file_name = source_file_name ,
110+ source_folder_name = source_folder_name )
111+ self .db .insert_into_slide_scan_curation (slide_scan .get_dmd_tuple ())
112+
113+ check_missing_slides = self .db .get_missing_slides_from_view (redcap_id )
114+ redcap_ids_processed .append (redcap_id )
115+ if all (check_missing_slides ):
114116 self .db .update_missing_slides (redcap_id )
115-
116- # Can't use record_in_error here because we can't set an error message for an image_id that doens't exist
117- self .db .set_error_message_slide_scan_curation_redcap_id (error = error_message , redcap_id = redcap_id )
118-
117+
119118 if record_in_error :
120119 self .db .set_error_message_slide_scan_curation (image_id = image_id , error = error_message )
120+ logger .info ("Processed " + str (len (new_records )) + " new slide_manifest_import records." )
121+
122+ for redcap_id in redcap_ids_processed :
123+ self .update_missing_slides (redcap_id )
124+
125+ def update_missing_slides (self , redcap_id : str ):
126+ # This MAY seem redundant, however this will ensure that we unmark any missing slides records that just got
127+ # the missing one added
128+ missing_slides = self .db .get_missing_slides_from_view (redcap_id )
129+ if not missing_slides or len (missing_slides ) == 0 :
130+ slides_marked_missing = self .db .slides_marked_missing_by_redcap_id (redcap_id )
131+ if slides_marked_missing and len (slides_marked_missing ) > 0 :
132+ for slide in slides_marked_missing :
133+ self .db .update_missing_slide_flag (slide ['image_id' ])
121134
122135 def determine_new_slide_name (self , sample_id : str , kit_id : str , stain_info : str , block_id : str ):
123136 slides_for_kit = self .db .get_slide_manifest_import_by_kit (kit_id , stain_info )
@@ -133,3 +146,18 @@ def determine_new_slide_name(self, sample_id: str, kit_id: str, stain_info: str,
133146 return None
134147 else :
135148 return sample_id + "_" + stain_type + "_" + str (numerator ) + "of" + str (denominator ) + ".svs"
149+
150+ def fill_in_package_ids (self ):
151+ redcap_id_list = self .db .get_redcap_ids_with_null_package_id ()
152+ if len (redcap_id_list ) != 0 :
153+ for row in redcap_id_list :
154+ redcap_id = row ['redcap_id' ]
155+ package_id_list = self .db .get_package_ids_for_redcap_id (redcap_id )
156+ if None not in package_id_list and len (package_id_list ) == 1 :
157+ package_id = package_id_list [0 ]['dlu_package_id' ]
158+ self .db .update_package_ids_in_slide_scan_curation (redcap_id = redcap_id , package_id = package_id )
159+ logger .info ("Updated package id " + package_id + " for redcap id " + redcap_id )
160+ elif len (package_id_list ) > 1 :
161+ error_message = "Multiple dlu_package_ids found for redcap_id " + redcap_id + ", unable to fill in package id."
162+ logger .info (error_message )
163+ self .db .set_error_message_slide_scan_curation_redcap_id (error = error_message , redcap_id = redcap_id )
0 commit comments