from collections import namedtuple from typing import Iterable, Optional, Set from apollo_utils.core.constants.dsp import DSP_SPOTIFY_APPLE PlaylistId = namedtuple("PlaylistId", "dsp self_id code") def full_id(playlist_id: PlaylistId) -> str: return f"{playlist_id.dsp}_{playlist_id.self_id}_{playlist_id.code}" def starred_id(playlist_id: PlaylistId) -> str: code = playlist_id.code if playlist_id.dsp == DSP_SPOTIFY_APPLE.APPLE.value else None return f"{playlist_id.dsp}_{code}_{playlist_id.self_id}" def top_country_codes(playlist_id: PlaylistId, codes: Iterable[str]) -> Set[str]: if playlist_id.dsp == DSP_SPOTIFY_APPLE.SPOTIFY.value: return set(codes) return {playlist_id.code} & set(codes) def synonym_top_country_code(playlist_id: PlaylistId, top_country_code: str) -> Optional[str]: if ( playlist_id.dsp == DSP_SPOTIFY_APPLE.APPLE.value and playlist_id.code == "us" and playlist_id.code == top_country_code ): return "global"