See #170: can now filter playlists by track, artist and album

This commit is contained in:
Eliot Berriot 2020-03-26 16:28:58 +01:00
parent 27801ce541
commit 37ff297f53
No known key found for this signature in database
GPG Key ID: 6B501DFD73514E14
2 changed files with 45 additions and 0 deletions

View File

@ -2,6 +2,7 @@ from django.db.models import Count
from django_filters import rest_framework as filters
from funkwhale_api.common import filters as common_filters
from funkwhale_api.music import models as music_models
from funkwhale_api.music import utils
from . import models
@ -10,6 +11,21 @@ from . import models
class PlaylistFilter(filters.FilterSet):
q = filters.CharFilter(field_name="_", method="filter_q")
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
track = filters.ModelChoiceFilter(
"playlist_tracks__track",
queryset=music_models.Track.objects.all(),
distinct=True,
)
album = filters.ModelChoiceFilter(
"playlist_tracks__track__album",
queryset=music_models.Album.objects.all(),
distinct=True,
)
artist = filters.ModelChoiceFilter(
"playlist_tracks__track__artist",
queryset=music_models.Artist.objects.all(),
distinct=True,
)
scope = common_filters.ActorScopeFilter(actor_field="user__actor", distinct=True)
class Meta:

View File

@ -0,0 +1,29 @@
from funkwhale_api.playlists import filters
from funkwhale_api.playlists import models
def test_playlist_filter_track(factories, queryset_equal_list):
plt = factories["playlists.PlaylistTrack"]()
factories["playlists.PlaylistTrack"]()
qs = models.Playlist.objects.all()
filterset = filters.PlaylistFilter({"track": plt.track.pk}, queryset=qs)
assert filterset.qs == [plt.playlist]
def test_playlist_filter_album(factories, queryset_equal_list):
plt = factories["playlists.PlaylistTrack"]()
factories["playlists.PlaylistTrack"]()
qs = models.Playlist.objects.all()
filterset = filters.PlaylistFilter({"album": plt.track.album.pk}, queryset=qs)
assert filterset.qs == [plt.playlist]
def test_playlist_filter_artist(factories, queryset_equal_list):
plt = factories["playlists.PlaylistTrack"]()
factories["playlists.PlaylistTrack"]()
qs = models.Playlist.objects.all()
filterset = filters.PlaylistFilter({"artist": plt.track.artist.pk}, queryset=qs)
assert filterset.qs == [plt.playlist]