From 38fa241e902e3d5d7a028907b32b0f229db5f41b Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Thu, 12 May 2022 16:09:48 +0300 Subject: [PATCH] retest --- Main/views/SolutionView.py | 20 +++++++++++++++++++- Main/views/TaskView.py | 12 +++--------- SprintLib/queue.py | 3 ++- SprintLib/utils.py | 7 +++++++ templates/solution.html | 6 +++++- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Main/views/SolutionView.py b/Main/views/SolutionView.py index 62c7ea7..a29db72 100644 --- a/Main/views/SolutionView.py +++ b/Main/views/SolutionView.py @@ -1,5 +1,6 @@ from Main.models import Solution from SprintLib.BaseView import BaseView, AccessError +from SprintLib.utils import send_testing class SolutionView(BaseView): @@ -8,8 +9,25 @@ class SolutionView(BaseView): endpoint = "solution" solution: Solution - def pre_handle(self): + def check_admin(self): + user = self.request.user if self.request.user.is_superuser: + return True + if self.solution.task.creator == user or user.username in self.solution.task.editors: + return True + if self.solution.set: + if self.solution.set.creator == user or user.username in self.solution.set.editors: + return True + return False + + def pre_handle(self): + if self.check_admin(): return if self.solution.user != self.request.user: raise AccessError() + + def post_retest(self): + if not self.check_admin(): + return "/" + send_testing(self.solution) + return "/solution?solution_id=" + str(self.solution.id) diff --git a/Main/views/TaskView.py b/Main/views/TaskView.py index 9e8a495..19de057 100644 --- a/Main/views/TaskView.py +++ b/Main/views/TaskView.py @@ -5,8 +5,7 @@ from zipfile import ZipFile from Main.models import Solution, Progress, SolutionFile, SetTask, Task, Set from SprintLib.BaseView import BaseView, AccessError from SprintLib.language import languages -from SprintLib.queue import send_to_queue -from SprintLib.utils import write_bytes +from SprintLib.utils import write_bytes, send_testing class TaskView(BaseView): @@ -55,7 +54,7 @@ class TaskView(BaseView): solution=self.solution, fs_id=fs_id, ) - self.send_testing() + send_testing(self.solution) return ("/task?setTask_id=" + str(self.setTask.id)) if self.set else ("/task?task_id=" + str(self.task.id)) def post_1(self): @@ -81,10 +80,5 @@ class TaskView(BaseView): solution=self.solution, fs_id=fs_id, ) - self.send_testing() + send_testing(self.solution) return ("/task?setTask_id=" + str(self.setTask.id)) if self.set else ("/task?task_id=" + str(self.task.id)) - - def send_testing(self): - if self.solution.set is not None and len(self.solution.set.checkers.all()) != 0: - return - send_to_queue("test", {"id": self.solution.id}) diff --git a/SprintLib/queue.py b/SprintLib/queue.py index 89400bb..65a08dc 100644 --- a/SprintLib/queue.py +++ b/SprintLib/queue.py @@ -5,6 +5,7 @@ from django.contrib.auth.models import User from django.core.management import BaseCommand import psycopg2 import django.db +import django.db.utils from pika.adapters.utils.connection_workflow import AMQPConnectorException from Sprint import settings @@ -35,7 +36,7 @@ class MessagingSupport(BaseCommand): try: self.process(data) print("Process finished successfully") - except (psycopg2.OperationalError, django.db.OperationalError): + except (psycopg2.OperationalError, django.db.OperationalError, django.db.utils.OperationalError): print("Failed to connect to database, restarting...") send_to_queue(self.queue_name, data) raise diff --git a/SprintLib/utils.py b/SprintLib/utils.py index add4fba..f8d4f9c 100644 --- a/SprintLib/utils.py +++ b/SprintLib/utils.py @@ -6,6 +6,7 @@ from django.core.management import BaseCommand from requests import get, post from Sprint import settings +from SprintLib.queue import send_to_queue def write_bytes(data: bytes): @@ -67,3 +68,9 @@ class LoopWorker(BaseCommand): while True: self.go() sleep(self.sleep_period) + + +def send_testing(solution): + if solution.set is not None and len(solution.set.checkers.all()) != 0: + return + send_to_queue("test", {"id": solution.id}) diff --git a/templates/solution.html b/templates/solution.html index e4fa6cb..f213476 100644 --- a/templates/solution.html +++ b/templates/solution.html @@ -62,7 +62,11 @@ Результат - {% if solution.result == testing_status %} {% endif %}{{ solution.result }} +
+ {% csrf_token %} + + {% if solution.task.creator == user or user.username in solution.task.editors or solution.set and solution.set.creator == user or solution.set and user.username in solution.set.editors %}  {% endif %} +