"""This module contains logic for audio metadata validation.""" from src import mediainfo_extractor from src import metadata_validator from src import s3 from src.constants import validation_const """For any changes that are made to audio metadata requirements, please update: https://github.com/theorchard/frontend-distribution/blob/b0f7ea92b0a2df8df145777abdb1b04b2c59c547/src/selectors/track-audio-validation-errors.js """ # noqa: E501 def validate_audio_asset(bucket, key): """Validate input audio asset. Args: bucket (str): Target S3 bucket. key (str): target S3 key. Returns: dict: validated audio metadata. Raises: ValueError: audio metadata is invalid. """ input_asset_url = s3.create_presigned_url(bucket, key) metadata = mediainfo_extractor.get_audio_asset_media_info(input_asset_url) container = metadata.get('container') metadata['mime_type'] = ( metadata['mime_type'].lower() if metadata.get('mime_type') else validation_const.CONTAINER_TO_MIME_TYPE.get(container) if container else None ) codec = metadata.get('codec') mime_type = metadata['mime_type'] metadata['lossless'] = ( codec == validation_const.MIME_TYPE_TO_LOSSLESS_CODEC.get(mime_type) if codec and mime_type else None ) return metadata_validator.validate_audio_metadata({ key: value for key, value in metadata.items() if value is not None })