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
|
@ -124,7 +124,7 @@ if inst :
|
||||||
##### Récolte des données
|
##### Récolte des données
|
||||||
cprint('Lecture base LDAP','gras')
|
cprint('Lecture base LDAP','gras')
|
||||||
# Machines de l'assoce
|
# Machines de l'assoce
|
||||||
machines = crans().machines()
|
machines = crans(db.conn).machines()
|
||||||
# Machines des adhérents et clubs de l'année en cours
|
# Machines des adhérents et clubs de l'année en cours
|
||||||
if localtime()[1] == 9:
|
if localtime()[1] == 9:
|
||||||
# On est en septembre, on autorise ceux qui ont payé l'an dernier et cette année
|
# On est en septembre, on autorise ceux qui ont payé l'an dernier et cette année
|
||||||
|
|
|
@ -365,7 +365,7 @@ class crans_ldap :
|
||||||
el = '(%s=%s*)' % ( champ, expr)
|
el = '(%s=%s*)' % ( champ, expr)
|
||||||
elif champ == 'macAddress' :
|
elif champ == 'macAddress' :
|
||||||
# Formatage adresse mac
|
# Formatage adresse mac
|
||||||
try : el = '(macAddress=%s)' % format_mac(expression)
|
try : el = '(macAddress=%s)' % format_mac(expr)
|
||||||
except : return ''
|
except : return ''
|
||||||
else :
|
else :
|
||||||
# Cas général
|
# 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] :
|
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
|
ok = 1
|
||||||
if expr!='*' :
|
if expr!='*' or neg :
|
||||||
filtre_cond[i] = 1
|
filtre_cond[i] = 1
|
||||||
filtre_tout=0
|
filtre_tout=0
|
||||||
if not ok :
|
if not ok :
|
||||||
|
@ -439,16 +439,16 @@ class crans_ldap :
|
||||||
# Il n'y avait seulement un filtre machine
|
# Il n'y avait seulement un filtre machine
|
||||||
# => on retourne uniquement les machines trouvées
|
# => on retourne uniquement les machines trouvées
|
||||||
for m in r['machine'] :
|
for m in r['machine'] :
|
||||||
result['machine'].append(machine(m,mode) )
|
result['machine'].append(machine(m,mode,self.conn) )
|
||||||
elif not r['machine'] :
|
elif not r['machine'] :
|
||||||
# Il n'y avait pas de filtre machine
|
# Il n'y avait pas de filtre machine
|
||||||
# => on retourne uniquement les adhérents
|
# => on retourne uniquement les adhérents
|
||||||
if r['adherent'] :
|
if r['adherent'] :
|
||||||
for a in r['adherent'] :
|
for a in r['adherent'] :
|
||||||
result['adherent'].append(adherent(a,mode) )
|
result['adherent'].append(adherent(a,mode,self.conn) )
|
||||||
if r['club'] :
|
if r['club'] :
|
||||||
for a in r['club'] :
|
for a in r['club'] :
|
||||||
result['club'].append(club(a,mode) )
|
result['club'].append(club(a,mode,self.conn) )
|
||||||
else :
|
else :
|
||||||
# Il faut croiser les résultats machine et propriétaire
|
# Il faut croiser les résultats machine et propriétaire
|
||||||
# Traitement des machines
|
# Traitement des machines
|
||||||
|
@ -465,12 +465,12 @@ class crans_ldap :
|
||||||
for a in r['adherent'] :
|
for a in r['adherent'] :
|
||||||
if a[0] in mach_adh and not a[0] in bons_dn :
|
if a[0] in mach_adh and not a[0] in bons_dn :
|
||||||
bons_dn.append(a[0])
|
bons_dn.append(a[0])
|
||||||
result['adherent'].append(adherent(a,mode) )
|
result['adherent'].append(adherent(a,mode,self.conn) )
|
||||||
if r['club'] :
|
if r['club'] :
|
||||||
for a in r['club'] :
|
for a in r['club'] :
|
||||||
if a[0] in mach_adh and not a[0] in bons_dn :
|
if a[0] in mach_adh and not a[0] in bons_dn :
|
||||||
bons_dn.append(a[0])
|
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
|
# Maintenant c'est au tour des bonnes machines
|
||||||
bons_dn2 = []
|
bons_dn2 = []
|
||||||
|
@ -478,7 +478,7 @@ class crans_ldap :
|
||||||
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 :
|
if dn in bons_dn and not a[0] in bons_dn2 :
|
||||||
bons_dn2.append(dn)
|
bons_dn2.append(dn)
|
||||||
result['machine'].append(machine(a,mode) )
|
result['machine'].append(machine(a,mode,self.conn) )
|
||||||
|
|
||||||
else :
|
else :
|
||||||
### Recherche d'une chaine sur tous les champs
|
### Recherche d'une chaine sur tous les champs
|
||||||
|
@ -495,7 +495,7 @@ class crans_ldap :
|
||||||
|
|
||||||
# Recherche
|
# 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) :
|
||||||
result[i].append( cl(r,mode) )
|
result[i].append( cl(r,mode,self.conn) )
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -779,7 +779,7 @@ class base_classes_crans(crans_ldap) :
|
||||||
|
|
||||||
class base_proprietaire(base_classes_crans) :
|
class base_proprietaire(base_classes_crans) :
|
||||||
""" Méthodes de bases pour les classes adherent et club """
|
""" 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
|
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:
|
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
|
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)
|
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
|
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 :
|
if type(data) != tuple :
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
|
@ -816,14 +819,17 @@ class base_proprietaire(base_classes_crans) :
|
||||||
self._modifiable = 'w'
|
self._modifiable = 'w'
|
||||||
|
|
||||||
def machines(self) :
|
def machines(self) :
|
||||||
""" Retroune les machines (instances) appartenant à la classe """
|
""" Retourne les machines (instances) appartenant à la classe """
|
||||||
if not self.conn :
|
if not self.conn :
|
||||||
self.connect()
|
self.connect()
|
||||||
if self.id() :
|
if self.id() :
|
||||||
res = []
|
res = []
|
||||||
|
try :
|
||||||
for r in self.conn.search_s('%s=%s,%s' % ( self.idn,self.id() , self.base_dn ),1,'objectClass=machine') :
|
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) )
|
res.append(machine(r, self._modifiable,self.conn) )
|
||||||
return res
|
return res
|
||||||
|
except :
|
||||||
|
return []
|
||||||
else :
|
else :
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -850,10 +856,7 @@ class base_proprietaire(base_classes_crans) :
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def delete(self,comment='') :
|
def delete(self,comment='') :
|
||||||
"""
|
"""Destruction du proprietaire"""
|
||||||
Destruction du proprietaire, retourne le liste des services à redémarrer
|
|
||||||
"""
|
|
||||||
|
|
||||||
done = 0
|
done = 0
|
||||||
for m in self.machines() :
|
for m in self.machines() :
|
||||||
if m.ipsec() and not 'conf_wifi' in serv :
|
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 """
|
""" Classe de définition d'une machine """
|
||||||
idn = 'mid'
|
idn = 'mid'
|
||||||
|
|
||||||
def __init__(self,parent_or_tuple,typ='fixe') :
|
def __init__(self,parent_or_tuple,typ='fixe',conn=None) :
|
||||||
"""
|
"""
|
||||||
parent_or_tuple est :
|
parent_or_tuple est :
|
||||||
*soit une instance d'une classe pouvant posséder une machine
|
*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
|
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)
|
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.modifs=[]
|
||||||
self._locks=[]
|
self._locks=[]
|
||||||
t = parent_or_tuple.__class__
|
t = parent_or_tuple.__class__
|
||||||
|
@ -1736,9 +1740,9 @@ class machine(base_classes_crans) :
|
||||||
if len(res) != 1 : njoqmf
|
if len(res) != 1 : njoqmf
|
||||||
|
|
||||||
if 'adherent' in res[0][1]['objectClass'] :
|
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'] :
|
elif 'club' in res[0][1]['objectClass'] :
|
||||||
self.__proprietaire = club(res[0],self._modifiable)
|
self.__proprietaire = club(res[0],self._modifiable,self.conn)
|
||||||
else :
|
else :
|
||||||
self.__proprietaire = crans()
|
self.__proprietaire = crans()
|
||||||
|
|
||||||
|
@ -1826,9 +1830,7 @@ class machine(base_classes_crans) :
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def delete(self,comment='') :
|
def delete(self,comment='') :
|
||||||
"""
|
""" Destruction de la machines """
|
||||||
Destruction de la machines, retourne la liste de services à redémarrer
|
|
||||||
"""
|
|
||||||
if self.proprietaire() == crans and not isadm :
|
if self.proprietaire() == crans and not isadm :
|
||||||
raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.')
|
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) :
|
class crans(crans_ldap) :
|
||||||
""" Classe définissant l'assoce (pour affichage de ses machines) """
|
""" Classe définissant l'assoce (pour affichage de ses machines) """
|
||||||
idn = ''
|
idn = ''
|
||||||
def __init__(s):
|
def __init__(s,conn=None):
|
||||||
|
if not s.conn : s.conn = conn
|
||||||
s.dn = s.base_dn
|
s.dn = s.base_dn
|
||||||
def id(s) :
|
def id(s) :
|
||||||
return ''
|
return ''
|
||||||
|
@ -1894,7 +1897,7 @@ class crans(crans_ldap) :
|
||||||
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
||||||
m = []
|
m = []
|
||||||
for r in res :
|
for r in res :
|
||||||
m.append(machine(r))
|
m.append(machine(r,'',s.conn))
|
||||||
return m
|
return m
|
||||||
|
|
||||||
if __name__ == '__main__' :
|
if __name__ == '__main__' :
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue