"""DDEX ERN SRR Facebook generation module.""" from lxml import etree from lxml.objectify import ElementMaker import constants E = ElementMaker(annotate=False, nsmap={ 'ern': 'http://ddex.net/xml/ern/382', 'xs': 'http://www.w3.org/2001/XMLSchema-instance'}) def generate_ern_srr(transformed_metadata): """Generate ddex ern srr facebook.""" # TODO replace root attribs here with the correct one for ern srr root_attribs = { etree.QName('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation'): 'http://ddex.net/xml/ern/382 http://ddex.net/xml/ern/382/release-notification.xsd', 'MessageSchemaVersionId': 'ern/382', 'ReleaseProfileVersionId': 'CommonReleaseTypes/14/SingleResourceRelease', 'LanguageAndScriptCode': 'en'} root = E('{http://ddex.net/xml/ern/382}NewReleaseMessage', root_attribs, E('MessageHeader', E('MessageThreadId', transformed_metadata['message_thread_id']), E('MessageId', transformed_metadata['message_id']), E('MessageSender', E('PartyId', constants.ORCHARD_PARTY_ID, IsDPID='true'), E('PartyName', E('FullName', constants.ORCHARD_PARTY_NAME)), E('TradingName', constants.ORCHARD_TRADING_ID)), E('MessageRecipient', E('PartyId', constants.FACEBOOK_PARTY_ID, IsDPID='true'), E('PartyName', E('FullName', constants.FACEBOOK_PARTY_NAME))), E('MessageCreatedDateTime', transformed_metadata['message_created_date_time'])), _generate_resource_list(transformed_metadata) ) return root def _generate_resource_list(transformed_metadata): resource_list = E('ResourceList',) sound_recording_list = E('SoundRecording', E('SoundRecordingType', constants.DEFAULT_SOUND_RECORDING_TYPE), E('SoundRecordingId', E('ISRC', transformed_metadata['isrc'])), E('ResourceReference', transformed_metadata['resource_reference']), E('ReferenceTitle', E('TitleText', transformed_metadata['title_text']), _generate_subtitle(transformed_metadata['sub_title'])), _generate_language_of_performance( transformed_metadata['meta_language_code'], transformed_metadata['language_of_performance']), E('Duration', transformed_metadata['duration']), _generate_sr_details_by_territory(transformed_metadata) ) resource_list.SoundRecording = list(sound_recording_list) return resource_list def _generate_sr_details_by_territory(transformed_metadata): sr_details_by_territory = E('SoundRecordingDetailsByTerritory', E('TerritoryCode', constants.DEFAULT_TERRITORY_CODE), _generate_formal_title(transformed_metadata), E('Title', E('TitleText', transformed_metadata['display_title']), TitleType='DisplayTitle'), *_generate_display_artist_list(transformed_metadata), E('LabelName', transformed_metadata['label']), E('RightsController', E('PartyName', E('FullName', constants.ORCHARD_PARTY_NAME)), E('PartyId', constants.ORCHARD_PARTY_ID), E('RightsControllerRole', constants.DEFAULT_RIGHTS_CONTROLLER_ROLE), E('RightSharePercentage', constants.DEFAULT_RIGHTS_SHARE_PERCENTAGE)), E('PLine', E('Year', transformed_metadata['pline_year']), E('PLineText', transformed_metadata['pline_text'])), E('Genre', E('GenreText', 'Example Genre')), E('ParentalWarningType', transformed_metadata['parental_warning_type']) ) return sr_details_by_territory def _generate_language_of_performance(meta_language_code, language_of_performance): if (meta_language_code == 'N/A'): return E('IsInstrumental', 'true') elif (language_of_performance): return E('LanguageOfPerformance', language_of_performance) def _build_display_artist(artist): display_artist = E('DisplayArtist', E('PartyName', E('FullName', artist['fullName'])), E('PartyId', 'Example Id'), _generate_artist_role(artist) ) return display_artist def _generate_artist_role(artist): artist_role_element = E('ArtistRole', artist['artistRole']) if artist['artistRole'] == 'Remixer': artist_role_element = E('ArtistRole', 'UserDefined', Namespace='DPID:{}'.format(constants.ORCHARD_PARTY_ID), UserDefinedValue='Remixer') return artist_role_element def _generate_display_artist_list(transformed_metadata): display_artists = map(_build_display_artist, transformed_metadata['display_artists']) return list(display_artists) def _generate_subtitle(version): if (version): return E('SubTitle', version) def _generate_formal_title(transformed_metadata): formal_title = E('Title', E('TitleText', transformed_metadata['title_text']), TitleType='FormalTitle') if transformed_metadata['sub_title']: formal_title = E('Title', E('TitleText', transformed_metadata['title_text']), E('SubTitle', transformed_metadata['sub_title']), TitleType='FormalTitle') return formal_title