mark base model as abstract
[matthijs/upstream/django-ldapdb.git] / ldapdb / models / base.py
index d09a5e0befbb9decbcfaf32ca62afa807cda66c1..ddf21a2aebff8e66230db55ec8d08ccaa0f6b679 100644 (file)
@@ -36,34 +36,15 @@ import ldap
 import logging
 
 import django.db.models
 import logging
 
 import django.db.models
+from django.db import connections, router
 from django.db.models import signals
 
 import ldapdb
 from django.db.models import signals
 
 import ldapdb
-from ldapdb.models.query import QuerySet
-
-class ModelBase(django.db.models.base.ModelBase):
-    """
-    Metaclass for all LDAP models.
-    """
-    def __new__(cls, name, bases, attrs):
-        super_new = super(ModelBase, cls).__new__
-        new_class = super_new(cls, name, bases, attrs)
-
-        # patch manager to use our own QuerySet class
-        if not new_class._meta.abstract:
-            def get_query_set():
-                return QuerySet(new_class)
-            new_class.objects.get_query_set = get_query_set
-            new_class._default_manager.get_query_set = get_query_set
-
-        return new_class
 
 class Model(django.db.models.base.Model):
     """
     Base class for all LDAP models.
     """
 
 class Model(django.db.models.base.Model):
     """
     Base class for all LDAP models.
     """
-    __metaclass__ = ModelBase
-
     dn = django.db.models.fields.CharField(max_length=200)
 
     # meta-data
     dn = django.db.models.fields.CharField(max_length=200)
 
     # meta-data
@@ -75,11 +56,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):
         """
@@ -100,15 +83,22 @@ class Model(django.db.models.base.Model):
         return "%s,%s" % (self.build_rdn(), self.base_dn)
         raise Exception("Could not build Distinguished Name")
 
         return "%s,%s" % (self.build_rdn(), self.base_dn)
         raise Exception("Could not build Distinguished Name")
 
-    def delete(self):
+    def delete(self, using=None):
         """
         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 +110,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 +130,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 +139,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)
 
@@ -173,3 +163,5 @@ class Model(django.db.models.base.Model):
         new_class = new.classobj(name, (base_class,), {'base_dn': base_dn, '__module__': base_class.__module__})
         return new_class
 
         new_class = new.classobj(name, (base_class,), {'base_dn': base_dn, '__module__': base_class.__module__})
         return new_class
 
+    class Meta:
+        abstract = True