Classe BorneWifi.

darcs-hash:20060302155728-68412-e2be9bb3a445573dbb34adddfe21be33ca96de96.gz
This commit is contained in:
glondu 2006-03-02 16:57:28 +01:00
parent 32d2199d4b
commit be3d9b49b0
3 changed files with 150 additions and 129 deletions

View file

@ -28,7 +28,7 @@ import re
import affich_tools, config
from lock import make_lock, remove_lock
from ldap_crans import adherent, machine, crans_ldap, crans, club, blacklist_items, isadm, isdeconnecteur, ann_scol, droits_possibles, smtpserv, script_utilisateur
from ldap_crans import adherent, Machine, BorneWifi, crans_ldap, crans, club, blacklist_items, isadm, isdeconnecteur, ann_scol, droits_possibles, smtpserv, script_utilisateur
def dialog(arg) :
return affich_tools.dialog(u'Gestion des adhérents et machines du Crans',arg)
@ -1178,7 +1178,7 @@ def set_machine(machine) :
arg+= u'"PortsTCP machine->ext :" 5 1 "%s" 5 25 50 0 ' % machine.portTCPout()
arg+= u'"PortsUDP ext->machine :" 6 1 "%s" 6 25 50 0 ' % machine.portUDPin()
arg+= u'"PortsUDP machine->ext :" 7 1 "%s" 7 25 50 0 ' % machine.portUDPout()
if machine.puissance()!=None and isadm :
if isinstance(machine, BorneWifi) and isadm :
# Borne wifi
p = u'Mettre le lieu de la borne comme première remarque.'
arg+= u'"Canaux :" 2 35 "%s" 2 43 14 0 ' % machine.canal(None,False)
@ -1230,7 +1230,7 @@ def set_machine(machine) :
machine.portUDPout(result[6])
except ValueError, c : err += c.args[0] + '\n'
if isadm and machine.puissance()!=None :
if isadm and isinstance(machine, BorneWifi):
try : machine.canal(result[7])
except ValueError, c : err += c.args[0] + '\n'
try : machine.puissance(result[8])
@ -1828,13 +1828,13 @@ def menu_principal() :
elif choix=='aKM' :
# Ajout machine au crans
becane = machine(crans(),"fixe")
becane = Machine(crans(),"fixe")
if set_machine(becane) :
becane.restore()
elif choix=='aKB' :
# Ajout borne wifi
becane = machine(crans(),"borne")
becane = BorneWifi(crans(),"borne")
if set_machine(becane) :
becane.restore()
@ -1901,9 +1901,9 @@ def menu_principal() :
choix = 'Wifi'
try :
if choix=='Fixe' :
becane = machine(proprio,'fixe')
becane = Machine(proprio, 'fixe')
elif choix=='Wifi' :
becane = machine(proprio,'wifi')
becane = Machine(proprio, 'wifi')
except ValueError, c:
arg = '--title "Nouvelle machine" '
arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0]

View file

@ -639,7 +639,10 @@ 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,self.conn) )
if m[1].has_key('puissance'):
result['machine'].append(BorneWifi(m, mode, self.conn))
else:
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
@ -678,7 +681,10 @@ 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,self.conn) )
if a[1].has_key('puissance'):
result['machine'].append(BorneWifi(a, mode, self.conn))
else:
result['machine'].append(Machine(a, mode, self.conn))
else:
### Recherche d'une chaine sur tous les champs
@ -1206,7 +1212,10 @@ class base_proprietaire(base_classes_crans):
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) )
if r[1].has_key('puissance'):
res.append(BorneWifi(r, self._modifiable, self.conn))
else:
res.append(Machine(r, self._modifiable, self.conn))
return res
except:
return []
@ -2029,7 +2038,7 @@ class club(base_proprietaire):
""" Retourne l'adresse mail du responsable """
return self.responsable().email()
class machine(base_classes_crans):
class Machine(base_classes_crans):
""" Classe de définition d'une machine """
idn = 'mid'
@ -2037,15 +2046,17 @@ class machine(base_classes_crans):
"""
parent_or_tuple est :
* soit une instance d'une classe pouvant posséder une machine
(adherent, club ou crans), la nouvelle machine lui sera alors associé.
(adherent, club ou crans), la nouvelle machine lui sera alors
associée.
* soit directement le tuple définissant une machine (tel que
retourné par les fonctions de recherche ldap)
typ permet de définir le type de machine : wifi ou fixe,
pris en compte uniquement pour une nouvelle machine (parent donné)
Pour édition d'une machine, typ devra être égal à 'w'
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)
Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas
d'erreur, vérifier l'obtention du lock grâce à la valeur de _modifiable
(si ='w' c'est bon)
conn est une instance de la classe de connexion à la base LDAP
"""
@ -2064,7 +2075,8 @@ class machine(base_classes_crans):
self._modifiable = 0
else:
self._modifiable = 0
self._init_data = parent_or_tuple[1].copy() # Utile pour construire l'instruction LDAP de modif
# Utile pour construire l'instruction LDAP de modif
self._init_data = parent_or_tuple[1].copy()
self._data = parent_or_tuple[1]
# Type de machine
@ -2155,12 +2167,6 @@ class machine(base_classes_crans):
self._set('macAddress',[mac])
return mac
def mac2(self):
"""Retourne l'adresse MAC + 2"""
mac = self.mac().split(":")
mac[-1] = "%0.2x" % (int(mac[-1], 16) + 2)
return ":".join(mac)
def __host_alias(self, champ, new):
""" Vérification de la validité d'un nom de machine """
# Supression des accents
@ -2440,82 +2446,6 @@ class machine(base_classes_crans):
return clef
def canal(self,new=None,raw=False):
""" Attribution ou visualisation du canal d'une borne wifi """
if self.__typ != 'borne': return None
if not new:
canaux = self._data.get('canal',[''])[0]
if raw:
return canaux
else:
canaux = int(canaux)
if canaux < 14:
# Compatibilité ascendante
return str(canaux)
lcanal1 = []
for i in range(1,14):
found = False
if canaux & (1 << (i - 1)):
lcanal2 = []
for c in lcanal1:
if c[1] == i - 1:
lcanal2.append((c[0], i))
found = True
else:
lcanal2.append(c)
if not found:
lcanal2.append((i,i))
lcanal1 = lcanal2
lcanal3 = []
for c in lcanal1:
if c[0] == c[1]:
lcanal3.append("%d" % c[0])
else:
lcanal3.append("%d-%d" % (c[0],c[1]))
return ",".join(lcanal3)
try:
new = int(new)
if new < 0 or new > 13: raise
except:
# Nouveau système, il doit s'agir d'une liste de canaux
try:
lcanal3 = str(new).split(",")
lcanal = []
for c in lcanal3:
c2 = c.split("-")
if len(c2) == 1:
lcanal.append(int(c2[0]))
else:
for i in range(int(c2[0]), int(c2[1]) + 1):
lcanal.append(i)
new = 0
for c in lcanal:
if c not in range(0,14):
raise
new = new + (1 << (c - 1))
except:
raise ValueError(u'Canal invalide : doit être entre 0 et 13 ou une liste de canaux')
self._set('canal',[str(new)])
return new
def puissance(self,new=None):
""" Attribution ou visualisation de la puissance d'une borne wifi """
if self.__typ != 'borne': return None
if not new:
return self._data.get('puissance',[''])[0]
try:
new = int(new)
if new < -99 or new > 99: raise
except:
raise ValueError(u'Puissance invalide : doit être entre -99 et 99')
self._set('puissance',[str(new)])
return new
def save(self):
"""
Enregistre la machine courante dans la base LDAP
@ -2649,6 +2579,94 @@ class machine(base_classes_crans):
if 'ports' not in self.modifs:
self.modifs.setdefault('ports', None)
class BorneWifi(Machine):
""" Classe de définition d'une borne wifi """
def __init__(self, parent_or_tuple, typ='borne', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
def mac2(self):
""" Retourne l'adresse MAC + 2 """
mac = self.mac().split(":")
mac[-1] = "%0.2x" % (int(mac[-1], 16) + 2)
return ":".join(mac)
def canal(self, new=None, raw=False):
""" Attribution ou visualisation du canal d'une borne wifi """
if not new:
canaux = self._data.get('canal', [''])[0]
if raw:
return canaux
else:
canaux = int(canaux)
if canaux < 14:
# Compatibilité ascendante
return str(canaux)
lcanal1 = []
for i in range(1, 14):
found = False
if canaux & (1 << (i - 1)):
lcanal2 = []
for c in lcanal1:
if c[1] == i - 1:
lcanal2.append((c[0], i))
found = True
else:
lcanal2.append(c)
if not found:
lcanal2.append((i, i))
lcanal1 = lcanal2
lcanal3 = []
for c in lcanal1:
if c[0] == c[1]:
lcanal3.append("%d" % c[0])
else:
lcanal3.append("%d-%d" % (c[0], c[1]))
return ",".join(lcanal3)
try:
new = int(new)
if new < 0 or new > 13: raise
except:
# Nouveau système, il doit s'agir d'une liste de canaux
try:
lcanal3 = str(new).split(",")
lcanal = []
for c in lcanal3:
c2 = c.split("-")
if len(c2) == 1:
lcanal.append(int(c2[0]))
else:
for i in range(int(c2[0]), int(c2[1]) + 1):
lcanal.append(i)
new = 0
for c in lcanal:
if c not in range(0,14):
raise
new = new + (1 << (c - 1))
except:
raise ValueError(u'Canal invalide : doit être entre 0 et 13 ou une liste de canaux')
self._set('canal',[str(new)])
return new
def puissance(self, new=None):
""" Attribution ou visualisation de la puissance d'une borne wifi """
if not new:
return self._data.get('puissance', [''])[0]
try:
new = int(new)
if new < -99 or new > 99: raise
except:
raise ValueError(u'Puissance invalide : doit être entre -99 et 99')
self._set('puissance', [str(new)])
return new
class _fake_proprio(crans_ldap):
""" Définitions de base d'un propriétaire virtuel """
idn = ''
@ -2672,7 +2690,10 @@ class _fake_proprio(crans_ldap):
res = s.conn.search_s(s.dn,1,'objectClass=machine')
m = []
for r in res:
m.append(machine(r,'',s.conn))
if r[1].has_key('puissance'):
m.append(BorneWifi(r, '', s.conn))
else:
m.append(Machine(r, '', s.conn))
return m
class crans(_fake_proprio):

View file

@ -47,7 +47,7 @@ except:
base = None
from ldap_crans import is_actif , crans_ldap, ann_scol, crans, hostname
from ldap_crans import is_actif, crans_ldap, ann_scol, crans, hostname, BorneWifi
from affich_tools import *
import user_tests
import popen2, commands
@ -454,7 +454,7 @@ def machine_details(machine) :
# Type de machine
if machine.ipsec(): a = 'Machine wifi'
elif machine.canal() : a='Borne wifi'
elif isinstance(machine, BorneWifi): a = 'Borne wifi'
else: a = 'Machine fixe'
f += coul(a + ' : ', 'gras')
@ -494,7 +494,7 @@ def machine_details(machine) :
f += '\n'
# Borne wifi
if machine.puissance() :
if isinstance(machine, BorneWifi):
f += coul(u'Puissance : ','gras') + u"%4.d" % int(machine.puissance())
f += coul(u'\tCanaux : ', 'gras') + machine.canal()
f += coul(u'\tÉtat : ', 'gras')
@ -683,7 +683,7 @@ def __bases_machines(m) :
""" Retourne [ type de la machines, blacklist ] """
#Type
if m.ipsec() : t='wifi'
elif m.canal() : t='born'
elif isinstance(m, BorneWifi): t='born'
else : t='fixe'
# Déconnectée ?