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

@@ -22,9 +22,7 @@ class SubmissionRejudgeAPI(APIView):
if not id:
return self.error("Parameter error, id is required")
try:
submission = Submission.objects.select_related("problem").get(
id=id, contest_id__isnull=True
)
submission = Submission.objects.select_related("problem").get(id=id, contest_id__isnull=True)
except Submission.DoesNotExist:
return self.error("Submission does not exists")
submission.statistic_info = {}
@@ -46,17 +44,13 @@ class SubmissionStatisticsAPI(APIView):
filters = {"contest_id__isnull": True, "create_time__lte": end}
if start:
filters["create_time__gte"] = start
submissions = Submission.objects.filter(
**filters
).select_related("problem__created_by")
submissions = Submission.objects.filter(**filters).select_related("problem__created_by")
problem_id = request.GET.get("problem_id")
if problem_id:
try:
problem = Problem.objects.get(
_id__iexact=problem_id, contest_id__isnull=True, visible=True
)
problem = Problem.objects.get(_id__iexact=problem_id, contest_id__isnull=True, visible=True)
except Problem.DoesNotExist:
return self.error("Problem doesn't exist")
submissions = submissions.filter(problem=problem)
@@ -82,9 +76,7 @@ class SubmissionStatisticsAPI(APIView):
)
submission_count = submission_stats["total_count"]
accepted_count = submission_stats["accepted_count"]
correct_rate = (
round(accepted_count / submission_count * 100, 2) if submission_count else 0
)
correct_rate = round(accepted_count / submission_count * 100, 2) if submission_count else 0
# 优化:获取用户提交统计
user_submissions = (
@@ -99,20 +91,13 @@ class SubmissionStatisticsAPI(APIView):
# 获取所有有提交记录的用户的class_name信息
submitted_usernames = {item["username"] for item in user_submissions}
if submitted_usernames:
submitted_users_dict = {
user["username"]: user["class_name"]
for user in User.objects.filter(
username__in=submitted_usernames
).values("username", "class_name")
}
submitted_users_dict = {user["username"]: user["class_name"] for user in User.objects.filter(username__in=submitted_usernames).values("username", "class_name")}
else:
submitted_users_dict = {}
# 预先收集每个用户的提交ID和结果按时间倒序
submission_items_by_user = {}
for submission in submissions.values("username", "id", "result").order_by(
"-create_time"
):
for submission in submissions.values("username", "id", "result").order_by("-create_time"):
username_key = submission["username"]
submission_id = str(submission["id"])
submission_items_by_user.setdefault(username_key, []).append(
@@ -137,9 +122,7 @@ class SubmissionStatisticsAPI(APIView):
"submission_count": item["submission_count"],
"accepted_count": item["accepted_count"],
"correct_rate": f"{rate}%",
"submission_items": submission_items_by_user.get(
username_key, []
),
"submission_items": submission_items_by_user.get(username_key, []),
}
)

View File

