Upgrade to Django 3.2
This commit is contained in:
parent
c1f710c9ac
commit
409d2e3115
23 changed files with 1469 additions and 151 deletions
|
@ -11,7 +11,19 @@ from django.contrib.auth.decorators import login_required
|
|||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
||||
from django.db import transaction
|
||||
from django.db.models import Count, F, Prefetch, Q, Sum, Case, When, IntegerField
|
||||
from django.db.models import (
|
||||
BooleanField,
|
||||
Case,
|
||||
CharField,
|
||||
Count,
|
||||
F,
|
||||
FilteredRelation,
|
||||
Prefetch,
|
||||
Q,
|
||||
When,
|
||||
IntegerField,
|
||||
)
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.db.utils import ProgrammingError
|
||||
from django.http import (
|
||||
Http404,
|
||||
|
@ -49,7 +61,6 @@ from judge.models import (
|
|||
Solution,
|
||||
Submission,
|
||||
SubmissionSource,
|
||||
TranslatedProblemForeignKeyQuerySet,
|
||||
Organization,
|
||||
VolunteerProblemVote,
|
||||
Profile,
|
||||
|
@ -498,11 +509,23 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
|
|||
.defer("problem__description")
|
||||
.order_by("problem__code")
|
||||
.annotate(user_count=Count("submission__participation", distinct=True))
|
||||
.annotate(
|
||||
i18n_translation=FilteredRelation(
|
||||
"problem__translations",
|
||||
condition=Q(
|
||||
problem__translations__language=self.request.LANGUAGE_CODE
|
||||
),
|
||||
)
|
||||
)
|
||||
.annotate(
|
||||
i18n_name=Coalesce(
|
||||
F("i18n_translation__name"),
|
||||
F("problem__name"),
|
||||
output_field=CharField(),
|
||||
)
|
||||
)
|
||||
.order_by("order")
|
||||
)
|
||||
queryset = TranslatedProblemForeignKeyQuerySet.add_problem_i18n_name(
|
||||
queryset, "i18n_name", self.request.LANGUAGE_CODE, "problem__name"
|
||||
)
|
||||
return [
|
||||
{
|
||||
"id": p["problem_id"],
|
||||
|
@ -593,12 +616,14 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
|
|||
if self.point_end is not None:
|
||||
queryset = queryset.filter(points__lte=self.point_end)
|
||||
queryset = queryset.annotate(
|
||||
has_public_editorial=Sum(
|
||||
Case(
|
||||
When(solution__is_public=True, then=1),
|
||||
default=0,
|
||||
output_field=IntegerField(),
|
||||
)
|
||||
has_public_editorial=Case(
|
||||
When(
|
||||
solution__is_public=True,
|
||||
solution__publish_on__lte=timezone.now(),
|
||||
then=True,
|
||||
),
|
||||
default=False,
|
||||
output_field=BooleanField(),
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ class RankedSubmissions(ProblemSubmissions):
|
|||
constraint = ""
|
||||
queryset = (
|
||||
super(RankedSubmissions, self)
|
||||
.get_queryset()
|
||||
._get_queryset()
|
||||
.filter(user__is_unlisted=False)
|
||||
)
|
||||
join_sql_subquery(
|
||||
|
@ -57,6 +57,7 @@ class RankedSubmissions(ProblemSubmissions):
|
|||
else [self.problem.id] * 3,
|
||||
alias="best_subs",
|
||||
join_fields=[("id", "id")],
|
||||
related_model=Submission,
|
||||
)
|
||||
|
||||
if self.in_contest:
|
||||
|
@ -75,7 +76,9 @@ class RankedSubmissions(ProblemSubmissions):
|
|||
)
|
||||
|
||||
def _get_result_data(self):
|
||||
return get_result_data(super(RankedSubmissions, self).get_queryset().order_by())
|
||||
return get_result_data(
|
||||
super(RankedSubmissions, self)._get_queryset().order_by()
|
||||
)
|
||||
|
||||
|
||||
class ContestRankedSubmission(ForceContestMixin, RankedSubmissions):
|
||||
|
|
|
@ -2,7 +2,6 @@ from collections import defaultdict
|
|||
from functools import partial
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.utils import six
|
||||
from django.utils.translation import gettext as _
|
||||
from packaging import version
|
||||
|
||||
|
@ -74,12 +73,12 @@ def version_matrix(request):
|
|||
):
|
||||
matrix[runtime.judge_id][runtime.language_id].append(runtime)
|
||||
|
||||
for judge, data in six.iteritems(matrix):
|
||||
for judge, data in matrix.items():
|
||||
name_tuple = judges[judge].rpartition(".")
|
||||
groups[name_tuple[0] or name_tuple[-1]].append((judges[judge], data))
|
||||
|
||||
matrix = {}
|
||||
for group, data in six.iteritems(groups):
|
||||
for group, data in groups.items():
|
||||
if len(data) == 1:
|
||||
judge, data = data[0]
|
||||
matrix[judge] = data
|
||||
|
@ -102,14 +101,14 @@ def version_matrix(request):
|
|||
if ds[i] != rep:
|
||||
matrix[j] = x
|
||||
|
||||
for data in six.itervalues(matrix):
|
||||
for language, versions in six.iteritems(data):
|
||||
for data in matrix.values():
|
||||
for language, versions in data.items():
|
||||
versions.versions = [version.parse(runtime.version) for runtime in versions]
|
||||
if versions.versions > latest[language]:
|
||||
latest[language] = versions.versions
|
||||
|
||||
for data in six.itervalues(matrix):
|
||||
for language, versions in six.iteritems(data):
|
||||
for data in matrix.values():
|
||||
for language, versions in data.items():
|
||||
versions.is_latest = versions.versions == latest[language]
|
||||
|
||||
languages = sorted(languages, key=lambda lang: version.parse(lang.name))
|
||||
|
|
|
@ -391,6 +391,7 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView):
|
|||
params=[],
|
||||
join_fields=[("problem_id", "id")],
|
||||
alias="visible_problems",
|
||||
related_model=Problem,
|
||||
)
|
||||
return queryset
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue