Source code for oioioi.balloons.models

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] class Meta(object):
[docs] verbose_name = _("balloons colors")
[docs] verbose_name_plural = _("balloons colors")
[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] class Meta(object):
[docs] verbose_name = _("balloons display")
[docs] verbose_name_plural = _("balloons displays")
[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] class Meta(object):
[docs] verbose_name = _("balloon delivery")
[docs] verbose_name_plural = _("balloon deliveries")
[docs] unique_together = ('user', 'problem_instance')
[docs] ordering = ['id']
[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] class Meta(object):
[docs] verbose_name = _("balloons delivery access data")
[docs] verbose_name_plural = _("balloons delivery access data")
[docs] def generate_key(self): self.access_key = generate_key()[:16]