1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
from datetime import datetime
from django.db import models
from django.db.models import Max
class IsoOption(models.Model):
class Meta:
abstract = True
name = models.CharField(max_length=200)
success_tests = None
failed_tests = None
def __unicode__(self):
return str(self.name)
def get_success_test(self):
if not self.success_tests:
self.success_tests = self.test_set.filter(
success=True).annotate(Max('iso__id'))
if self.success_tests:
return self.success_tests[0].iso
return None
def get_failed_test(self):
if not self.failed_tests:
self.failed_tests = self.test_set.filter(
success=False).annotate(Max('iso__id'))
if self.failed_tests:
return self.failed_tests[0].iso
return None
class RollbackOption(IsoOption):
class Meta:
abstract = True
success_rollback_tests = None
failed_rollback_tests = None
def get_rollback_success_test(self):
if not self.success_rollback_tests:
self.success_rollback_tests = self.rollback_test_set.filter(
success=True).annotate(Max('iso__id'))
if self.success_rollback_tests:
return self.success_rollback_tests[0].iso
return None
def get_rollback_failed_test(self):
if not self.failed_rollback_tests:
self.failed_rollback_tests = self.rollback_test_set.filter(
success=False).annotate(Max('iso__id'))
if self.failed_rollback_tests:
return self.failed_rollback_tests[0].iso
return None
class Iso(models.Model):
name = models.CharField(max_length=255)
created = models.DateTimeField(editable=False)
active = models.BooleanField(default=True)
def __unicode__(self):
return self.name
class Architecture(IsoOption):
pass
class IsoType(IsoOption):
pass
class BootType(IsoOption):
pass
class HardwareType(IsoOption):
pass
class InstallType(IsoOption):
pass
class Source(IsoOption):
pass
class ClockChoice(IsoOption):
pass
class Filesystem(RollbackOption):
pass
class Module(RollbackOption):
pass
class Bootloader(IsoOption):
pass
class Test(models.Model):
user_name = models.CharField(max_length=500)
user_email = models.EmailField()
ip_address = models.IPAddressField()
created = models.DateTimeField(editable=False)
iso = models.ForeignKey(Iso)
architecture = models.ForeignKey(Architecture)
iso_type = models.ForeignKey(IsoType)
boot_type = models.ForeignKey(BootType)
hardware_type = models.ForeignKey(HardwareType)
install_type = models.ForeignKey(InstallType)
source = models.ForeignKey(Source)
clock_choice = models.ForeignKey(ClockChoice)
filesystem = models.ForeignKey(Filesystem)
modules = models.ManyToManyField(Module, null=True, blank=True)
rollback_filesystem = models.ForeignKey(Filesystem,
related_name="rollback_test_set", null=True, blank=True)
rollback_modules = models.ManyToManyField(Module,
related_name="rollback_test_set", null=True, blank=True)
bootloader = models.ForeignKey(Bootloader)
success = models.BooleanField()
comments = models.TextField(null=True, blank=True)
def set_created_field(sender, **kwargs):
# We use this same callback for both Isos and Tests
obj = kwargs['instance']
if not obj.created:
obj.created = datetime.utcnow()
from django.db.models.signals import pre_save
pre_save.connect(set_created_field, sender=Iso,
dispatch_uid="isotests.models")
pre_save.connect(set_created_field, sender=Test,
dispatch_uid="isotests.models")
# vim: set ts=4 sw=4 et:
|