emit signals on save / delete
authorjlaine <jlaine@e071eeec-0327-468d-9b6a-08194a12b294>
Fri, 14 Aug 2009 16:45:03 +0000 (16:45 +0000)
committerjlaine <jlaine@e071eeec-0327-468d-9b6a-08194a12b294>
Fri, 14 Aug 2009 16:45:03 +0000 (16:45 +0000)
git-svn-id: https://svn.bolloretelecom.eu/opensource/django-ldapdb/trunk@475 e071eeec-0327-468d-9b6a-08194a12b294

ldapdb/models/base.py

index 1e47a53298da5e9036b95a4fb1e2a0f564231d22..3c15151ba53fe154234e535b52a3ff594e142982 100644 (file)
@@ -24,6 +24,7 @@ import ldap
 import logging
 
 import django.db.models
+from django.db.models import signals
 
 import ldapdb
 from ldapdb.models.query import QuerySet
@@ -87,10 +88,12 @@ class Model(django.db.models.base.Model):
         """
         logging.debug("Deleting LDAP entry %s" % self.dn)
         ldapdb.connection.delete_s(self.dn)
+        signals.post_delete.send(sender=self.__class__, instance=self)
         
     def save(self):
-        # create a new entry
         if not self.dn:
+            # create a new entry
+            record_exists = False 
             entry = [('objectClass', self._meta.object_classes)]
             new_dn = self.build_dn()
 
@@ -103,38 +106,40 @@ class Model(django.db.models.base.Model):
 
             logging.debug("Creating new LDAP entry %s" % new_dn)
             ldapdb.connection.add_s(new_dn, entry)
-            
+
             # update object
             self.dn = new_dn
-            self.saved_pk = self.pk
-            return
 
-        # update an existing entry
-        modlist = []
-        orig = self.__class__.objects.get(pk=self.saved_pk)
-        for field in self._meta.local_fields:
-            if not field.db_column:
-                continue
-            old_value = getattr(orig, field.name, None)
-            new_value = getattr(self, field.name, None)
-            if old_value != new_value:
-                if new_value:
-                    modlist.append((ldap.MOD_REPLACE, field.db_column, new_value))
-                elif old_value:
-                    modlist.append((ldap.MOD_DELETE, field.db_column, None))
-
-        if not len(modlist):
-            logging.debug("No changes to be saved to LDAP entry %s" % self.dn)
-            return
-
-        # handle renaming
-        new_dn = self.build_dn()
-        if new_dn != self.dn:
-            logging.debug("Renaming LDAP entry %s to %s" % (self.dn, new_dn))
-            ldapdb.connection.rename_s(self.dn, self.build_rdn())
-            self.dn = new_dn
-    
-        logging.debug("Modifying existing LDAP entry %s" % self.dn)
-        ldapdb.connection.modify_s(self.dn, modlist)
+        else:
+            # update an existing entry
+            record_exists = True
+            modlist = []
+            orig = self.__class__.objects.get(pk=self.saved_pk)
+            for field in self._meta.local_fields:
+                if not field.db_column:
+                    continue
+                old_value = getattr(orig, field.name, None)
+                new_value = getattr(self, field.name, None)
+                if old_value != new_value:
+                    if new_value:
+                        modlist.append((ldap.MOD_REPLACE, field.db_column, new_value))
+                    elif old_value:
+                        modlist.append((ldap.MOD_DELETE, field.db_column, None))
+
+            if len(modlist):
+                # handle renaming
+                new_dn = self.build_dn()
+                if new_dn != self.dn:
+                    logging.debug("Renaming LDAP entry %s to %s" % (self.dn, new_dn))
+                    ldapdb.connection.rename_s(self.dn, self.build_rdn())
+                    self.dn = new_dn
+            
+                logging.debug("Modifying existing LDAP entry %s" % self.dn)
+                ldapdb.connection.modify_s(self.dn, modlist)
+            else:
+                logging.debug("No changes to be saved to LDAP entry %s" % self.dn)
+
+        # done
         self.saved_pk = self.pk
+        signals.post_save.send(sender=self.__class__, instance=self, created=(not record_exists))