# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-# -*- coding: utf-8 -*-
-
from copy import deepcopy
import ldap
else:
# django 1.0
table, column, type, x, y, values = item
+ equal_bits = [ "(%s=%s)" % (column, value) for value in values ]
+ if len(equal_bits) == 1:
+ clause = equal_bits[0]
+ else:
+ clause = '(|%s)' % ''.join(equal_bits)
if self.negated:
- bits.append('(!(%s=%s))' % (column,values[0]))
+ bits.append('(!%s)' % clause)
else:
- bits.append('(%s=%s)' % (column,values[0]))
+ bits.append(clause)
if len(bits) == 1:
return bits[0]
elif self.connector == AND:
class Query(BaseQuery):
def results_iter(self):
# FIXME: use all object classes
- filterstr = '(objectClass=%s)' % self.model._meta.object_classes[0]
+ filterstr = '(objectClass=%s)' % self.model.object_classes[0]
filterstr += self.where.as_sql()
filterstr = '(&%s)' % filterstr
attrlist = [ x.db_column for x in self.model._meta.local_fields if x.db_column ]
try:
vals = ldapdb.connection.search_s(
- self.model._meta.dn,
+ self.model.base_dn,
ldap.SCOPE_SUBTREE,
filterstr=filterstr,
attrlist=attrlist,
keys = []
for k in ordering:
attr = self.model._meta.get_field(k).db_column
- keys.append(x[1][attr])
+ keys.append(x[1].get(attr, '').lower())
return keys
vals = sorted(vals, key=lambda x: getkey(x))
# process results
for dn, attrs in vals:
- row = [dn]
+ row = []
for field in iter(self.model._meta.fields):
- row.append(attrs.get(field.db_column, None))
+ if field.attname == 'dn':
+ row.append(dn)
+ else:
+ row.append(attrs.get(field.db_column, None))
yield row
class QuerySet(BaseQuerySet):