Skip to content

Commit d0583c4

Browse files
committed
refactor: upgrade
1 parent 85dc55c commit d0583c4

1 file changed

Lines changed: 49 additions & 29 deletions

File tree

colrev/ops/upgrade.py

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
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

3437
class 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

Comments
 (0)