@@ -135,14 +135,19 @@ def set_initial_import_provenance(record: colrev.record.record.Record) -> None:
135135 set_initial_import_provenance (record )
136136 record .run_quality_model (self .quality_model )
137137
138- def _import_record (self , * , record_dict : dict ) -> dict :
138+ def import_record (self , * , record_dict : dict , records : dict ) -> dict :
139+ """Import a record_dict to the records"""
140+
139141 self .review_manager .logger .debug (f"import_record { record_dict [Fields .ID ]} : " )
140142
141143 record = colrev .record .record .Record (record_dict )
142144
143145 # For better readability of the git diff:
144146 self .load_formatter .run (record )
145147
148+ if Fields .ORIGIN not in record_dict :
149+ print (f"Error: { record_dict [Fields .ID ]} has no origin" )
150+
146151 self ._import_provenance (record )
147152
148153 if record .data [Fields .STATUS ] in [
@@ -157,6 +162,25 @@ def _import_record(self, *, record_dict: dict) -> dict:
157162 f"{ record .data ['ID' ]} { Colors .END } "
158163 )
159164
165+ # Make sure not to replace existing records
166+ order = 0
167+ letters = list (string .ascii_lowercase )
168+ next_unique_id = record .data [Fields .ID ]
169+ appends : list = []
170+ while next_unique_id in records :
171+ if len (appends ) == 0 :
172+ order += 1
173+ appends = list (itertools .product (letters , repeat = order ))
174+ next_unique_id = record .data [Fields .ID ] + "" .join (list (appends .pop (0 )))
175+ record .data [Fields .ID ] = next_unique_id
176+
177+ records [record .data [Fields .ID ]] = record .data
178+
179+ self .review_manager .logger .info (
180+ f" { Colors .GREEN } { record .data ['ID' ]} " .ljust (46 )
181+ + f"md_retrieved → { record .data ['colrev_status' ]} { Colors .END } "
182+ )
183+
160184 return record .get_data ()
161185
162186 def _validate_source_records (
@@ -346,29 +370,9 @@ def load_source_records(
346370 self .review_manager .logger .debug (
347371 f"Import individual source records { source .search_source .get_search_history_path ()} "
348372 )
349- for source_record in source .search_source .source_records_list :
350- source_record = self ._import_record (record_dict = source_record )
351-
352- # Make sure not to replace existing records
353- order = 0
354- letters = list (string .ascii_lowercase )
355- next_unique_id = source_record [Fields .ID ]
356- appends : list = []
357- while next_unique_id in records :
358- if len (appends ) == 0 :
359- order += 1
360- appends = list (itertools .product (letters , repeat = order ))
361- next_unique_id = source_record [Fields .ID ] + "" .join (
362- list (appends .pop (0 ))
363- )
364- source_record [Fields .ID ] = next_unique_id
365-
366- records [source_record [Fields .ID ]] = source_record
367373
368- self .review_manager .logger .info (
369- f" { Colors .GREEN } { source_record ['ID' ]} " .ljust (46 )
370- + f"md_retrieved → { source_record ['colrev_status' ]} { Colors .END } "
371- )
374+ for source_record in source .search_source .source_records_list :
375+ self .import_record (record_dict = source_record , records = records )
372376
373377 self .review_manager .logger .debug (
374378 f"Save records { source .search_source .get_search_history_path ()} "
0 commit comments