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