From b520059397741f87af84363d4e761d2d6cfc7754 Mon Sep 17 00:00:00 2001 From: glondu Date: Sat, 11 Mar 2006 16:09:27 +0100 Subject: [PATCH] Si on filtre sur un champ spcial, on ne renvoie que les machines qui possdent ce champ. darcs-hash:20060311150927-68412-9d6f081e27c1f1c6dcbc43ae48c604dffe3bd083.gz --- gestion/ldap_crans.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 3a3a0023..0c99cf4a 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -244,6 +244,9 @@ class crans_ldap: 'ip': 'ipHostNumber', 'telephone': 'tel'} + # Les différentes classes LDAP de machines + ldap_machines_classes = ['machineFixe', 'machineWifi', 'machineCrans', 'borneWifi'] + # Champs de recherche pour la recherche automatique auto_search_machines_champs = \ ['macAddress', 'host', 'ipHostNumber', 'hostAlias'] @@ -630,8 +633,12 @@ class crans_ldap: # Initialisation filtre = {} + filtre_seul = {} + # filtre_seul[i] est True si la requête porte sur un champ + # qui n'est pas dans toutes les machines, mais dans i for i in filtres: filtre[i] = '' + filtre_seul[i] = False conds = expression.split('&') @@ -659,11 +666,26 @@ class crans_ldap: if champ in self.auto_search_champs[i] + self.non_auto_search_champs[i]: filtre[i] += build_filtre(champ, expr, neg) ok = True + if champ not in self.auto_search_machines_champs \ + and champ not in self.non_auto_search_machines_champs: + filtre_seul[i] = True + if not ok: raise ValueError(u'Champ de recherche inconnu (%s)' % champ) ## Recherche avec chacun des filtres r = {} # contiendra les réponses par filtre + + # On efface les bons filtres si la requête porte sur des + # champs spéciaux + ok = False + for i in self.ldap_machines_classes: + ok = ok or filtre_seul[i] + if ok: + # Il y a au moins un champ spécial + for i in self.ldap_machines_classes: + if not filtre_seul[i]: + filtre[i] = '' for i in filtres: if filtre[i] != '': @@ -739,8 +761,9 @@ class crans_ldap: result[i].append(self.make(r, mode)) # Backward-compatibilité - result['machine'] = result['machineCrans'] + result['borneWifi'] - result['machine'] += result['machineFixe'] + result['machineWifi'] + result['machine'] = [] + for i in self.ldap_machines_classes: + result['machine'] += result[i] return result