style: ruff format 全仓库

行宽 180 下把历史遗留的折行表达式合并,无语义改动。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 04:45:26 -06:00
parent db104ac091
commit 3a9ab83ba5
56 changed files with 455 additions and 769 deletions

View File

@@ -75,7 +75,6 @@ class ACMContestRank(AbstractContestRank):
]
class ContestAnnouncement(models.Model):
contest = models.ForeignKey(Contest, on_delete=models.CASCADE)
title = models.TextField()

View File

@@ -84,7 +84,6 @@ class ACMContestRankSerializer(serializers.ModelSerializer):
return UsernameSerializer(obj.user, need_real_name=self.is_contest_admin).data
class ACMContesHelperSerializer(serializers.Serializer):
contest_id = serializers.IntegerField()
problem_id = serializers.CharField()

View File

@@ -27,9 +27,7 @@ class ContestAnnouncementListAPI(AsyncAPIView):
contest_id = request.GET.get("contest_id")
if not contest_id:
return self.error("Invalid parameter, contest_id is required")
qs = ContestAnnouncement.objects.select_related("created_by").filter(
contest_id=contest_id, visible=True
)
qs = ContestAnnouncement.objects.select_related("created_by").filter(contest_id=contest_id, visible=True)
max_id = request.GET.get("max_id")
if max_id:
qs = qs.filter(id__gt=max_id)
@@ -43,11 +41,7 @@ class ContestAPI(AsyncAPIView):
if not id or not check_is_id(id):
return self.error("Invalid parameter, id is required")
try:
contest = await (
Contest.objects.select_related("created_by")
.filter(id=id, visible=True)
.afirst()
)
contest = await Contest.objects.select_related("created_by").filter(id=id, visible=True).afirst()
if contest is None:
raise Contest.DoesNotExist
except Contest.DoesNotExist:
@@ -84,9 +78,7 @@ class ContestPasswordVerifyAPI(AsyncAPIView):
async def post(self, request):
data = request.data
try:
contest = await Contest.objects.aget(
id=data["contest_id"], visible=True, password__isnull=False
)
contest = await Contest.objects.aget(id=data["contest_id"], visible=True, password__isnull=False)
except Contest.DoesNotExist:
return self.error("Contest does not exist")
if not check_contest_password(data["password"], contest.password):
@@ -106,17 +98,11 @@ class ContestAccessAPI(AsyncAPIView):
if not contest_id:
return self.error()
try:
contest = await Contest.objects.aget(
id=contest_id, visible=True, password__isnull=False
)
contest = await Contest.objects.aget(id=contest_id, visible=True, password__isnull=False)
except Contest.DoesNotExist:
return self.error("Contest does not exist")
session_pass = request.session.get(CONTEST_PASSWORD_SESSION_KEY, {}).get(
str(contest.id)
)
return self.success(
{"access": check_contest_password(session_pass, contest.password)}
)
session_pass = request.session.get(CONTEST_PASSWORD_SESSION_KEY, {}).get(str(contest.id))
return self.success({"access": check_contest_password(session_pass, contest.password)})
class ContestRankAPI(AsyncAPIView):
@@ -155,16 +141,12 @@ class ContestRankAPI(AsyncAPIView):
for index, item in enumerate(data):
worksheet.write_string(index + 1, 0, str(item["user"]["id"]))
worksheet.write_string(index + 1, 1, item["user"]["username"])
worksheet.write_string(
index + 1, 2, item["user"]["real_name"] or ""
)
worksheet.write_string(index + 1, 2, item["user"]["real_name"] or "")
worksheet.write_string(index + 1, 3, str(item["accepted_number"]))
worksheet.write_string(index + 1, 4, str(item["submission_number"]))
worksheet.write_string(index + 1, 5, str(item["total_time"]))
for k, v in item["submission_info"].items():
worksheet.write_string(
index + 1, 6 + problem_id_to_col[int(k)], str(v["is_ac"])
)
worksheet.write_string(index + 1, 6 + problem_id_to_col[int(k)], str(v["is_ac"]))
workbook.close()
f.seek(0)
@@ -173,32 +155,20 @@ class ContestRankAPI(AsyncAPIView):
@check_contest_permission(check_type="ranks")
async def get(self, request):
download_csv = request.GET.get("download_csv")
is_contest_admin = (
request.user.is_authenticated
and request.user.is_contest_admin(self.contest)
)
is_contest_admin = request.user.is_authenticated and request.user.is_contest_admin(self.contest)
qs = self.get_rank()
if download_csv:
rank_list = [item async for item in qs]
data = await self.async_serialize_data(
ACMContestRankSerializer, rank_list, many=True, is_contest_admin=is_contest_admin
)
contest_problems = await sync_to_async(
lambda: list(Problem.objects.filter(contest=self.contest, visible=True).order_by("_id"))
)()
data = await self.async_serialize_data(ACMContestRankSerializer, rank_list, many=True, is_contest_admin=is_contest_admin)
contest_problems = await sync_to_async(lambda: list(Problem.objects.filter(contest=self.contest, visible=True).order_by("_id")))()
xlsx_bytes = await sync_to_async(self._build_xlsx)(data, contest_problems)
response = HttpResponse(xlsx_bytes)
response["Content-Disposition"] = (
f"attachment; filename=content-{self.contest.id}-rank.xlsx"
)
response["Content-Disposition"] = f"attachment; filename=content-{self.contest.id}-rank.xlsx"
response["Content-Type"] = "application/xlsx"
return response
page_qs = await self.async_paginate_data(request, qs)
page_qs["results"] = await self.async_serialize_data(
ACMContestRankSerializer,
page_qs["results"], many=True, is_contest_admin=is_contest_admin
)
page_qs["results"] = await self.async_serialize_data(ACMContestRankSerializer, page_qs["results"], many=True, is_contest_admin=is_contest_admin)
return self.success(page_qs)