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
|
from django.db import models
choices_map = {
0: {'str': 'No', 'class': 'no', 'bgcolor': '#ffdddd'},
1: {'str': 'Yes', 'class': 'yes', 'bgcolor': '#ddffdd'},
2: {'str': 'Obsolete', 'class': 'obs', 'bgcolor': '#ddddff'},
3: {'str': '?', 'class': 'unk', 'bgcolor': '#ffffaa'},
}
choices = [(k, v['str']) for k, v in list(choices_map.items())]
class FeatureGroup(models.Model):
groupname = models.CharField(max_length=100, null=False, blank=False)
groupsort = models.IntegerField(null=False, blank=False)
purge_urls = ('/about/featurematrix/', )
def __str__(self):
return self.groupname
@property
def columns(self):
# Return a list of all the columns for the matrix
return [b for a, b in versions]
class Feature(models.Model):
group = models.ForeignKey(FeatureGroup, null=False, blank=False, on_delete=models.CASCADE)
featurename = models.CharField(max_length=100, null=False, blank=False)
featuredescription = models.TextField(null=False, blank=True, help_text="""Supports Markdown. A single, plain URL will link directly to that URL.""")
# WARNING! All fields that start with "v" will be considered versions!
v74 = models.IntegerField(verbose_name="7.4", null=False, blank=False, default=0, choices=choices)
v74.visible_default = False
v80 = models.IntegerField(verbose_name="8.0", null=False, blank=False, default=0, choices=choices)
v80.visible_default = False
v81 = models.IntegerField(verbose_name="8.1", null=False, blank=False, default=0, choices=choices)
v82 = models.IntegerField(verbose_name="8.2", null=False, blank=False, default=0, choices=choices)
v83 = models.IntegerField(verbose_name="8.3", null=False, blank=False, default=0, choices=choices)
v84 = models.IntegerField(verbose_name="8.4", null=False, blank=False, default=0, choices=choices)
v90 = models.IntegerField(verbose_name="9.0", null=False, blank=False, default=0, choices=choices)
v91 = models.IntegerField(verbose_name="9.1", null=False, blank=False, default=0, choices=choices)
v92 = models.IntegerField(verbose_name="9.2", null=False, blank=False, default=0, choices=choices)
v93 = models.IntegerField(verbose_name="9.3", null=False, blank=False, default=0, choices=choices)
v94 = models.IntegerField(verbose_name="9.4", null=False, blank=False, default=0, choices=choices)
v95 = models.IntegerField(verbose_name="9.5", null=False, blank=False, default=0, choices=choices)
v96 = models.IntegerField(verbose_name="9.6", null=False, blank=False, default=0, choices=choices)
v10 = models.IntegerField(verbose_name="10", null=False, blank=False, default=0, choices=choices)
v11 = models.IntegerField(verbose_name="11", null=False, blank=False, default=0, choices=choices)
v12 = models.IntegerField(verbose_name="12", null=False, blank=False, default=0, choices=choices)
v13 = models.IntegerField(verbose_name="13", null=False, blank=False, default=0, choices=choices)
v14 = models.IntegerField(verbose_name="14", null=False, blank=False, default=0, choices=choices)
v15 = models.IntegerField(verbose_name="15", null=False, blank=False, default=0, choices=choices)
v16 = models.IntegerField(verbose_name="16", null=False, blank=False, default=0, choices=choices)
v17 = models.IntegerField(verbose_name="17", null=False, blank=False, default=0, choices=choices)
purge_urls = ('/about/featurematrix/.*', )
def __str__(self):
# To make it look good in the admin interface, just don't render it
return ''
def columns(self):
# Get a list of column based on all versions that are visible_default
return [choices_map[getattr(self, a)] for a, b in versions]
def featuredescription_is_url(self):
"""
Returns true if the entirety of the feautre description is a URL, or
at least gives off the appearance that it is.
"""
return self.featuredescription.startswith('https://') or self.featuredescription.startswith('http://')
@property
def featurelink(self):
if self.featuredescription_is_url():
return self.featuredescription
else:
return 'detail/%s/' % self.id
versions = [(f.name, f.verbose_name) for f in Feature()._meta.fields if f.name.startswith('v') and getattr(f, 'visible_default', True)]
versions = sorted(versions, key=lambda f: -float(f[1]))
|