From f4229daac60fa90cbf8d77bfdffd88a467869b3c Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Tue, 1 Mar 2011 20:43:37 +0100 Subject: isotests: view updates, choices->models, show results, admin * Started changing the view portion * Changed choices to models * Show the latest failed/succeeded tests on results page * Added some more admin pages Signed-off-by: Dan McGee --- isotests/models.py | 110 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 32 deletions(-) (limited to 'isotests/models.py') diff --git a/isotests/models.py b/isotests/models.py index 1eaca163..d9cfc78c 100644 --- a/isotests/models.py +++ b/isotests/models.py @@ -1,4 +1,6 @@ from django.db import models +from django.db.models import Max +from datetime import datetime # Create your models here. class Iso(models.Model): @@ -7,81 +9,125 @@ class Iso(models.Model): def __unicode__(self): return str(self.date) +class Architecture(models.Model): + name = models.CharField(max_length=200) + + def __unicode__(self): + return self.name + + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] + +class Isotype(models.Model): + name = models.CharField(max_length=200) + + def __unicode__(self): + return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] + +class Boottype(models.Model): + name = models.CharField(max_length=200) + + def __unicode__(self): + return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] + class Hardware(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class InstallType(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class Source(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] + +class Clockchoice(models.Model): + name = models.CharField(max_length=200) + + def __unicode__(self): + return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class Filesystem(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class Module(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class Bootloader(models.Model): name = models.CharField(max_length=200) def __unicode__(self): return self.name + def get_success_test(self): + return self.test_set.filter(success=True).aggregate(Max('iso__date'))['iso__date__max'] + def get_failed_test(self): + return self.test_set.filter(success=False).aggregate(Max('iso__date'))['iso__date__max'] class Test(models.Model): - ARCH_CHOICES = ( - ('d86', 'dual, option i686'), - ('d64', 'dual, option x86_64'), - ('x86', 'i686'), - ('x64', 'x86_64') - ) - - ISOTYPE_CHOICES = ( - ('c', 'core'), - ('n', 'net') - ) - - BOOTTYPE_CHOICES = ( - ('o', 'optical'), - ('u', 'usb'), - ('p', 'pxe') - ) - - CLOCK_CHOICES = ( - ('d', 'default'), - ('m', 'configured manually'), - ('n', 'NTP') - ) - user_name = models.CharField(max_length=500) user_email = models.EmailField() iso = models.ForeignKey(Iso) - arch = models.CharField(max_length=3, choices=ARCH_CHOICES) - isotype = models.CharField(max_length=1, choices=ISOTYPE_CHOICES) - boottype = models.CharField(max_length=1, choices=BOOTTYPE_CHOICES) + arch = models.ForeignKey(Architecture) + isotype = models.ForeignKey(Isotype) + boottype = models.ForeignKey(Boottype) hardwaretype = models.ForeignKey(Hardware) installtype = models.ForeignKey(InstallType) source = models.ForeignKey(Source) - clock = models.CharField(max_length=1, choices=CLOCK_CHOICES) + clock = models.ForeignKey(Clockchoice) filesystem = models.ForeignKey(Filesystem) - ms = models.ManyToManyField(Module) + ms = models.ManyToManyField(Module, null=True, blank=True) rollback = models.BooleanField() - rollback_filesystem = models.ForeignKey(Filesystem, related_name="rollback_test") - rollback_modules = models.ManyToManyField(Module, related_name="rollback_test") + rollback_filesystem = models.ForeignKey(Filesystem, + related_name="rollback_test", null=True, blank=True) + rollback_modules = models.ManyToManyField(Module, + related_name="rollback_test", null=True, blank=True) + bootloader = models.ForeignKey(Bootloader) success = models.BooleanField() - comments = models.TextField() + comments = models.TextField(null=True, blank=True) -- cgit v1.2.3-54-g00ecf