3030# pylint: disable=line-too-long
3131# pylint: disable=too-many-locals
3232
33+ if typing .TYPE_CHECKING : # pragma: no cover
34+ import colrev .record .qm .quality_model
35+
3336
3437class Upgrade (colrev .process .operation .Operation ):
3538 """Upgrade a CoLRev project."""
@@ -405,8 +408,17 @@ def _migrate_0_8_2(self) -> bool:
405408 return self .repo .is_dirty ()
406409
407410 def _migrate_0_8_3 (self ) -> bool :
408- # pylint: disable=too-many-branches
409411 settings = self ._load_settings_dict ()
412+ self ._migrate_0_8_3_settings (settings = settings )
413+ self ._save_settings (settings )
414+ self ._reload_review_manager_for_0_8_3 ()
415+ records = self .review_manager .dataset .load_records_dict ()
416+ quality_model = self .review_manager .get_qm ()
417+ self ._migrate_0_8_3_records (records = records , quality_model = quality_model )
418+ self .review_manager .dataset .save_records_dict (records )
419+ return self .repo .is_dirty ()
420+
421+ def _migrate_0_8_3_settings (self , * , settings : dict ) -> None :
410422 settings ["prep" ]["defects_to_ignore" ] = []
411423 if "curated_metadata" in str (self .review_manager .path ):
412424 settings ["prep" ]["defects_to_ignore" ] = [
@@ -422,50 +434,58 @@ def _migrate_0_8_3(self) -> bool:
422434 for x in p_round ["prep_package_endpoints" ]
423435 if x ["endpoint" ] != "colrev.global_ids_consistency_check"
424436 ]
425- self ._save_settings (settings )
437+
438+ def _reload_review_manager_for_0_8_3 (self ) -> None :
426439 self .review_manager = colrev .review_manager .ReviewManager (
427440 path_str = str (self .review_manager .path ), force_mode = True
428441 )
429442 self .review_manager .load_settings ()
430443 self .review_manager .get_load_operation ()
431- records = self .review_manager .dataset .load_records_dict ()
432- quality_model = self .review_manager .get_qm ()
433444
445+ def _migrate_0_8_3_records (
446+ self ,
447+ * ,
448+ records : dict ,
449+ quality_model : colrev .record .qm .quality_model .QualityModel ,
450+ ) -> None :
434451 # delete the masterdata provenance notes and apply the new quality model
435452 # replace not_missing > not-missing
436453 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-
454+ self ._migrate_0_8_3_record_metadata (record_dict = record_dict )
460455 record = colrev .record .record .Record (record_dict )
461456 prior_state = record .data [Fields .STATUS ]
462457 record .run_quality_model (quality_model )
463458 if prior_state == RecordState .rev_prescreen_excluded :
464459 record .data [ # pylint: disable=colrev-direct-status-assign
465460 Fields .STATUS
466461 ] = RecordState .rev_prescreen_excluded
467- self .review_manager .dataset .save_records_dict (records )
468- return self .repo .is_dirty ()
462+
463+ def _migrate_0_8_3_record_metadata (self , * , record_dict : dict ) -> None :
464+ if Fields .MD_PROV not in record_dict :
465+ return
466+
467+ not_missing_fields = []
468+ for key , prov in record_dict [Fields .MD_PROV ].items ():
469+ if "not-missing" in prov ["note" ]:
470+ not_missing_fields .append (key )
471+ prov ["note" ] = ""
472+ for key in not_missing_fields :
473+ record_dict [Fields .MD_PROV ][key ]["note" ] = "not-missing"
474+
475+ self ._delete_top_level_fields_for_0_8_3 (record_dict = record_dict )
476+ self ._delete_dprov_fields_for_0_8_3 (record_dict = record_dict )
477+
478+ def _delete_top_level_fields_for_0_8_3 (self , * , record_dict : dict ) -> None :
479+ for field in ("cited_by_file" , "cited_by_id" , "tei_id" ):
480+ if field in record_dict :
481+ del record_dict [field ]
482+
483+ def _delete_dprov_fields_for_0_8_3 (self , * , record_dict : dict ) -> None :
484+ if Fields .D_PROV not in record_dict :
485+ return
486+ for field in ("cited_by_file" , "cited_by_id" , "tei_id" ):
487+ if field in record_dict [Fields .D_PROV ]:
488+ del record_dict [Fields .D_PROV ][field ]
469489
470490 def _migrate_0_8_4 (self ) -> bool :
471491 records = self .review_manager .dataset .load_records_dict ()
0 commit comments