diff --git a/marietje/stats/utils.py b/marietje/stats/utils.py index 8c94525..5a276b7 100644 --- a/marietje/stats/utils.py +++ b/marietje/stats/utils.py @@ -1,9 +1,8 @@ -from datetime import datetime, timedelta, time +from datetime import datetime, timedelta from django.core.cache import caches from django.conf import settings from django.db.models import Count, Q, Sum -from django.shortcuts import render from django.utils import timezone from queues.models import PlaylistSong @@ -30,49 +29,34 @@ def recache_user_stats(): return new_stats -def time_convert(time): - try: - for tr in time: - tr['duration'] = str(round(tr['total'] / 86400, 2)) + ' days' - avg_dur_sec = tr['avg_dur'] % 60 - avg_dur_min = int((tr['avg_dur'] - avg_dur_sec) / 60) - tr['avg_dur'] = '{}:{}'.format(avg_dur_min, avg_dur_sec) - return time - except: - avg_dur_sec = round(time % 60) - avg_dur_min = int(round((time - avg_dur_sec) / 60)) - return ('{} minutes and {} seconds'.format(avg_dur_min, avg_dur_sec)) - - -def calculate_uploaders(requests_uploader, most_requested_uploaders): - for x in requests_uploader: +def best_uploaders_list(requests_uploader, most_requested_uploaders): + for requests in requests_uploader: a = len(most_requested_uploaders) b = 0 while b <= a: if b == a: - adding_list_item(most_requested_uploaders, x) - elif x['song__user__id'] == most_requested_uploaders[b]['id']: - if x['song__user__name'] == x['user__name']: - most_requested_uploaders[b]['own_total'] = x['total'] + adding_list_item(most_requested_uploaders, requests) + elif requests['song__user__id'] == most_requested_uploaders[b]['id']: + if requests['song__user__name'] == requests['user__name']: + most_requested_uploaders[b]['own_total'] = requests['total'] else: - most_requested_uploaders[b]['total'] += x['total'] + most_requested_uploaders[b]['total'] += requests['total'] break b += 1 - return -def adding_list_item(list, x): - list.append({ - 'id': x['song__user__id'], - 'name': x['song__user__name'], +def adding_list_item(most_requested_list, requests): + # adds a single item to the best_uploaders list + most_requested_list.append({ + 'id': requests['song__user__id'], + 'name': requests['song__user__name'], 'total': 0, 'own_total': 0 }) - if x['song__user__id'] == x['user__id']: - list[-1]['own_total']: x['total'] + if requests['song__user__id'] == requests['user__id']: + most_requested_list[-1]['own_total']: requests['total'] else: - list[-1]['_total']: x['total'] - return + most_requested_list[-1]['_total']: requests['total'] def compute_stats(): @@ -137,13 +121,10 @@ def compute_stats(): | Q(user_id__in=settings.STATS_REQUEST_IGNORE_USER_IDS)).aggregate( total=Sum('song__duration')) - total_time_overall = 0 - count = 0 - for x in list(time_requested): - total_time_overall += x['avg_dur'] - count += 1 - total_average = total_time_overall / count - total_average = time_convert(total_average) + total_time_overall = sum(x['avg_dur'] for x in time_requested) + total_average = total_time_overall / len(time_requested) + avg_dur_min, avg_dur_sec = divmod(total_average, 60) + total_average = '{} minutes and {} seconds'.format(avg_dur_min, avg_dur_sec) requests_uploader = PlaylistSong.objects.filter(state=2).exclude( Q(user_id=None) @@ -152,7 +133,15 @@ def compute_stats(): 'user__id').annotate(total=Count('song__user__name')) most_requested_uploaders = [] - calculate_uploaders(list(requests_uploader), most_requested_uploaders) + best_uploaders_list(list(requests_uploader), most_requested_uploaders) + + for time in list(time_requested): + # converts total time and average time in respectively days and minutes, seconds + time['duration'] = str(round(time['total'] / 86400, 2)) + ' days' + avg_dur_min, avg_dur_sec = divmod(time['avg_dur'], 60) + if avg_dur_sec < 10: + avg_dur_sec = '0' + str(avg_dur_sec) + time['avg_dur'] = '{}:{}'.format(avg_dur_min, avg_dur_sec) return { 'last_updated': last_updated, @@ -164,10 +153,11 @@ def compute_stats(): 'total_unique_requests': total_unique_requests, 'most_played_songs': list(most_played_songs), 'most_played_songs_14_days': list(most_played_songs_14_days), - 'time_requested': time_convert(list(time_requested)), + 'time_requested': time_requested, 'total_time_requested': str(round(float(total_time_requested['total']) / 86400, 2)) + ' days', 'stats_top_count': settings.STATS_TOP_COUNT, 'most_requested_uploaders': list(most_requested_uploaders), + 'total_average': total_average, } @@ -227,4 +217,4 @@ def user_stats(request): 'stats_top_count': settings.STATS_TOP_COUNT, 'total_played_uploads': total_played_uploads, 'total_played_user_uploads': total_played_user_uploads, - } + } \ No newline at end of file diff --git a/marietje/stats/views.py b/marietje/stats/views.py index c3acf33..ad60a29 100644 --- a/marietje/stats/views.py +++ b/marietje/stats/views.py @@ -2,8 +2,6 @@ from datetime import datetime, timedelta from django.core.cache import caches from django.shortcuts import render -from stats.utils import user_stats -from django.http import JsonResponse, HttpResponseForbidden def stats(request):