from enum import Enum from fireo.models import Model from fireo.fields import TextField, BooleanField, DateTime, NumberField, ListField, IDField class Sort(Enum): default = 1 shuffle = 2 release_date = 3 class Playlist(Model): """Smart playlist Args: Model ([type]): [description] Returns: [type]: [description] """ class Meta: collection_name = 'playlists' id = IDField() uri = TextField() name = TextField(required=True) type = TextField(required=True) include_recommendations = BooleanField(default=False) recommendation_sample = NumberField(default=10) include_library_tracks = BooleanField(default=False) parts = ListField(default=[]) playlist_references = ListField(default=[]) shuffle = BooleanField(default=False) sort = TextField(default='release_date') description_overwrite = TextField() description_suffix = TextField() last_updated = DateTime() lastfm_stat_count = NumberField(default=0) lastfm_stat_album_count = NumberField(default=0) lastfm_stat_artist_count = NumberField(default=0) lastfm_stat_percent = NumberField(default=0) lastfm_stat_album_percent = NumberField(default=0) lastfm_stat_artist_percent = NumberField(default=0) lastfm_stat_last_refresh = DateTime() add_last_month = BooleanField(default=False) add_this_month = BooleanField(default=False) day_boundary = NumberField(default=21) include_spotify_owned = BooleanField(default=True) chart_range = TextField(default='MONTH') chart_limit = NumberField(default=50) mutable_keys = [ 'type', 'include_recommendations', 'recommendation_sample', 'include_library_tracks', 'parts', 'playlist_references', 'shuffle', 'sort', 'description_overwrite', 'description_suffix', 'add_last_month', 'add_this_month', 'day_boundary', 'include_spotify_owned', 'chart_range', 'chart_limit' ] def to_dict(self): to_return = super().to_dict() to_return["playlist_references"] = [i.get().to_dict().get('name') for i in to_return['playlist_references']] # remove unnecessary and sensitive fields to_return.pop('id', None) to_return.pop('key', None) return to_return