<type>(scope): <description>

[body]

[footer(s)]
This commit is contained in:
ITQ
2025-03-03 12:38:10 +03:00
parent e719aa285d
commit dc979a1a95
6 changed files with 38 additions and 27 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ class UserSchema(ModelSchema):
class Meta:
model = User
fields = ["id", "email", "username", "created_at"]
fields = ["id", "avatar", "email", "username", "created_at"]
class StatSchema(Schema):
+5 -2
View File
@@ -3,8 +3,8 @@ from django.contrib import admin
from apps.task.models import (
CompetitionTask,
CompetitionTaskAttachment,
CompetitionTaskCriteria,
CompetitionTaskSubmission,
CompetitionTaskCriteria
)
@@ -23,7 +23,10 @@ class CompetitionTaskAdmin(admin.ModelAdmin):
list_display = ("title", "type", "points")
filter_horizontal = ("reviewers",)
list_filter = ("type",)
inlines = (CompletionAttachmentInline, CompetitionCriteriaInline,)
inlines = (
CompletionAttachmentInline,
CompetitionCriteriaInline,
)
@admin.register(CompetitionTaskSubmission)
+15 -14
View File
@@ -22,12 +22,16 @@ class CompetitionTask(BaseModel):
in_competition_position = models.PositiveSmallIntegerField(
verbose_name="позиция в соревновании"
)
competition = models.ForeignKey(Competition, on_delete=models.CASCADE,
verbose_name="привязанное соревнование")
competition = models.ForeignKey(
Competition,
on_delete=models.CASCADE,
verbose_name="привязанное соревнование",
)
title = models.CharField(verbose_name="заголовок", max_length=50)
description = MDTextField(verbose_name="описание")
max_attempts = models.PositiveSmallIntegerField(null=True, blank=True,
verbose_name="максимальное кол-во попыток")
max_attempts = models.PositiveSmallIntegerField(
null=True, blank=True, verbose_name="максимальное кол-во попыток"
)
type = models.CharField(
choices=CompetitionTaskType, max_length=8, verbose_name="тип проверки"
)
@@ -68,7 +72,10 @@ class CompetitionTask(BaseModel):
),
)
submission_reviewers_count = models.PositiveSmallIntegerField(
default=1, null=True, blank=True, verbose_name="кол-во проверяющих для зачета задачи"
default=1,
null=True,
blank=True,
verbose_name="кол-во проверяющих для зачета задачи",
)
def __str__(self):
@@ -84,15 +91,9 @@ class CompetitionTaskCriteria(BaseModel):
CompetitionTask, on_delete=models.CASCADE, related_name="criteries"
)
name = models.TextField(
verbose_name="название"
)
slug = models.SlugField(
verbose_name="техническое название"
)
description = models.TextField(
verbose_name="описание критерии"
)
name = models.TextField(verbose_name="название")
slug = models.SlugField(verbose_name="техническое название")
description = models.TextField(verbose_name="описание критерии")
max_value = models.PositiveSmallIntegerField(
verbose_name="максимальное кол-во баллов"
)
+2 -1
View File
@@ -1,8 +1,9 @@
import hashlib
import httpx
from celery import shared_task
from django.conf import settings
from django.core.files.base import ContentFile
import hashlib
from apps.task.models import CompetitionTaskSubmission
+8 -3
View File
@@ -11,11 +11,14 @@ class UserRole(models.TextChoices):
class User(BaseModel):
avatar = models.ImageField(verbose_name="аватар")
email = models.EmailField(unique=True, verbose_name="почта")
username = models.SlugField(unique=True, verbose_name="юзернейм")
password = models.TextField(verbose_name="пароль")
created_at = models.DateTimeField(auto_now=True, verbose_name="дата создания")
created_at = models.DateTimeField(
auto_now=True, verbose_name="дата создания"
)
achievements = models.ManyToManyField(
Achievement, blank=True, verbose_name="ачивки пользователя"
@@ -29,8 +32,10 @@ class User(BaseModel):
return check_password(self.password, password)
status = models.CharField(
max_length=10, choices=UserRole.choices, default="student",
verbose_name="роль участника"
max_length=10,
choices=UserRole.choices,
default="student",
verbose_name="роль участника",
)
def __str__(self) -> str:
+7 -6
View File
@@ -157,12 +157,12 @@ def run_container_safely(
"stderr": f"Container error: {str(e)}",
"status": -1,
}
# finally:
# if container:
# try:
# container.remove(force=True)
# except docker.errors.DockerException:
# pass
finally:
if container:
try:
container.remove(force=True)
except docker.errors.DockerException:
pass
def validate_file_path(path: str) -> bool:
@@ -202,6 +202,7 @@ async def execute_code(request: ExecutionRequest) -> ExecutionResponse:
)
with tempfile.TemporaryDirectory() as tmp_dir:
print(tmp_dir)
bound_files = {}
if request.files:
async with aiohttp.ClientSession() as session: