from copy import deepcopy from typing import Dict, List from server.constants.core import DELPHI_GLOBAL_MARKET from server.constants.delphi.tiktok import TiktokTrackAnalyticsBreakdown def count_totals( result_breakdowns: Dict[str, dict], breakdowns_list: List[str], country_code_list: List[str] or None, all_countries: bool, ): """Count totals, per country if country_code_list is set or country_totals breakdown is present or general Args: result_breakdowns: Breakdowns data. breakdowns_list: Breakdowns list. country_code_list: Country codes list. all_countries: Request all countries. """ if all_countries and TiktokTrackAnalyticsBreakdown.DAILY in breakdowns_list: for value_list in result_breakdowns[TiktokTrackAnalyticsBreakdown.DAILY].values(): for index, value in enumerate(value_list): value_list[index] = None if value is None else value // 2 if TiktokTrackAnalyticsBreakdown.TOTALS not in breakdowns_list: return country_totals = result_breakdowns[TiktokTrackAnalyticsBreakdown.COUNTRY_TOTALS] result_breakdowns[TiktokTrackAnalyticsBreakdown.TOTALS] = deepcopy( country_totals if country_code_list else country_totals.get(DELPHI_GLOBAL_MARKET, {}) ) for key in list(result_breakdowns.keys()): if key not in breakdowns_list: del result_breakdowns[key] if ( not country_code_list and TiktokTrackAnalyticsBreakdown.COUNTRY_TOTALS in breakdowns_list and TiktokTrackAnalyticsBreakdown.CONTENT_TYPE_COUNTRY in breakdowns_list ): content_type_country_data = result_breakdowns[TiktokTrackAnalyticsBreakdown.CONTENT_TYPE_COUNTRY] for content_type_values in content_type_country_data.values(): for country_code in list(content_type_values.keys()): if country_code != DELPHI_GLOBAL_MARKET: del content_type_values[country_code]