"""DSP API utils.""" from datetime import date from typing import Dict, List import requests import config import utils from constants import common as consts def _get_headers() -> Dict[str, str]: """Get headers for API request. """ return { "Authorization": config.DspAPI.APP_KEY, "Content-Type": "application/json", "X-App-Slug": "apollo", "X-Client-Type": "job", "X-Client-Name": consts.APP_NAME, } @utils.handle_errors() def get_playlists_streams(playlist_id_list: List[str], start_date: date, end_date: date) -> List[dict]: """Get streams per playlist and country code. Args: playlist_id_list: Playlist ID list. start_date: Streams from. end_date: Streams to. Returns: List of streams per playlist and country code. """ response = requests.get( f"{config.DspAPI.HOST}/api/delphi/streams", headers=_get_headers(), params={ "dsp": consts.SPOTIFY, "subset": "playlists", "start_date": start_date, "end_date": end_date, "playlist_id": ",".join([f"{consts.SPOTIFY}_{item}" for item in playlist_id_list]), }, ) return response.json() @utils.handle_errors() @utils.as_date def get_latest_date() -> date: """Get streams per playlist and country code. Returns: Playlist ID to country code to streams count mappings. """ response = requests.get( f"{config.DspAPI.HOST}/api/delphi/data-health/dsp/status", headers=_get_headers(), params={"dsp": consts.SPOTIFY, "status": "complete,complete_minimal"}, ) data = response.json() return data["dsp_segment"][consts.SPOTIFY]["streams"]["max_date"]