This repository has been archived by the owner on Mar 15, 2018. It is now read-only.
/
models.py
142 lines (106 loc) · 5.08 KB
/
models.py
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
138
139
140
141
142
from django.db import models
import amo.models
from amo.urlresolvers import reverse
class BlocklistApp(amo.models.ModelBase):
blitem = models.ForeignKey('BlocklistItem', related_name='app')
guid = models.CharField(max_length=255, blank=True, db_index=True,
null=True)
min = models.CharField(max_length=255, blank=True, null=True)
max = models.CharField(max_length=255, blank=True, null=True)
class Meta(amo.models.ModelBase.Meta):
db_table = 'blapps'
def __unicode__(self):
return '%s: %s - %s' % (self.guid, self.min, self.max)
def flush_urls(self):
return ['/blocklist*'] # no lang/app
class BlocklistCA(amo.models.ModelBase):
data = models.TextField()
class Meta(amo.models.ModelBase.Meta):
db_table = 'blca'
def flush_urls(self):
return ['/blocklist*'] # no lang/app
class BlocklistDetail(amo.models.ModelBase):
name = models.CharField(max_length=255)
why = models.TextField()
who = models.TextField()
bug = models.URLField(verify_exists=False)
class Meta(amo.models.ModelBase.Meta):
db_table = 'bldetails'
def __unicode__(self):
return self.name
class BlocklistBase(object):
@property
def block_id(self):
return '%s%s' % (self._type, self.details_id)
def get_url_path(self):
return reverse('blocked.detail', args=[self.block_id])
def save(self, *args, **kw):
for field in self._meta.fields:
if isinstance(field, models.fields.CharField) and field.null:
if getattr(self, field.attname, None) == '':
setattr(self, field.attname, None)
return super(BlocklistBase, self).save(*args, **kw)
class BlocklistItem(BlocklistBase, amo.models.ModelBase):
_type = 'i'
guid = models.CharField(max_length=255, blank=True, null=True)
min = models.CharField(max_length=255, blank=True, null=True)
max = models.CharField(max_length=255, blank=True, null=True)
os = models.CharField(max_length=255, blank=True, null=True)
severity = models.SmallIntegerField(blank=True, null=True)
details = models.OneToOneField(BlocklistDetail, null=True)
class Meta(amo.models.ModelBase.Meta):
db_table = 'blitems'
def __unicode__(self):
return '%s: %s - %s' % (self.guid, self.min, self.max)
def flush_urls(self):
return ['/blocklist*'] # no lang/app
class BlocklistPlugin(BlocklistBase, amo.models.ModelBase):
_type = 'p'
name = models.CharField(max_length=255, blank=True, null=True)
guid = models.CharField(max_length=255, blank=True, null=True)
min = models.CharField(max_length=255, blank=True, null=True)
max = models.CharField(max_length=255, blank=True, null=True)
os = models.CharField(max_length=255, blank=True, null=True)
xpcomabi = models.CharField(max_length=255, blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
filename = models.CharField(max_length=255, blank=True, null=True)
severity = models.SmallIntegerField(blank=True, null=True)
vulnerability_status = models.SmallIntegerField(blank=True, null=True,
choices=
((1, 'update available'),
(2, 'update unavailable')))
details = models.OneToOneField(BlocklistDetail, null=True)
class Meta(amo.models.ModelBase.Meta):
db_table = 'blplugins'
def __unicode__(self):
return '%s: %s - %s' % (self.name or self.guid or self.filename,
self.min, self.max)
@property
def get_vulnerability_status(self):
"""Returns vulnerability status per bug 778365
Returns None when criteria aren't met so jinja2 excludes it from when
using the attrs filter.
"""
if self.severity == 0 and self.vulnerability_status in (1,2):
return self.vulnerability_status
def flush_urls(self):
return ['/blocklist*'] # no lang/app
class BlocklistGfx(BlocklistBase, amo.models.ModelBase):
_type = 'g'
guid = models.CharField(max_length=255, blank=True, null=True)
os = models.CharField(max_length=255, blank=True, null=True)
vendor = models.CharField(max_length=255, blank=True, null=True)
devices = models.CharField(max_length=255, blank=True, null=True)
feature = models.CharField(max_length=255, blank=True, null=True)
feature_status = models.CharField(max_length=255, blank=True, null=True)
driver_version = models.CharField(max_length=255, blank=True, null=True)
driver_version_comparator = models.CharField(max_length=255, blank=True,
null=True)
details = models.OneToOneField(BlocklistDetail, null=True)
class Meta:
db_table = 'blgfxdrivers'
def __unicode__(self):
return '%s: %s : %s : %s' % (self.guid, self.os, self.vendor,
self.devices)
def flush_urls(self):
return ['/blocklist*'] # no lang/app