Avoid troi radio to give duplicates (#2231)

environments/review-docs-nodei-7gimn7/deployments/18579
petitminion 2023-11-03 16:13:53 +00:00
rodzic 7ecd3e6767
commit 7ccb2d88f8
2 zmienionych plików z 38 dodań i 24 usunięć

Wyświetl plik

@ -56,33 +56,37 @@ def build_radio_queryset(patch, config, radio_qs):
if not recommendations:
raise ValueError("No candidates found by troi")
recommended_recording_mbids = [
recommended_mbids = [
recommended_recording.mbid
for recommended_recording in recommendations.playlists[0].recordings
]
logger.info("Searching for MusicBrainz ID in Funkwhale database")
qs_mbid = music_models.Track.objects.all().filter(
mbid__in=recommended_recording_mbids
qs_recommended = (
music_models.Track.objects.all()
.filter(mbid__in=recommended_mbids)
.order_by("mbid", "pk")
.distinct("mbid")
)
mbids_found = [str(i.mbid) for i in qs_mbid]
qs_recommended_mbid = [str(i.mbid) for i in qs_recommended]
recommended_recording_mbids_not_found = [
mbid for mbid in recommended_recording_mbids if mbid not in mbids_found
recommended_mbids_not_qs = [
mbid for mbid in recommended_mbids if mbid not in qs_recommended_mbid
]
cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found)
cached_match = cache.get_many(recommended_mbids_not_qs)
cached_match_mbid = [str(i) for i in cached_match.keys()]
if qs_mbid and cached_mbid_match:
if qs_recommended and cached_match_mbid:
logger.info("MusicBrainz IDs found in Funkwhale database and redis")
mbids_found = [str(i.mbid) for i in qs_mbid]
mbids_found.extend([i for i in cached_mbid_match.keys()])
elif qs_mbid and not cached_mbid_match:
qs_recommended_mbid.extend(cached_match_mbid)
mbids_found = qs_recommended_mbid
elif qs_recommended and not cached_match_mbid:
logger.info("MusicBrainz IDs found in Funkwhale database")
mbids_found = mbids_found
elif not qs_mbid and cached_mbid_match:
mbids_found = qs_recommended_mbid
elif not qs_recommended and cached_match_mbid:
logger.info("MusicBrainz IDs found in redis cache")
mbids_found = [i for i in cached_mbid_match.keys()]
mbids_found = cached_match_mbid
else:
logger.info(
"Couldn't find any matches in Funkwhale database. Trying to match all"
@ -106,23 +110,32 @@ def build_radio_queryset(patch, config, radio_qs):
+ str(end_time_resolv - start_time_resolv)
)
cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found)
cached_match = cache.get_many(recommended_mbids)
if not qs_mbid and not cached_mbid_match:
if not mbids_found and not cached_match:
raise ValueError("No candidates found for troi radio")
logger.info("Radio generation with troi took " + str(end_time_resolv - start_time))
logger.info("qs_mbid is " + str(mbids_found))
mbids_found_pks = list(
music_models.Track.objects.all()
.filter(mbid__in=mbids_found)
.order_by("mbid", "pk")
.distinct("mbid")
.values_list("pk", flat=True)
)
if qs_mbid and cached_mbid_match:
mbids_found_pks_unique = [
i for i in mbids_found_pks if i not in cached_match.keys()
]
if mbids_found and cached_match:
return radio_qs.filter(
Q(mbid__in=mbids_found) | Q(pk__in=cached_mbid_match.values())
Q(pk__in=mbids_found_pks_unique) | Q(pk__in=cached_match.values())
)
if qs_mbid and not cached_mbid_match:
return radio_qs.filter(mbid__in=mbids_found)
if mbids_found and not cached_match:
return radio_qs.filter(pk__in=mbids_found_pks_unique)
if not qs_mbid and cached_mbid_match:
return radio_qs.filter(pk__in=cached_mbid_match.values())
if not mbids_found and cached_match:
return radio_qs.filter(pk__in=cached_match.values())
class TroiPatch:

Wyświetl plik

@ -0,0 +1 @@
Avoid troi radio to give duplicates (#2231)