update post_save hook

This commit is contained in:
Gael Pasgrimaud
2016-09-19 14:27:21 +02:00
parent c44800a045
commit 9d4d515bfb
3 changed files with 15 additions and 4 deletions
+8 -2
View File
@@ -1,5 +1,6 @@
"""Django signal handlers for admin."""
from django.core import management
from django.db.models import signals
from django.dispatch import receiver
@@ -7,9 +8,14 @@ from . import models
@receiver(signals.post_save, sender=models.Domain)
def update_domain_mailboxes(sender, instance, **kwargs):
"""Update associated mailboxes."""
def update_domain_mxs_and_mailboxes(sender, instance, **kwargs):
"""Update associated MXs and mailboxes."""
if kwargs.get("created"):
management.call_command(
'modo', 'check_mx',
domain=[instance],
skip_admin_emails=True,
)
return
instance.mailbox_set.filter(use_domain_quota=True).update(
quota=instance.quota)
@@ -83,7 +83,8 @@ class CheckMXRecords(BaseCommand):
models.MXRecord.objects.filter(domain=domain).delete()
try:
answers = dns.resolver.query(domain.name, "MX")
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN,
dns.resolver.NoNameservers):
raise StopIteration()
delta = timedelta(seconds=ttl)
@@ -243,7 +244,9 @@ class CheckMXRecords(BaseCommand):
if options['domain']:
domains = []
for domain in options['domain']:
if domain.isdigit():
if isinstance(domain, models.Domain):
domains.append(domain)
elif domain.isdigit():
domains.append(models.Domain.objects.get(domain))
else:
domains.append(models.Domain.objects.filter(name=domain))
+2
View File
@@ -21,6 +21,7 @@ class MXTestCase(ModoTestCase):
cls.domain = factories.DomainFactory(name="modoboa.org")
factories.DomainFactory(name="pouet.com") # should not exist
parameters.save_admin('VALID_MXS', '127.0.0.1', app='admin')
models.MXRecord.objects.all().delete()
def test_management_command(self):
"""Check that command works fine."""
@@ -53,6 +54,7 @@ class DNSBLTestCase(ModoTestCase):
super(DNSBLTestCase, cls).setUpTestData()
cls.domain = factories.DomainFactory(name="modoboa.org")
factories.DomainFactory(name="pouet.com") # should not exist
models.DNSBLResult.objects.all().delete()
@override_settings(DNSBL_PROVIDERS=["zen.spamhaus.org"])
def test_management_command(self):