@@ -323,10 +323,63 @@ def _fix_invalid_pointers_from_file(table_name: str, file_path: str) -> dict[str
323323 "fix-took-secs" : timedelta .total_seconds (end_time - start_time ),
324324 }
325325
326+ def _verify_pointers_from_file (table_name : str , file_path : str ) -> dict [str , Any ]:
327+ print (f"Verifying pointers from file { file_path } in table { table_name } ...." )
328+
329+ with open (file_path , "r" ) as f :
330+ pointer_ids = [line .split (":" )[0 ] for line in f .readlines ()]
331+
332+ verified_pointers = []
333+ invalid_pointers = []
334+ total_verified_count = 0
335+
336+ start_time = datetime .now (tz = timezone .utc )
337+
338+ for pointer_id in pointer_ids :
339+ try :
340+ response = dynamodb .get_item (
341+ TableName = table_name ,
342+ Key = {"pk" : {"S" : f"D#{ pointer_id } " }, "sk" : {"S" : f"D#{ pointer_id } " }}
343+ )
344+ item = response .get ("Item" )
345+ if not item :
346+ print (f"Pointer { pointer_id } not found." )
347+ continue
348+
349+ document = item .get ("document" , {}).get ("S" , "" )
350+ _validate_document (document )
351+ verified_pointers .append (pointer_id )
352+ total_verified_count += 1
353+
354+ except Exception as exc :
355+ print (f"Failed to verify document { pointer_id } : { exc } " )
356+ invalid_pointers .append (pointer_id )
357+
358+ if total_verified_count % 100 == 0 :
359+ print ("x" , end = "" , flush = True )
360+
361+ end_time = datetime .now (tz = timezone .utc )
362+
363+ print (f" Done. Verified { len (verified_pointers )} pointers" )
364+
365+ if len (invalid_pointers ) > 0 :
366+ print ("Writing invalid pointers IDs to file ./invalid_pointers_from_file.txt ..." )
367+ with open ("invalid_pointers_from_file.txt" , "w" ) as f :
368+ for _id in invalid_pointers :
369+ f .write (f"{ _id } \n " )
370+
371+ return {
372+ "verified_pointers" : verified_pointers ,
373+ "invalid_pointers" : invalid_pointers ,
374+ "total_verified_count" : total_verified_count ,
375+ "verify-took-secs" : timedelta .total_seconds (end_time - start_time ),
376+ }
377+
326378if __name__ == "__main__" :
327379 fire .Fire ({
328380 "find_and_delete_invalid_pointers" : _find_and_delete_invalid_pointers ,
329381 "fix_invalid_pointers" : _fix_invalid_pointers ,
330382 "find_invalid_pointers" : _find_invalid_pointers ,
331383 "fix_invalid_pointers_from_file" : _fix_invalid_pointers_from_file ,
384+ "verify_pointers_from_file" : _verify_pointers_from_file ,
332385 })
0 commit comments