Merge pull request #340 from helsonxiao/master

feat: problem tag 支持模糊搜索
This commit is contained in:
LiYang 2021-03-26 09:50:32 +08:00 committed by GitHub
commit 9119c01159
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 6 deletions

View File

@ -79,7 +79,7 @@ class ContestAPITest(APITestCase):
self.create_user("test", "test123")
url = self.reverse("contest_password_api")
resp = self.client.post(url, {"contest_id": self.contest.id, "password": "error_password"})
self.assertDictEqual(resp.data, {"error": "error", "data": "Wrong password"})
self.assertDictEqual(resp.data, {"error": "error", "data": "Wrong password or password expired"})
resp = self.client.post(url, {"contest_id": self.contest.id, "password": DEFAULT_CONTEST_DATA["password"]})
self.assertSuccess(resp)

View File

@ -1,7 +1,7 @@
import hashlib
import json
import os
import shutil
# import shutil
import tempfile
import zipfile
from wsgiref.util import FileWrapper
@ -676,10 +676,10 @@ class FPSProblemImport(CSRFExemptAPIView):
with tempfile.NamedTemporaryFile("wb") as tf:
for chunk in file.chunks(4096):
tf.file.write(chunk)
tf.file.flush()
os.fsync(tf.file)
problems = FPSParser(tf.name).parse()
else:
return self.error("Parse upload file error")

View File

@ -9,7 +9,11 @@ from contest.models import ContestRuleType
class ProblemTagAPI(APIView):
def get(self, request):
tags = ProblemTag.objects.annotate(problem_count=Count("problem")).filter(problem_count__gt=0)
qs = ProblemTag.objects
keyword = request.GET.get("keyword")
if keyword:
qs = ProblemTag.objects.filter(name__icontains=keyword)
tags = qs.annotate(problem_count=Count("problem")).filter(problem_count__gt=0)
return self.success(TagSerializer(tags, many=True).data)

View File

@ -33,4 +33,4 @@ class Difficulty(Choices):
HIGH = "High"
CONTEST_PASSWORD_SESSION_KEY = "contest_password"
CONTEST_PASSWORD_SESSION_KEY = "contest_password"