return tracks instead of radiosessiontrack
This commit is contained in:
parent
31e856c258
commit
591ef6adf3
|
@ -123,7 +123,7 @@ class SessionRadio(SimpleRadio):
|
||||||
# get cached RadioTracks if any
|
# get cached RadioTracks if any
|
||||||
try:
|
try:
|
||||||
cached_evaluated_radio_tracks = pickle.loads(
|
cached_evaluated_radio_tracks = pickle.loads(
|
||||||
cache.get(f"radiosessiontracks{self.session.id}")
|
cache.get(f"radiotracks{self.session.id}")
|
||||||
)
|
)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
cached_evaluated_radio_tracks = None
|
cached_evaluated_radio_tracks = None
|
||||||
|
@ -145,26 +145,25 @@ class SessionRadio(SimpleRadio):
|
||||||
raise ValueError("No more radio candidates")
|
raise ValueError("No more radio candidates")
|
||||||
|
|
||||||
# create the radio session tracks into db in bulk
|
# 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
|
# evaluate the queryset to save it in cache
|
||||||
|
radio_tracks = list(sliced_queryset)
|
||||||
|
|
||||||
if cached_evaluated_radio_tracks is not None:
|
if cached_evaluated_radio_tracks is not None:
|
||||||
radio_tracks = list(radio_tracks)
|
|
||||||
radio_tracks.extend(cached_evaluated_radio_tracks)
|
radio_tracks.extend(cached_evaluated_radio_tracks)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Setting redis cache for radio generation with radio id {self.session.id}"
|
f"Setting redis cache for radio generation with radio id {self.session.id}"
|
||||||
)
|
)
|
||||||
cache.set(
|
cache.set(f"radiotracks{self.session.id}", pickle.dumps(radio_tracks), 3600)
|
||||||
f"radiosessiontracks{self.session.id}", pickle.dumps(radio_tracks), 3600
|
|
||||||
)
|
|
||||||
cache.set(f"radioqueryset{self.session.id}", sliced_queryset, 3600)
|
cache.set(f"radioqueryset{self.session.id}", sliced_queryset, 3600)
|
||||||
|
|
||||||
return sliced_queryset
|
return sliced_queryset
|
||||||
|
|
||||||
def get_choices_v2(self, quantity, **kwargs):
|
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(
|
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")
|
logger.info("Using redis cache for radio generation")
|
||||||
radio_tracks = cached_radio_tracks
|
radio_tracks = cached_radio_tracks
|
||||||
|
|
|
@ -213,11 +213,9 @@ class V2_RadioSessionViewSet(
|
||||||
)
|
)
|
||||||
# self.perform_create(serializer)
|
# self.perform_create(serializer)
|
||||||
# dirty override here, since we use a different serializer for creation and detail
|
# dirty override here, since we use a different serializer for creation and detail
|
||||||
evaluated_radio_tracks = pickle.loads(
|
evaluated_radio_tracks = pickle.loads(cache.get(f"radiotracks{session.id}"))
|
||||||
cache.get(f"radiosessiontracks{session.id}")
|
|
||||||
)
|
|
||||||
batch = evaluated_radio_tracks[:count]
|
batch = evaluated_radio_tracks[:count]
|
||||||
serializer = serializers.RadioSessionTrackSerializer(
|
serializer = TrackSerializer(
|
||||||
data=batch,
|
data=batch,
|
||||||
many="true",
|
many="true",
|
||||||
)
|
)
|
||||||
|
@ -225,9 +223,7 @@ class V2_RadioSessionViewSet(
|
||||||
|
|
||||||
# delete the tracks we sent from the cache
|
# delete the tracks we sent from the cache
|
||||||
new_cached_radiotracks = evaluated_radio_tracks[count:]
|
new_cached_radiotracks = evaluated_radio_tracks[count:]
|
||||||
cache.set(
|
cache.set(f"radiotracks{session.id}", pickle.dumps(new_cached_radiotracks))
|
||||||
f"radiosessiontracks{session.id}", pickle.dumps(new_cached_radiotracks)
|
|
||||||
)
|
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
serializer.data,
|
serializer.data,
|
||||||
|
|
|
@ -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})
|
response = logged_in_api_client.get(url, {"session": session.pk})
|
||||||
data = json.loads(response.content.decode("utf-8"))
|
data = json.loads(response.content.decode("utf-8"))
|
||||||
|
|
||||||
assert data[0]["track"]["id"] == track.pk
|
assert data[0]["id"] == track.pk
|
||||||
assert data[0]["position"] == 1
|
|
||||||
|
|
||||||
next_track = factories["music.Upload"](
|
next_track = factories["music.Upload"](
|
||||||
library__actor=actor, import_status="finished"
|
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})
|
response = logged_in_api_client.get(url, {"session": session.pk})
|
||||||
data = json.loads(response.content.decode("utf-8"))
|
data = json.loads(response.content.decode("utf-8"))
|
||||||
|
|
||||||
assert data[0]["track"]["id"] == next_track.id
|
assert data[0]["id"] == next_track.id
|
||||||
assert data[0]["position"] == 2
|
|
||||||
|
|
||||||
|
|
||||||
def test_related_object_radio_validate_related_object(factories):
|
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}
|
url, {"session": session.pk, "filter_playable": False}
|
||||||
)
|
)
|
||||||
pick = json.loads(response.content.decode("utf-8"))
|
pick = json.loads(response.content.decode("utf-8"))
|
||||||
assert pick[0]["track"]["title"] not in previous_choices
|
assert pick[0]["title"] not in previous_choices
|
||||||
assert pick[0]["track"]["title"] in [t.title for t in tracks]
|
assert pick[0]["title"] in [t.title for t in tracks]
|
||||||
previous_choices.append(pick[0]["track"]["title"])
|
previous_choices.append(pick[0]["title"])
|
||||||
|
|
||||||
response = logged_in_api_client.get(url, {"session": session.pk})
|
response = logged_in_api_client.get(url, {"session": session.pk})
|
||||||
assert (
|
assert (
|
||||||
|
@ -540,8 +538,8 @@ def test_can_cache_radio_track(factories):
|
||||||
session = radio.start_session(user)
|
session = radio.start_session(user)
|
||||||
picked = session.radio.pick_many_v2(quantity=1, filter_playable=False)
|
picked = session.radio.pick_many_v2(quantity=1, filter_playable=False)
|
||||||
assert len(picked) == 1
|
assert len(picked) == 1
|
||||||
for t in pickle.loads(cache.get(f"radiosessiontracks{session.id}")):
|
for t in pickle.loads(cache.get(f"radiotracks{session.id}")):
|
||||||
assert t.track in uploads
|
assert t in uploads
|
||||||
|
|
||||||
|
|
||||||
def test_regenerate_cache_if_not_enought_tracks_in_it(
|
def test_regenerate_cache_if_not_enought_tracks_in_it(
|
||||||
|
|
Loading…
Reference in New Issue