"""High-level logic for consistency checks.""" from __future__ import annotations from typing import List from src.common.models.graphql import ProductMetadata from src.common.models.graphql import Track from src.common.models.metadata import InconsistencyReport from src.common.models.metadata import InconsistencyType from src.common.models.metadata import MissingRecord from src.common.models.metadata import TrackTable def check_label_sound_recordings(product_metadata: ProductMetadata) -> InconsistencyReport: """Check LabelSoundRecordings for all tracks. Args: product_metadata: Product metadata. Returns: Inconsistency Report. """ tracks_without_label_sound_recording = \ _get_tracks_without_label_sound_recording(product_metadata) missing_data = _get_missing_label_sound_recording_records(tracks_without_label_sound_recording) return InconsistencyReport( inconsistency_type=InconsistencyType.BAD_LABEL_SOUND_RECORDINGS, missing_data=missing_data) def _get_tracks_without_label_sound_recording(product_metadata: ProductMetadata) -> List[Track]: """Find tracks without label sound recording.""" return [ track for track in product_metadata.product.tracks if not track.labelSoundRecording ] def _get_missing_label_sound_recording_records( tracks_without_label_sound_recording: List[Track]) -> List[MissingRecord]: """Get missing label sound recording records.""" return [ MissingRecord( table_name=TrackTable.name, primary_key_name=TrackTable.primary_key_name, record_id=int(track.tuid), ) for track in tracks_without_label_sound_recording ]