This commit is contained in:
Egor Matveev 2022-05-12 16:09:48 +03:00
parent 08de8a05f8
commit 38fa241e90
5 changed files with 36 additions and 12 deletions

View File

@ -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)

View File

@ -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})

View File

@ -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

View File

@ -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})

View File

@ -62,7 +62,11 @@
Результат
</td>
<td>
<span class="badge bg-{% if solution.result == in_queue_status %}secondary{% else %}{% if solution.result == ok_status %}success{% else %}{% if solution.result|startswith:testing_status %}info{% else %}danger{% endif %}{% endif %}{% endif %}">{% if solution.result == testing_status %}<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="circle-notch" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 20px;" class="svg-inline--fa fa-circle-notch fa-w-16 fa-spin fa-lg"><path fill="currentColor" d="M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z" class=""></path></svg> {% endif %}{{ solution.result }}</span>
<form method="POST">
{% csrf_token %}
<input type="hidden" name="action" value="retest">
<button disabled class="badge bg-{% if solution.result == in_queue_status %}secondary{% else %}{% if solution.result == ok_status %}success{% else %}{% if solution.result|startswith:testing_status %}info{% else %}danger{% endif %}{% endif %}{% endif %}">{% if solution.result == testing_status %}<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="circle-notch" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 20px;" class="svg-inline--fa fa-circle-notch fa-w-16 fa-spin fa-lg"><path fill="currentColor" d="M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z" class=""></path></svg> {% endif %}{{ solution.result }}</button>{% 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 %}&emsp;<button class="btn btn-secondary"><i class="fa fa-undo"></i></button> {% endif %}
</form>
</td>
</tr>
</table>