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 import affich_tools, config
from lock import make_lock, remove_lock 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) : def dialog(arg) :
return affich_tools.dialog(u'Gestion des adhérents et machines du Crans',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'"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 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() 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 # Borne wifi
p = u'Mettre le lieu de la borne comme première remarque.' 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) 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]) machine.portUDPout(result[6])
except ValueError, c : err += c.args[0] + '\n' 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]) try : machine.canal(result[7])
except ValueError, c : err += c.args[0] + '\n' except ValueError, c : err += c.args[0] + '\n'
try : machine.puissance(result[8]) try : machine.puissance(result[8])
@ -1828,13 +1828,13 @@ def menu_principal() :
elif choix=='aKM' : elif choix=='aKM' :
# Ajout machine au crans # Ajout machine au crans
becane = machine(crans(),"fixe") becane = Machine(crans(),"fixe")
if set_machine(becane) : if set_machine(becane) :
becane.restore() becane.restore()
elif choix=='aKB' : elif choix=='aKB' :
# Ajout borne wifi # Ajout borne wifi
becane = machine(crans(),"borne") becane = BorneWifi(crans(),"borne")
if set_machine(becane) : if set_machine(becane) :
becane.restore() becane.restore()
@ -1901,9 +1901,9 @@ def menu_principal() :
choix = 'Wifi' choix = 'Wifi'
try : try :
if choix=='Fixe' : if choix=='Fixe' :
becane = machine(proprio,'fixe') becane = Machine(proprio, 'fixe')
elif choix=='Wifi' : elif choix=='Wifi' :
becane = machine(proprio,'wifi') becane = Machine(proprio, 'wifi')
except ValueError, c: except ValueError, c:
arg = '--title "Nouvelle machine" ' arg = '--title "Nouvelle machine" '
arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0] 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 # 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,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']: 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
@ -678,7 +681,10 @@ 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,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: else:
### Recherche d'une chaine sur tous les champs ### Recherche d'une chaine sur tous les champs
@ -1206,7 +1212,10 @@ class base_proprietaire(base_classes_crans):
res = [] res = []
try: 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,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 return res
except: except:
return [] return []
@ -2029,7 +2038,7 @@ class club(base_proprietaire):
""" Retourne l'adresse mail du responsable """ """ Retourne l'adresse mail du responsable """
return self.responsable().email() return self.responsable().email()
class machine(base_classes_crans): class Machine(base_classes_crans):
""" Classe de définition d'une machine """ """ Classe de définition d'une machine """
idn = 'mid' idn = 'mid'
@ -2037,15 +2046,17 @@ class machine(base_classes_crans):
""" """
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
(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 * soit directement le tuple définissant une machine (tel que
retourné par les fonctions de recherche ldap) retourné par les fonctions de recherche ldap)
typ permet de définir le type de machine : wifi ou fixe, typ permet de définir le type de machine : wifi ou fixe,
pris en compte uniquement pour une nouvelle machine (parent donné) pris en compte uniquement pour une nouvelle machine (parent donné)
Pour édition d'une machine, typ devra être égal à 'w' 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 Attention, si typ ='w' mais si l'objet est déja locké il n'y a pas
vérifier l'obtetion du lock grace à la valeur de _modifiable (si =w c'est bon) 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 conn est une instance de la classe de connexion à la base LDAP
""" """
@ -2064,7 +2075,8 @@ class machine(base_classes_crans):
self._modifiable = 0 self._modifiable = 0
else: else:
self._modifiable = 0 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] self._data = parent_or_tuple[1]
# Type de machine # Type de machine
@ -2155,12 +2167,6 @@ class machine(base_classes_crans):
self._set('macAddress',[mac]) self._set('macAddress',[mac])
return 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): def __host_alias(self, champ, new):
""" Vérification de la validité d'un nom de machine """ """ Vérification de la validité d'un nom de machine """
# Supression des accents # Supression des accents
@ -2440,82 +2446,6 @@ class machine(base_classes_crans):
return clef 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): def save(self):
""" """
Enregistre la machine courante dans la base LDAP Enregistre la machine courante dans la base LDAP
@ -2649,6 +2579,94 @@ class machine(base_classes_crans):
if 'ports' not in self.modifs: if 'ports' not in self.modifs:
self.modifs.setdefault('ports', None) 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): class _fake_proprio(crans_ldap):
""" Définitions de base d'un propriétaire virtuel """ """ Définitions de base d'un propriétaire virtuel """
idn = '' idn = ''
@ -2672,7 +2690,10 @@ class _fake_proprio(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,'',s.conn)) if r[1].has_key('puissance'):
m.append(BorneWifi(r, '', s.conn))
else:
m.append(Machine(r, '', s.conn))
return m return m
class crans(_fake_proprio): class crans(_fake_proprio):

View file

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