Skip to content

Commit 05107c3

Browse files
committed
Add route for lyrics
1 parent 51c64f5 commit 05107c3

4 files changed

Lines changed: 59 additions & 0 deletions

File tree

dakara_server/dakara_server/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@
102102
library_views.SongView.as_view(),
103103
name="library-song",
104104
),
105+
path(
106+
"api/library/songs/lyrics/<int:pk>/",
107+
library_views.SongLyricsView.as_view(),
108+
name="library-song-lyrics",
109+
),
105110
path(
106111
"api/library/songs/retrieve/",
107112
library_views.SongRetrieveListView.as_view(),

dakara_server/library/serializers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,14 @@ def update(self, song, validated_data):
403403
return song
404404

405405

406+
class SongLyricsSerializer(serializers.ModelSerializer):
407+
"""Song lyrics field serializer."""
408+
409+
class Meta:
410+
model = Song
411+
fields = ("id", "lyrics")
412+
413+
406414
class SongForPlayerSerializer(serializers.ModelSerializer):
407415
"""Song serializer.
408416

dakara_server/library/tests/test_song.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ def test_get_song_long_lyrics(self):
5757
self.assertEqual(len(response.data["results"]), 2)
5858

5959
# check lyrics
60+
self.assertNotEqual(
61+
response.data["results"][1]["lyrics_preview"]["text"], self.song2.lyrics
62+
)
6063
self.assertDictEqual(
6164
response.data["results"][1]["lyrics_preview"],
6265
{
@@ -936,3 +939,34 @@ def test_put_song_embedded_work_subtitle(self):
936939
self.assertEqual(Work.objects.count(), 4)
937940
workNew = Work.objects.get(title="Work1", subtitle="", work_type=self.wt1)
938941
self.assertIsNotNone(workNew)
942+
943+
944+
class SongLyricsViewTestCase(LibraryAPITestCase):
945+
def setUp(self):
946+
# create a user without any rights
947+
self.user = self.create_user("TestUser")
948+
949+
# create test data
950+
self.create_test_data()
951+
952+
# add lyrics to one song
953+
self.song2.lyrics = """Mary had a little lamb
954+
Little lamb, little lamb
955+
Mary had a little lamb
956+
Its fleece was white as snow
957+
And everywhere that Mary went
958+
Mary went, Mary."""
959+
self.song2.save()
960+
961+
# Create urls to access these playlist entries
962+
self.url_song2 = reverse("library-song-lyrics", kwargs={"pk": self.song2.id})
963+
964+
def test_get_lyrics(self):
965+
"""Get a song lyrics."""
966+
self.authenticate(self.user)
967+
968+
response = self.client.get(self.url_song2)
969+
970+
self.assertEqual(response.status_code, status.HTTP_200_OK)
971+
self.assertEqual(response.data["id"], self.song2.id)
972+
self.assertEqual(response.data["lyrics"], self.song2.lyrics)

dakara_server/library/views.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from rest_framework.generics import (
88
ListAPIView,
99
ListCreateAPIView,
10+
RetrieveAPIView,
1011
RetrieveUpdateDestroyAPIView,
1112
)
1213
from rest_framework.permissions import IsAuthenticated
@@ -194,6 +195,17 @@ class SongView(RetrieveUpdateDestroyAPIView):
194195
serializer_class = serializers.SongSerializer
195196

196197

198+
class SongLyricsView(RetrieveAPIView):
199+
"""List of songs."""
200+
201+
permission_classes = [
202+
IsAuthenticated,
203+
permissions.IsLibraryManager | internal_permissions.IsReadOnly,
204+
]
205+
queryset = models.Song.objects.all()
206+
serializer_class = serializers.SongLyricsSerializer
207+
208+
197209
class SongRetrieveListView(ListAPIView):
198210
"""List of all songs.
199211

0 commit comments

Comments
 (0)