@@ -37,9 +37,7 @@ class SubmissionAPI(AsyncAPIView):
auth_method = getattr(request, "auth_method", "")
if auth_method == "api_key":
return
user_bucket = TokenBucket(
key=str(request.user.id), redis_conn=cache, **SysOptions.throttling["user"]
)
user_bucket = TokenBucket(key=str(request.user.id), redis_conn=cache, **SysOptions.throttling["user"])
can_consume, wait = user_bucket.consume()
if not can_consume:
return "Please wait %d seconds" % (int(wait))
@@ -52,10 +50,7 @@ class SubmissionAPI(AsyncAPIView):
if not request.user.is_contest_admin(contest):
user_ip = ipaddress.ip_address(request.session.get("ip"))
if contest.allowed_ip_ranges:
if not any(
user_ip in ipaddress.ip_network(cidr, strict=False)
for cidr in contest.allowed_ip_ranges
):
if not any(user_ip in ipaddress.ip_network(cidr, strict=False) for cidr in contest.allowed_ip_ranges):
return self.error("Your IP is not allowed in this contest")
@login_required
@@ -79,9 +74,7 @@ class SubmissionAPI(AsyncAPIView):
return self.error(error)
try:
problem = await Problem.objects.aget(
id=data["problem_id"], contest_id=data.get("contest_id"), visible=True
)
problem = await Problem.objects.aget(id=data["problem_id"], contest_id=data.get("contest_id"), visible=True)
except Problem.DoesNotExist:
return self.error("Problem not exist")
if data["language"] not in problem.languages:
@@ -108,9 +101,7 @@ class SubmissionAPI(AsyncAPIView):
if not submission_id:
return self.error("Parameter id doesn't exist")
try:
submission = await Submission.objects.select_related("problem", "contest").aget(
id=submission_id
)
submission = await Submission.objects.select_related("problem", "contest").aget(id=submission_id)
except Submission.DoesNotExist:
return self.error("Submission doesn't exist")
if not submission.check_user_permission(request.user):
@@ -120,26 +111,19 @@ class SubmissionAPI(AsyncAPIView):
submission_data = await self.async_serialize_data(SubmissionModelSerializer, submission)
else:
submission_data = await self.async_serialize_data(SubmissionSafeModelSerializer, submission)
submission_data["can_unshare"] = submission.check_user_permission(
request.user, check_share=False
)
submission_data["can_unshare"] = submission.check_user_permission(request.user, check_share=False)
return self.success(submission_data)
@login_required
@validate_serializer(ShareSubmissionSerializer)
async def put(self, request):
try:
submission = await Submission.objects.select_related("problem", "contest").aget(
id=request.data["id"]
)
submission = await Submission.objects.select_related("problem", "contest").aget(id=request.data["id"])
except Submission.DoesNotExist:
return self.error("Submission doesn't exist")
if not submission.check_user_permission(request.user, check_share=False):
return self.error("No permission to share the submission")
if (
submission.contest
and submission.contest.status == ContestStatus.CONTEST_UNDERWAY
):
if submission.contest and submission.contest.status == ContestStatus.CONTEST_UNDERWAY:
return self.error("Can not share submission now")
submission.shared = request.data["shared"]
await submission.asave(update_fields=["shared"])
@@ -153,9 +137,7 @@ class SubmissionListAPI(AsyncAPIView):
if request.GET.get("contest_id"):
return self.error("Parameter error")
submissions = Submission.objects.filter(contest_id__isnull=True).select_related(
"problem"
).order_by("-create_time")
submissions = Submission.objects.filter(contest_id__isnull=True).select_related("problem").order_by("-create_time")
problem_id = request.GET.get("problem_id")
myself = request.GET.get("myself")
result = request.GET.get("result")
@@ -163,9 +145,7 @@ class SubmissionListAPI(AsyncAPIView):
language = request.GET.get("language")
if problem_id:
try:
problem = await Problem.objects.aget(
_id__iexact=problem_id, contest_id__isnull=True, visible=True
)
problem = await Problem.objects.aget(_id__iexact=problem_id, contest_id__isnull=True, visible=True)
except Problem.DoesNotExist:
return self.error("Problem doesn't exist")
submissions = submissions.filter(problem=problem)
@@ -184,9 +164,7 @@ class SubmissionListAPI(AsyncAPIView):
submissions = submissions.filter(language=language)
if request.GET.get("today") == "1":
now = timezone.now()
submissions = submissions.filter(
create_time__gte=now.replace(hour=0, minute=0, second=0, microsecond=0)
)
submissions = submissions.filter(create_time__gte=now.replace(hour=0, minute=0, second=0, microsecond=0))
data = await self.async_paginate_data(request, submissions)
results = data["results"]
@@ -212,18 +190,14 @@ class ContestSubmissionListAPI(AsyncAPIView):
return self.error("Limit is needed")
contest = self.contest
submissions = Submission.objects.filter(contest_id=contest.id).select_related(
"problem", "contest"
).order_by("-create_time")
submissions = Submission.objects.filter(contest_id=contest.id).select_related("problem", "contest").order_by("-create_time")
problem_id = request.GET.get("problem_id")
myself = request.GET.get("myself")
result = request.GET.get("result")
username = request.GET.get("username")
if problem_id:
try:
problem = await Problem.objects.aget(
_id__iexact=problem_id, contest_id=contest.id, visible=True
)
problem = await Problem.objects.aget(_id__iexact=problem_id, contest_id=contest.id, visible=True)
except Problem.DoesNotExist:
return self.error("Problem doesn't exist")
submissions = submissions.filter(problem=problem)
@@ -245,10 +219,7 @@ class ContestSubmissionListAPI(AsyncAPIView):
progress_cache = await sync_to_async(bulk_fetch_problemset_progress)(request.user, problem_ids)
else:
progress_cache = {}
data["results"] = await self.async_serialize_data(
SubmissionListSerializer,
results, many=True, user=request.user, problemset_progress_cache=progress_cache
)
data["results"] = await self.async_serialize_data(SubmissionListSerializer, results, many=True, user=request.user, problemset_progress_cache=progress_cache)
return self.success(data)
@@ -257,12 +228,7 @@ class SubmissionExistsAPI(AsyncAPIView):
async def get(self, request):
if not request.GET.get("problem_id"):
return self.error("Parameter error, problem_id is required")
exists = (
request.user.is_authenticated
and await Submission.objects.filter(
problem_id=request.GET["problem_id"], user_id=request.user.id
).aexists()
)
exists = request.user.is_authenticated and await Submission.objects.filter(problem_id=request.GET["problem_id"], user_id=request.user.id).aexists()
return self.success(exists)
@@ -271,13 +237,9 @@ class SubmissionsTodayCount(AsyncAPIView):
now = timezone.now()
start = now.replace(hour=0, minute=0, second=0, microsecond=0)
if request.GET.get("language") == "Flowchart":
count = await FlowchartSubmission.objects.filter(
create_time__gte=start
).acount()
count = await FlowchartSubmission.objects.filter(create_time__gte=start).acount()
else:
count = await Submission.objects.filter(
contest_id__isnull=True, create_time__gte=start
).acount()
count = await Submission.objects.filter(contest_id__isnull=True, create_time__gte=start).acount()
return self.success(count)