[create] On libère les locks dans tous les cas, en particulier si une erreur est levée
This commit is contained in:
parent
8431e2d19a
commit
8ecd689289
1 changed files with 24 additions and 22 deletions
46
objets.py
46
objets.py
|
@ -206,29 +206,31 @@ class CransLdapObject(object):
|
||||||
"""Crée l'objet dans la base ldap, cette méthode vise à faire en sorte que
|
"""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
|
l'objet se crée lui-même, si celui qui essaye de le modifier a les droits
|
||||||
de le faire."""
|
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:
|
try:
|
||||||
self.conn.add_s(self.dn, modlist)
|
if login is None:
|
||||||
except Exception:
|
login = self.conn.current_login
|
||||||
print traceback.format_exc()
|
self._check_optionnal(comment="créez")
|
||||||
return
|
|
||||||
# On nettoie les locks
|
self.history_add(login, u"Inscription")
|
||||||
for key, values in self._modifs.to_ldif().iteritems():
|
|
||||||
for value in values:
|
for attr in self.attrs.keys():
|
||||||
self.conn.lockholder.removelock(key, value)
|
for attribut in self[attr]:
|
||||||
self.conn.lockholder.purge(id(self))
|
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 à relancer
|
||||||
services.services_to_restart(self.conn, {}, self._modifs)
|
services.services_to_restart(self.conn, {}, self._modifs)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue