"""Models for managing competitive races.""" import logging from django.db import models from django.utils import timezone log = logging.getLogger('races.models') class Race(models.Model): """Track a race.""" key = models.CharField(max_length=16, primary_key=True) name = models.CharField(max_length=255) description = models.TextField() def __str__(self): """Text representation of a race.""" return "{0:s} ({1:s})".format(self.name, self.key) class Racer(models.Model): """Track a racer in a race.""" nick = models.CharField(max_length=64) race = models.ForeignKey(Race, on_delete=models.CASCADE) joined = models.BooleanField(default=False) started = models.BooleanField(default=False) finished = models.BooleanField(default=False) class Meta: unique_together = ('nick', 'race') def __str__(self): """Text representation of a race racer.""" return "{0:s} in {1:s}".format(self.nick, self.race.name) class RaceUpdate(models.Model): """Periodic updates for a racer.""" race = models.ForeignKey(Race, on_delete=models.CASCADE) racer = models.ForeignKey(Racer, on_delete=models.CASCADE) update = models.TextField() event_time = models.DateTimeField(default=timezone.now) class Meta: ordering = ['event_time',] def __str__(self): """Text representation of a race update.""" local_time = timezone.localtime(self.event_time) return "{0:s} in {1:s} @ {2:s}".format(self.racer.nick, self.race.name, local_time.strftime('%Y-%m-%d %H:%M:%S %Z'))