"""KakaoM Packager.""" import os import xml.etree.ElementTree as ET from datetime import datetime from src.packagers.ddex38 import DDEX38Packager from src.utils import images class KakaoMPackager(DDEX38Packager): """KakaoM specific package functions.""" dms_id = 838 def transform_xml( self, input_xml, stereo_metadata, spatial_metadata, spatial_audio_details, spatial_artwork_details): """Format xml generically for this dms.""" base_xml = super().transform_xml( input_xml, stereo_metadata, spatial_metadata, spatial_audio_details, spatial_artwork_details ) root = ET.fromstring(base_xml) for release in root.findall('ReleaseList/Release'): release_seq = int(release.find('ReleaseReference').text[1:]) if release_seq == 0: by_territory = release.find('ReleaseDetailsByTerritory') related_release = ET.SubElement(by_territory, 'RelatedRelease') release_id = ET.SubElement(related_release, 'ReleaseId') ET.SubElement(release_id, 'ICPN').text = ( stereo_metadata['displayUpc'] ) ET.SubElement( related_release, 'ReleaseRelationshipType' ).text = 'IsFromAudio' return self.format_xml(root) def transform_image(self, image_location): """Format image specifically for this dms.""" output_location = os.path.splitext(image_location)[0] + '.jpg' images.transform( image_location, 1500, 1500, 'JPEG', output_location ) return output_location def output_trigger_filename(self, base_path): """DMS specific trigger file.""" batch_id = base_path.split('/')[1] return f'BatchComplete_{batch_id}.xml' def output_base_path(self, job_id, spatial_upc, stereo_upc): """DMS specfic upload dir.""" date_part = datetime.now().strftime('%Y%m%d%H%M%S') return f'{job_id}/{date_part}000' def output_metadata_filepath(self, base, upc): """DMS specific metadata upload location.""" return f'{base}/{upc}/{upc}.xml' def output_image_filepath(self, base, upc): """DMS specific image upload location.""" return f'{base}/{upc}/resources/{upc}.jpg' def output_audio_path(self, base, upc): """DMS specific audio upload location.""" return f'{base}/{upc}/resources'