mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
修复test_case排序问题
This commit is contained in:
parent
37d6dd84ee
commit
c16543c830
@ -21,22 +21,10 @@ class UserAdminAPI(APIView):
|
|||||||
user = User.objects.get(id=data["id"])
|
user = User.objects.get(id=data["id"])
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
return self.error("User does not exist")
|
return self.error("User does not exist")
|
||||||
try:
|
if User.objects.filter(username=data["username"]).exclude(id=user.id).exists():
|
||||||
user = User.objects.get(username=data["username"])
|
return self.error("Username already exists")
|
||||||
if user.id != data["id"]:
|
if User.objects.filter(email=data["email"].lower()).exclude(id=user.id).exists():
|
||||||
return self.error("Username already exists")
|
|
||||||
except User.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
user = User.objects.get(email=data["email"])
|
|
||||||
if user.id != data["id"]:
|
|
||||||
return self.error("Email already exists")
|
|
||||||
# Some old data has duplicate email
|
|
||||||
except MultipleObjectsReturned:
|
|
||||||
return self.error("Email already exists")
|
return self.error("Email already exists")
|
||||||
except User.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
user.username = data["username"]
|
user.username = data["username"]
|
||||||
user.email = data["email"]
|
user.email = data["email"]
|
||||||
|
|||||||
@ -28,13 +28,12 @@ class AnnouncementAdminAPI(APIView):
|
|||||||
"""
|
"""
|
||||||
data = request.data
|
data = request.data
|
||||||
try:
|
try:
|
||||||
announcement = Announcement.objects.get(id=data["id"])
|
announcement = Announcement.objects.get(id=data.pop("id"))
|
||||||
except Announcement.DoesNotExist:
|
except Announcement.DoesNotExist:
|
||||||
return self.error("Announcement does not exist")
|
return self.error("Announcement does not exist")
|
||||||
|
|
||||||
announcement.title = data["title"]
|
for k, v in data.items():
|
||||||
announcement.content = data["content"]
|
setattr(announcement, k, v)
|
||||||
announcement.visible = data["visible"]
|
|
||||||
announcement.save()
|
announcement.save()
|
||||||
|
|
||||||
return self.success(AnnouncementSerializer(announcement).data)
|
return self.success(AnnouncementSerializer(announcement).data)
|
||||||
|
|||||||
@ -8,7 +8,7 @@ from django.conf import settings
|
|||||||
from account.decorators import problem_permission_required
|
from account.decorators import problem_permission_required
|
||||||
from contest.models import Contest
|
from contest.models import Contest
|
||||||
from utils.api import APIView, CSRFExemptAPIView, validate_serializer
|
from utils.api import APIView, CSRFExemptAPIView, validate_serializer
|
||||||
from utils.shortcuts import rand_str
|
from utils.shortcuts import rand_str, natural_sort_key
|
||||||
|
|
||||||
from ..models import Problem, ProblemRuleType, ProblemTag
|
from ..models import Problem, ProblemRuleType, ProblemTag
|
||||||
from ..serializers import (CreateContestProblemSerializer, ContestProblemAdminSerializer,
|
from ..serializers import (CreateContestProblemSerializer, ContestProblemAdminSerializer,
|
||||||
@ -30,7 +30,7 @@ class TestCaseUploadAPI(CSRFExemptAPIView):
|
|||||||
prefix += 1
|
prefix += 1
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
return sorted(ret)
|
return sorted(ret, key=natural_sort_key)
|
||||||
else:
|
else:
|
||||||
while True:
|
while True:
|
||||||
in_name = str(prefix) + ".in"
|
in_name = str(prefix) + ".in"
|
||||||
@ -41,7 +41,7 @@ class TestCaseUploadAPI(CSRFExemptAPIView):
|
|||||||
prefix += 1
|
prefix += 1
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
return sorted(ret)
|
return sorted(ret, key=natural_sort_key)
|
||||||
|
|
||||||
@problem_permission_required
|
@problem_permission_required
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import re
|
||||||
import datetime
|
import datetime
|
||||||
import random
|
import random
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
@ -57,3 +58,8 @@ def datetime2str(value, format="iso-8601"):
|
|||||||
|
|
||||||
def timestamp2utcstr(value):
|
def timestamp2utcstr(value):
|
||||||
return datetime.datetime.utcfromtimestamp(value).isoformat()
|
return datetime.datetime.utcfromtimestamp(value).isoformat()
|
||||||
|
|
||||||
|
|
||||||
|
def natural_sort_key(s, _nsre=re.compile(r"(\d+)")):
|
||||||
|
return [int(text) if text.isdigit() else text.lower()
|
||||||
|
for text in re.split(_nsre, s)]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user