On optimise la methode allMachines :

il est inutile losque l'on construit les propriétaires des machines
de réintérroger l'annuaire ldap pour les obtenir alors que l'on vient de
dumper tout l'annuaire.
Pour cela, on rajoute un paramètre optionel machines à la classe proprio, et
on construit directement les propriétaires en appelant la classe adhérant au
lieu de passer par la methode new_cransldapobject.
This commit is contained in:
Valentin Samir 2011-10-25 21:49:23 +02:00
parent 454ea3e6e1
commit a620d68411

View file

@ -130,14 +130,19 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
machines = []
# On récupère tous les objets ldap et on les met dans un dico
# (proxying de la base ldap)
for dn, attrs in self.search_s(base_dn, scope=2):
res[dn] = attrs
for dn, attrs in self.search_s(base_dn, scope=2): #on fait tout dans une seule boucle
#~ res[dn] = attrs
# On crée la liste des machines
for dn, attrs in res.items():
#~ for dn, attrs in res.items():
if dn.startswith('mid='):
m = new_cransldapobject(self, dn, ldif = attrs)
parent_dn = dn.split(',', 1)[1]
m._proprio = new_cransldapobject(self, parent_dn, res[parent_dn])
if not parent.has_key(parent_dn):
parent[parent_dn]=adherent(self, dn,machines= [ new_cransldapobject(self, dn,ldif=attrs)]) # on utilise pas new_cransldapobject pour optimiser les appel ldap (on passe la liste des machines)
else:
parent[parent_dn]._machines.append(new_cransldapobject(self, dn,ldif=attrs))
#~ m._proprio = new_cransldapobject(self, parent_dn, res[parent_dn],opt=machine_proprio[parent_dn])
m._proprio = parent[parent_dn]
machines.append(m)
return machines
@ -415,9 +420,9 @@ class proprio(CransLdapObject):
ofields = []
xfields = []
def __init__(self, conn, dn, mode='ro', ldif = None):
def __init__(self, conn, dn, mode='ro', ldif = None, machines=[]):
super(proprio, self).__init__(conn, dn, mode, ldif)
self._machines = []
self._machines = machines
def machines(self):
if not self._machines: