"""Generate Meta ERN DDEX.""" from typing import cast from typing import Optional from lxml import etree from .deal import generate_release_deal from .e import E from .header import generate_header from .release import generate_release from .sound_recording import generate_sound_recording_resource from soundrecording_utils.metadata.types import Asset from soundrecording_utils.metadata.types import OrchardSoundRecording def generate_ern_srr( sound_recording_metadata: OrchardSoundRecording, upload_asset: Optional[Asset], execution_meta ) -> str: """Generate DDEX ERN SRR for Meta.""" # TODO replace root attribs here with the correct one for ern srr root_attribs = { etree.QName( 'http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation' ): ' '.join([ 'http://ddex.net/xml/ern/382', 'http://ddex.net/xml/ern/382/release-notification.xsd', ]), 'MessageSchemaVersionId': 'ern/382', 'ReleaseProfileVersionId': 'CommonReleaseTypes/14/SingleResourceRelease', 'LanguageAndScriptCode': 'en', } sound_recording_release = generate_sound_recording_resource( 'A1', sound_recording_metadata, upload_asset ) release = generate_release( 'R1', 'A1', sound_recording_metadata, ) deal = generate_release_deal( 'R1', sound_recording_metadata, ) root = E( '{http://ddex.net/xml/ern/382}NewReleaseMessage', root_attribs, generate_header(execution_meta), E( 'ResourceList', sound_recording_release, ), E( 'ReleaseList', release, ), E( 'DealList', deal, ), ) etree.indent(root, space=' ') document_buffer = etree.tostring( root, encoding='utf-8', doctype='', pretty_print=True, ) return cast(bytes, document_buffer).decode('utf-8')