summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2017-03-10 20:14:39 +0000
committerMagnus Hagander2017-03-10 20:14:39 +0000
commitcd8ffcf0677b8dc8437f6a0b930b299462f28d7d (patch)
tree287dbd13e0ce6e6590e42acae7bf71de5240ac96
parent080f6bfb66d3690e630510c77a80cbb0071d0bfa (diff)
Drop a trigger file in /tmp/ whenever anything is changed
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.
-rw-r--r--pgmailmgr/mailmgr/models.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/pgmailmgr/mailmgr/models.py b/pgmailmgr/mailmgr/models.py
index f195487..3f2cb07 100644
--- a/pgmailmgr/mailmgr/models.py
+++ b/pgmailmgr/mailmgr/models.py
@@ -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)