diff --git a/lc_ldap.py b/lc_ldap.py index ef6f4fa..f557b50 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -38,6 +38,7 @@ import os import sys import re +import time from contextlib import contextmanager import ldap @@ -246,6 +247,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object): res = {} parent = {} machines = {} + factures = {} # (proxying de la base ldap) for dn, attrs in self.search_s(variables.base_dn, scope=2): # On crée les listes des machines et propriétaires @@ -255,14 +257,26 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object): if not machines.has_key(parent_dn): machines[parent_dn] = [] machines[parent_dn].append(m) + if dn.startswith('fid='): # les factures + f = objets.new_cransldapobject(self, dn, mode, uldif=ldif_to_uldif(attrs)) + parent_dn = dn.split(',', 1)[1] + if not factures.has_key(parent_dn): + factures[parent_dn] = [] + factures[parent_dn].append(f) elif (dn.startswith('aid=') or dn.startswith('cid=') or dn == variables.base_dn) and not parent.has_key(dn): parent[dn] = objets.new_cransldapobject(self, dn, mode, uldif=ldif_to_uldif(attrs)) allmachines = [] - for dn, mlist in machines.iteritems(): # on associe propriétaires et machines + for dn in parent: # on associe propriétaires et factures, machines + mlist = machines.get(dn, []) + flist = factures.get(dn, []) parent[dn]._machines = mlist + parent[dn]._factures = flist + parent[dn]._factures_last_update = time.time() for m in mlist: m._proprio = parent[dn] allmachines.append(m) + for f in flist: + f._proprio = parent[dn] return allmachines, parent.values() # on renvoie la liste des machines et des adherents (dont club et crans) def allMachines(self, mode='ro'):