checkpoint

This commit is contained in:
Egor Matveev
2021-09-05 15:28:24 +03:00
parent 1307c16ec1
commit 807c52bf2b
30 changed files with 394 additions and 26 deletions

View File

@@ -38,3 +38,11 @@ class AccountView(BaseView):
self.request.user.save()
login(self.request, self.request.user)
return "/account?error_message=Пароль успешно установлен"
def post_notifications(self):
self.request.user.userinfo.telegram_chat_id = self.request.POST['chat_id']
for attr in dir(self.request.user.userinfo):
if attr.startswith('notification'):
setattr(self.request.user.userinfo, attr, attr in self.request.POST.keys())
self.request.user.userinfo.save()
return '/account'

View File

@@ -12,8 +12,7 @@ class RegisterView(BaseView):
self.context["error_message"] = self.request.GET.get("error_message", "")
def post(self):
data = {**self.request.POST}
data["password"] = data["password"].strip()
data = self.request.POST
if len(data["password"]) < 8:
return "/register?error_message=Пароль слишком слабый"
if data["password"] != data["repeat_password"]:

View File

@@ -0,0 +1,10 @@
from SprintLib.BaseView import BaseView, AccessError
class SolutionView(BaseView):
view_file = 'solution.html'
required_login = True
def pre_handle(self):
if self.entities.solution.user != self.request.user:
raise AccessError()

View File

@@ -0,0 +1,17 @@
from django.http import HttpResponse
from Main.models import Progress
from SprintLib.BaseView import BaseView
class TaskRuntimeView(BaseView):
view_file = 'task_runtime.html'
required_login = True
def get(self):
progress = Progress.objects.get(task=self.entities.task, user=self.request.user)
self.context['progress'] = progress
if 'render' in self.request.GET.keys():
return
if progress.finished:
return HttpResponse('done')

View File

@@ -1,7 +1,7 @@
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse
from django.utils import timezone
from Main.models import ExtraFile
from Main.models import ExtraFile, Progress
from SprintLib.BaseView import BaseView, AccessError
@@ -12,6 +12,10 @@ class TaskSettingsView(BaseView):
def pre_handle(self):
if self.entities.task not in self.request.user.userinfo.available_tasks:
raise AccessError()
if self.request.method == 'POST':
for progress in Progress.objects.filter(task=self.entities.task, finished=False):
progress.start_time = timezone.now()
progress.save()
def get(self):
self.context['error_message'] = self.request.GET.get('error_message', '')
@@ -29,8 +33,10 @@ class TaskSettingsView(BaseView):
name = filename.strip('.a')
if not name.isnumeric():
return f'/admin/task?task_id={self.entities.task.id}&error_message=Формат файла не соответствует тесту'
ef, created = ExtraFile.objects.get_or_create(task=self.entities.task, is_test=True, test_number=int(name))
ef, created = ExtraFile.objects.get_or_create(task=self.entities.task, is_test=True, filename=filename)
if not created:
ef.is_sample = False
ef.save()
return f'/admin/task?task_id={self.entities.task.id}'
if ef is None or created is None:
ef, created = ExtraFile.objects.get_or_create(
@@ -78,3 +84,11 @@ class TaskSettingsView(BaseView):
def post_create_test(self):
return self._create(True)
def post_save_test(self):
ef = ExtraFile.objects.get(id=self.request.POST['test_id'])
with open(ef.path, 'w') as fs:
fs.write(self.request.POST['text'])
ef.is_sample = 'is_sample' in self.request.POST.keys()
ef.save()
return f'/admin/task?task_id={self.entities.task.id}'

View File

@@ -1,6 +1,6 @@
from zipfile import ZipFile
from Main.models import Solution
from Main.models import Solution, Progress
from Main.tasks import start_testing
from SprintLib.BaseView import BaseView, Language
from SprintLib.testers import *
@@ -12,6 +12,8 @@ class TaskView(BaseView):
def get(self):
self.context['languages'] = Language.objects.filter(opened=True).order_by('name')
progress, _ = Progress.objects.get_or_create(user=self.request.user, task=self.entities.task)
self.context['progress'] = progress
def pre_handle(self):
if self.request.method == 'GET':

View File

@@ -1,6 +1,5 @@
from Main.models import Task
from SprintLib.BaseView import BaseView
from django.db.models import Q
class TasksView(BaseView):

View File

@@ -9,3 +9,5 @@ from Main.views.RatingView import RatingView
from Main.views.SetsView import SetsView
from Main.views.TaskView import TaskView
from Main.views.SolutionsTableView import SolutionsTableView
from Main.views.TaskRuntimeView import TaskRuntimeView
from Main.views.SolutionView import SolutionView