return tracks instead of radiosessiontrack

This commit is contained in:
Petitminion 2023-07-13 13:05:14 +02:00
parent 31e856c258
commit 591ef6adf3
3 changed files with 17 additions and 24 deletions

View File

@ -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

View File

@ -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,

View File

@ -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(