From: jlaine Date: Fri, 14 Aug 2009 16:45:03 +0000 (+0000) Subject: emit signals on save / delete X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=8cb1fdd93c7a4ffce12fc9b29397499046c56ab6;p=matthijs%2Fupstream%2Fdjango-ldapdb.git emit signals on save / delete git-svn-id: https://svn.bolloretelecom.eu/opensource/django-ldapdb/trunk@475 e071eeec-0327-468d-9b6a-08194a12b294 --- diff --git a/ldapdb/models/base.py b/ldapdb/models/base.py index 1e47a53..3c15151 100644 --- a/ldapdb/models/base.py +++ b/ldapdb/models/base.py @@ -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))