Drop a trigger file in /tmp/ whenever anything is changed
authorMagnus Hagander <[email protected]>
Fri, 10 Mar 2017 20:14:39 +0000 (15:14 -0500)
committerMagnus Hagander <[email protected]>
Fri, 10 Mar 2017 20:14:39 +0000 (15:14 -0500)
This can be picked up by a cronjob for frequent posting of the
data to central routing servers. This way we don't have to poll
everything very frequently.

pgmailmgr/mailmgr/models.py

index f19548767b628836d768ae234c73dd888a7f8749..3f2cb07212a852826f57f25b9937cc5b96fc2f3b 100644 (file)
@@ -1,5 +1,6 @@
 from django.db import models
 from django.contrib.auth.models import User
+from django.db.models import signals
 
 class LocalDomain(models.Model):
        local_domain_id = models.AutoField(null=False, primary_key=True)
@@ -11,6 +12,7 @@ class LocalDomain(models.Model):
        def __unicode__(self):
                return self.domain_name
 
+       trigger_update = True
        class Meta:
                ordering=('domain_name',)
                db_table='mail"."local_domains'
@@ -25,6 +27,7 @@ class Forwarder(models.Model):
        def __unicode__(self):
                return "%s@%s -> %s" % (self.local_part, self.local_domain.domain_name, self.remote_name)
 
+       trigger_update = True
        class Meta:
                ordering=('local_part',)
                db_table='mail"."forwarder'
@@ -41,12 +44,14 @@ class VirtualUser(models.Model):
        def __unicode__(self):
                return "%s@%s (%s)" % (self.local_part, self.local_domain.domain_name, self.full_name or '')
 
+       trigger_update = True
        class Meta:
                ordering=('local_part',)
                db_table='mail"."virtual_user'
                managed=False
                unique_together=('local_domain', 'local_part', )
-               
+
+
 class UserPermissions(models.Model):
        user = models.ForeignKey(User, null=False)
        domain = models.ForeignKey(LocalDomain, null=False)
@@ -65,3 +70,12 @@ class Log(models.Model):
 
        class Meta:
                ordering=('-when',)
+
+def pgmail_save_handler(sender, **kwargs):
+    if hasattr(sender, 'trigger_update') and sender.trigger_update:
+        # Touch a temp file in /tmp/ to inform cronjobs we have
+        # changed something.
+        with open('/tmp/.mailmgr_update', 'w') as f:
+            pass
+
+signals.post_save.connect(pgmail_save_handler)