From aea85857945a8cfc5141f4654869dbac711732a2 Mon Sep 17 00:00:00 2001 From: glondu Date: Fri, 10 Mar 2006 00:54:47 +0100 Subject: [PATCH] Esthtisme. darcs-hash:20060309235447-68412-3733c8be4ceec74ea69f9cae948181293fabac74.gz --- gestion/ldap_crans.py | 97 +++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 46 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 76a4d634..636bed4e 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -506,18 +506,19 @@ class crans_ldap: def search(self, expression, mode=''): """ Recherche dans la base LDAP, expression est une chaîne : - une expression : champ1=expr1 champ2=expr2 champ3!=expr3.... - soit un seul terme, dans ce cas cherche sur les champs de auto_search_champs - Si mode ='w' les instances crées seront en mode d'écriture + * soit une expression : champ1=expr1&champ2=expr2&champ3!=expr3... + * soit un seul terme, dans ce cas cherche sur les champs de + auto_search_champs + Si mode='w', les instances crées seront en mode d'écriture """ - if type(expression)==str: + if type(expression) == str: # Transformation de l'expression en utf-8 - expression = unicode(expression,'iso-8859-15').encode('utf-8') - elif type(expression)==unicode: + expression = unicode(expression, 'iso-8859-15').encode('utf-8') + elif type(expression) == unicode: expression = expression.encode('utf-8') else: - raise TypeError(u'Chaine attendue') + raise TypeError(u'Chaîne attendue') if not expression: return [] @@ -527,34 +528,36 @@ class crans_ldap: # Il faut un filtre par type d'objet de la base filtres = self.auto_search_champs.keys() - result={'adherent': [], 'machine': [], 'club': []} + result = {'adherent': [], 'machine': [], 'club': []} # Fonction utile - def build_filtre(champ,expr,neg=0): - """ Retourne une chaine pour recherche dans la base LDAP - du style (champ=expr) en adaptant les valeurs de expr au champ - si neg = 1: retourne le négatif : (!(champ=expr))""" + def build_filtre(champ, expr, neg=0): + """ + Retourne une chaine pour recherche dans la base LDAP + du style (champ=expr) en adaptant les valeurs de expr au champ. + Si neg = 1, retourne le négatif : (!(champ=expr)) + """ el = '' - if champ in [ 'host', 'hostAlias' ]: + if champ in ['host', 'hostAlias']: if expr[-1] == '*': - el = '(%s=%s)' % (champ, expr) - elif expr.find('.')==-1: - el = '(%s=%s.*)' % ( champ, expr) + el = '(%s=%s)' % (champ, expr) + elif expr.find('.') == -1: + el = '(%s=%s.*)' % (champ, expr) else: - el = '(%s=%s*)' % ( champ, expr) + el = '(%s=%s*)' % (champ, expr) elif champ == 'macAddress': # Formatage adresse mac try: el = '(macAddress=%s)' % format_mac(expr) except: pass elif champ == 'paiement' and expr == 'ok': # Paiement donnant droit à une connexion maintenant ? - # il doit avoir payé pour - # l'année en cours ou pour l'année précédente - # si on est en septembre + # (il doit avoir payé pour l'année en cours ou pour + # l'année précédente si on est en septembre # - # Dans tous les cas, pour un adhérent, le paiement est considéré non ok - # s'il n'a pas fourni sa carte d'etudiant alors que l'on est desormais - # en periode de bloquage definifif (cf config.py). + # Dans tous les cas, pour un adhérent, le paiement est + # considéré non ok s'il n'a pas fourni sa carte d'etudiant + # alors que l'on est desormais en periode de bloquage + # définifif (cf config.py). if localtime()[1] == 9: # Pour septembre paiement année précédente ok el = "(|(paiement=%s)(paiement=%s))" % (int(ann_scol), int(ann_scol)-1) @@ -571,17 +574,17 @@ class crans_ldap: if neg: el = '(!%s)' % el return el - if expression.find('=')!=-1: + if expression.find('=') != -1: #### Recherche avec conditions explicites ## Construction des filtres # initialisation - filtre={} - filtre_cond={} # Stokage si filtre avec condition (ne comporte pas que des *) - filtre_tout=1 # Passse à 0 si au moins une condition + filtre = {} + filtre_cond = {} # Stokage si filtre avec condition (ne comporte pas que des *) + filtre_tout = 1 # Passse à 0 si au moins une condition for i in filtres: - filtre[i]='(&' + filtre[i] = '(&' filtre_cond[i] = 0 conds = expression.split('&') @@ -598,31 +601,31 @@ class crans_ldap: raise ValueError(u'Syntaxe de recherche invalide.') # transformation de certains champs - champ = self.trans.get(champ,champ) + champ = self.trans.get(champ, champ) - if expr=='': expr='*' + if expr == '': expr='*' ok = 0 # Construction du filtre for i in filtres: if champ in self.auto_search_champs[i] + self.non_auto_search_champs[i]: - filtre[i] += build_filtre(champ,expr,neg) + filtre[i] += build_filtre(champ, expr, neg) ok = 1 - if expr!='*' or neg: + if expr != '*' or neg: filtre_cond[i] = 1 - filtre_tout=0 + filtre_tout = 0 if not ok: raise ValueError(u'Champ de recherche inconnu (%s)'% champ ) ## Recherche avec chacun des filtres r={} # contiendra les réponses par filtre for i in filtres: - if (filtre_tout and filtre[i]!='(&' ) or filtre_cond[i]: + if (filtre_tout and filtre[i] != '(&' ) or filtre_cond[i]: # Filtre valide #filtre[i] += ')' filtre[i] += '(objectClass=%s))' % i - r[i] = self.conn.search_s(self.base_dn,self.scope[i],filtre[i]) + r[i] = self.conn.search_s(self.base_dn, self.scope[i], filtre[i]) else: r[i] = None @@ -637,7 +640,8 @@ class crans_ldap: # Filtre sur un seul champ # => on retourne tout for i in filtres: - if not r[i]: continue + if not r[i]: + continue for res in r[i]: if i == "machine": if res[1].has_key('puissance'): @@ -659,17 +663,18 @@ class crans_ldap: # => on retourne uniquement les adhérents if r['adherent']: for a in r['adherent']: - result['adherent'].append(adherent(a,mode,self.conn) ) + result['adherent'].append(adherent(a, mode, self.conn)) if r['club']: for a in r['club']: - result['club'].append(club(a,mode,self.conn) ) + result['club'].append(club(a, mode, self.conn)) else: # Il faut croiser les résultats machine et propriétaire # Traitement des machines mach_adh = [] # liste de dn d'adhérents et de clubs for res in r['machine']: - dn = string.join(res[0].split(',')[-4:],',') - if dn[:3] != 'aid' and dn[:3] != 'cid': continue + dn = ','.join(res[0].split(',')[-4:]) + if dn[:3] != 'aid' and dn[:3] != 'cid': + continue if dn not in mach_adh: mach_adh.append(dn) @@ -678,16 +683,16 @@ class crans_ldap: for a in r['adherent']: if a[0] in mach_adh and not a[0] in bons_dn: bons_dn.append(a[0]) - result['adherent'].append(adherent(a,mode,self.conn) ) + result['adherent'].append(adherent(a, mode, self.conn)) for a in r['club']: if a[0] in mach_adh and not a[0] in bons_dn: bons_dn.append(a[0]) - result['club'].append(club(a,mode,self.conn) ) + result['club'].append(club(a, mode, self.conn)) # Maintenant c'est au tour des bonnes machines bons_dn2 = [] for a in r['machine']: - dn = string.join(a[0].split(',')[-4:],',') + dn = string.join(a[0].split(',')[-4:], ',') if dn in bons_dn and not a[0] in bons_dn2: bons_dn2.append(dn) if a[1].has_key('puissance'): @@ -705,11 +710,11 @@ class crans_ldap: # Construction du filtre filtre = '(&(|' for champ in self.auto_search_champs[i]: - filtre += build_filtre(champ,expression) - filtre+=')(objectClass=%s))' %i + filtre += build_filtre(champ, expression) + filtre += ')(objectClass=%s))' %i # Recherche - for r in self.conn.search_s(self.base_dn,self.scope[i],filtre): + for r in self.conn.search_s(self.base_dn, self.scope[i], filtre): if i == 'machine': if r[1].has_key('puissance'): result['machine'].append(BorneWifi(r, mode, self.conn))