from delivery_metadata.api.app import app from delivery_metadata.constants import AssetType from delivery_metadata.models.schemas import VideoArtworkAsset, VideoAsset _FIELD_RENAMES = { "last_updated": "updated_timestamp", "last_updated_us_east": "updated_timestamp_us_east", } async def get_product_video_assets( product_id: int, ) -> dict[str, list[VideoArtworkAsset] | dict[int, list[VideoAsset]]]: response = await app.state.ows_connector.get( service_name="ows-video", path=f"/product/assets?product_ids={product_id}", ) product_assets: list[VideoArtworkAsset] = [] track_assets: dict[int, list[VideoAsset]] = {} if response.status_code == 404: return {"product_assets": product_assets, "track_assets": track_assets} response.raise_for_status() for raw_asset in response.json(): data = {_FIELD_RENAMES.get(k, k): v for k, v in raw_asset.items()} asset_type = data["asset_type"].lower() match asset_type: case ( AssetType.VIDEO_MASTER.value | AssetType.H264_HD.value | AssetType.H264_SD.value ): track_assets.setdefault(data["tuid"], []).append( VideoAsset( filename=data["s3_key"], bucket=data["s3_bucket"], duration=data["duration"], asset_type=AssetType(asset_type), ) ) case ( AssetType.VIDEO_IMAGE_S2.value | AssetType.VIDEO_IMAGE_S5.value | AssetType.VIDEO_IMAGE_S10.value | AssetType.VIDEO_IMAGE_S11.value ): product_assets.append( VideoArtworkAsset( filename=data["s3_key"], bucket=data["s3_bucket"], asset_type=AssetType(asset_type), ) ) case _: # unknow asset type - ignore pass return { "product_assets": product_assets, "track_assets": track_assets, }