"""Generate DDEX Release and TrackRelease nodes for v43.""" from soundrecording_utils.constants.ddex.constants import EXPLICIT_STATUS_LOOKUP_TABLE from soundrecording_utils.ddex.utils.control_chars import remove_control_chars from soundrecording_utils.metadata.types import OrchardSoundRecording, Track from .e import E from .sound_recording import generate_display_title, generate_display_title_text from .track import generate_display_artist_name, generate_p_line, generate_track_display_artists def generate_release( release_reference: str, resource_reference: str, sound_recording_metadata: OrchardSoundRecording, primary_track_metadata: Track, ): """Generate a Release node.""" return E( 'Release', E('ReleaseReference', release_reference), E('ReleaseType', 'SingleResourceRelease'), E( 'ReleaseId', E('ProprietaryId', {'Namespace': 'ISRC'}, sound_recording_metadata.isrc), ), generate_display_title_text(primary_track_metadata), generate_display_title(primary_track_metadata), generate_display_artist_name(primary_track_metadata.participations), *generate_track_display_artists(primary_track_metadata), E('ReleaseLabelReference', f'P-{primary_track_metadata.product.label.uuid}'), generate_p_line(primary_track_metadata.p_info), E( 'Genre', E( 'GenreText', remove_control_chars( primary_track_metadata.product.subgenre.genre.name ), ), ), E( 'ParentalWarningType', EXPLICIT_STATUS_LOOKUP_TABLE[primary_track_metadata.explicit], ), E( 'ResourceGroup', E('SequenceNumber', '1'), E( 'ResourceGroupContentItem', E('SequenceNumber', '1'), E('ReleaseResourceReference', resource_reference), ), ), ) def generate_track_release( release_reference: str, resource_reference: str, primary_track_metadata: Track ): """Generate a TrackRelease node.""" return E( 'TrackRelease', {'IsMainRelease': 'true'}, E('ReleaseReference', release_reference), E( 'ReleaseId', E('ProprietaryId', {'Namespace': 'ISRC'}, primary_track_metadata.isrc), ), E('ReleaseResourceReference', resource_reference), E('ReleaseLabelReference', f'P-{primary_track_metadata.product.label.uuid}'), E('Genre', E('GenreText', primary_track_metadata.product.subgenre.genre.name)), )