add playlists radio to search result page

This commit is contained in:
petitminion 2022-11-20 10:49:23 +00:00
commit 01fd1503c9
6 changed files with 38 additions and 14 deletions

View file

@ -6,6 +6,7 @@ from django.db.models import Q, functions
from django.urls import reverse_lazy
from funkwhale_api.music import models
from funkwhale_api.playlists import models as plt_models
class RadioFilterRegistry(persisting_theory.Registry):
@ -226,3 +227,20 @@ class TagFilter(RadioFilter):
raise ValidationError("You must provide a name")
except AssertionError:
raise ValidationError('No tag matching names "{}"'.format(diff))
@registry.register
class PlaylistFilter(RadioFilter):
code = "playlist"
label = "Playlist"
def get_query(self, candidates, ids, **kwargs):
playlists = plt_models.Playlist.objects.filter(id__in=ids)
ids_plts = []
for playlist in playlists:
ids = playlist.playlist_tracks.select_related("track").values_list(
"track_id", flat=True
)
for id in ids:
ids_plts.append(id)
return Q(id__in=ids_plts)

View file

@ -418,7 +418,7 @@ def test_get_choices_for_custom_radio_exclude_tag(factories):
def test_can_start_custom_multiple_radio_from_api(api_client, factories):
tracks = factories["music.Track"].create_batch(5)
url = reverse("api:v1:radios:sessions-list")
map_filters_to_type = {"tags": "names", "artists": "ids"}
map_filters_to_type = {"tags": "names", "artists": "ids", "playlists": "names"}
for (key, value) in map_filters_to_type.items():
attr = value[:-1]
track_filter_key = [getattr(a.artist, attr) for a in tracks]