コード例 #1
0
ファイル: song.py プロジェクト: smilejay/music-web
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
コード例 #2
0
ファイル: views.py プロジェクト: moosicse/MoosicServer
 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)
コード例 #3
0
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__'
コード例 #4
0
ファイル: views.py プロジェクト: moosicse/MoosicServer
 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)
コード例 #5
0
 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)
コード例 #6
0
ファイル: views.py プロジェクト: moosicse/MoosicServer
    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)
コード例 #7
0
 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)
コード例 #8
0
ファイル: views.py プロジェクト: moosicse/MoosicServer
    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)