"""Transcoding rule designer util module.""" from typing import Any from transcoding.constants import adapters, transcoding def construct_rules( transcoding_rules: list[dict[str, Any]], source_asset_metadata: dict[str, Any], ) -> list[dict[str, Any]]: """Construct rules for transcoding job design. Note: Input transcoding rules model contain keys which are not appropriate for creating of a transcoding job. Transcoding rule entries have a prefix 'output_' for job configuration therefore we remove this prefix for rules from DB. Args: transcoding_rules (list): Rules derived from models or request body. source_asset_metadata (dict): Metadata of source asset from mediainfo extractor. Returns: list: return list of rules for transcoding job design. """ result_list = [] for rule in transcoding_rules: result_rule = {} audio_metadata = source_asset_metadata container = rule.get("container") or rule.get("output_container") if container in adapters.ADAPTERS_MAPPING: audio_metadata = adapters.ADAPTERS_MAPPING[container](audio_metadata) for key, value in rule.items(): pure_key = key.removeprefix("output_") # in model we have a prefix input if pure_key in transcoding.CONSTRUCTOR_TRANSCODING_RULE_FIELDS: result_rule[pure_key] = value or audio_metadata.get(pure_key) result_list.append(result_rule) return result_list