Evite d'ouvrir 1000 connexions la base LDAP
darcs-hash:20040831153442-d1718-cb93c1c5da074b56a61db18e225e8ee9148bffd6.gz
This commit is contained in:
parent
6626a44f15
commit
31ef749810
2 changed files with 31 additions and 28 deletions
|
@ -365,7 +365,7 @@ class crans_ldap :
|
|||
el = '(%s=%s*)' % ( champ, expr)
|
||||
elif champ == 'macAddress' :
|
||||
# Formatage adresse mac
|
||||
try : el = '(macAddress=%s)' % format_mac(expression)
|
||||
try : el = '(macAddress=%s)' % format_mac(expr)
|
||||
except : return ''
|
||||
else :
|
||||
# Cas général
|
||||
|
@ -411,7 +411,7 @@ 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 = 1
|
||||
if expr!='*' :
|
||||
if expr!='*' or neg :
|
||||
filtre_cond[i] = 1
|
||||
filtre_tout=0
|
||||
if not ok :
|
||||
|
@ -439,16 +439,16 @@ class crans_ldap :
|
|||
# Il n'y avait seulement un filtre machine
|
||||
# => on retourne uniquement les machines trouvées
|
||||
for m in r['machine'] :
|
||||
result['machine'].append(machine(m,mode) )
|
||||
result['machine'].append(machine(m,mode,self.conn) )
|
||||
elif not r['machine'] :
|
||||
# Il n'y avait pas de filtre machine
|
||||
# => on retourne uniquement les adhérents
|
||||
if r['adherent'] :
|
||||
for a in r['adherent'] :
|
||||
result['adherent'].append(adherent(a,mode) )
|
||||
result['adherent'].append(adherent(a,mode,self.conn) )
|
||||
if r['club'] :
|
||||
for a in r['club'] :
|
||||
result['club'].append(club(a,mode) )
|
||||
result['club'].append(club(a,mode,self.conn) )
|
||||
else :
|
||||
# Il faut croiser les résultats machine et propriétaire
|
||||
# Traitement des machines
|
||||
|
@ -465,12 +465,12 @@ 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) )
|
||||
result['adherent'].append(adherent(a,mode,self.conn) )
|
||||
if r['club'] :
|
||||
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) )
|
||||
result['club'].append(club(a,mode,self.conn) )
|
||||
|
||||
# Maintenant c'est au tour des bonnes machines
|
||||
bons_dn2 = []
|
||||
|
@ -478,7 +478,7 @@ class crans_ldap :
|
|||
dn = string.join(a[0].split(',')[-4:],',')
|
||||
if dn in bons_dn and not a[0] in bons_dn2 :
|
||||
bons_dn2.append(dn)
|
||||
result['machine'].append(machine(a,mode) )
|
||||
result['machine'].append(machine(a,mode,self.conn) )
|
||||
|
||||
else :
|
||||
### Recherche d'une chaine sur tous les champs
|
||||
|
@ -495,7 +495,7 @@ class crans_ldap :
|
|||
|
||||
# Recherche
|
||||
for r in self.conn.search_s(self.base_dn,self.scope[i],filtre) :
|
||||
result[i].append( cl(r,mode) )
|
||||
result[i].append( cl(r,mode,self.conn) )
|
||||
|
||||
return result
|
||||
|
||||
|
@ -779,7 +779,7 @@ class base_classes_crans(crans_ldap) :
|
|||
|
||||
class base_proprietaire(base_classes_crans) :
|
||||
""" Méthodes de bases pour les classes adherent et club """
|
||||
def __init__(self,data=(),mode='') :
|
||||
def __init__(self,data=(),mode='',conn=None) :
|
||||
"""
|
||||
Si data est fourni initialise l'adhérent avec les valeurs données
|
||||
Format de data : tuple comme retourné par une recherche dans la base ldap:
|
||||
|
@ -788,7 +788,10 @@ class base_proprietaire(base_classes_crans) :
|
|||
Attention, si mode ='w' mais si l'objet est déja locké il n'y a pas d'erreur
|
||||
vérifier l'obtetion du lock grace à la valeur de _modifiable (si =w c'est bon)
|
||||
Il est inutile de préciser le mode pour un nouveau proprietaire
|
||||
|
||||
conn est une instance de la classe de connexion à la base LDAP
|
||||
"""
|
||||
if not self.conn : self.conn = conn
|
||||
if type(data) != tuple :
|
||||
raise TypeError
|
||||
|
||||
|
@ -816,14 +819,17 @@ class base_proprietaire(base_classes_crans) :
|
|||
self._modifiable = 'w'
|
||||
|
||||
def machines(self) :
|
||||
""" Retroune les machines (instances) appartenant à la classe """
|
||||
""" Retourne les machines (instances) appartenant à la classe """
|
||||
if not self.conn :
|
||||
self.connect()
|
||||
if self.id() :
|
||||
res = []
|
||||
for r in self.conn.search_s('%s=%s,%s' % ( self.idn,self.id() , self.base_dn ),1,'objectClass=machine') :
|
||||
res.append(machine(r, self._modifiable) )
|
||||
return res
|
||||
try :
|
||||
for r in self.conn.search_s('%s=%s,%s' % ( self.idn,self.id() , self.base_dn ),1,'objectClass=machine') :
|
||||
res.append(machine(r, self._modifiable,self.conn) )
|
||||
return res
|
||||
except :
|
||||
return []
|
||||
else :
|
||||
return []
|
||||
|
||||
|
@ -850,10 +856,7 @@ class base_proprietaire(base_classes_crans) :
|
|||
return ''
|
||||
|
||||
def delete(self,comment='') :
|
||||
"""
|
||||
Destruction du proprietaire, retourne le liste des services à redémarrer
|
||||
"""
|
||||
|
||||
"""Destruction du proprietaire"""
|
||||
done = 0
|
||||
for m in self.machines() :
|
||||
if m.ipsec() and not 'conf_wifi' in serv :
|
||||
|
@ -1475,7 +1478,7 @@ class machine(base_classes_crans) :
|
|||
""" Classe de définition d'une machine """
|
||||
idn = 'mid'
|
||||
|
||||
def __init__(self,parent_or_tuple,typ='fixe') :
|
||||
def __init__(self,parent_or_tuple,typ='fixe',conn=None) :
|
||||
"""
|
||||
parent_or_tuple est :
|
||||
*soit une instance d'une classe pouvant posséder une machine
|
||||
|
@ -1489,8 +1492,9 @@ class machine(base_classes_crans) :
|
|||
Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas d'erreur
|
||||
vérifier l'obtetion du lock grace à la valeur de _modifiable (si =w c'est bon)
|
||||
|
||||
conn est une instance de la classe de connexion à la base LDAP
|
||||
"""
|
||||
|
||||
if not self.conn : self.conn = conn
|
||||
self.modifs=[]
|
||||
self._locks=[]
|
||||
t = parent_or_tuple.__class__
|
||||
|
@ -1736,9 +1740,9 @@ class machine(base_classes_crans) :
|
|||
if len(res) != 1 : njoqmf
|
||||
|
||||
if 'adherent' in res[0][1]['objectClass'] :
|
||||
self.__proprietaire = adherent(res[0],self._modifiable)
|
||||
self.__proprietaire = adherent(res[0],self._modifiable,self.conn)
|
||||
elif 'club' in res[0][1]['objectClass'] :
|
||||
self.__proprietaire = club(res[0],self._modifiable)
|
||||
self.__proprietaire = club(res[0],self._modifiable,self.conn)
|
||||
else :
|
||||
self.__proprietaire = crans()
|
||||
|
||||
|
@ -1826,9 +1830,7 @@ class machine(base_classes_crans) :
|
|||
return ret
|
||||
|
||||
def delete(self,comment='') :
|
||||
"""
|
||||
Destruction de la machines, retourne la liste de services à redémarrer
|
||||
"""
|
||||
""" Destruction de la machines """
|
||||
if self.proprietaire() == crans and not isadm :
|
||||
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
|
||||
|
||||
|
@ -1873,7 +1875,8 @@ class machine(base_classes_crans) :
|
|||
class crans(crans_ldap) :
|
||||
""" Classe définissant l'assoce (pour affichage de ses machines) """
|
||||
idn = ''
|
||||
def __init__(s):
|
||||
def __init__(s,conn=None):
|
||||
if not s.conn : s.conn = conn
|
||||
s.dn = s.base_dn
|
||||
def id(s) :
|
||||
return ''
|
||||
|
@ -1894,7 +1897,7 @@ class crans(crans_ldap) :
|
|||
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
||||
m = []
|
||||
for r in res :
|
||||
m.append(machine(r))
|
||||
m.append(machine(r,'',s.conn))
|
||||
return m
|
||||
|
||||
if __name__ == '__main__' :
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue