18 """cubicweb ldap feed source""" |
18 """cubicweb ldap feed source""" |
19 |
19 |
20 from __future__ import division # XXX why? |
20 from __future__ import division # XXX why? |
21 |
21 |
22 from datetime import datetime |
22 from datetime import datetime |
23 |
|
24 from six import PY2, string_types |
|
25 |
23 |
26 import ldap3 |
24 import ldap3 |
27 |
25 |
28 from logilab.common.configuration import merge_options |
26 from logilab.common.configuration import merge_options |
29 |
27 |
339 value = utils.crypt_password(value) |
337 value = utils.crypt_password(value) |
340 itemdict[key] = Binary(value) |
338 itemdict[key] = Binary(value) |
341 elif self.user_attrs.get(key) == 'modification_date': |
339 elif self.user_attrs.get(key) == 'modification_date': |
342 itemdict[key] = datetime.strptime(value[0], '%Y%m%d%H%M%SZ') |
340 itemdict[key] = datetime.strptime(value[0], '%Y%m%d%H%M%SZ') |
343 else: |
341 else: |
344 if PY2 and value and isinstance(value[0], str): |
|
345 value = [unicode(val, 'utf-8', 'replace') for val in value] |
|
346 if len(value) == 1: |
342 if len(value) == 1: |
347 itemdict[key] = value = value[0] |
343 itemdict[key] = value = value[0] |
348 else: |
344 else: |
349 itemdict[key] = value |
345 itemdict[key] = value |
350 # we expect memberUid to be a list of user ids, make sure of it |
346 # we expect memberUid to be a list of user ids, make sure of it |
351 member = self.group_rev_attrs['member'] |
347 member = self.group_rev_attrs['member'] |
352 if isinstance(itemdict.get(member), string_types): |
348 if isinstance(itemdict.get(member), str): |
353 itemdict[member] = [itemdict[member]] |
349 itemdict[member] = [itemdict[member]] |
354 return itemdict |
350 return itemdict |
355 |
351 |
356 def _process_no_such_object(self, cnx, dn): |
352 def _process_no_such_object(self, cnx, dn): |
357 """Some search return NO_SUCH_OBJECT error, handle this (usually because |
353 """Some search return NO_SUCH_OBJECT error, handle this (usually because |