people.models: 49 total statements, 57.1% covered

Generated: Fri 2015-05-29 13:58 AST

Source file: /home/quincy/Code/valuehorizon-people/people/models.py

Stats: 24 executed, 18 missed, 7 excluded, 50 ignored

  1. from django.db import models
  2. from countries.models import Country
  3. class Person(models.Model):
  4. """
  5. Represents a person, such as John Doe, Joe Public, or Jiminy Cricket.
  6. """
  7. GENDER_CHOICES = (
  8. (u'M', u'Male'),
  9. (u'F', u'Female'),
  10. )
  11. gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
  12. TITLE_CHOICES = (
  13. (u'DR', u'Dr.'),
  14. (u'MR', u'Mr.'),
  15. (u'MS', u'Ms.'),
  16. (u'MRS', u'Mrs.'),
  17. (u'SIR', u'Sir'),
  18. (u'LORD', u'Lord'),
  19. )
  20. title = models.CharField(max_length=10, choices=TITLE_CHOICES)
  21. first_name = models.CharField(max_length=255)
  22. last_name = models.CharField(max_length=255)
  23. other_names = models.CharField(max_length=255, blank=True, help_text="Middle names, comma separated")
  24. date_of_birth = models.DateField(null=True, blank=True)
  25. date_of_death = models.DateField(null=True, blank=True)
  26. profile = models.TextField(blank=True, help_text="Description of Person")
  27. is_deceased = models.BooleanField(default=False)
  28. nationality = models.ManyToManyField(Country, blank=True, null=True, related_name="nationalities")
  29. # Cached Data
  30. full_name = models.CharField(max_length=255, blank=True, editable=False)
  31. date_modified = models.DateTimeField(null=True, blank=True, editable=False, auto_now=True)
  32. date_created = models.DateTimeField(null=True, blank=True, editable=False, auto_now_add=True)
  33. class Meta:
  34. verbose_name_plural = 'People'
  35. verbose_name = 'Person'
  36. ordering = ['last_name', 'first_name', 'date_of_birth']
  37. def __unicode__(self):
  38. return u'%s' % (unicode(self.full_name))
  39. def age(self):
  40. from datetime import date
  41. if self.date_of_birth != None:
  42. today = date.today()
  43. dob = self.date_of_birth
  44. if (today.month > dob.month) and (today.day > dob.day):
  45. return (today.year - dob.year)
  46. else:
  47. return ((today.year - dob.year) -1)
  48. else:
  49. return None
  50. def name(self):
  51. """
  52. Return the person's name. If we have special titles, use them, otherwise,
  53. don't include the title.
  54. """
  55. if self.title == "DR" or self.title == "SIR" or self.title == "LORD":
  56. return str(self.get_title_display()) + " " + str(self.first_name) + " " + str(self.last_name)
  57. else:
  58. return str(self.first_name) + " " + str(self.last_name)
  59. def get_absolute_url(self):
  60. return ('person_profile', (), { 'person_id': self.id})
  61. get_absolute_url = models.permalink(get_absolute_url)
  62. def save(self, *args, **kwargs):
  63. """
  64. If date of death is specified, set is_deceased to true
  65. """
  66. if self.date_of_death != None:
  67. self.is_deceased = True
  68. # Since we often copy and paste from strange sources, do some basic cleanup
  69. self.first_name = self.first_name.strip()
  70. self.last_name = self.last_name.strip()
  71. self.other_names = self.other_names.strip()
  72. self.full_name = str(self.name())
  73. self.profile = self.profile.encode('ascii', 'ignore').encode('utf8')
  74. # Call save method
  75. super(Person, self).save(*args, **kwargs) # Call the "real" save() method.