Cas d'un attribut binary
C'est un peu moche comme on s'est efforcé que dans lc_ldap tout soit un unicode et que unicode n'a pas de sens pour un objet binaire. Avec le champ python_type = str sur les attributs bianire, ça a tout de même l'air d'aller.
This commit is contained in:
parent
44936fde9d
commit
43f4ba650a
2 changed files with 27 additions and 3 deletions
|
@ -67,7 +67,14 @@ def ldif_to_uldif(ldif):
|
|||
"""
|
||||
uldif = {}
|
||||
for attr, vals in ldif.items():
|
||||
uldif[attr] = [ unicode(val, 'utf-8') for val in vals ]
|
||||
if attr.endswith(';binary'):
|
||||
binary = True
|
||||
attr=attr[:-7]
|
||||
else:
|
||||
binary = False
|
||||
attr_class = attributs.AttributeFactory.get(attr, fallback=attributs.Attr)
|
||||
binary = binary or attr_class.binary
|
||||
uldif[attr] = [ unicode(val, 'utf-8') if not binary else val for val in vals ]
|
||||
return uldif
|
||||
|
||||
class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||
|
|
21
objets.py
21
objets.py
|
@ -279,14 +279,21 @@ class CransLdapObject(object):
|
|||
except ldap.NO_SUCH_OBJECT:
|
||||
pass
|
||||
|
||||
for attr in self.attrs.keys():
|
||||
binary = set()
|
||||
for attr in self.keys():
|
||||
for attribut in self[attr]:
|
||||
attribut.check_uniqueness([])
|
||||
if self[attr] and self[attr][0].binary:
|
||||
binary.add(attr)
|
||||
|
||||
self.history_add(login, u"Inscription")
|
||||
|
||||
ldif = self._modifs.to_ldif()
|
||||
for attr in binary:
|
||||
ldif['%s;binary' % attr]=ldif[attr]
|
||||
del(ldif[attr])
|
||||
# Création de la requête LDAP
|
||||
modlist = addModlist(self._modifs.to_ldif())
|
||||
modlist = addModlist(ldif)
|
||||
# Requête LDAP de création de l'objet
|
||||
try:
|
||||
self.conn.add_s(self.dn, modlist)
|
||||
|
@ -405,8 +412,18 @@ class CransLdapObject(object):
|
|||
def get_modlist(self):
|
||||
"""Renvoie un dictionnaire des modifications apportées à l'objet"""
|
||||
# unicode -> utf-8
|
||||
binary = set()
|
||||
for attr in self.keys():
|
||||
if self[attr] and self[attr][0].binary:
|
||||
binary.add(attr)
|
||||
|
||||
ldif = self._modifs.to_ldif()
|
||||
orig_ldif = self.attrs.to_ldif()
|
||||
for attr in binary:
|
||||
ldif['%s;binary' % attr]=ldif[attr]
|
||||
orig_ldif['%s;binary' % attr]=orig_ldif[attr]
|
||||
del(ldif[attr])
|
||||
del(orig_ldif[attr])
|
||||
|
||||
return modifyModlist(orig_ldif, ldif)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue