Added everything needed to get the spam score out of the database and be able to sort on it (or any other data presented to the user).

This commit is contained in:
Louis-Dominique Dubeau
2013-09-07 14:20:30 -04:00
parent 1a889761d2
commit 89da4b040d
+39 -38
View File
@@ -19,10 +19,14 @@ class Qtable(tables.Table):
type = tables.Column(
"type", align="center", width="30px",
)
rstatus = tables.ImgColumn("rstatus", width='25px')
from_ = tables.Column("from", label=ugettext_lazy("From"), limit=30)
subject = tables.Column("subject", label=ugettext_lazy("Subject"), limit=40)
time = tables.Column("date", label=ugettext_lazy("Date"))
score = tables.Column("score", label=ugettext_lazy("Score"), limit=6,
sort_order="score")
rstatus = tables.ImgColumn("rstatus", width='25px', sortable=False)
from_ = tables.Column("from", label=ugettext_lazy("From"), limit=30,
sortable=False)
subject = tables.Column("subject", label=ugettext_lazy("Subject"), limit=40,
sortable=False)
time = tables.Column("date", label=ugettext_lazy("Date"), sort_order="date")
to = tables.Column("to", label=ugettext_lazy("To"), sortable=False)
cols_order = []
@@ -32,14 +36,9 @@ class Qtable(tables.Table):
class SQLconnector(MBconnector):
orders = {
"from": "mail__from_addr",
"subject": "mail__subject",
"date": "mail__time_num"
}
def __init__(self, mail_ids=None, filter=None):
self.count = None
self.emails = None
self.mail_ids = mail_ids
self.filter = filter
@@ -50,36 +49,38 @@ class SQLconnector(MBconnector):
filter &= Q(mail__in=self.mail_ids)
if self.filter:
filter &= self.filter
self.messages = Quarantine.objects.filter(filter)
messages = Quarantine.objects.filter(filter)
self.emails = []
for qm in messages:
for rcpt in qm.mail.msgrcpt_set.all():
m = {"from": qm.mail.from_addr,
"to": rcpt.rid.email,
"subject": qm.mail.subject,
"mailid": qm.mail_id,
"date": qm.mail.time_num,
"type": rcpt.content,
"score": rcpt.bspam_level}
if rcpt.rs == '':
m["class"] = "unseen"
elif rcpt.rs == 'R':
m["img_rstatus"] = static_url("pics/release.png")
elif rcpt.rs == 'p':
m["class"] = "pending"
self.emails.append(m)
if "order" in kwargs:
totranslate = kwargs["order"][1:]
sign = kwargs["order"][:1]
if sign == " ":
sign = ""
order = sign + self.orders[totranslate]
self.messages = self.messages.order_by(order)
self.count = self.messages.count()
order = kwargs["order"]
reverse = False
if order[0] == "-":
reverse = True
order = order[1:]
self.emails.sort(None, lambda x:x[order], reverse)
self.count = len(self.emails)
return self.count
def fetch(self, start=None, stop=None, **kwargs):
messages = self.messages[start - 1:stop]
emails = []
for qm in messages:
for rcpt in qm.mail.msgrcpt_set.all():
m = {"from": qm.mail.from_addr,
"to": rcpt.rid.email,
"subject": qm.mail.subject,
"mailid": qm.mail_id,
"date": qm.mail.time_num,
"type": rcpt.content}
if rcpt.rs == '':
m["class"] = "unseen"
elif rcpt.rs == 'R':
m["img_rstatus"] = static_url("pics/release.png")
elif rcpt.rs == 'p':
m["class"] = "pending"
emails.append(m)
return emails
return self.emails[start - 1:stop]
class SQLWrapper(object):
@@ -228,9 +229,9 @@ class SQLlisting(EmailListing):
def __init__(self, user, msgs, filter, **kwargs):
if user.group == 'SimpleUsers':
Qtable.cols_order = ['type', 'rstatus', 'from_', 'subject', 'time']
Qtable.cols_order = ['type', 'score', 'rstatus', 'from_', 'subject', 'time']
else:
Qtable.cols_order = ['type', 'rstatus', 'to', 'from_', 'subject', 'time']
Qtable.cols_order = ['type', 'score', 'rstatus', 'to', 'from_', 'subject', 'time']
self.mbc = SQLconnector(msgs, filter)
super(SQLlisting, self).__init__(**kwargs)
self.show_listing_headers = True