from datetime import datetime from typing import Dict, List, Union from client import service from constants.common import DSP from utils import get_datetime_string def get_charts_monitoring(dsp: DSP) -> List[Dict]: """Get full data from tblChartsMonitoring Args: dsp: DSP (ex: DSP.SPOTIFY, DSP.APPLE etc) Returns: List of Dicts with chart monitoring information """ return service.apollo.get_charts_monitoring(dsp=[dsp.value]) def get_charts_last_updated_as_dict(data: List[Dict]) -> Dict[str, Dict[str, str]]: """Get dict of chart_id to chart data from tblChartsMonitoring Args: data: Raw response - List of Dicts with chart monitoring information got from tblChartsMonitoring Returns: List of Dicts with chart monitoring information """ return {item["chart_id"]: item for item in data} def update_charts_monitoring( dsp: DSP, chart_id: str, max_date: str, processed_datetime: datetime, data: Union[str, None] = None ): """Update charts UpdatedAt and ChartDatetime to specify that chart was processed Delphi Charts Data-Health status api returns "max_date" date only as chart information updates only once a day, but we convert it and store in our DB in tblChartsMonitoring as datetime Args: dsp: DSP (ex: DSP.SPOTIFY, DSP.APPLE etc) chart_id: Delphi sample chart_id (ex: spotify - regional_daily_us, apple - charts_daily_us) max_date: actual "max_date" date from Delphi charts data health api processed_datetime: Datetime when particular chart was processed by apollo-charts-monitoring job (when we got all additions/removals/moves) data: """ body = { "dsp": dsp.value, "chart_id": chart_id, "chart_datetime": get_datetime_string(max_date), "updated_at": processed_datetime.isoformat(), "data": data, } service.apollo.put_charts_monitoring(body=body)