from apollo_utils.core.constants.dsp import DSP from typing import Callable, Dict, Iterable, Optional, Union from server.constants.core_image_service import CORE_IMAGE_AVAILABLE_DSP from server.utils.common import prefix_str from server.utils.mappers.core.setters import setter from server.utils.mappers.misc import map_id_not_none from server.utils.mappers.playlists.misc import map_followers, map_image_url, map_playlist_dates from server.utils.processor.core import Processor, processor def playlist_basic_processors( dsp: DSP, key_prefix: str = None, # key in outer object ) -> Iterable[Union[Callable, Processor]]: """Get basic processors for playlist items.""" entity = "playlist" return [ processor( map_id_not_none, keys=(prefix_str("dsp_playlist_id", prefix=key_prefix), prefix_str("playlist_id", prefix=key_prefix)), key_to=prefix_str("id", prefix=key_prefix), to_int=False, ), processor( map_image_url, dsp=dsp, key_prefix=key_prefix, entity=entity, core_image_url=dsp.value in CORE_IMAGE_AVAILABLE_DSP, ), processor(map_playlist_dates), processor(map_followers, key_prefix=key_prefix), ] def set_favorites_data(item: dict, item_id: Optional[str] = None, data: Dict[str, dict] = None, key_prefix: str = None): favorites_data_item = (data or {}).get(item_id, {}) favorites_data = {} for field_name in ("favorites_id", "created_at", "tag_id"): favorites_data[field_name] = favorites_data_item.get(field_name) setter(item, key_prefix or ".", favorites_data)