def get_context_data(self, **kwargs): context = super(UserProblemsPage, self).get_context_data(**kwargs) result = Submission.objects.filter(user=self.object, points__gt=0, problem__is_public=True, problem__is_organization_private=False) \ .exclude(problem__in=self.get_completed_problems() if self.hide_solved else []) \ .values('problem__id', 'problem__code', 'problem__name', 'problem__points', 'problem__group__full_name') \ .distinct().annotate(points=Max('points')).order_by('problem__group__full_name', 'problem__code') def process_group(group, problems_iter): problems = list(problems_iter) points = sum(map(itemgetter('points'), problems)) return {'name': group, 'problems': problems, 'points': points} context['best_submissions'] = [ process_group(group, problems) for group, problems in itertools.groupby( remap_keys(result, { 'problem__code': 'code', 'problem__name': 'name', 'problem__points': 'total', 'problem__group__full_name': 'group' }), itemgetter('group')) ] breakdown, has_more = get_pp_breakdown(self.object, start=0, end=10) context['pp_breakdown'] = breakdown context['pp_has_more'] = has_more return context
def get_context_data(self, **kwargs): context = super(UserPerformancePointsAjax, self).get_context_data(**kwargs) try: start = int(self.request.GET.get('start', 0)) end = int(self.request.GET.get('end', settings.DMOJ_PP_ENTRIES)) if start < 0 or end < 0 or start > end: raise ValueError except ValueError: start, end = 0, 100 breakdown, self.has_more = get_pp_breakdown(self.object, start=start, end=end) context['pp_breakdown'] = breakdown return context
def get_context_data(self, **kwargs): context = super(UserPerformancePointsAjax, self).get_context_data(**kwargs) try: start = int(self.request.GET.get('start', 0)) end = int(self.request.GET.get('end', PP_ENTRIES)) if start < 0 or end < 0 or start > end: raise ValueError except ValueError: start, end = 0, 100 breakdown, self.has_more = get_pp_breakdown(self.object, start=start, end=end) context['pp_breakdown'] = breakdown return context
def get_context_data(self, **kwargs): context = super(UserPage, self).get_context_data(**kwargs) context['hide_solved'] = int(self.hide_solved) result = Submission.objects.filter(user=self.object, points__gt=0, problem__is_public=True) \ .exclude(problem__id__in=self.get_completed_problems() if self.hide_solved else []) \ .values('problem__id', 'problem__code', 'problem__name', 'problem__points', 'problem__group__full_name') \ .distinct().annotate(points=Max('points')).order_by('problem__group__full_name', 'problem__code') context['best_submissions'] = remap_keys( result, { 'problem__code': 'code', 'problem__name': 'name', 'problem__points': 'total', 'problem__group__full_name': 'group' }) context['authored'] = self.object.authored_problems.filter( is_public=True).order_by('code') rating = self.object.ratings.order_by('-contest__end_time')[:1] context['rating'] = rating[0] if rating else None context['rank'] = Profile.objects.filter( performance_points__gt=self.object.performance_points).count() + 1 breakdown, has_more = get_pp_breakdown(self.object, start=0, end=10) context['pp_breakdown'] = breakdown context['pp_has_more'] = has_more if rating: context['rating_rank'] = Profile.objects.filter( rating__gt=self.object.rating).count() + 1 context['rated_users'] = Profile.objects.filter( rating__isnull=False).count() context.update( self.object.ratings.aggregate(min_rating=Min('rating'), max_rating=Max('rating'), contests=Count('contest'))) return context