Geen omschrijving

models.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from datetime import datetime
  2. from django.contrib.auth.models import User
  3. from django.core.validators import RegexValidator
  4. from django.db import models
  5. from django.utils.translation import ugettext_lazy as _, get_language
  6. import arrow
  7. from babel.dates import format_timedelta
  8. class Counter(models.Model):
  9. name = models.CharField(_('name'), max_length=60)
  10. email = models.EmailField(_('email'), max_length=264, default='null@localhost')
  11. trigramme = models.CharField(
  12. _('trigram'),
  13. max_length=3,
  14. validators=[RegexValidator(regex='^\S{3}$', message=_('Trigram must be 3 characters long.'))]
  15. )
  16. user = models.ForeignKey(User, blank=True, null=True, verbose_name=_('associated user'))
  17. email_notifications = models.BooleanField(_('email notifications'), default=False)
  18. sort_by_score = models.BooleanField(_('sort by SeumScore'), default=True)
  19. def __str__(self):
  20. return _('%(trigram)s (%(name)s)') % {'trigram': self.trigramme, 'name': self.name}
  21. class Meta:
  22. verbose_name = _('counter')
  23. def save(self, *args, **kwargs):
  24. self.full_clean()
  25. super(Counter, self).save(*args, **kwargs)
  26. class Reset(models.Model):
  27. timestamp = models.DateTimeField(_('datetime'), auto_now_add=True)
  28. reason = models.TextField(_('reason'))
  29. counter = models.ForeignKey('Counter', related_name='resets', verbose_name=_('victim'))
  30. who = models.ForeignKey('Counter', related_name='who', verbose_name=_('seum giver'), blank=True, null=True, default=None)
  31. def __str__(self):
  32. if self.who is None or self.who == self.counter:
  33. return _('%(counter)s: %(datetime)s (%(reason)s)') % {
  34. 'counter': self.counter,
  35. 'datetime': arrow.Arrow.fromdatetime(self.timestamp).humanize(locale=(get_language() or 'en')), # dirty hack...
  36. 'reason': self.reason
  37. }
  38. else:
  39. return '%(who)s to %(counter)s : %(datetime)s (%(reason)s)' % {
  40. 'who': self.who,
  41. 'counter': self.counter,
  42. 'datetime': arrow.Arrow.fromdatetime(self.timestamp).humanize(locale=(get_language() or 'en')),
  43. 'reason': self.reason
  44. }
  45. class Meta:
  46. verbose_name = _('reset')
  47. verbose_name_plural = _('resets')
  48. class Like(models.Model):
  49. liker = models.ForeignKey('Counter', verbose_name=_('liker'), related_name='likes')
  50. reset = models.ForeignKey('Reset', verbose_name=_('seum'), related_name='likes')
  51. timestamp = models.DateTimeField(_('datetime'), auto_now_add=True)
  52. class Meta:
  53. verbose_name = _('like')
  54. verbose_name_plural = _('likes')
  55. unique_together = ('liker', 'reset')
  56. def __str__(self):
  57. return _('%(liker)s likes %(reset)s') % {'liker': self.liker, 'reset': self.reset}
  58. class Keyword(models.Model):
  59. text = models.CharField('texte', max_length=128, unique=True)
  60. class Meta:
  61. verbose_name = _('keyword')
  62. verbose_name_plural = _('keywords')
  63. def __str__(self):
  64. return '#%s' % (self.text)
  65. class Hashtag(models.Model):
  66. keyword = models.ForeignKey('Keyword', verbose_name=_('hashtag'), related_name='hashtags')
  67. reset = models.ForeignKey('Reset', verbose_name=_('reset'), related_name='hashtags')
  68. class Meta:
  69. verbose_name = _('hashtag')
  70. verbose_name_plural = _('hashtags')
  71. def __str__(self):
  72. return _('%(keyword)s for %(who)s') % {'keyword': self.keyword, 'who': self.reset}