Upgrade to Django 3.2

This commit is contained in:
cuom1999 2022-10-31 20:43:06 -05:00
parent c1f710c9ac
commit 409d2e3115
23 changed files with 1469 additions and 151 deletions

View file

@ -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(),
)
)

View file

@ -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):

View file

@ -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))

View file

@ -391,6 +391,7 @@ class SubmissionsListBase(DiggPaginatorMixin, TitleMixin, ListView):
params=[],
join_fields=[("problem_id", "id")],
alias="visible_problems",
related_model=Problem,
)
return queryset