use django's database router instead of hard-coding ldapdb.connection
[matthijs/upstream/django-ldapdb.git] / ldapdb / models / base.py
index bc6ca92e8c34e1a57a0ae046e3183669927d7ca9..cd407a271192788178750a0dfad1542db00e3819 100644 (file)
@@ -75,11 +75,13 @@ class Model(django.db.models.base.Model):
         super(Model, self).__init__(*args, **kwargs)
         self.saved_pk = self.pk
 
         super(Model, self).__init__(*args, **kwargs)
         self.saved_pk = self.pk
 
-    def _collect_sub_objects(self, collector):
+    def _collect_sub_objects(self, seen_objs, parent=None, nullable=False):
         """
         This private API seems to be called by the admin interface in django 1.2
         """
         """
         This private API seems to be called by the admin interface in django 1.2
         """
-        pass
+        pk_val = self._get_pk_val()
+        seen_objs.add(self.__class__, pk_val, self,
+                      type(parent), parent, nullable)
 
     def build_rdn(self):
         """
 
     def build_rdn(self):
         """
@@ -104,11 +106,18 @@ class Model(django.db.models.base.Model):
         """
         Delete this entry.
         """
         """
         Delete this entry.
         """
+        using = using or router.db_for_write(self.__class__, instance=self)
+        connection = connections[using]
         logging.debug("Deleting LDAP entry %s" % self.dn)
         logging.debug("Deleting LDAP entry %s" % self.dn)
-        ldapdb.connection.delete_s(self.dn)
+        connection.delete_s(self.dn)
         signals.post_delete.send(sender=self.__class__, instance=self)
         signals.post_delete.send(sender=self.__class__, instance=self)
-        
-    def save(self):
+
+    def save(self, using=None):
+        """
+        Saves the current instance.
+        """
+        using = using or router.db_for_write(self.__class__, instance=self)
+        connection = connections[using]
         if not self.dn:
             # create a new entry
             record_exists = False 
         if not self.dn:
             # create a new entry
             record_exists = False 
@@ -120,10 +129,10 @@ class Model(django.db.models.base.Model):
                     continue
                 value = getattr(self, field.name)
                 if value:
                     continue
                 value = getattr(self, field.name)
                 if value:
-                    entry.append((field.db_column, field.get_db_prep_save(value, connection=ldapdb.connection)))
+                    entry.append((field.db_column, field.get_db_prep_save(value, connection=connection)))
 
             logging.debug("Creating new LDAP entry %s" % new_dn)
 
             logging.debug("Creating new LDAP entry %s" % new_dn)
-            ldapdb.connection.add_s(new_dn, entry)
+            connection.add_s(new_dn, entry)
 
             # update object
             self.dn = new_dn
 
             # update object
             self.dn = new_dn
@@ -140,7 +149,7 @@ class Model(django.db.models.base.Model):
                 new_value = getattr(self, field.name, None)
                 if old_value != new_value:
                     if new_value:
                 new_value = getattr(self, field.name, None)
                 if old_value != new_value:
                     if new_value:
-                        modlist.append((ldap.MOD_REPLACE, field.db_column, field.get_db_prep_save(new_value, connection=ldapdb.connection)))
+                        modlist.append((ldap.MOD_REPLACE, field.db_column, field.get_db_prep_save(new_value, connection=connection)))
                     elif old_value:
                         modlist.append((ldap.MOD_DELETE, field.db_column, None))
 
                     elif old_value:
                         modlist.append((ldap.MOD_DELETE, field.db_column, None))
 
@@ -149,11 +158,11 @@ class Model(django.db.models.base.Model):
                 new_dn = self.build_dn()
                 if new_dn != self.dn:
                     logging.debug("Renaming LDAP entry %s to %s" % (self.dn, new_dn))
                 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())
+                    connection.rename_s(self.dn, self.build_rdn())
                     self.dn = new_dn
             
                 logging.debug("Modifying existing LDAP entry %s" % self.dn)
                     self.dn = new_dn
             
                 logging.debug("Modifying existing LDAP entry %s" % self.dn)
-                ldapdb.connection.modify_s(self.dn, modlist)
+                connection.modify_s(self.dn, modlist)
             else:
                 logging.debug("No changes to be saved to LDAP entry %s" % self.dn)
 
             else:
                 logging.debug("No changes to be saved to LDAP entry %s" % self.dn)
 
@@ -161,11 +170,6 @@ class Model(django.db.models.base.Model):
         self.saved_pk = self.pk
         signals.post_save.send(sender=self.__class__, instance=self, created=(not record_exists))
 
         self.saved_pk = self.pk
         signals.post_save.send(sender=self.__class__, instance=self, created=(not record_exists))
 
-    def validate_unique(self, exclude=None):
-        # FIXME: we are bypassing the unicity checks, as they break
-        # the admin interface
-        pass
-
     @classmethod
     def scoped(base_class, base_dn):
         """
     @classmethod
     def scoped(base_class, base_dn):
         """