from django.contrib.auth.models import User
from django.db import models
from django.utils.translation import gettext_lazy as _
from oioioi.base.utils import generate_key
from oioioi.base.utils.color import ColorField
from oioioi.base.utils.deps import check_django_app_dependencies
from oioioi.contests.models import Contest, ProblemInstance
check_django_app_dependencies(__name__, ['oioioi.participants', 'oioioi.acm'])
[docs]class ProblemBalloonsConfig(models.Model):
[docs] problem_instance = models.OneToOneField(
ProblemInstance,
verbose_name=_("problem"),
related_name='balloons_config',
primary_key=True,
on_delete=models.CASCADE,
)
[docs] color = ColorField(verbose_name=_("color"))
[docs] def __str__(self):
return (
str(self.problem_instance)
+ u' ('
+ str(self.color)
+ u')'
)
[docs]class BalloonsDisplay(models.Model):
"""Represents mapping for balloons display."""
[docs] ip_addr = models.GenericIPAddressField(
unique=True, unpack_ipv4=True, verbose_name=_("IP address")
)
[docs] user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.CASCADE)
[docs] contest = models.ForeignKey(
Contest, verbose_name=_("contest"), on_delete=models.CASCADE
)
[docs] def __str__(self):
return str(self.ip_addr)
[docs]class BalloonDelivery(models.Model):
[docs] user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.CASCADE)
[docs] problem_instance = models.ForeignKey(
ProblemInstance, verbose_name=_("problem"), on_delete=models.CASCADE
)
[docs] delivered = models.BooleanField(default=False, verbose_name=_("delivered"))
[docs] first_accepted_solution = models.BooleanField(
default=False, verbose_name=_("first accepted solution")
)
[docs] def __str__(self):
return u'%(user)s for %(problem)s (%(delivered)s)' % {
u'user': self.user,
u'problem': self.problem_instance,
u'delivered': u'delivered' if self.delivered else u'not delivered',
}
[docs]class BalloonsDeliveryAccessData(models.Model):
[docs] contest = models.OneToOneField(
Contest, verbose_name=_("contest"), on_delete=models.CASCADE
)
[docs] access_key = models.CharField(max_length=16, verbose_name=_("access key"))
[docs] valid_until = models.DateTimeField(null=True, verbose_name=_("valid until"))
[docs] def generate_key(self):
self.access_key = generate_key()[:16]