from typing import List from server.client import services from server.constants import DSP from server.constants.tracks import DEFAULT_IMAGE_SIZE from server.utils.tracks import get_dsp_tracks_response async def get_tracks( track_ids: List[str] or List[int], dsp: DSP, market: str, image_size: int = DEFAULT_IMAGE_SIZE, by_isrc: bool = False, raw_results: bool = False, ) -> List[dict]: """Get tracks data. Args: track_ids: (List[str] or List[int]): A list of track ids or isrc. dsp (DSP): DSP.APPLE or DSP.SPOTIFY market (str): Country 2 letter code or generic markets. image_size: desirable size of track image. For Spotify 64, 300, 640 are allowed only. For Apple if image_size is None, methods returns url image mask. by_isrc (bool): By track id or isrc list. raw_results (bool): Return results as is without post processing. Returns: List[dict]: List of track data items. Raises: APIInvalidResponse: If Vendor API returned response which cannot be handled. """ not_empty_ids = [str(_id) for _id in track_ids if _id] result = [] if not not_empty_ids: return result market_supported = await services.apollo.get_market_is_supported_by_vendor( market=market, vendor=dsp.value, by_isrc=by_isrc ) if not market_supported: return result params = {"isrc" if by_isrc else "ids": not_empty_ids} if dsp == DSP.APPLE: params["include"] = "artists" response_json = await services.vendor.get_tracks(dsp=dsp, market=market, **params) if raw_results: return response_json result = get_dsp_tracks_response(dsp=dsp, tracklist=response_json, image_size=image_size) return result