diff --git a/api/funkwhale_api/radios/radios.py b/api/funkwhale_api/radios/radios.py index 10dc10cb8..6fabdf61a 100644 --- a/api/funkwhale_api/radios/radios.py +++ b/api/funkwhale_api/radios/radios.py @@ -123,7 +123,7 @@ class SessionRadio(SimpleRadio): # get cached RadioTracks if any try: cached_evaluated_radio_tracks = pickle.loads( - cache.get(f"radiosessiontracks{self.session.id}") + cache.get(f"radiotracks{self.session.id}") ) except TypeError: cached_evaluated_radio_tracks = None @@ -145,26 +145,25 @@ class SessionRadio(SimpleRadio): raise ValueError("No more radio candidates") # create the radio session tracks into db in bulk - radio_tracks = self.session.add(sliced_queryset) + self.session.add(sliced_queryset) # evaluate the queryset to save it in cache + radio_tracks = list(sliced_queryset) + if cached_evaluated_radio_tracks is not None: - radio_tracks = list(radio_tracks) radio_tracks.extend(cached_evaluated_radio_tracks) logger.info( f"Setting redis cache for radio generation with radio id {self.session.id}" ) - cache.set( - f"radiosessiontracks{self.session.id}", pickle.dumps(radio_tracks), 3600 - ) + cache.set(f"radiotracks{self.session.id}", pickle.dumps(radio_tracks), 3600) cache.set(f"radioqueryset{self.session.id}", sliced_queryset, 3600) return sliced_queryset def get_choices_v2(self, quantity, **kwargs): - if cache.get(f"radiosessiontracks{self.session.id}"): + if cache.get(f"radiotracks{self.session.id}"): cached_radio_tracks = pickle.loads( - cache.get(f"radiosessiontracks{self.session.id}") + cache.get(f"radiotracks{self.session.id}") ) logger.info("Using redis cache for radio generation") radio_tracks = cached_radio_tracks diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py index b442b1a97..e85e5cffe 100644 --- a/api/funkwhale_api/radios/views.py +++ b/api/funkwhale_api/radios/views.py @@ -213,11 +213,9 @@ class V2_RadioSessionViewSet( ) # self.perform_create(serializer) # dirty override here, since we use a different serializer for creation and detail - evaluated_radio_tracks = pickle.loads( - cache.get(f"radiosessiontracks{session.id}") - ) + evaluated_radio_tracks = pickle.loads(cache.get(f"radiotracks{session.id}")) batch = evaluated_radio_tracks[:count] - serializer = serializers.RadioSessionTrackSerializer( + serializer = TrackSerializer( data=batch, many="true", ) @@ -225,9 +223,7 @@ class V2_RadioSessionViewSet( # delete the tracks we sent from the cache new_cached_radiotracks = evaluated_radio_tracks[count:] - cache.set( - f"radiosessiontracks{session.id}", pickle.dumps(new_cached_radiotracks) - ) + cache.set(f"radiotracks{session.id}", pickle.dumps(new_cached_radiotracks)) return Response( serializer.data, diff --git a/api/tests/radios/test_radios.py b/api/tests/radios/test_radios.py index cd906d630..b3b4da18d 100644 --- a/api/tests/radios/test_radios.py +++ b/api/tests/radios/test_radios.py @@ -221,8 +221,7 @@ def test_can_get_track_for_session_from_api_v2(factories, logged_in_api_client): response = logged_in_api_client.get(url, {"session": session.pk}) data = json.loads(response.content.decode("utf-8")) - assert data[0]["track"]["id"] == track.pk - assert data[0]["position"] == 1 + assert data[0]["id"] == track.pk next_track = factories["music.Upload"]( library__actor=actor, import_status="finished" @@ -230,8 +229,7 @@ def test_can_get_track_for_session_from_api_v2(factories, logged_in_api_client): response = logged_in_api_client.get(url, {"session": session.pk}) data = json.loads(response.content.decode("utf-8")) - assert data[0]["track"]["id"] == next_track.id - assert data[0]["position"] == 2 + assert data[0]["id"] == next_track.id def test_related_object_radio_validate_related_object(factories): @@ -489,9 +487,9 @@ def test_session_radio_excludes_previous_picks_v2(factories, logged_in_api_clien url, {"session": session.pk, "filter_playable": False} ) pick = json.loads(response.content.decode("utf-8")) - assert pick[0]["track"]["title"] not in previous_choices - assert pick[0]["track"]["title"] in [t.title for t in tracks] - previous_choices.append(pick[0]["track"]["title"]) + assert pick[0]["title"] not in previous_choices + assert pick[0]["title"] in [t.title for t in tracks] + previous_choices.append(pick[0]["title"]) response = logged_in_api_client.get(url, {"session": session.pk}) assert ( @@ -540,8 +538,8 @@ def test_can_cache_radio_track(factories): session = radio.start_session(user) picked = session.radio.pick_many_v2(quantity=1, filter_playable=False) assert len(picked) == 1 - for t in pickle.loads(cache.get(f"radiosessiontracks{session.id}")): - assert t.track in uploads + for t in pickle.loads(cache.get(f"radiotracks{session.id}")): + assert t in uploads def test_regenerate_cache_if_not_enought_tracks_in_it(