from delivery_metadata.api.app import app from delivery_metadata.constants import AssetType from delivery_metadata.models.schemas import ( ArtworkAsset, AudioAsset, DigitalBookletAsset, ) async def get_product_assets( product_id: int, ) -> dict[ str, list[ArtworkAsset | DigitalBookletAsset] | dict[int, list[AudioAsset]], ]: response = await app.state.ows_connector.get( service_name="ows-assets", path=f"/product/{product_id}/assets", ) response.raise_for_status() result = response.json() product_assets: list[ArtworkAsset | DigitalBookletAsset] = [] track_assets: dict[int, list[AudioAsset]] = {} for data in result: asset_type = data["asset_type"].lower() match asset_type: case AssetType.TIF.value | AssetType.JPG.value: product_assets.append( ArtworkAsset( filename=data["s3_key"], bucket=data["s3_bucket"], asset_type=AssetType(asset_type), ) ) case AssetType.WAV.value | AssetType.FLAC.value | AssetType.ATMOS.value: track_assets.setdefault(data["tuid"], []).append( AudioAsset( filename=data["s3_key"], bucket=data["s3_bucket"], duration=data["duration"], asset_type=AssetType(asset_type), ) ) case _: # unknow asset type - ignore pass return { "product_assets": product_assets, "track_assets": track_assets, }