"""Store "facts".""" import logging import random from django.db import models log = logging.getLogger('facts.models') class FactCategory(models.Model): """Define categories for facts.""" name = models.CharField(max_length=200, unique=True) show_all_entries = models.BooleanField(default=False) show_source = models.BooleanField(default=False) class Meta: """Meta options.""" verbose_name_plural = 'fact categories' def __str__(self): """String representation.""" return "{0:s}".format(self.name) def random_fact(self, regex=None): """Get a random fact in this category.""" facts = self.fact_set.all() if regex: facts = facts.filter(fact__iregex=regex) if len(facts) > 0: return random.choice(facts) else: return None class FactManager(models.Manager): """Queries against Fact.""" def random_fact(self, category, regex=None): """Get a random fact from the database.""" try: factcategory = FactCategory.objects.get(name=category) except FactCategory.DoesNotExist: return None return factcategory.random_fact(regex) class Fact(models.Model): """Define facts.""" fact = models.TextField() category = models.ForeignKey(FactCategory, on_delete=models.CASCADE) nickmask = models.CharField(max_length=200, default='', blank=True) time = models.DateTimeField(auto_now_add=True) objects = FactManager() def __str__(self): """String representation.""" return "{0:s} - {1:s}".format(self.category.name, self.fact)