support ordering
[matthijs/upstream/django-ldapdb.git] / ldapdb / models / query.py
index aa615c2e077f1b373912c6597dd6c5f14e75dc54..938abd5904aac6cf79230c134fd7b7f8d8958b04 100644 (file)
@@ -27,7 +27,8 @@ from django.db.models.query import QuerySet as BaseQuerySet
 from django.db.models.query_utils import Q
 from django.db.models.sql import BaseQuery
 from django.db.models.sql.where import WhereNode
-from granadilla.db import connection as ldap_connection
+
+import ldapdb
 
 def compile(q):
     filterstr = ""
@@ -51,7 +52,7 @@ class Query(BaseQuery):
         attrlist = [ x.db_column for x in self.model._meta.local_fields if x.db_column ]
 
         try:
-            vals = ldap_connection.search_s(
+            vals = ldapdb.connection.search_s(
                 self.model._meta.dn,
                 ldap.SCOPE_SUBTREE,
                 filterstr=filterstr,
@@ -60,6 +61,22 @@ class Query(BaseQuery):
         except:
             raise self.model.DoesNotExist
 
+        # perform sorting
+        if self.extra_order_by:
+            ordering = self.extra_order_by
+        elif not self.default_ordering:
+            ordering = self.order_by
+        else:
+            ordering = self.order_by or self.model._meta.ordering
+        def getkey(x):
+            keys = []
+            for k in ordering:
+                attr = self.model._meta.get_field(k).db_column
+                keys.append(x[1][attr])
+            return keys
+        vals = sorted(vals, key=lambda x: getkey(x))
+
+        # process results
         for dn, attrs in vals:
             row = [dn]
             for field in iter(self.model._meta.fields):