Beispiel #1
0
        def check_tests(cls, editor_data: dict, taskitem: TaskItem, **kwargs):

            """ Прогнать код по тестам задачи и вернуть результаты тестирования """

            if not taskitem.task.tests:
                return OperationResponse(status=WARNING, msg='Тесты отсутствуют')
            if not taskitem.compiler_check:
                return OperationResponse(status=WARNING, msg='Операция запрещена')
            sandbox_data: SandboxResponseData = testing(
                code=editor_data['content'],
                taskitem=taskitem,
            )
            # Запрос в песочницу прошел успешно
            if sandbox_data['ok']:
                # Тесты пройдены
                if sandbox_data['data']['ok']:
                    return OperationResponse(
                        status=OK,
                        msg='Тесты пройдены',
                        sandbox_data=sandbox_data
                    )
                else:
                    return OperationResponse(
                        status=WARNING,
                        msg='Тесты не пройдены',
                        sandbox_data=sandbox_data
                    )
            else:
                # Запрос к песочнице завершился с ошибкой
                return OperationResponse(
                    status=ERROR,
                    msg=sandbox_data['error']['msg'],
                    sandbox_data=sandbox_data
                )
Beispiel #2
0
 def ready_solution(cls, editor_data: dict, taskitem: TaskItem, user: User):
     if not user.is_active:
         return OperationResponse(
             status=WARNING,
             msg='Требуется авторизация'
         )
     if not editor_data['content']:
         return OperationResponse(
             status=WARNING,
             msg='Решение отсутствует'
         )
     solution = Solution.objects.filter(user=user, taskitem=taskitem).first()
     # если у задачи одна попытка и она уже использована - решение нельзя изменить
     if solution and taskitem.one_try and solution.is_locked:
         return OperationResponse(
             status=WARNING,
             msg='Решение более нельзя изменить'
         )
     # если задача с автотестами - прогнать автотесты
     tests_score = None
     if taskitem.compiler_check and taskitem.task.tests:
         sandbox_data: SandboxResponseData = testing(
             code=editor_data['content'],
             taskitem=taskitem,
         )
         # Запрос в песочницу прошел успешно
         if sandbox_data['ok']:
             # Тесты пройдены
             tests_score = (
                 round(
                     sandbox_data['data']['num_ok'] /
                     sandbox_data['data']['num'] * taskitem.max_score,
                     2
                 )
             )
         else:
             # Запрос к песочнице завершился с ошибкой
             return OperationResponse(
                 status=ERROR,
                 msg=sandbox_data['error_msg']
             )
     if solution is None:
         solution = Solution(user=user, taskitem=taskitem)
     solution.tests_score = tests_score
     solution.content = editor_data['content']
     solution.last_changes = editor_data['content']
     solution.is_locked = taskitem.one_try
     solution.last_modified = timezone.now()
     solution.set_is_count()
     if solution.taskitem.manual_check:
         solution.manual_status = Solution.MS__READY_TO_CHECK
     solution.save()
     return OperationResponse(
         status=OK,
         msg='Решение отправлено'
     )
Beispiel #3
0
 def create_version(cls, editor_data: dict, taskitem: TaskItem, user: User):
     if user.is_active:
         solution, _ = Solution.objects.get_or_create(user=user, taskitem=taskitem)
         solution.create_version(content=editor_data['content'])
         solution.save()
         return OperationResponse(
             status=OK,
             msg='Версия сохранена'
         )
     else:
         return OperationResponse(
             status=WARNING,
             msg='Требуется авторизация'
         )
Beispiel #4
0
 def save_last_changes(cls, editor_data: dict, taskitem: TaskItem, user: User):
     if not user.is_active:
         return OperationResponse(
             status=WARNING,
             msg='Требуется авторизация'
         )
     solution, created = Solution.objects.get_or_create(
         user=user, taskitem=taskitem, defaults={
             "last_changes": editor_data['content']
         })
     if not created:
         solution.last_changes = editor_data['content']
         solution.save()
     return OperationResponse(
         status=OK,
         msg='Изменения сохранены'
     )
Beispiel #5
0
 def perform_operation(self, user: User, taskitem: TaskItem):
     if self.is_valid():
         operation = getattr(self.Operations, self.cleaned_data['operation'])
         return operation(editor_data=self.cleaned_data, taskitem=taskitem, user=user)
     else:
         return OperationResponse(
             status=ERROR,
             msg='Некорректные данные формы'
         )
Beispiel #6
0
 def save_last_changes(cls, editor_data: dict, taskitem: TaskItem,
                       user: User):
     if not user.is_active:
         return OperationResponse(status=WARNING,
                                  msg='Требуется авторизация')
     solution, created = Solution.objects.get_or_create(
         user=user,
         taskitem=taskitem,
         defaults={"last_changes": editor_data['content']})
     if not created:
         if solution.is_locked:
             return OperationResponse(status=WARNING,
                                      msg='Решение запрещено изменять')
         elif solution.manual_status in Solution.MS__BLOCKED_STATUS:
             return OperationResponse(status=WARNING,
                                      msg='Решение запрещено изменять')
         solution.last_changes = editor_data['content']
         solution.save()
     return OperationResponse(status=OK, msg='Сохранено')