diff --git a/lc_ldap.py b/lc_ldap.py index 0065c91..b37e49e 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -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: