From 9d4d515bfb4eaa151a44f898572284183f146f77 Mon Sep 17 00:00:00 2001 From: Gael Pasgrimaud Date: Mon, 19 Sep 2016 14:27:21 +0200 Subject: [PATCH] update post_save hook --- modoboa/admin/handlers.py | 10 ++++++++-- modoboa/admin/management/commands/subcommands/_mx.py | 7 +++++-- modoboa/admin/tests/test_mx.py | 2 ++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index cc0f679b1..cccff63e6 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -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) diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index a3b874d1d..483ca4c16 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -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)) diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 7b958aa71..73812a7a4 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -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):