"""Processing logic.""" from content_utils.exceptions import IneligibleEventError from src.constants import error_correction_field as ec from src.logic.format import format_track_correction_data from src.logic.format import remove_track_duration from src.logic.format import structure_corrections_by_tuid from src.logic.ows_track import update_track from src.logic.ows_track import update_track_duration from src.logic.release_correction import get_track_revisions def processing_logic(error_correction_id): """Logic to process and apply track error corrections.""" track_revisions = get_track_revisions(error_correction_id) if not len(track_revisions): raise IneligibleEventError('No track revisions found') # allow known track revision fields only invalid_fields = list(map(lambda y: y['field_name'], filter( lambda x: x['field_name'] not in ec.KNOWN_TRACK_FIELDS, track_revisions))) if len(invalid_fields): raise Exception( f'Invalid track correction field_name(s) {",".join(invalid_fields)}') # re-structure error corrections by tuid grouped_by_tuid = structure_corrections_by_tuid(track_revisions) # set to update tuids after processing revisions_not_applied = set(grouped_by_tuid.keys()) total_num_tuids = len(revisions_not_applied) for tuid, data in grouped_by_tuid.items(): formatted_data = format_track_correction_data(data) if not len(formatted_data): continue not_applied = list(revisions_not_applied) # update track duration fields duration_fields = remove_track_duration(formatted_data) update_track_duration(tuid, duration_fields, not_applied) # update other track data update_track(tuid, formatted_data, not_applied) revisions_not_applied.remove(tuid) if total_num_tuids == len(revisions_not_applied): # no revisions were applied to tracks raise IneligibleEventError('No eligible track fields found to perform update.')