apply languages

This commit is contained in:
Egor Matveev
2022-02-16 17:40:46 +03:00
parent 1e455346ff
commit 2948c8252e
39 changed files with 758 additions and 12 deletions

View File

@@ -0,0 +1,23 @@
# Generated by Django 3.2.4 on 2022-02-15 19:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('Main', '0020_languageapply'),
]
operations = [
migrations.AddField(
model_name='solution',
name='set',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Main.set'),
),
migrations.AddIndex(
model_name='solution',
index=models.Index(fields=['set', '-time_sent'], name='Main_soluti_set_id_19e6c7_idx'),
),
]

View File

@@ -4,9 +4,14 @@ from SprintLib.utils import get_bytes, write_bytes, delete_file
class FileStorageMixin:
@cached_property
def bytes(self):
return get_bytes(self.fs_id)
@cached_property
def text(self):
return get_bytes(self.fs_id).decode("utf-8")
return self.bytes.decode("utf-8")
def write(self, bytes):
self.fs_id = write_bytes(bytes)

View File

@@ -7,6 +7,7 @@ from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone
from Main.models import Set
from Main.models.solution_file import SolutionFile
from Main.models.task import Task
from Sprint.settings import CONSTS
@@ -20,11 +21,13 @@ class Solution(models.Model):
time_sent = models.DateTimeField(default=timezone.now)
result = models.TextField(default=CONSTS["in_queue_status"])
test = models.IntegerField(default=None, null=True)
set = models.ForeignKey(Set, null=True, on_delete=models.SET_NULL)
class Meta:
indexes = [
models.Index(fields=['task', 'user', '-time_sent']),
models.Index(fields=['task', '-time_sent'])
models.Index(fields=['task', '-time_sent']),
models.Index(fields=['set', '-time_sent']),
]
@property

View File

@@ -1,6 +1,6 @@
from django import template
from Main.models import Solution
from Main.models import Solution, SetTask
register = template.Library()
@@ -13,3 +13,8 @@ def solved(user, task):
if len(solutions) != 0:
return False
return None
@register.filter('settask')
def settask(set, task):
return SetTask.objects.get(set=set, task=task)

View File

@@ -0,0 +1,24 @@
import datetime
from typing import Optional
import pytz
from django.utils import timezone
from Checker.models import Checker
from Main.models import SetTask, Set
from SprintLib.BaseView import BaseView, AccessError
from SprintLib.language import languages
class CheckersView(BaseView):
required_login = True
view_file = "checkers.html"
endpoint = "admin/checkers"
def pre_handle(self):
self.current_set = self.entities.set
if (
self.request.user != self.current_set.creator
and self.request.user.username not in self.current_set.editors
):
raise AccessError()

View File

@@ -4,6 +4,7 @@ from typing import Optional
import pytz
from django.utils import timezone
from Checker.models import Checker
from Main.models import SetTask, Set
from SprintLib.BaseView import BaseView, AccessError
from SprintLib.language import languages
@@ -114,3 +115,11 @@ class SetSettingsView(BaseView):
self.entities.set.languages.remove(t)
self.entities.set.save()
return "/admin/set?set_id=" + str(self.entities.set.id)
def post_new_checker(self):
Checker.objects.create(name=self.request.POST['name'], set=self.entities.set, last_request=timezone.now() - datetime.timedelta(days=1))
return '/admin/set?set_id=' + str(self.entities.set.id)
def post_delete_checker(self):
Checker.objects.get(id=self.request.POST['checker_id']).delete()
return '/admin/set?set_id=' + str(self.entities.set.id)

View File

@@ -37,6 +37,7 @@ class TaskView(BaseView):
task=self.entities.task,
user=self.request.user,
language_id=int(self.request.POST["language"]),
set=self.entities.set if hasattr(self.entities, 'setTask') else None
)
def post_0(self):
@@ -47,8 +48,8 @@ class TaskView(BaseView):
solution=self.solution,
fs_id=fs_id,
)
send_testing(self.solution.id)
return "task?task_id=" + str(self.entities.task.id)
send_testing(self.solution)
return ("/task?setTask_id=" + str(self.entities.setTask.id)) if hasattr(self.entities, 'setTask') else ("/task?task_id=" + str(self.entities.task.id))
def post_1(self):
# отправка решения через файл
@@ -73,5 +74,5 @@ class TaskView(BaseView):
solution=self.solution,
fs_id=fs_id,
)
send_testing(self.solution.id)
return "task?task_id=" + str(self.entities.task.id)
send_testing(self.solution)
return ("/task?setTask_id=" + str(self.entities.setTask.id)) if hasattr(self.entities, 'setTask') else ("/task?task_id=" + str(self.entities.task.id))

View File

@@ -20,3 +20,4 @@ from Main.views.ChatWithView import ChatWithView
from Main.views.MessagesView import MessagesView
from Main.views.SetView import SetView
from Main.views.GroupView import GroupView
from Main.views.CheckersView import CheckersView