def leaderboard_export(request, course_id=None): if request.is_secure(): prefix = 'https://' else: prefix = 'http://' response_data = {} response_data['generated_date'] = timezone.now() response_data['server'] = prefix + request.META['SERVER_NAME'] if course_id is None: leaderboard = Points.get_leaderboard() else: course = get_object_or_404(Course, pk=course_id) leaderboard = Points.get_leaderboard(course=course) response_data['course'] = course.shortname response_data['leaderboard'] = [] for idx, leader in enumerate(leaderboard): leader_data = {} leader_data['position'] = idx + 1 leader_data['username'] = leader.username leader_data['first_name'] = leader.first_name leader_data['last_name'] = leader.last_name leader_data['points'] = leader.total leader_data['badges'] = leader.badges response_data['leaderboard'].append(leader_data) return JsonResponse(response_data)
def leaderboard(self, request, **kwargs): self.method_check(request, allowed=['get']) self.is_authenticated(request) self.throttle_check(request) if request.is_secure(): prefix = 'https://' else: prefix = 'http://' response_data = {} response_data['generated_date'] = timezone.now() response_data['server'] = prefix + request.META['SERVER_NAME'] leaderboard = Points.get_leaderboard() response_data['leaderboard'] = [] for idx, leader in enumerate(leaderboard): leader_data = {} leader_data['position'] = idx + 1 leader_data['username'] = leader.username leader_data['first_name'] = leader.first_name leader_data['last_name'] = leader.last_name leader_data['points'] = leader.total leader_data['badges'] = leader.badges response_data['leaderboard'].append(leader_data) return JsonResponse(response_data)
def home_view(request): if request.user.is_authenticated: # create profile if none exists (for first admin user login and historical for very old users) try: request.user.userprofile except UserProfile.DoesNotExist: up = UserProfile() up.user = request.user up.save() up = request.user.userprofile # if user is student redirect to their scorecard if up.is_student_only(): return HttpResponseRedirect(reverse('profile:user_activity', args=[request.user.id])) # is user is teacher redirect to teacher home if up.is_teacher_only(): return HttpResponseRedirect(reverse('oppia:teacher_index')) # admin/staff view form, activity = home_view_admin_authenticated(request) leaderboard = Points.get_leaderboard(10) else: activity = [] leaderboard = None form = None return render(request, 'oppia/home.html', {'form': form, 'activity_graph_data': activity, 'leaderboard': leaderboard})
def recent_activity(request, course_id): course, response = can_view_course_detail(request, course_id) if response is not None: raise response dashboard_accessed.send(sender=None, request=request, data=course) start_date = datetime.datetime.now() - datetime.timedelta(days=31) end_date = datetime.datetime.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date + " 00:00:00", "%Y-%m-%d %H:%M:%S") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date + " 23:59:59", "%Y-%m-%d %H:%M:%S") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) dates = [] if interval == 'days': daily_stats = CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) \ .values('day', 'type') \ .annotate(total=Sum('total')) dates = generate_graph_data(daily_stats, False) else: monthly_stats = CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) \ .extra({'month': 'month(day)', 'year': 'year(day)'}) \ .values('month', 'year', 'type') \ .annotate(total=Sum('total')) \ .order_by('year', 'month') dates = generate_graph_data(monthly_stats, True) leaderboard = Points.get_leaderboard(10, course) return render( request, 'course/activity.html', { 'course': course, 'monthly': interval == 'months', 'form': form, 'data': dates, 'leaderboard': leaderboard })
def home_view(request): activity = [] if request.user.is_authenticated(): start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date,"%Y-%m-%d") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date,"%Y-%m-%d") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) if interval == 'days': no_days = (end_date-start_date).days + 1 for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%Y") count = Tracker.objects.filter(course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False,tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).count() activity.append([temp.strftime("%d %b %Y"),count]) else: delta = relativedelta(months=+1) no_months = 0 tmp_date = start_date while tmp_date <= end_date: print tmp_date tmp_date += delta no_months += 1 for i in range(0,no_months,+1): temp = start_date + relativedelta(months=+i) month = temp.strftime("%m") year = temp.strftime("%Y") count = Tracker.objects.filter(course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False,tracker_date__month=month,tracker_date__year=year).count() activity.append([temp.strftime("%b %Y"),count]) else: form = None leaderboard = Points.get_leaderboard(10) return render_to_response('oppia/home.html', {'form': form, 'recent_activity':activity, 'leaderboard':leaderboard}, context_instance=RequestContext(request))
def recent_activity(request, course_id): course, response = can_view_course_detail(request, course_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=course) start_date = datetime.datetime.now() - datetime.timedelta(days=31) end_date = datetime.datetime.now() interval = "days" if request.method == "POST": form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date + " 00:00:00", "%Y-%m-%d %H:%M:%S") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date + " 23:59:59", "%Y-%m-%d %H:%M:%S") interval = form.cleaned_data.get("interval") else: data = {} data["start_date"] = start_date data["end_date"] = end_date data["interval"] = interval form = DateRangeIntervalForm(initial=data) dates = [] if interval == "days": daily_stats = ( CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) .values("day", "type") .annotate(total=Sum("total")) ) dates = generate_graph_data(daily_stats, False) else: monthly_stats = ( CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) .extra({"month": "month(day)", "year": "year(day)"}) .values("month", "year", "type") .annotate(total=Sum("total")) .order_by("year", "month") ) dates = generate_graph_data(monthly_stats, True) leaderboard = Points.get_leaderboard(10, course) return render_to_response( "oppia/course/activity.html", {"course": course, "form": form, "data": dates, "leaderboard": leaderboard}, context_instance=RequestContext(request), )
def get(self, request): lb = Points.get_leaderboard() paginator = Paginator(lb, constants.LEADERBOARD_TABLE_RESULTS_PER_PAGE) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: leaderboard = paginator.page(page) except (EmptyPage, InvalidPage): leaderboard = paginator.page(paginator.num_pages) return render(request, 'oppia/leaderboard.html', {'page': leaderboard})
def recent_activity(request, course_id): course, response = can_view_course_detail(request, course_id) if response is not None: raise response dashboard_accessed.send(sender=None, request=request, data=course) start_date = datetime.datetime.now() - datetime.timedelta(days=31) end_date = datetime.datetime.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date + " 00:00:00", "%Y-%m-%d %H:%M:%S") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date + " 23:59:59", "%Y-%m-%d %H:%M:%S") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) dates = [] if interval == 'days': daily_stats = CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) \ .values('day', 'type') \ .annotate(total=Sum('total')) dates = generate_graph_data(daily_stats, False) else: monthly_stats = CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) \ .extra({'month': 'month(day)', 'year': 'year(day)'}) \ .values('month', 'year', 'type') \ .annotate(total=Sum('total')) \ .order_by('year', 'month') dates = generate_graph_data(monthly_stats, True) leaderboard = Points.get_leaderboard(10, course) return render(request, 'oppia/course/activity.html', {'course': course, 'monthly': interval == 'months', 'form': form, 'data': dates, 'leaderboard': leaderboard})
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) start_date, end_date = self.get_daterange() interval = self.get_daterange_form().cleaned_data.get("interval") if interval == 'days': activity = process_home_activity_days(start_date, end_date) else: activity = process_home_activity_months(start_date, end_date) context['activity_graph_data_tracker_date'] = activity context['leaderboard'] = Points.get_leaderboard(constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE) return context
def home_view(request): activity = [] if request.user.is_authenticated(): startdate = datetime.datetime.now() staff = User.objects.filter(is_staff=True) for i in range(31,-1,-1): temp = startdate - datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%y") count = Tracker.objects.filter(tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).exclude(user_id__in=staff).count() activity.append([temp.strftime("%d %b %y"),count]) leaderboard = Points.get_leaderboard(10) return render_to_response('oppia/home.html',{'recent_activity':activity, 'leaderboard':leaderboard}, context_instance=RequestContext(request))
def process(self, request, course, start_date, end_date, interval): download_stats = UserCourseSummary.objects \ .filter(course=course.id) \ .aggregated_stats('total_downloads', single=True) data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) dates = [] if interval == 'days': daily_stats = CourseDailyStats.objects.filter(course=course, day__gte=start_date, day__lte=end_date) \ .annotate(stat_date=TruncDay('day')) \ .values('stat_date', 'type') \ .annotate(total=Sum('total')) dates = generate_graph_data(daily_stats, False) else: monthly_stats = CourseDailyStats.objects \ .filter(course=course, day__gte=start_date, day__lte=end_date) \ .annotate(month=TruncMonth('day'), year=TruncYear('day')) \ .values('month', 'year', 'type') \ .annotate(total=Sum('total')) \ .order_by('year', 'month') dates = generate_graph_data(monthly_stats, True) leaderboard = Points.get_leaderboard( constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE, course) return render( request, 'course/detail.html', { 'course': course, 'monthly': interval == 'months', 'form': form, 'data': dates, 'download_stats': download_stats, 'leaderboard': leaderboard })
def recent_activity(request,id): course = Course.objects.get(pk=id) dates = [] startdate = datetime.datetime.now() staff = User.objects.filter(is_staff=True) for i in range(31,-1,-1): temp = startdate - datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%y") count_act_page = Tracker.objects.filter(course=course,type='page',tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).exclude(user_id__in=staff).count() count_act_quiz = Tracker.objects.filter(course=course,type='quiz',tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).exclude(user_id__in=staff).count() count_media = Tracker.objects.filter(course=course,type='media',tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).exclude(user_id__in=staff).count() dates.append([temp.strftime("%d %b %y"),count_act_page,count_act_quiz,count_media]) leaderboard = Points.get_leaderboard(10, course) return render_to_response('oppia/course/activity.html',{'course': course,'data':dates, 'leaderboard':leaderboard}, context_instance=RequestContext(request))
def leaderboard_view(request): lb = Points.get_leaderboard(100) paginator = Paginator(lb, 25) # Show 25 contacts per page # Make sure page request is an int. If not, deliver first page. try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 # If page request (9999) is out of range, deliver last page of results. try: leaderboard = paginator.page(page) except (EmptyPage, InvalidPage): leaderboard = paginator.page(paginator.num_pages) return render_to_response('oppia/leaderboard.html',{'page':leaderboard}, context_instance=RequestContext(request))
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) can_view_course_detail(self.request, self.object.id) start_date = timezone.now() - datetime.timedelta( days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS) end_date = timezone.now() interval = 'days' initial = { 'start_date': start_date, 'end_date': end_date, 'interval': interval } initial.update(self.request.GET.dict()) if isinstance(initial['interval'], list): initial['interval'] = initial['interval'][0] form = DateRangeIntervalForm(initial) if form.is_valid(): start_date = timezone.make_aware( datetime.datetime.strptime(form.cleaned_data.get("start_date"), constants.STR_DATE_FORMAT), timezone.get_current_timezone()) end_date = timezone.make_aware( datetime.datetime.strptime(form.cleaned_data.get("end_date"), constants.STR_DATE_FORMAT), timezone.get_current_timezone()) interval = form.cleaned_data.get("interval") form.form_method = 'get' context['form'] = form context['monthly'] = interval == 'months' context['download_stats'] = UserCourseSummary.objects \ .filter(course=self.object.id) \ .aggregated_stats('total_downloads', single=True) context['leaderboard'] = Points.get_leaderboard( constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE, self.object) context['data'] = self.get_activity(start_date, end_date, interval) return context
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) can_view_course_detail(self.request, self.object.id) start_date, end_date = self.get_daterange() interval = self.get_daterange_form().cleaned_data.get("interval") context['monthly'] = interval == 'months' context['download_stats'] = UserCourseSummary.objects \ .filter(course=self.object.id).aggregated_stats('total_downloads', single=True) context['leaderboard'] = Points.get_leaderboard( constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE, self.object) context['data'] = self.get_activity(start_date, end_date, interval) context['can_edit_course_gamification'] = can_edit_course_gamification( self.request, self.object.id) return context
def process(self, request): if request.user.is_authenticated: # create profile if none exists (for first admin user login and # historical for very old users) try: request.user.userprofile except UserProfile.DoesNotExist: up = UserProfile() up.user = request.user up.save() up = request.user.userprofile # if user is student redirect to their scorecard if up.is_student_only(): return HttpResponseRedirect( reverse('profile:user_activity', args=[request.user.id])) # is user is teacher redirect to teacher home if up.is_teacher_only(): return HttpResponseRedirect(reverse('oppia:teacher_index')) if permissions.is_manager_only(request.user): return HttpResponseRedirect(reverse('oppia:manager_index')) # admin/staff view form, activity = self.admin_authenticated(request) leaderboard = Points.get_leaderboard( constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE) else: activity = [] leaderboard = None form = None return render( request, 'oppia/home.html', { 'form': form, 'activity_graph_data': activity, 'leaderboard': leaderboard })
def home_view(request): activity = [] if request.user.is_authenticated(): startdate = datetime.datetime.now() staff = User.objects.filter(is_staff=True) for i in range(31, -1, -1): temp = startdate - datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%y") count = Tracker.objects.filter( tracker_date__day=day, tracker_date__month=month, tracker_date__year=year).exclude(user_id__in=staff).count() activity.append([temp.strftime("%d %b %y"), count]) leaderboard = Points.get_leaderboard(10) return render_to_response('oppia/home.html', { 'recent_activity': activity, 'leaderboard': leaderboard }, context_instance=RequestContext(request))
def recent_activity(request, id): course = Course.objects.get(pk=id) dates = [] startdate = datetime.datetime.now() staff = User.objects.filter(is_staff=True) for i in range(31, -1, -1): temp = startdate - datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%y") count_act_page = Tracker.objects.filter( course=course, type='page', tracker_date__day=day, tracker_date__month=month, tracker_date__year=year).exclude(user_id__in=staff).count() count_act_quiz = Tracker.objects.filter( course=course, type='quiz', tracker_date__day=day, tracker_date__month=month, tracker_date__year=year).exclude(user_id__in=staff).count() count_media = Tracker.objects.filter( course=course, type='media', tracker_date__day=day, tracker_date__month=month, tracker_date__year=year).exclude(user_id__in=staff).count() dates.append([ temp.strftime("%d %b %y"), count_act_page, count_act_quiz, count_media ]) leaderboard = Points.get_leaderboard(10, course) return render_to_response('oppia/course/activity.html', { 'course': course, 'data': dates, 'leaderboard': leaderboard }, context_instance=RequestContext(request))
def recent_activity(request,id): course = check_can_view(request, id) start_date = datetime.datetime.now() - datetime.timedelta(days=31) end_date = datetime.datetime.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date,"%Y-%m-%d") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date,"%Y-%m-%d") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) dates = [] if interval == 'days': no_days = (end_date-start_date).days + 1 for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) day = temp.strftime("%d") month = temp.strftime("%m") year = temp.strftime("%Y") count_objs = Tracker.objects.filter(course=course,tracker_date__day=day,tracker_date__month=month,tracker_date__year=year).values('type').annotate(total=Count('type')) count_activity = {'page':0, 'quiz':0, 'media':0, 'resource':0, 'monitor': 0, 'total':0} for co in count_objs: if co['type'] in count_activity: count_activity[co['type']] = count_activity[co['type']] + co['total'] count_activity['total'] = count_activity['total'] + co['total'] else: count_activity[co['type']] = 0 count_activity[co['type']] = count_activity[co['type']] + co['total'] count_activity['total'] = count_activity['total'] + co['total'] dates.append([temp.strftime("%d %b %y"),count_activity]) else: delta = relativedelta(months=+1) no_months = 0 tmp_date = start_date while tmp_date <= end_date: print tmp_date tmp_date += delta no_months += 1 for i in range(0,no_months,+1): temp = start_date + relativedelta(months=+i) month = temp.strftime("%m") year = temp.strftime("%Y") count_objs = Tracker.objects.filter(course=course,tracker_date__month=month,tracker_date__year=year).values('type').annotate(total=Count('type')) count_activity = {'page':0, 'quiz':0, 'media':0, 'resource':0, 'monitor': 0, 'total':0} for co in count_objs: if co['type'] in count_activity: count_activity[co['type']] = count_activity[co['type']] + co['total'] count_activity['total'] = count_activity['total'] + co['total'] else: count_activity[co['type']] = 0 count_activity[co['type']] = count_activity[co['type']] + co['total'] count_activity['total'] = count_activity['total'] + co['total'] dates.append([temp.strftime("%b %y"),count_activity]) leaderboard = Points.get_leaderboard(10, course) nav = get_nav(course,request.user) return render_to_response('oppia/course/activity.html', {'course': course, 'form': form, 'nav': nav, 'data':dates, 'leaderboard':leaderboard}, context_instance=RequestContext(request))
def home_view(request): activity = [] leaderboard = None if request.user.is_authenticated: # create profile if none exists (historical for very old users) try: up = request.user.userprofile except UserProfile.DoesNotExist: up = UserProfile() up.user = request.user up.save() dashboard_accessed.send(sender=None, request=request, data=None) # if user is student redirect to their scorecard if up.is_student_only(): return HttpResponseRedirect(reverse('profile_user_activity', args=[request.user.id])) # is user is teacher redirect to teacher home if up.is_teacher_only(): return HttpResponseRedirect(reverse('oppia_teacher_home')) start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) if interval == 'days': no_days = (end_date - start_date).days + 1 tracker_stats = CourseDailyStats.objects.filter(day__gte=start_date, day__lte=end_date).values('day').annotate(count=Sum('total')) for i in range(0, no_days, +1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in tracker_stats if dct['day'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"), count]) else: delta = relativedelta(months=+1) no_months = 0 tmp_date = start_date while tmp_date <= end_date: tmp_date += delta no_months += 1 for i in range(0, no_months, +1): temp = start_date + relativedelta(months=+i) month = temp.strftime("%m") year = temp.strftime("%Y") count = CourseDailyStats.objects.filter(day__month=month, day__year=year).aggregate(total=Sum('total')).get('total', 0) activity.append([temp.strftime("%b %Y"), 0 if count is None else count]) leaderboard = Points.get_leaderboard(10) else: form = None return render(request, 'oppia/home.html', {'form': form, 'activity_graph_data': activity, 'leaderboard': leaderboard})
def get_queryset(self): return Points.get_leaderboard()
def home_view(request): activity = [] if request.user.is_authenticated(): # create profile if none exists (historical for very old users) try: up = request.user.userprofile except UserProfile.DoesNotExist: up = UserProfile() up.user= request.user up.save() # if user is student redirect to their scorecard if up.is_student_only(): return HttpResponseRedirect(reverse('profile_user_activity', args=[request.user.id])) # is user is teacher redirect to teacher home if up.is_teacher_only(): return HttpResponseRedirect(reverse('oppia_teacher_home')) start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() interval = 'days' if request.method == 'POST': form = DateRangeIntervalForm(request.POST) if form.is_valid(): start_date = form.cleaned_data.get("start_date") start_date = datetime.datetime.strptime(start_date,"%Y-%m-%d") end_date = form.cleaned_data.get("end_date") end_date = datetime.datetime.strptime(end_date,"%Y-%m-%d") interval = form.cleaned_data.get("interval") else: data = {} data['start_date'] = start_date data['end_date'] = end_date data['interval'] = interval form = DateRangeIntervalForm(initial=data) if interval == 'days': no_days = (end_date-start_date).days + 1 trackers = Tracker.objects.filter(course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False, tracker_date__gte=start_date, tracker_date__lte=end_date).extra({'activity_date':"date(tracker_date)"}).values('activity_date').annotate(count=Count('id')) for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"),count]) else: delta = relativedelta(months=+1) no_months = 0 tmp_date = start_date while tmp_date <= end_date: print tmp_date tmp_date += delta no_months += 1 for i in range(0,no_months,+1): temp = start_date + relativedelta(months=+i) month = temp.strftime("%m") year = temp.strftime("%Y") count = Tracker.objects.filter(course__isnull=False, course__is_draft=False, user__is_staff=False, course__is_archived=False, tracker_date__month=month, tracker_date__year=year).count() activity.append([temp.strftime("%b %Y"),count]) else: form = None leaderboard = Points.get_leaderboard(10) return render_to_response('oppia/home.html', {'form': form, 'activity_graph_data': activity, 'leaderboard': leaderboard}, context_instance=RequestContext(request))