@@ -405,8 +405,17 @@ def _migrate_0_8_2(self) -> bool:
405405 return self .repo .is_dirty ()
406406
407407 def _migrate_0_8_3 (self ) -> bool :
408- # pylint: disable=too-many-branches
409408 settings = self ._load_settings_dict ()
409+ self ._migrate_0_8_3_settings (settings = settings )
410+ self ._save_settings (settings )
411+ self ._reload_review_manager_for_0_8_3 ()
412+ records = self .review_manager .dataset .load_records_dict ()
413+ quality_model = self .review_manager .get_qm ()
414+ self ._migrate_0_8_3_records (records = records , quality_model = quality_model )
415+ self .review_manager .dataset .save_records_dict (records )
416+ return self .repo .is_dirty ()
417+
418+ def _migrate_0_8_3_settings (self , * , settings : dict ) -> None :
410419 settings ["prep" ]["defects_to_ignore" ] = []
411420 if "curated_metadata" in str (self .review_manager .path ):
412421 settings ["prep" ]["defects_to_ignore" ] = [
@@ -422,50 +431,53 @@ def _migrate_0_8_3(self) -> bool:
422431 for x in p_round ["prep_package_endpoints" ]
423432 if x ["endpoint" ] != "colrev.global_ids_consistency_check"
424433 ]
425- self ._save_settings (settings )
434+
435+ def _reload_review_manager_for_0_8_3 (self ) -> None :
426436 self .review_manager = colrev .review_manager .ReviewManager (
427437 path_str = str (self .review_manager .path ), force_mode = True
428438 )
429439 self .review_manager .load_settings ()
430440 self .review_manager .get_load_operation ()
431- records = self .review_manager .dataset .load_records_dict ()
432- quality_model = self .review_manager .get_qm ()
433441
442+ def _migrate_0_8_3_records (self , * , records : dict , quality_model : object ) -> None :
434443 # delete the masterdata provenance notes and apply the new quality model
435444 # replace not_missing > not-missing
436445 for record_dict in tqdm (records .values ()):
437- if Fields .MD_PROV not in record_dict :
438- continue
439- not_missing_fields = []
440- for key , prov in record_dict [Fields .MD_PROV ].items ():
441- if "not-missing" in prov ["note" ]:
442- not_missing_fields .append (key )
443- prov ["note" ] = ""
444- for key in not_missing_fields :
445- record_dict [Fields .MD_PROV ][key ]["note" ] = "not-missing"
446- if "cited_by_file" in record_dict :
447- del record_dict ["cited_by_file" ]
448- if "cited_by_id" in record_dict :
449- del record_dict ["cited_by_id" ]
450- if "tei_id" in record_dict :
451- del record_dict ["tei_id" ]
452- if Fields .D_PROV in record_dict :
453- if "cited_by_file" in record_dict [Fields .D_PROV ]:
454- del record_dict [Fields .D_PROV ]["cited_by_file" ]
455- if "cited_by_id" in record_dict [Fields .D_PROV ]:
456- del record_dict [Fields .D_PROV ]["cited_by_id" ]
457- if "tei_id" in record_dict [Fields .D_PROV ]:
458- del record_dict [Fields .D_PROV ]["tei_id" ]
459-
446+ self ._migrate_0_8_3_record_metadata (record_dict = record_dict )
460447 record = colrev .record .record .Record (record_dict )
461448 prior_state = record .data [Fields .STATUS ]
462449 record .run_quality_model (quality_model )
463450 if prior_state == RecordState .rev_prescreen_excluded :
464451 record .data [ # pylint: disable=colrev-direct-status-assign
465452 Fields .STATUS
466453 ] = RecordState .rev_prescreen_excluded
467- self .review_manager .dataset .save_records_dict (records )
468- return self .repo .is_dirty ()
454+
455+ def _migrate_0_8_3_record_metadata (self , * , record_dict : dict ) -> None :
456+ if Fields .MD_PROV not in record_dict :
457+ return
458+
459+ not_missing_fields = []
460+ for key , prov in record_dict [Fields .MD_PROV ].items ():
461+ if "not-missing" in prov ["note" ]:
462+ not_missing_fields .append (key )
463+ prov ["note" ] = ""
464+ for key in not_missing_fields :
465+ record_dict [Fields .MD_PROV ][key ]["note" ] = "not-missing"
466+
467+ self ._delete_top_level_fields_for_0_8_3 (record_dict = record_dict )
468+ self ._delete_dprov_fields_for_0_8_3 (record_dict = record_dict )
469+
470+ def _delete_top_level_fields_for_0_8_3 (self , * , record_dict : dict ) -> None :
471+ for field in ("cited_by_file" , "cited_by_id" , "tei_id" ):
472+ if field in record_dict :
473+ del record_dict [field ]
474+
475+ def _delete_dprov_fields_for_0_8_3 (self , * , record_dict : dict ) -> None :
476+ if Fields .D_PROV not in record_dict :
477+ return
478+ for field in ("cited_by_file" , "cited_by_id" , "tei_id" ):
479+ if field in record_dict [Fields .D_PROV ]:
480+ del record_dict [Fields .D_PROV ][field ]
469481
470482 def _migrate_0_8_4 (self ) -> bool :
471483 records = self .review_manager .dataset .load_records_dict ()
0 commit comments