[create] On libère les locks dans tous les cas, en particulier si une erreur est levée

This commit is contained in:
Valentin Samir 2013-10-23 16:38:41 +02:00
parent 8431e2d19a
commit 8ecd689289

View file

@ -206,29 +206,31 @@ class CransLdapObject(object):
"""Crée l'objet dans la base ldap, cette méthode vise à faire en sorte que
l'objet se crée lui-même, si celui qui essaye de le modifier a les droits
de le faire."""
if login is None:
login = self.conn.current_login
self._check_optionnal(comment="créez")
self.history_add(login, u"Inscription")
for attr in self.attrs.keys():
for attribut in self[attr]:
attribut.check_uniqueness([])
# Création de la requête LDAP
modlist = addModlist(self._modifs.to_ldif())
# Requête LDAP de création de l'objet
try:
self.conn.add_s(self.dn, modlist)
except Exception:
print traceback.format_exc()
return
# On nettoie les locks
for key, values in self._modifs.to_ldif().iteritems():
for value in values:
self.conn.lockholder.removelock(key, value)
self.conn.lockholder.purge(id(self))
if login is None:
login = self.conn.current_login
self._check_optionnal(comment="créez")
self.history_add(login, u"Inscription")
for attr in self.attrs.keys():
for attribut in self[attr]:
attribut.check_uniqueness([])
# Création de la requête LDAP
modlist = addModlist(self._modifs.to_ldif())
# Requête LDAP de création de l'objet
try:
self.conn.add_s(self.dn, modlist)
except Exception:
print traceback.format_exc()
return
finally:
# On nettoie les locks
for key, values in self._modifs.to_ldif().iteritems():
for value in values:
self.conn.lockholder.removelock(key, value)
self.conn.lockholder.purge(id(self))
# Services à relancer
services.services_to_restart(self.conn, {}, self._modifs)