[lc_ldap] bury devient méthode à part entière (ça pourrait servir), delete est fragmentée
* Par défaut, on préfère que le binding crashe si des enfants d'un adhérent ne sont pas des machines et ne sont pas gérés par le binding que de les détruire * objet.delete ne permet donc par défaut que de détruire l'objet, et pour proprio, on surcharge pour détruire les machines
This commit is contained in:
parent
b5a6062c44
commit
0cee8dbcb6
1 changed files with 30 additions and 27 deletions
57
lc_ldap.py
57
lc_ldap.py
|
@ -163,7 +163,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
self.dn = None
|
self.dn = None
|
||||||
self.droits = []
|
self.droits = []
|
||||||
|
|
||||||
def ressucite(self, ldif_file, login=current_user):
|
def ressuscite(self, ldif_file, login=current_user):
|
||||||
ldif={}
|
ldif={}
|
||||||
for line in open(ldif_file).readlines():
|
for line in open(ldif_file).readlines():
|
||||||
line = line.split(':',1)
|
line = line.split(':',1)
|
||||||
|
@ -175,7 +175,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
try:
|
try:
|
||||||
if self.search(dn=dn):
|
if self.search(dn=dn):
|
||||||
raise ValueError ('objet existant: %s' % dn)
|
raise ValueError ('objet existant: %s' % dn)
|
||||||
except ldap.NO_SUCH_OBJECT: pass
|
except ldap.NO_SUCH_OBJECT:
|
||||||
|
pass
|
||||||
obj = new_cransldapobject(self, dn, mode='rw', ldif=ldif)
|
obj = new_cransldapobject(self, dn, mode='rw', ldif=ldif)
|
||||||
obj.history_add(login, u"resurrection")
|
obj.history_add(login, u"resurrection")
|
||||||
return obj
|
return obj
|
||||||
|
@ -569,36 +570,28 @@ class CransLdapObject(object):
|
||||||
# Requête LDAP de création de l'objet
|
# Requête LDAP de création de l'objet
|
||||||
self.conn.add_s(self.dn, modlist)
|
self.conn.add_s(self.dn, modlist)
|
||||||
|
|
||||||
|
def bury(self, comm, login):
|
||||||
|
self.history_add(login, u"destruction (%s)" % comm)
|
||||||
|
self.save()
|
||||||
|
#On produit un ldif
|
||||||
|
ldif=u"dn: %s\n" % self.dn
|
||||||
|
for key in self.attrs.keys():
|
||||||
|
for value in self.attrs[key]:
|
||||||
|
ldif+=u"%s: %s\n" % (key, value)
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
file="%s %s" % (datetime.datetime.now(), self.dn)
|
||||||
|
f = open('/home/cimetiere_lc/%s/%s' % (self['objectClass'][0],file), 'w')
|
||||||
|
f.write(ldif.encode("UTF-8"))
|
||||||
|
f.close()
|
||||||
|
|
||||||
def delete(self, comm="", login=current_user):
|
def delete(self, comm="", login=current_user):
|
||||||
def bury(self, comm, login):
|
|
||||||
self.history_add(login, u"destruction (%s)" % comm)
|
|
||||||
self.save()
|
|
||||||
#On produit un ldif
|
|
||||||
ldif=u"dn: %s\n" % self.dn
|
|
||||||
for key in self.attrs.keys():
|
|
||||||
for value in self.attrs[key]:
|
|
||||||
ldif+=u"%s: %s\n" % (key, value)
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
file="%s %s" % (datetime.datetime.now(), self.dn)
|
|
||||||
f = open('/home/cimetiere_lc/%s/%s' % (self['objectClass'][0],file), 'w')
|
|
||||||
f.write(ldif.encode("UTF-8"))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
if self.mode not in ['w', 'rw']:
|
if self.mode not in ['w', 'rw']:
|
||||||
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
|
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
|
||||||
if not self.may_be(deleted, self.conn.droits):
|
if not self.may_be(deleted, self.conn.droits):
|
||||||
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
|
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
|
||||||
ref = [ r[0] for r in self.conn.search_s(self.dn, 2) ]
|
self.bury(comm, login)
|
||||||
ref.reverse()
|
self.conn.delete_s(self.dn)
|
||||||
for dn in ref:
|
|
||||||
if dn == self.dn: bury(self, comm, login)
|
|
||||||
else:
|
|
||||||
obj = new_cransldapobject(self.conn, dn, self.mode)
|
|
||||||
bury(obj, comm, login)
|
|
||||||
for dn in ref:
|
|
||||||
self.conn.delete_s(dn)
|
|
||||||
|
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
"""Sauvegarde dans la base les modifications apportées à l'objet.
|
"""Sauvegarde dans la base les modifications apportées à l'objet.
|
||||||
|
@ -875,6 +868,16 @@ class proprio(CransLdapObject):
|
||||||
m._proprio = self
|
m._proprio = self
|
||||||
return self._machines
|
return self._machines
|
||||||
|
|
||||||
|
def delete(self, comm="", login=current_user):
|
||||||
|
if self.mode not in ['w', 'rw']:
|
||||||
|
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
|
||||||
|
if not self.may_be(deleted, self.conn.droits):
|
||||||
|
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
|
||||||
|
for machine in self.machines():
|
||||||
|
machine.delete(comm, login)
|
||||||
|
self.bury(comm, login)
|
||||||
|
self.conn.delete_s(self.dn)
|
||||||
|
|
||||||
class machine(CransLdapObject):
|
class machine(CransLdapObject):
|
||||||
u""" Une machine """
|
u""" Une machine """
|
||||||
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],
|
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue