Merge branch 'master' of gitlab.prodcontest.ru:team-15/project

This commit is contained in:
Timur
2025-03-04 01:46:43 +03:00
4 changed files with 30 additions and 26 deletions
+1 -1
View File
@@ -24,6 +24,6 @@ FROM docker.io/nginx:latest
COPY --from=builder /app/static /usr/share/nginx/html 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;"] CMD ["nginx", "-g", "daemon off;"]
@@ -424,7 +424,6 @@ B — пользователи, которым доступен только о
""".strip(), """.strip(),
"type": CompetitionTask.CompetitionTaskType.INPUT.value, "type": CompetitionTask.CompetitionTaskType.INPUT.value,
"points": 15, "points": 15,
"submission_reviewers_count": 2,
"max_attempts": 50, "max_attempts": 50,
"correct_answer_file": ans3, "correct_answer_file": ans3,
}, },
@@ -434,7 +433,6 @@ B — пользователи, которым доступен только о
"description": "Сколько будет 6 * 7?", "description": "Сколько будет 6 * 7?",
"type": CompetitionTask.CompetitionTaskType.INPUT.value, "type": CompetitionTask.CompetitionTaskType.INPUT.value,
"points": 5, "points": 5,
"submission_reviewers_count": 2,
"max_attempts": 10, "max_attempts": 10,
"correct_answer_file": ans3, "correct_answer_file": ans3,
}, },
@@ -522,8 +520,8 @@ users = [
"role": UserRole.STUDENT.value, "role": UserRole.STUDENT.value,
}, },
{ {
"email": "oleg-tinkov@gmail.com", "email": "s.bliznyuk@tbank.ru",
"username": "oleg-tinkov", "username": "s_bliznyuk",
"password": "password123!", "password": "password123!",
"role": UserRole.STUDENT.value, "role": UserRole.STUDENT.value,
}, },
@@ -659,6 +657,7 @@ class Command(BaseCommand):
competitions_objs = [] competitions_objs = []
for i, competition in enumerate(competitions): for i, competition in enumerate(competitions):
try:
competition_obj = Competition.objects.create( competition_obj = Competition.objects.create(
title=competition["title"], title=competition["title"],
description=competition["description"], description=competition["description"],
@@ -667,6 +666,8 @@ class Command(BaseCommand):
type=competition["type"], type=competition["type"],
participation_type=competition["participation_type"], participation_type=competition["participation_type"],
) )
except Exception as e:
print(competition)
if competition.get("image"): if competition.get("image"):
competition_obj.image_url = competition["image"] competition_obj.image_url = competition["image"]
@@ -696,16 +697,13 @@ class Command(BaseCommand):
points=task["points"], points=task["points"],
submission_reviewers_count=task[ submission_reviewers_count=task[
"submission_reviewers_count" "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"), max_attempts=task.get("max_attempts"),
) )
competitions[i]["tasks"][j]["obj"] = task_obj 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"): if task.get("attachment"):
CompetitionTaskAttachment.objects.create( CompetitionTaskAttachment.objects.create(
task=task_obj, task=task_obj,
+10 -4
View File
@@ -110,7 +110,6 @@ class CompetitionTask(BaseModel):
# "type": "Проверьте тип - вы ввели ревьюверов, но задание не является ручным" # "type": "Проверьте тип - вы ввели ревьюверов, но задание не является ручным"
# }) # })
def __str__(self): def __str__(self):
return self.title return self.title
@@ -150,9 +149,16 @@ class CompetitionTaskAttachment(BaseModel):
related_name="attachments", related_name="attachments",
) )
file = models.FileField(upload_to=file_upload_at, verbose_name="файл") file = models.FileField(upload_to=file_upload_at, verbose_name="файл")
bind_at = models.CharField(verbose_name="путь сохранения", max_length=255, bind_at = models.CharField(
validators=[RegexValidator(r"^(?:[a-zA-Z]:\\(?:[^<>:\"\/\\|?*]*\\)*|/(?:[^<>:\"\/\\|?*]+/?)*)$", verbose_name="путь сохранения",
message="Введите абсолютный путь до папки")]) max_length=255,
validators=[
RegexValidator(
r"^(?:[a-zA-Z]:\\(?:[^<>:\"\/\\|?*]*\\)*|/(?:[^<>:\"\/\\|?*]+/?)*)$",
message="Введите абсолютный путь до папки",
)
],
)
public = models.BooleanField(default=False, verbose_name="публичный") public = models.BooleanField(default=False, verbose_name="публичный")
class Meta: class Meta:
+1 -1
View File
@@ -35,7 +35,7 @@ def analyze_data_task(self, submission_id):
"code": base64.b64encode(code).decode("utf-8"), "code": base64.b64encode(code).decode("utf-8"),
"answer_file_path": submission.task.answer_file_path, "answer_file_path": submission.task.answer_file_path,
"expected_hash": hashlib.sha256( "expected_hash": hashlib.sha256(
submission.task.correct_answer_file.read() submission.task.correct_answer_file.read().decode("utf-8")
).hexdigest(), ).hexdigest(),
}, },
timeout=30, timeout=30,