"""DDEX RDR 1.4 generation module.""" from lxml import etree from lxml.objectify import ElementMaker from datetime import datetime, timezone E = ElementMaker(annotate=False, nsmap={ None: 'http://ddex.net/xml/mlc/14', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', 'xsd': 'http://www.w3.org/2001/XMLSchema'}) def generate_rdr(transformed_metadata): """Generate ddex rdr 1.4.""" root_attribs = { 'LanguageAndScriptCode': 'en', etree.QName('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation'): 'http://ddex.net/xml/mlc/14 http://service.ddex.net/xml/mlc/14/music-licensing-companies.xsd'} root = E('{http://ddex.net/xml/mlc/14}DeclarationOfSoundRecordingRightsClaimMessage', root_attribs, E('MessageHeader', E('MessageThreadId', transformed_metadata['message_thread_id']), E('MessageId', transformed_metadata['message_id']), E('MessageSender', E('PartyId', 'PADPIDA2012041004F'), E('PartyName', E('FullName', 'The Orchard Enterprises')), E('TradingName', 'The Orchard Enterprises, LLC')), E('MessageRecipient', E('PartyId', 'PADPIDA2019062107O'), E('PartyName', E('FullName', 'Repertoire Data Exchange Limited'))), E('MessageCreatedDateTime', datetime.now(tz=timezone.utc).isoformat())), _generate_resource_list(transformed_metadata)) return root def _generate_resource_list(transformed_metadata): resource_list = E('ResourceList',) sound_recording_list = map(_transform_track, transformed_metadata['tracks']) resource_list.SoundRecording = list(sound_recording_list) # since track_list is a list, this sets a new SoundRecording tag # for each element in that list return resource_list def _transform_track(track): trackMinutes = str(track['durationMinutes']).zfill(2) trackSeconds = str(track['durationSeconds']).zfill(2) return E('SoundRecording', E('SoundRecordingId', E('ISRC', track['isrc'])), E('ResourceReference', track['trackNumber']), E('ReferenceTitle', track['trackName']), E('Duration', f'PT{trackMinutes}M{trackSeconds}S'), )