"""Video Asset Logic.""" from typing import Any from video.constants import job_io_fields from video.exceptions import InvalidRequest from video.models.sql.classes import video_asset def upsert_video_asset(new_video_asset: dict[str, Any]) -> dict[str, Any]: """Upsert video asset for a product.""" product_id = new_video_asset.get("product_id") asset_type = new_video_asset.get("asset_type") asset_path = new_video_asset.get("asset_path") if not (product_id and asset_type and asset_path): raise InvalidRequest("Missing data") return video_asset.upsert(new_video_asset) def bulk_upsert_video_assets( new_video_assets: list[dict[str, Any]], ) -> list[dict[str, Any]]: """Bulk Upsert video assets for products.""" allowed_asset_types = [ job_io_fields.VIDEO_MASTER, job_io_fields.H264_SD, job_io_fields.H264_HD, job_io_fields.VIDEO_IMAGE_S2, job_io_fields.VIDEO_IMAGE_S5, job_io_fields.VIDEO_IMAGE_S10, job_io_fields.VIDEO_IMAGE_S11, ] missing_keys = [] error_video_assets = [] error_video_asset_types = [] for new_video_asset in new_video_assets: missing_keys = [ key for key in ["product_id", "asset_type", "asset_path"] if key not in new_video_asset ] if missing_keys: error_video_assets.append(new_video_asset) asset_type = new_video_asset.get("asset_type") if asset_type not in allowed_asset_types: error_video_asset_types.append(new_video_asset) # Check for errors if error_video_assets: raise InvalidRequest("Invalid request, missing keys") if error_video_asset_types: raise InvalidRequest("Invalid asset_type") return video_asset.bulk_upsert_video_assets(new_video_assets)