def add(data): ''' @summary: add song record(s). @parm data: a dict for the song's serializer. @return: None. ''' ret = False a_se = SongSerializer(data=data, many=True) if a_se.is_valid(): a_se.save() ret = True else: logger.info('invalid data for song table.\n' + 'data: %s' % data) ret = False return ret
def songs(self, request: Request, pk: int): singer = Singer.objects.get(id=pk) songs = [] for song in singer.song_set.all(): if UserServices.user_has_access_to_music(request.user, song): songs.append(song) return Response(SongSerializer(songs, many=True).data)
class UserPlayListSerializer(serializers.ModelSerializer): from music.serializers import SongSerializer user = UserSerializer(required=False) song = SongSerializer(read_only=True, many=True) class Meta: model = UserPlayList fields = '__all__'
def search(self, request: Request): query = request.query_params.get('query', None) if not query: return Response([]) search_result = MusicService.search_song_by_query(query) res = [] for item in search_result: try: self.check_object_permissions(request, item) res.append(item) except Exception: pass return Response(SongSerializer(res, many=True).data)
def test_get_all_songs(self): """ This test ensures that all songs added in the setUp method exist when we make a GET request to the songs/ endpoint """ # this is the update you need to add to the test, login self.login_client("test_user", "testing") # hit the API endpoint response = self.client.get(reverse("songs-all", kwargs={"version": "v1"})) # fetch the data from db expected = Song.objects.all() serialized = SongSerializer(expected, many=True) self.assertEqual(response.data, serialized.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def lucky(self, request): user = request.user query = Q(user_group__isnull=True) if not isinstance(user, AnonymousUser): query |= Q(user_group__users=user.id) songs_to_select = Song.objects.filter(query) if songs_to_select.count() == 0: return Response({}) selected = random.sample(range(songs_to_select.count()), 1)[0] return Response( SongSerializer([songs_to_select[selected]], many=True).data)
def test_get_all_songs(self): """ This test ensures that all songs added in the setUp method exist when we make a GET request to the songs/ endpoint """ # hit the API endpoint response = self.client.get( reverse("songs-all") ) # fetch the data from db expected = Song.objects.all() serialized = SongSerializer(expected, many=True) self.assertEqual(response.data, serialized.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def motion(self, request: Request): motion = request.query_params.get('motion', '') query = Q(mood='mood') if motion == 'joy': query |= Q(mood='Happy') query |= Q(mood='Excited') elif motion == 'sadness': query |= Q(mood='Sad') query |= Q(mood='Calm') elif motion == 'anger': query |= Q(mood='Calm') elif motion == 'surprise': query |= Q(mood='Excited') songs = Song.objects.filter(query) import logging logging.warning(query) if len(songs) > MOOD_SONG_COUNT: songs = random.sample(list(songs), MOOD_SONG_COUNT) return Response(SongSerializer(songs, many=True).data)