Merge branch 'master' into refactor_extensions

This commit is contained in:
Antoine Nguyen
2015-02-03 08:54:31 +01:00
7 changed files with 36 additions and 41 deletions
+7 -1
View File
@@ -91,8 +91,14 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
if cleaned_data[k] == "":
del cleaned_data[k]
continue
if cleaned_data[k] == name:
self._errors[k] = self.error_class(
[_("A %s with this name already exists") % _("domain")]
)
del cleaned_data[k]
continue
label = check_if_domain_exists(
cleaned_data[k], [(Domain, _('domain'))])
cleaned_data[k], [(Domain, _("domain"))])
if label is not None:
self.add_error(
k, _("A %s with this name already exists") % unicode(label))
+1 -5
View File
@@ -109,10 +109,6 @@ def check_if_domain_exists(name, extra_checks=None):
if extra_checks is not None:
dtypes = extra_checks + dtypes
for dtype, label in dtypes:
try:
dtype.objects.get(name=name)
except dtype.DoesNotExist:
pass
else:
if dtype.objects.filter(name=name).exists():
return label
return None
+9 -1
View File
@@ -73,8 +73,16 @@ def list_quotas(request):
request.user, request.GET.get("searchquery", None)
)
mboxes = mboxes.exclude(quota=0)
if sort_order in ["address", "quota", "quota_value__bytes"]:
if sort_order in ["address", "quota"]:
mboxes = mboxes.order_by("%s%s" % (sort_dir, sort_order))
elif sort_order == "quota_value__bytes":
where = "admin_mailbox.address||'@'||admin_domain.name"
mboxes = mboxes.extra(
select={"quota_value__bytes": "admin_quota.bytes"},
where=["admin_quota.username=%s" % where],
tables=["admin_quota", "admin_domain"],
order_by=["%s%s" % (sort_dir, sort_order)]
)
elif sort_order == "quota_usage":
where = "admin_mailbox.address||'@'||admin_domain.name"
db_type = db_type()
+1 -1
View File
@@ -205,7 +205,7 @@ class Quarantine(models.Model):
partition_tag = models.IntegerField(null=True, blank=True)
mail = models.ForeignKey(Msgs, primary_key=True)
chunk_ind = models.IntegerField()
mail_text = models.TextField()
mail_text = models.BinaryField()
class Meta:
db_table = u'quarantine'
+11 -16
View File
@@ -1,6 +1,7 @@
"""
SQL connector module.
"""
import datetime
from django.db.models import Q
@@ -209,9 +210,14 @@ class SQLconnector(object):
return Msgrcpt.objects.filter(rq).count()
def get_mail_content(self, mailid):
"""Retrieve the content of a message.
"""
return Quarantine.objects.filter(mail=mailid)
"""Retrieve the content of a message."""
content = "".join([
str(qmail.mail_text)
for qmail in Quarantine.objects.filter(mail=mailid)
])
if isinstance(content, unicode):
content = content.encode("utf-8")
return content
class PgSQLconnector(SQLconnector):
@@ -229,9 +235,7 @@ class PgSQLconnector(SQLconnector):
"""
def _apply_msgrcpt_filters(self, flt):
"""Return filters based on user's role.
"""
"""Return filters based on user's role. """
self._where = []
if self.user.group == 'SimpleUsers':
rcpts = [self.user.email]
@@ -248,10 +252,7 @@ class PgSQLconnector(SQLconnector):
return flt
def _apply_extra_search_filter(self, crit, pattern):
"""Apply search filters using additional criterias.
"""
"""Apply search filters using additional criterias."""
if crit == "to":
self._where.append(
"convert_from(maddr.email, 'UTF8') LIKE '%%{0}%%'".format(
@@ -300,12 +301,6 @@ class PgSQLconnector(SQLconnector):
).count()
return Msgrcpt.objects.filter(rq).count()
def get_mail_content(self, mailid):
"""Retrieve the content of a message."""
return Quarantine.objects.filter(mail=mailid).extra(
select={'mail_text': "convert_from(mail_text, 'UTF8')"}
)
def get_connector(**kwargs):
"""Return the appropriate *connector* class.
+1 -4
View File
@@ -40,10 +40,7 @@ class SQLemail(Email):
import email
if self._msg is None:
qmails = get_connector().get_mail_content(self.mailid)
mail_text = "".join([qm.mail_text for qm in qmails])
if type(mail_text) is unicode:
mail_text = mail_text.encode("utf-8")
mail_text = get_connector().get_mail_content(self.mailid)
self._msg = email.message_from_string(mail_text)
self._parse(self._msg)
return self._msg
+6 -13
View File
@@ -176,11 +176,7 @@ def viewmail(request, mail_id):
@login_required
def viewheaders(request, mail_id):
"""Display message headers."""
content = ""
for qm in get_connector().get_mail_content(mail_id):
content += qm.mail_text
if isinstance(content, unicode):
content = content.encode("utf-8")
content = get_connector().get_mail_content(mail_id)
msg = email.message_from_string(content)
headers = []
for name, value in msg.items():
@@ -205,16 +201,15 @@ def check_mail_id(request, mail_id):
def get_user_valid_addresses(user):
"""Retrieve all valid addresses of a user."""
valid_addresses = []
if user.group == 'SimpleUsers':
valid_addresses = user.email
valid_addresses.append(user.email)
try:
mb = Mailbox.objects.get(user=user)
except Mailbox.DoesNotExist:
pass
else:
valid_addresses += mb.alias_addresses
else:
valid_addresses = None
return valid_addresses
@@ -240,7 +235,7 @@ def delete(request, mail_id):
valid_addresses = get_user_valid_addresses(request.user)
for mid in mail_id:
r, i = mid.split()
if valid_addresses is not None and r not in valid_addresses:
if valid_addresses and r not in valid_addresses:
continue
connector.set_msgrcpt_status(r, i, 'D')
message = ungettext("%(count)d message deleted successfully",
@@ -290,7 +285,7 @@ def release(request, mail_id):
valid_addresses = get_user_valid_addresses(request.user)
for mid in mail_id:
r, i = mid.split()
if valid_addresses is not None and r not in valid_addresses:
if valid_addresses and r not in valid_addresses:
continue
msgrcpts += [connector.get_recipient_message(r, i)]
if request.user.group == "SimpleUsers" and \
@@ -349,9 +344,7 @@ def mark_messages(request, selection, mtype, recipient_db=None):
saclient = SpamassassinClient(request.user, recipient_db)
for item in selection:
rcpt, mail_id = item.split()
content = "".join(
[msg.mail_text for msg in connector.get_mail_content(mail_id)]
)
content = connector.get_mail_content(mail_id)
result = saclient.learn_spam(rcpt, content) if mtype == "spam" \
else saclient.learn_ham(rcpt, content)
if not result: