from apollo_utils.core.constants.dsp import DSP from typing import Union from server.config import CORE_IMAGE_SERVICE from server.constants.core_image_service import CORE_IMAGE_SERVICE_ALLOWED_RESOLUTIONS, \ CORE_IMAGE_SERVICE_RESOLUTION_PARAM, CORE_IMAGE_SERVICE_STOREFRONT_PARAM, \ CORE_IMAGE_URL_ENTITY_COUNTRY_CODE_SENSITIVE, DSP_CORE_IMAGE_URL_COUNTRY_CODE_SENSITIVE, CoreImageByEntityMapping, \ CoreImageEntityMapping, CoreImageServiceImageSizeMapping def get_core_image_service_image_url( entity: str, dsp: DSP, entity_id: Union[str, int], country_code: str, ) -> str: """Get Core Image Service url for playlist (by playlist_id) or album (by track_id) based on passed entity Args: entity: str OneOf ["playlist", "track"] dsp: DSP entity_id: playlist or track id country_code: """ result = ( f"{CORE_IMAGE_SERVICE}{CoreImageEntityMapping[entity]}/" f"{CoreImageByEntityMapping[entity][dsp.value]}/{entity_id}" ) if ( dsp.value in DSP_CORE_IMAGE_URL_COUNTRY_CODE_SENSITIVE and entity in CORE_IMAGE_URL_ENTITY_COUNTRY_CODE_SENSITIVE ): if not country_code: raise ValueError("No country_code passed for DSP sensitive Core Image Service URL builder") result += f"?{CORE_IMAGE_SERVICE_STOREFRONT_PARAM}={country_code}" return result def core_image_service_add_resolution(image_url: str, resolution: int = 640): """Add a resolution param to Core Image Service image url based on passed int resolution Args: image_url: image url str resolution: int value OneOf [64,300,640] """ if not image_url: return None if resolution not in CORE_IMAGE_SERVICE_ALLOWED_RESOLUTIONS: raise ValueError( f"Unknown resolution for value: {resolution}. Can be only one of {CORE_IMAGE_SERVICE_ALLOWED_RESOLUTIONS}" ) delimiter = "&" if "?" in image_url else "?" add_param_str = f"{delimiter}{CORE_IMAGE_SERVICE_RESOLUTION_PARAM}={CoreImageServiceImageSizeMapping[resolution]}" return image_url + add_param_str