Source code for oioioi.disqualification.models

from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.core.validators import MaxLengthValidator
from django.db import models
from django.utils.translation import gettext_lazy as _

from oioioi.base.utils.validators import validate_whitespaces
from oioioi.contests.models import Contest, Submission


[docs]class Disqualification(models.Model):
[docs] contest = models.ForeignKey( Contest, verbose_name=_("contest"), on_delete=models.CASCADE )
[docs] user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.CASCADE)
# Leave submission empty to make contest-wide disqualification
[docs] submission = models.ForeignKey( Submission, null=True, blank=True, verbose_name=_("submission"), on_delete=models.CASCADE, )
[docs] title = models.CharField( max_length=255, validators=[MaxLengthValidator(255), validate_whitespaces], verbose_name=_("title"), )
[docs] content = models.TextField(verbose_name=_("content"))
[docs] guilty = models.BooleanField(default=True)
[docs] class Meta(object):
[docs] verbose_name = _("disqualification")
[docs] verbose_name_plural = _("disqualifications")
[docs] def clean(self): if self.submission and self.submission.user != self.user: raise ValidationError(_("The submission does not match the user."))
[docs] def save(self, *args, **kwargs): if self.submission: assert self.contest.id == self.submission.problem_instance.contest_id assert self.user.id == self.submission.user_id super(Disqualification, self).save(*args, **kwargs)
[docs]class DisqualificationsConfig(models.Model):
[docs] contest = models.OneToOneField( Contest, related_name='disqualifications_config', on_delete=models.CASCADE )
[docs] info = models.TextField( verbose_name=_( "information displayed on dashboard for every disqualified participant" ) )
[docs] class Meta(object):
[docs] verbose_name = _("diqualifications configuration")
[docs] verbose_name_plural = _("disqualifications configurations")