From ec3945a9ad411cba3f9dc7f2837558a2ac2e543b Mon Sep 17 00:00:00 2001 From: ITQ Date: Tue, 4 Mar 2025 01:13:16 +0300 Subject: [PATCH 1/4] (scope): [body] [footer(s)] --- .../commands/generate_pretty_data.py | 21 ++++++++++--------- services/backend/apps/task/models.py | 18 ++++++++++------ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/services/backend/apps/core/management/commands/generate_pretty_data.py b/services/backend/apps/core/management/commands/generate_pretty_data.py index 1ca8bc0..f4ea245 100644 --- a/services/backend/apps/core/management/commands/generate_pretty_data.py +++ b/services/backend/apps/core/management/commands/generate_pretty_data.py @@ -424,7 +424,6 @@ B — пользователи, которым доступен только о """.strip(), "type": CompetitionTask.CompetitionTaskType.INPUT.value, "points": 15, - "submission_reviewers_count": 2, "max_attempts": 50, "correct_answer_file": ans3, }, @@ -434,7 +433,6 @@ B — пользователи, которым доступен только о "description": "Сколько будет 6 * 7?", "type": CompetitionTask.CompetitionTaskType.INPUT.value, "points": 5, - "submission_reviewers_count": 2, "max_attempts": 10, "correct_answer_file": ans3, }, @@ -659,14 +657,17 @@ class Command(BaseCommand): competitions_objs = [] for i, competition in enumerate(competitions): - competition_obj = Competition.objects.create( - title=competition["title"], - description=competition["description"], - start_date=competition["start_date"], - end_date=competition["end_date"], - type=competition["type"], - participation_type=competition["participation_type"], - ) + try: + competition_obj = Competition.objects.create( + title=competition["title"], + description=competition["description"], + start_date=competition["start_date"], + end_date=competition["end_date"], + type=competition["type"], + participation_type=competition["participation_type"], + ) + except Exception as e: + print(competition) if competition.get("image"): competition_obj.image_url = competition["image"] diff --git a/services/backend/apps/task/models.py b/services/backend/apps/task/models.py index 75b0390..3752c34 100644 --- a/services/backend/apps/task/models.py +++ b/services/backend/apps/task/models.py @@ -91,7 +91,7 @@ class CompetitionTask(BaseModel): raise ValidationError({ "correct_answer_file": "Загрузите правильный ответ" }) - + # if self.answer_file_path and not self.type == "checker": # raise ValidationError({ # "type": "Укажите другой тип задания: этот не совместим с путем правильного ответа" @@ -100,7 +100,7 @@ class CompetitionTask(BaseModel): raise ValidationError({ "answer_file_path": "Введите путь правильного ответа - это нужно для корректной работы чекера" }) - + if not self.reviewers and self.type == "review": raise ValidationError({ "reviewers": "Загрузите ревьюверов - кто будет проверять задания, если не они?" @@ -110,7 +110,6 @@ class CompetitionTask(BaseModel): # "type": "Проверьте тип - вы ввели ревьюверов, но задание не является ручным" # }) - def __str__(self): return self.title @@ -150,9 +149,16 @@ class CompetitionTaskAttachment(BaseModel): related_name="attachments", ) file = models.FileField(upload_to=file_upload_at, verbose_name="файл") - bind_at = models.CharField(verbose_name="путь сохранения", max_length=255, - validators=[RegexValidator(r"^(?:[a-zA-Z]:\\(?:[^<>:\"\/\\|?*]*\\)*|/(?:[^<>:\"\/\\|?*]+/?)*)$", - message="Введите абсолютный путь до папки")]) + bind_at = models.CharField( + verbose_name="путь сохранения", + max_length=255, + validators=[ + RegexValidator( + r"^(?:[a-zA-Z]:\\(?:[^<>:\"\/\\|?*]*\\)*|/(?:[^<>:\"\/\\|?*]+/?)*)$", + message="Введите абсолютный путь до папки", + ) + ], + ) public = models.BooleanField(default=False, verbose_name="публичный") class Meta: From 2bc5f7c45f657207bb3d7e94cb95e09168a25eaa Mon Sep 17 00:00:00 2001 From: ITQ Date: Tue, 4 Mar 2025 01:28:12 +0300 Subject: [PATCH 2/4] (scope): [body] [footer(s)] --- services/backend/Dockerfile.staticfiles | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/backend/Dockerfile.staticfiles b/services/backend/Dockerfile.staticfiles index 21ac3a0..3916708 100644 --- a/services/backend/Dockerfile.staticfiles +++ b/services/backend/Dockerfile.staticfiles @@ -24,6 +24,6 @@ FROM docker.io/nginx:latest COPY --from=builder /app/static /usr/share/nginx/html -COPY ../checker/checker_requirements.txt . +COPY ../checker/checker_requirements.txt /usr/share/nginx/html CMD ["nginx", "-g", "daemon off;"] From bb1e08dba66c0ddffdf871d5db3f29bb9db4d061 Mon Sep 17 00:00:00 2001 From: ITQ Date: Tue, 4 Mar 2025 01:36:30 +0300 Subject: [PATCH 3/4] (scope): [body] [footer(s)] --- services/backend/apps/task/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/backend/apps/task/tasks.py b/services/backend/apps/task/tasks.py index 522bf3a..98d3842 100644 --- a/services/backend/apps/task/tasks.py +++ b/services/backend/apps/task/tasks.py @@ -35,7 +35,7 @@ def analyze_data_task(self, submission_id): "code": base64.b64encode(code).decode("utf-8"), "answer_file_path": submission.task.answer_file_path, "expected_hash": hashlib.sha256( - submission.task.correct_answer_file.read() + submission.task.correct_answer_file.read().decode("utf-8") ).hexdigest(), }, timeout=30, From ecbae273b5ae29d78c99ede2c081b444d9dfe2a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=A1=D1=83=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 4 Mar 2025 01:38:59 +0300 Subject: [PATCH 4/4] fix: fixed data bug --- .../management/commands/generate_pretty_data.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/services/backend/apps/core/management/commands/generate_pretty_data.py b/services/backend/apps/core/management/commands/generate_pretty_data.py index f4ea245..1de2cb5 100644 --- a/services/backend/apps/core/management/commands/generate_pretty_data.py +++ b/services/backend/apps/core/management/commands/generate_pretty_data.py @@ -520,8 +520,8 @@ users = [ "role": UserRole.STUDENT.value, }, { - "email": "oleg-tinkov@gmail.com", - "username": "oleg-tinkov", + "email": "s.bliznyuk@tbank.ru", + "username": "s_bliznyuk", "password": "password123!", "role": UserRole.STUDENT.value, }, @@ -697,16 +697,13 @@ class Command(BaseCommand): points=task["points"], submission_reviewers_count=task[ "submission_reviewers_count" - ], + ] if task["type"] == CompetitionTask.CompetitionTaskType.REVIEW.value else None, + correct_answer_file=task["correct_answer_file"] if task["type"] != CompetitionTask.CompetitionTaskType.REVIEW.value else None, max_attempts=task.get("max_attempts"), ) competitions[i]["tasks"][j]["obj"] = task_obj - if ( - task["type"] - == CompetitionTask.CompetitionTaskType.INPUT.value - ): - task_obj.correct_answer_file = task["correct_answer_file"] + if task.get("attachment"): CompetitionTaskAttachment.objects.create( task=task_obj,