From 45953b8f80ef02b7420fefb2ca03e3984dc7db19 Mon Sep 17 00:00:00 2001 From: zema1 Date: Thu, 23 Nov 2017 19:11:12 +0800 Subject: [PATCH] submission exists api --- .travis.yml | 2 +- account/decorators.py | 4 ++-- account/views/admin.py | 4 ++-- run_test.py | 2 +- submission/urls/oj.py | 3 ++- submission/views/oj.py | 9 +++++++++ 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7782d02c..25b3ba13 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ install: script: - docker ps -a - flake8 . - - coverage run --include="$PWD/*" manage.py test + - coverage run --source='.' manage.py test - coverage report notifications: slack: onlinejudgeteam:BzBz8UFgmS5crpiblof17K2W diff --git a/account/decorators.py b/account/decorators.py index a8164d73..93710592 100644 --- a/account/decorators.py +++ b/account/decorators.py @@ -94,11 +94,11 @@ def check_contest_permission(check_type="details"): (self.contest.id not in request.session["accessible_contests"]): return self.error("Password is required.") - # regular use get contest problems, ranks etc. before contest started + # regular user get contest problems, ranks etc. before contest started if self.contest.status == ContestStatus.CONTEST_NOT_START and check_type != "details": return self.error("Contest has not started yet.") - # check is user have permission to get ranks, submissions OI Contest + # check does user have permission to get ranks, submissions OI Contest if self.contest.status == ContestStatus.CONTEST_UNDERWAY and self.contest.rule_type == ContestRuleType.OI: if not self.contest.real_time_rank and (check_type == "ranks" or check_type == "submissions"): return self.error(f"No permission to get {check_type}") diff --git a/account/views/admin.py b/account/views/admin.py index 49f58f05..b25ccb44 100644 --- a/account/views/admin.py +++ b/account/views/admin.py @@ -21,7 +21,7 @@ class UserAdminAPI(APIView): data = request.data["users"] omitted_count = created_count = get_count = 0 for user_data in data: - if len(user_data) != 3: + if len(user_data) != 3 or len(user_data[0]) > 32: omitted_count += 1 continue user, created = User.objects.get_or_create(username=user_data[0]) @@ -167,7 +167,7 @@ class GenerateUserAPI(APIView): number_max_length = max(len(str(data["number_from"])), len(str(data["number_to"]))) if number_max_length + len(data["prefix"]) + len(data["suffix"]) > 32: return self.error("Username should not more than 32 characters") - if data["number_from"] >= data["number_to"]: + if data["number_from"] > data["number_to"]: return self.error("Start number must be lower than end number") password_length = data.get("password_length", 8) diff --git a/run_test.py b/run_test.py index 8358f121..2613ca75 100644 --- a/run_test.py +++ b/run_test.py @@ -21,7 +21,7 @@ print("running flake8...") if os.system("flake8 --statistics ."): exit() -ret = os.system("coverage run ./manage.py test {module} --settings={setting}".format(module=test_module, setting=setting)) +ret = os.system("coverage run --source='.' ./manage.py test {module} --settings={setting}".format(module=test_module, setting=setting)) if not ret and is_coverage: os.system("coverage html && open htmlcov/index.html") diff --git a/submission/urls/oj.py b/submission/urls/oj.py index f2a77039..49116b9f 100644 --- a/submission/urls/oj.py +++ b/submission/urls/oj.py @@ -1,9 +1,10 @@ from django.conf.urls import url -from ..views.oj import SubmissionAPI, SubmissionListAPI, ContestSubmissionListAPI +from ..views.oj import SubmissionAPI, SubmissionListAPI, ContestSubmissionListAPI, SubmissionExistsAPI urlpatterns = [ url(r"^submission/?$", SubmissionAPI.as_view(), name="submission_api"), url(r"^submissions/?$", SubmissionListAPI.as_view(), name="submission_list_api"), + url(r"^submission_exists/?$", SubmissionExistsAPI.as_view(), name="submission_exists"), url(r"^contest_submissions/?$", ContestSubmissionListAPI.as_view(), name="contest_submission_list_api"), ] diff --git a/submission/views/oj.py b/submission/views/oj.py index a3371ffe..88a5c272 100644 --- a/submission/views/oj.py +++ b/submission/views/oj.py @@ -200,3 +200,12 @@ class ContestSubmissionListAPI(APIView): data = self.paginate_data(request, submissions) data["results"] = SubmissionListSerializer(data["results"], many=True, user=request.user).data return self.success(data) + + +class SubmissionExistsAPI(APIView): + def get(self, request): + if not request.GET.get("problem_id"): + return self.error("Parameter error, problem_id is required") + return self.success(request.user.is_authenticated and + Submission.objects.filter(problem_id=request.GET["problem_id"], + user_id=request.user.id).exists())