This commit is contained in:
Egor Matveev
2022-03-15 23:09:38 +03:00
parent 76a74efbe7
commit 80e0867526
8 changed files with 169 additions and 3 deletions

View File

@@ -0,0 +1,30 @@
# Generated by Django 3.2.4 on 2022-03-15 19:08
import Main.models.mixins
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('Main', '0027_task_allow_sharing'),
]
operations = [
migrations.CreateModel(
name='Dump',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('timestamp', models.DateTimeField(default=django.utils.timezone.now)),
('fs_id', models.IntegerField(null=True)),
('ready', models.BooleanField(default=False)),
('executor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('task', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Main.task')),
],
bases=(Main.models.mixins.FileStorageMixin, models.Model),
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.2.4 on 2022-03-15 19:20
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('Main', '0028_dump'),
]
operations = [
migrations.RemoveField(
model_name='dump',
name='ready',
),
]

View File

@@ -10,3 +10,4 @@ from Main.models.progress import Progress
from Main.models.solution_file import SolutionFile
from Main.models.friendship import Friendship
from Main.models.language_apply import LanguageApply
from Main.models.dump import Dump

25
Main/models/dump.py Normal file
View File

@@ -0,0 +1,25 @@
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone
from .mixins import FileStorageMixin
class Dump(FileStorageMixin, models.Model):
timestamp = models.DateTimeField(default=timezone.now)
fs_id = models.IntegerField(null=True)
executor = models.ForeignKey(User, on_delete=models.CASCADE)
task = models.ForeignKey("Task", on_delete=models.CASCADE, null=True)
@property
def ready(self):
return self.fs_id is not None
@property
def str_date(self):
return self.timestamp.strftime("%Y-%m-%dT%H:%M:%S")
@property
def filename(self):
if self.task is not None:
return f"dump-task-{self.task.id}-{self.str_date}"

View File

@@ -2,6 +2,7 @@ from django.contrib.postgres.fields import ArrayField
from django.db import models
from django.contrib.auth.models import User
from Main.models.dump import Dump
from Main.models.extrafile import ExtraFile
@@ -21,6 +22,10 @@ class Task(models.Model):
def __str__(self):
return self.name
@property
def dumps(self):
return Dump.objects.filter(task=self).order_by("-timestamp")
@property
def files(self):
return ExtraFile.objects.filter(task=self, is_test=False)

View File

@@ -1,7 +1,8 @@
from django.http import HttpResponse
from Main.models import ExtraFile
from Main.models import ExtraFile, Dump
from SprintLib.BaseView import BaseView, AccessError
from SprintLib.queue import send_to_queue
class TaskSettingsView(BaseView):
@@ -23,6 +24,11 @@ class TaskSettingsView(BaseView):
self.entities.task.save()
return f"/admin/task?task_id={self.entities.task.id}"
def post_dump(self):
dump = Dump.objects.create(executor=self.request.user, task=self.entities.task)
send_to_queue("files", {"id": dump.id})
return f"/admin/task?task_id={self.entities.task.id}"
def _upload(self, is_test):
filename = self.request.FILES["file"].name
ef, created = None, None