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 = {}
|
uldif = {}
|
||||||
for attr, vals in ldif.items():
|
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
|
return uldif
|
||||||
|
|
||||||
class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
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:
|
except ldap.NO_SUCH_OBJECT:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
for attr in self.attrs.keys():
|
binary = set()
|
||||||
|
for attr in self.keys():
|
||||||
for attribut in self[attr]:
|
for attribut in self[attr]:
|
||||||
attribut.check_uniqueness([])
|
attribut.check_uniqueness([])
|
||||||
|
if self[attr] and self[attr][0].binary:
|
||||||
|
binary.add(attr)
|
||||||
|
|
||||||
self.history_add(login, u"Inscription")
|
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
|
# 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
|
# Requête LDAP de création de l'objet
|
||||||
try:
|
try:
|
||||||
self.conn.add_s(self.dn, modlist)
|
self.conn.add_s(self.dn, modlist)
|
||||||
|
@ -405,8 +412,18 @@ class CransLdapObject(object):
|
||||||
def get_modlist(self):
|
def get_modlist(self):
|
||||||
"""Renvoie un dictionnaire des modifications apportées à l'objet"""
|
"""Renvoie un dictionnaire des modifications apportées à l'objet"""
|
||||||
# unicode -> utf-8
|
# 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()
|
ldif = self._modifs.to_ldif()
|
||||||
orig_ldif = self.attrs.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)
|
return modifyModlist(orig_ldif, ldif)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue