/car/models.py

https://github.com/JeffreyATW/jeffreyatw · Python · 101 lines · 98 code · 3 blank · 0 comment · 8 complexity · 1455c9920a3e8b5c9d214a6de54eba42 MD5 · raw file

  1. import random
  2. import time
  3. from datetime import date, datetime
  4. from django.db import models
  5. class Character(models.Model):
  6. name = models.CharField(max_length=200)
  7. image_name = models.CharField(max_length=200)
  8. photo_name = models.CharField(max_length=200)
  9. content = models.TextField()
  10. current = models.IntegerField(max_length=1)
  11. def __unicode__(self):
  12. return self.name
  13. def first_appearance(self):
  14. return self.all_appearances()[0]
  15. def all_appearances(self):
  16. today = date.today().isoformat()
  17. return Comic.objects.order_by('pub_date').filter( \
  18. pub_date__lte=today).filter(characters__pk=self.pk)
  19. class Comic(models.Model):
  20. title = models.CharField(max_length=200)
  21. pub_date = models.DateField()
  22. content = models.TextField()
  23. episode = models.IntegerField(max_length=11)
  24. panels = models.IntegerField(max_length=11, default=4)
  25. music = models.CharField(max_length=200)
  26. music_title = models.CharField(max_length=200)
  27. characters = models.ManyToManyField(Character)
  28. def __unicode__(self):
  29. if self.episode:
  30. return "CAR #%d: %s" % (self.episode, self.title)
  31. else:
  32. return "CAR #%s" % self.title
  33. def get_absolute_url(self):
  34. return "http://www.jeffreyatw.com/car/%s" % (self.pub_date)
  35. def is_future(self):
  36. return self.pub_date.date() > datetime.date.today()
  37. ordering = ['episode']
  38. def get_previous_entry(self):
  39. return self.get_previous_by_pub_date()
  40. def get_next_entry(self):
  41. return self.get_next_by_pub_date()
  42. def get_comments(self):
  43. return Comment.objects.filter(comic=self)
  44. def fake_nickname(self):
  45. nick_1 = ["Cool", "Uber", "Mega", "Crazy", "Geek", "Awesome", \
  46. "Kawaii", "Mecha", "Instant", "Weird", "Horrible", \
  47. "Mario", "Sonic", ""]
  48. nick_2 = ["", " "]
  49. nick_3 = ["Dude", "Gal", "Zilla", "Neko", "Loser", "Head", "Mom", \
  50. "Chick", "Guy", ""]
  51. nick_4 = ["69", "231", "42", "ATW", "X", "Omega", "9000", ""]
  52. nickname = "%s%s%s%s%s" % (nick_1[random.randrange(len(nick_1))], \
  53. nick_2[random.randrange(len(nick_2))], \
  54. nick_3[random.randrange(len(nick_3))], \
  55. nick_2[random.randrange(len(nick_2))], \
  56. nick_4[random.randrange(len(nick_4))])
  57. if not random.randrange(2):
  58. nickname = nickname.lower()
  59. elif not random.randrange(5):
  60. nickname = nickname.upper()
  61. return nickname
  62. def fake_content(self):
  63. exclamations = ["LOL!!!", "Haha", "", "OMG,", "LOL!", "lol", "Wow,"]
  64. adjectives = ["priceless", "awesome", "perfect", "so well drawn", \
  65. "really unique", "so expressive", "BEST", \
  66. "teh uber smex", "awfully funny", "soooo good", \
  67. "major lols", "really convincing"]
  68. content = "%s %s's expression in panel %d is %s%s" % \
  69. (exclamations[random.randrange(len(exclamations))], \
  70. self.characters.all()[random.randrange(len( \
  71. self.characters.all()))], random.randint(1, self.panels), \
  72. adjectives[random.randrange(len(adjectives))], "!" * \
  73. random.randint(1, 5))
  74. if not random.randrange(3):
  75. content = content.lower()
  76. elif not random.randrange(10):
  77. content = content.upper()
  78. return content
  79. def fake_date(self):
  80. stime = time.mktime(self.pub_date.timetuple())
  81. try:
  82. etime = time.mktime(self.get_next_entry().pub_date.timetuple())
  83. except Comic.DoesNotExist:
  84. etime = time.mktime(datetime.now().timetuple())
  85. ptime = stime + random.random() * (etime - stime)
  86. comment_date = time.strftime("%B %e, %Y %I:%M %p", \
  87. time.localtime(ptime))
  88. return comment_date
  89. class Comment(models.Model):
  90. name = models.CharField(max_length=200)
  91. website = models.CharField(max_length=200, blank=True)
  92. content = models.TextField()
  93. pub_date = models.DateTimeField(auto_now_add=True)
  94. comic = models.ForeignKey("Comic")
  95. enabled = models.IntegerField(max_length=1, default=1)
  96. ip = models.IPAddressField()
  97. def __unicode__(self):
  98. return self.content