cubicweb/server/sources/ldapfeed.py
changeset 12567 26744ad37953
parent 12153 0ff0aff4413d
child 12828 dadbd4148a44
equal deleted inserted replaced
12566:6b3523f81f42 12567:26744ad37953
    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