sprint/Main/models/extrafile.py
2022-04-08 00:19:13 +03:00

49 lines
1.5 KiB
Python

from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from .mixins import FileStorageMixin
class ExtraFile(FileStorageMixin, models.Model):
task = models.ForeignKey("Task", on_delete=models.CASCADE)
filename = models.TextField()
is_test = models.BooleanField(null=True, blank=True)
is_sample = models.BooleanField(null=True, blank=True)
readable = models.BooleanField(null=True, blank=True)
test_number = models.IntegerField(null=True, blank=True)
fs_id = models.IntegerField(null=True, blank=True)
class Meta:
indexes = [
models.Index(fields=['task'])
]
@property
def can_be_sample(self):
return (
self.is_test
and not self.filename.endswith(".a")
and len(
ExtraFile.objects.filter(task=self.task, filename=self.filename + ".a")
)
)
def delete(self, using=None, keep_parents=False):
self.remove_from_fs()
if self.is_test and self.filename.endswith(".a"):
try:
ef = ExtraFile.objects.get(
task=self.task, filename=self.filename.rstrip(".a"), is_test=True
)
ef.is_sample = False
ef.save()
except ObjectDoesNotExist:
pass
super().delete(using=using, keep_parents=keep_parents)
@property
def answer(self):
return ExtraFile.objects.get(
task=self.task, is_test=True, filename=self.filename + ".a"
)