Beispiel #1
0
Datei: user.py Projekt: DMOJ/site
    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
Beispiel #2
0
 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
Beispiel #3
0
Datei: user.py Projekt: DMOJ/site
 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
Beispiel #4
0
    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