from marshmallow import fields, post_dump from apollo_messages_views.constants.base import UNKNOWN_FLAG from apollo_messages_views.schemas.base import BaseMessage, MetaExcludeUnknown, PlaylistItem, TrackItemWithArtistNames,\ data_mixin from apollo_messages_views.utils.playlists import get_playlist_entry_body, get_playlist_update_body, \ get_playlist_major_move_body, get_playlist_exit_body class EntryContentItem(MetaExcludeUnknown): track = fields.Nested(TrackItemWithArtistNames, required=True) playlist = fields.Nested(PlaylistItem, required=True) current_position = fields.Integer(missing=None) previous_position = fields.Integer(missing=None) title = fields.Str(missing="") class UpdateContentItem(MetaExcludeUnknown): playlist = fields.Nested(PlaylistItem, required=True) title = fields.Str(missing="") class PlaylistEntryMessage(data_mixin(EntryContentItem), BaseMessage): pass class PlaylistTopEntryMessage(PlaylistEntryMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_entry_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=False, ) return in_data class PlaylistStarredEntryMessage(PlaylistEntryMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_entry_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=True, ) return in_data class PlaylistUpdateMessage(data_mixin(UpdateContentItem), BaseMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_update_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, ) return in_data class PlaylistExitMessage(data_mixin(EntryContentItem), BaseMessage): pass class PlaylistTopExitMessage(PlaylistExitMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_exit_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=False, ) return in_data class PlaylistStarredExitMessage(PlaylistExitMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_exit_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=True, ) return in_data class PlaylistMajorMoveMessage(data_mixin(EntryContentItem), BaseMessage): pass class PlaylistTopMajorMoveMessage(PlaylistMajorMoveMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_major_move_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=False, ) return in_data class PlaylistStarredMajorMoveMessage(PlaylistMajorMoveMessage): @post_dump def set_body(self, in_data, **kwargs): in_data["data"]["content"]["body"] = get_playlist_major_move_body( dsp=in_data["meta"]["dsp"], country_code=in_data["meta"]["country_code"], content=in_data["data"]["content"], unknown_flag_as=UNKNOWN_FLAG, is_starred=True, ) return in_data