from typing import Set, Tuple from apollo_playlists_messages.config import EVENT from apollo_playlists_messages.constants import FavoriteEntityType, EVENT_CODE_TO_SETTINGS_V2_FIELD def v1_mobile_settings_parser( settings: dict, *args, entity_types: Set[str] = None, **kwargs ) -> Tuple[bool, dict, dict]: is_interested, entity_type_to_active_dsp, entity_type_to_active_markets = False, {}, {} if not settings["notifications"]: return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets interested_dsp = {dsp for dsp in ("apple", "spotify") if settings.get("vendors").get(dsp)} if not interested_dsp: return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets is_interested = True if not entity_types or FavoriteEntityType.TRACK in entity_types: entity_type_to_active_markets[FavoriteEntityType.TRACK] = set(settings.get("markets", [])) for entity_type in (FavoriteEntityType.TRACK, FavoriteEntityType.PLAYLIST): if not entity_types or entity_type in entity_types: entity_type_to_active_dsp[entity_type] = interested_dsp return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets def v2_mobile_settings_parser( settings: dict, *args, entity_types: Set[str] = None, **kwargs ) -> Tuple[bool, dict, dict]: is_interested, entity_type_to_active_dsp, entity_type_to_active_markets = False, {}, {} if not settings["notifications"]: return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets interested_dsp = { dsp for dsp in ("apple", "spotify") if settings.get("categories", {}).get( EVENT_CODE_TO_SETTINGS_V2_FIELD[EVENT], {} ).get(dsp) } if not interested_dsp: return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets is_interested = True if not entity_types or FavoriteEntityType.TRACK in entity_types: entity_type_to_active_markets[FavoriteEntityType.TRACK] = set(settings.get("markets", [])) for entity_type in (FavoriteEntityType.TRACK, FavoriteEntityType.PLAYLIST): if not entity_types or entity_type in entity_types: entity_type_to_active_dsp[entity_type] = interested_dsp return is_interested, entity_type_to_active_dsp, entity_type_to_active_markets SETTINGS_VERSION_TO_PARSER = { "1": v1_mobile_settings_parser, "2": v2_mobile_settings_parser }