Do not create tables for LDAP models (thanks Gervase)
[matthijs/upstream/django-ldapdb.git] / ldapdb / router.py
index 38dfdb06b64ab16143da31189665a2bebcde47d8..ba00631cb8b77af21cbc9c9fd61b556b008f4238 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 # 
 # django-ldapdb
 # -*- coding: utf-8 -*-
 # 
 # django-ldapdb
-# Copyright (c) 2009-2010, BollorĂ© telecom
+# Copyright (c) 2009-2011, BollorĂ© telecom
 # All rights reserved.
 # 
 # See AUTHORS file for a full list of contributors.
 # All rights reserved.
 # 
 # See AUTHORS file for a full list of contributors.
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
+def is_ldap_model(model):
+    # FIXME: there is probably a better check than testing 'base_dn'
+    return hasattr(model, 'base_dn')
+
 class Router(object):
 class Router(object):
-    """A router to control all database operations on models in
-    the myapp application"""
+    """
+    A router to point database operations on LDAP models to the LDAP
+    database.
+
+    NOTE: if you have more than one LDAP database, you will need to
+    write your own router.
+    """
+
+    def __init__(self):
+        "Find the name of the LDAP database"
+        from django.conf import settings
+        self.ldap_alias = None
+        for alias, settings_dict in settings.DATABASES.items():
+            if settings_dict['ENGINE'] == 'ldapdb.backends.ldap':
+                self.ldap_alias = alias
+                break
+
+    def allow_syncdb(self, db, model):
+        "Do not create tables for LDAP models"
+        if is_ldap_model(model):
+            return db == self.ldap_alias
+        return None
 
     def db_for_read(self, model, **hints):
 
     def db_for_read(self, model, **hints):
-        "Point all operations on LDAP models to 'ldap'"
-        from ldapdb.models import Model
-        if Model in model.__bases__:
-            return 'ldap'
+        "Point all operations on LDAP models to the LDAP database"
+        if is_ldap_model(model):
+            return self.ldap_alias
         return None
 
     def db_for_write(self, model, **hints):
         return None
 
     def db_for_write(self, model, **hints):
-        "Point all operations on LDAP models to 'ldap'"
-        from ldapdb.models import Model
-        if Model in model.__bases__:
-            return 'ldap'
+        "Point all operations on LDAP models to the LDAP database"
+        if is_ldap_model(model):
+            return self.ldap_alias
         return None
 
         return None