def cfwb_percentage(self):
return self.percentage(cfwb=True)
+ def language_set(self):
+ return self.count() - self.language_unset()
+
+ def language_unset(self):
+ return self.count(language='')
+
+ def unset_language_percentage(self):
+ return self.percentage(language='')
+
def french(self):
return self.count(language='fr')
+ def unset_or_na_language(self):
+ return self.qs.filter(Q(language='') | Q(language='na')).count()
+
def french_percentage(self):
- considered_tracks = self.count() - self.instru()
+ considered_tracks = self.count() - self.unset_or_na_language()
if considered_tracks == 0:
return '-'
return '%.2f%%' % (100. * self.french() / considered_tracks)
def quota_french(self):
# obligation de diffuser annuellement au moins 30% d'œuvres musicales de
# langue française
- considered_tracks = self.count() - self.instru()
+ considered_tracks = self.count() - self.unset_or_na_language()
if considered_tracks == 0:
return True
return (100. * self.french() / considered_tracks) > 30.
return datetime.datetime.today() + datetime.timedelta(int(date.rstrip('d')))
return datetime.datetime.strptime(date, '%Y-%m-%d').date()
+
class StatisticsView(TemplateView):
template_name = 'nonstop/statistics.html'
return super().get_queryset().exclude(creation_timestamp__isnull=True).order_by('-creation_timestamp')[:50]
+class ArtistTracksMetadataView(TracksMetadataView):
+
+ @property
+ def page_title(self):
+ return _('Metadata of tracks from %s') % Artist.objects.get(id=self.kwargs['artist_pk']).name
+
+ def get_queryset(self):
+ return Track.objects.filter(artist_id=self.kwargs['artist_pk']).order_by('title')
+
+
class QuickLinksView(TemplateView):
template_name = 'nonstop/quick_links.html'
zone.save()
zone_settings.save()
return super().form_valid(form)
+
+
+class MuninTracks(StatisticsView):
+ template_name = 'nonstop/munin_tracks.txt'
+ content_type = 'text/plain; charset=utf-8'
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['nonstop_general_total'] = Track.objects.count()
+ active_tracks_qs = Track.objects.filter(nonstop_zones__isnull=False).distinct()
+ context['nonstop_general_active'] = active_tracks_qs.count()
+ context['nonstop_percentages_instru'] = 100 * (
+ active_tracks_qs.filter(instru=True).count() /
+ context['nonstop_general_active'])
+ context['nonstop_percentages_cfwb'] = 100 * (
+ active_tracks_qs.filter(cfwb=True).count() /
+ context['nonstop_general_active'])
+ context['nonstop_percentages_langset'] = 100 * (
+ active_tracks_qs.exclude(language='').count() /
+ context['nonstop_general_active'])
+ context['nonstop_percentages_french'] = 100 * (
+ active_tracks_qs.filter(language='fr').count() /
+ active_tracks_qs.exclude(language__isnull=True).exclude(language__in=('', 'na')).count())
+ return context