Classe BorneWifi.
darcs-hash:20060302155728-68412-e2be9bb3a445573dbb34adddfe21be33ca96de96.gz
This commit is contained in:
parent
32d2199d4b
commit
be3d9b49b0
3 changed files with 150 additions and 129 deletions
|
@ -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]
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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 ?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue