class Tracklist:
- def __init__(self, zone_settings, zone_ids, recent_tracks_id=None, filter_kwargs={}, k=30):
+ def __init__(self, zone_settings, zone_ids, recent_tracks_id=None, requires_metadata=False, k=30):
self.zone_settings = zone_settings
self.zone_ids = zone_ids
self.playlist = []
self.recent_tracks_id = recent_tracks_id or []
- self.filter_kwargs = filter_kwargs
+ self.requires_metadata = requires_metadata
self.k = k
def append(self, track):
while True:
# pick tracks from db
- tracks = Track.objects.filter(
- nonstop_zones__in=self.zone_ids,
- duration__isnull=False,
- **self.filter_kwargs).exclude(
- id__in=self.get_recent_track_ids()
- ).order_by('?')[:k*10]
+ tracks = Track.objects.filter(nonstop_zones__in=self.zone_ids, duration__isnull=False)
+ if self.requires_metadata:
+ tracks = tracks.exclude(language__isnull=True)
+ tracks = tracks.exclude(id__in=self.get_recent_track_ids()).order_by('?')[:k*10]
if len(tracks) == 0:
self.recent_tracks_id = self.recent_tracks_id[:len(self.recent_tracks_id) // 2]
continue
weights = {key[7:]: int(value) for key, value in request.GET.items() if key.startswith('weight_')}
zone_settings.weights = weights
- tracklist = utils.Tracklist(zone_settings, zone_ids=[zone.id])
+ tracklist = utils.Tracklist(zone_settings, zone_ids=[zone.id], requires_metadata=True)
random_tracks_iterator = tracklist.get_random_tracks(k=100)
counts = collections.defaultdict(int)