from typing import Callable, Dict, List, Optional from server.constants.artists import TracksTopInclude def set_artist_tracks_streams( result_item_list: List[dict], last_streams_map: Dict[str, int], previous_streams_map: Dict[str, int] ): """Set streams to artists tracks response. Args: result_item_list: Artists tracks response items. last_streams_map: Last week streams by ISRC. previous_streams_map: Previous week streams by ISRC. """ for item in result_item_list: isrc = item.get("spotifyTrack", {}).get("isrc") item.update( {"streams_7_days": last_streams_map.get(isrc, 0), "streams_8_14_days": previous_streams_map.get(isrc, 0)} ) def fill_meta_data( result_map: Dict[str, dict], item_list: List[dict], include_list: List[TracksTopInclude], get_isrc: Callable[[dict], Optional[str]], get_name: Callable[[dict], Optional[str]], ) -> List[str]: """Fill meta in top tracks response. Args: result_map: Result map (ISRC to data). item_list: Meta list. include_list: Include fields. get_isrc: ISRC from meta getter. get_name: Name from meta getter. Returns: Meta ISRC list. """ isrc_list = [] for item in item_list: isrc = get_isrc(item) if not isrc or isrc not in result_map: continue isrc_list.append(isrc) result_item = result_map[isrc] if TracksTopInclude.NAME in include_list: result_item["name"] = get_name(item) if TracksTopInclude.META in include_list: result_item["meta"] = item return isrc_list