[gestion/*.py] Ré-encodage de certains scripts en UTF-8

Ignore-this: dafa22ed56eaf0d816fd089e42672eb5

darcs-hash:20090309212124-0445d-09ac8ae4052b6f333706be1baa1c7f4d94455fd5.gz
This commit is contained in:
Stephane Glondu 2009-03-09 22:21:24 +01:00
parent 7addc503a8
commit cc31727b60
21 changed files with 1351 additions and 1351 deletions

View file

@ -1,19 +1,19 @@
#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
# -*- coding: utf-8 -*-
# Copyright (C) Frédéric Pauget
# Copyright (C) Frédéric Pauget
# Licence : GPLv2
u"""Ce script permet de recherche et d'afficher le détail d'une machine ou
d'un adhérent.
u"""Ce script permet de recherche et d'afficher le détail d'une machine ou
d'un adhérent.
Usage: %(prog)s [options] <chaine de recherche>
La chaine de recherche peut être :
* soit un terme unique, dans ce cas la recherche sera effectuée sur les
La chaine de recherche peut être :
* soit un terme unique, dans ce cas la recherche sera effectuée sur les
champs en bleu ci-dessous.
* soit du type "champ1=valeur1&champ2!=valeur2 ...", les résultats seront
alors limités aux entrées correspondantes à tous les critères.
* soit du type "champ1=valeur1&champ2!=valeur2 ...", les résultats seront
alors limités aux entrées correspondantes à tous les critères.
Les champs de recherche possibles sont :
%(champs_rech)s
@ -22,19 +22,19 @@ Recherche sur prise possible (utiliser uniquement ce champ dans ce cas).
Les options de recherches sont :
* limitations sur l'affichage :
-a ou --adherent : limitation de l'affichage aux adhérents
-a ou --adherent : limitation de l'affichage aux adhérents
-m ou --machine : limitation de l'affichage aux machines
-c ou --club : limitation de l'affichage aux clubs
-b ou --bornes : limitation de l'affichage aux bornes wifi
--crans : recherche uniquement les machines du crans
* options d'affichage :
-t ou --tech : affichages des infos techniques des machines
à la place des infos administratives dans les résumés.
à la place des infos administratives dans les résumés.
-i ou --ipsec : montre la clef ipsec des machines wifi
-l <num> ou --limit=<num> : limite du nombre de résultats pour utiliser
le mode d'affichage condensé au lieu du mode détaillé (défaut %(limit_aff_details)i)
-l <num> ou --limit=<num> : limite du nombre de résultats pour utiliser
le mode d'affichage condensé au lieu du mode détaillé (défaut %(limit_aff_details)i)
-L <num> ou --limit-historique=<num> : limitation du nombre de lignes
d'historique affichées (défaut %(limit_aff_historique)i)
d'historique affichées (défaut %(limit_aff_historique)i)
"""
try:
@ -63,14 +63,14 @@ aff_ipsec = 0
def aff(qqch,mtech=0) :
""" Affichage de qqch.
qqch peut être une liste d'instances des classes adhérent ou machine
qqch peut être une liste d'instances des classes adhérent ou machine
(un seul type dans la liste) dans ce cas :
* si la longueur de la liste est inférieure à limit_aff_details
affiche les propriétés détaillées de chaque élément.
* sinon résume dans un tabeau des principales propriétés
si qqch est une instance seul la traité comme une liste à une élément
* si la longueur de la liste est inférieure à limit_aff_details
affiche les propriétés détaillées de chaque élément.
* sinon résume dans un tabeau des principales propriétés
si qqch est une instance seul la traité comme une liste à une élément
Si mtech = 1 affiches les infomations techniques des machines plutot
qu'administratives dans le tableau des propriétés
qu'administratives dans le tableau des propriétés
"""
if type(qqch) != list :
qqch = [ qqch ]
@ -99,26 +99,26 @@ def aff(qqch,mtech=0) :
elif t == 'cid':
cprint(club_details(c).strip())
# affiche le nombre de résultats
# affiche le nombre de résultats
if len(qqch) > 1:
cprint(u"Total: %d" % len(qqch))
def adhers_brief(adhers) :
"""
Formatage sous forme de tableau des infos sur la liste d'adhérent fournie :
Formatage sous forme de tableau des infos sur la liste d'adhérent fournie :
* aid
* prénom nom
* prénom nom
* chambre
* machines
"""
data = []
# Copie locale triée par (nom, prenom)
# Copie locale triée par (nom, prenom)
adhers = adhers[:]
adhers.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom())))
for a in adhers:
## État administratif
## État administratif
ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m'
@ -129,17 +129,17 @@ def adhers_brief(adhers) :
elif isinstance(a,Adherent) and not a.adherentPayant(): paid = coul('G', 'bleu')
else: paid = nok
# Précablage
# Précablage
if ann_scol+1 in a.paiement() : paid = coul(paid,'f_vert')
# Carte d'étudiant
# Carte d'étudiant
if ann_scol in a.carteEtudiant():
if 'c' in a.controle(): carte = ook
else: carte = ok
else : carte = nok
machines = ''
# Récupération des machines
# Récupération des machines
if len(adhers) <= limit_aff_machines:
for machine in a.machines() :
nom = machine.nom().split('.')[0]
@ -150,7 +150,7 @@ def adhers_brief(adhers) :
else : machines = coul(nom,k)
else:
machines = None
# Données
# Données
if len(adhers) <= limit_aff_machines:
data.append([a.id(), a.Nom(), a.chbre(), paid, carte, machines])
else:
@ -158,41 +158,41 @@ def adhers_brief(adhers) :
if len(adhers) <= limit_aff_machines:
return u"Machines en rouge = machines avec limitation de services\n" + \
u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \
u"C : carte d'étudiant année en cours\n" + \
u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \
u"C : carte d'étudiant année en cours\n" + \
tableau(data,
titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C', u'Machines'],
titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C', u'Machines'],
largeur = [5, 30, 5, 1, 1, '*'],
alignement = ['d', 'c', 'g', 'c', 'c', 'c'])
else:
return u"Machines en rouge = machines avec limitation de services\n" + \
u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \
u"C : carte d'étudiant année en cours\n" + \
u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \
u"C : carte d'étudiant année en cours\n" + \
tableau(data,
titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C'],
titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C'],
largeur = [5, '*', 5, 1, 1],
alignement = ['d', 'c', 'g', 'c', 'c'])
def machines_brief(machines) :
"""
Formatage sous forme d'un tableau des propriétés de la liste de machine :
Formatage sous forme d'un tableau des propriétés de la liste de machine :
* mid
* type (fixe ou wifi, born)
* nom
* adresse IP
* adresse MAC
* si blacklistée
* si blacklistée
"""
data = []
# Copie locale triée par nom
# Copie locale triée par nom
machines = machines[:]
machines.sort(lambda x, y: cmp(x.nom(), y.nom()))
for m in machines :
t, bl = __bases_machines(m)
# Propriétaire
# Propriétaire
a = m.proprietaire()
p = a.Nom()
@ -203,12 +203,12 @@ def machines_brief(machines) :
else:
p = coul(p,'rouge')
# Données
# Données
data.append([m.id() , t, m.nom().split('.')[0], p, a.chbre(), bl])
return u"Le propriétaire en rouge signale un problème administratif, en bleu une inscription gratuite\n" + \
return u"Le propriétaire en rouge signale un problème administratif, en bleu une inscription gratuite\n" + \
tableau(data,
titre = [u'mid', u'Type', u'Nom de machine', u'Propriétaire', u'Chbre', u'Limitation'],
titre = [u'mid', u'Type', u'Nom de machine', u'Propriétaire', u'Chbre', u'Limitation'],
largeur = [5, 4, 18, '*', 5, 10],
alignement = ['d', 'c', 'c', 'c', 'g', 'c'])
@ -222,12 +222,12 @@ def clubs_brief(clubs) :
"""
data = []
# Copie locale triée par Nom
# Copie locale triée par Nom
clubs = clubs[:]
clubs.sort(lambda x, y: cmp(x.Nom(), y.Nom()))
for c in clubs :
## État administratif
## État administratif
ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m'
@ -237,11 +237,11 @@ def clubs_brief(clubs) :
else: paid = ok
else : paid = nok
# Précablage
# Précablage
if ann_scol+1 in c.paiement() : paid = coul(paid,'f_vert')
machines = ''
# Récupération des machines
# Récupération des machines
for machine in c.machines() :
nom = machine.nom().split('.')[0]
if machine.blacklist_actif() : k = 'rouge'
@ -252,11 +252,11 @@ def clubs_brief(clubs) :
# Responsable
resp = c.responsable().Nom()
# Données
# Données
data.append([c.id() , c.Nom(), c.local(), paid, resp, machines])
return u"Machines en rouge = machines avec limitation de services\n" + \
u"P : signature charte année en cours, le fond vert indique le précâblage\n" + \
u"P : signature charte année en cours, le fond vert indique le précâblage\n" + \
tableau(data,
titre = [u'cid', u'Nom ', u'Local', u'P', u'Responsable', u'Machines'],
largeur = [5, '*', 6, 1, 21, 15],
@ -265,24 +265,24 @@ def clubs_brief(clubs) :
def list_machines(machines) :
"""
Formatage sous forme d'un tableau des propriétés de la liste de machine :
Formatage sous forme d'un tableau des propriétés de la liste de machine :
* mid
* type (fixe ou wifi)
* nom
* adresse IP
* adresse MAC
* si blacklistée
* si blacklistée
"""
data = []
# Copie locale triée par nom
# Copie locale triée par nom
machines = machines[:]
machines.sort(lambda x, y: cmp(x.nom(), y.nom()))
for m in machines :
t, bl = __bases_machines(m)
# Données
# Données
data.append([m.id(), t, m.nom().split('.')[0], m.ip(), m.mac(), bl])
return tableau(data,
@ -292,19 +292,19 @@ def list_machines(machines) :
def list_bornes(bornes) :
"""
Formatage sous forme d'un tableau des propriétés de la liste de bornes wifi :
Formatage sous forme d'un tableau des propriétés de la liste de bornes wifi :
* mid
* nom
* adresse IP
* adresse MAC
* État
* État
* puissance
* canal
* lieu (la première remarque en fait)
* lieu (la première remarque en fait)
"""
data = []
# Copie locale triée par nom
# Copie locale triée par nom
bornes = bornes[:]
bornes.sort(lambda x, y: cmp(x.nom(), y.nom()))
@ -314,7 +314,7 @@ def list_bornes(bornes) :
t, bl = __bases_machines(b)
if t != 'born' : continue
# Données
# Données
try :
l = [x for x in b.info() if not x[0]=='<'][0]
if len(l) > 11 :
@ -334,7 +334,7 @@ def list_bornes(bornes) :
data.append([b.id(), b.nom().split('.')[0], b.ip(), b.mac(), etat, b.canal(), puiss, b.prise(), l])
return u"Can=canaux, P=puissance, E=état\n" + \
return u"Can=canaux, P=puissance, E=état\n" + \
tableau(data,
titre = [u'mid', u'Nom', u'Adresse IP', u'Adresse MAC', u'E', u'Can', u'P', u'Pris', u'Lieu'],
largeur = [5, 13, 15, 17, 1, 5, 3, 4, '*'],
@ -342,7 +342,7 @@ def list_bornes(bornes) :
def adher_details(adher) :
"""
Affichage du détail des propriétés d'un adhérent
Affichage du détail des propriétés d'un adhérent
"""
f=u''
# Aid
@ -370,12 +370,12 @@ def adher_details(adher) :
if not adher.contourneGreylist():
GL = u' (%s)'%coul(u'GreyList','gris')
if adher.rewriteMailHeaders():
RMH = u' (%s)'%coul(u'réécriture en-têtes mail','gris')
RMH = u' (%s)'%coul(u'réécriture en-têtes mail','gris')
alias = u', '.join([adher.canonical_alias()] + adher.alias())
if alias:
if alias[0] == u',':
# Canonical étéait vide
# Canonical étéait vide
alias = alias[2:]
f += coul(u'Alias : ','gras') + alias
f += GL
@ -390,9 +390,9 @@ def adher_details(adher) :
if forward:
f += coul(u'Redirection : ', 'gras') + forward
except IOError, e:
# Pas de .forward, ou .forward privé... on laisse tomber
# Pas de .forward, ou .forward privé... on laisse tomber
pass
f += coul(u'Dernière connexion : ', 'gras')
f += coul(u'Dernière connexion : ', 'gras')
timestamp = adher.derniereConnexion()
if timestamp == 0:
f += coul(u'Jamais', 'rouge')
@ -401,24 +401,24 @@ def adher_details(adher) :
time()-timestamp > 32*24*3600 and 'rouge' or '')
f += u"\n"
# État administratif
# État administratif
f += coul("Date d'inscription : ", "gras")
f += strftime('%d/%m/%Y %H:%M', localtime(adher.dateInscription()))
f += coul(u'\nÉtat administratif : ','gras')
f += coul(u'\nÉtat administratif : ','gras')
jour=1
if ann_scol not in adher.carteEtudiant() :
f += coul(u"manque carte d'étudiant",'violet')
f += coul(u"manque carte d'étudiant",'violet')
jour = 0
if ann_scol not in adher.paiement() :
if not jour : f += ' et '
if isinstance(adher, Adherent) and not adher.adherentPayant():
f += coul(u"inscription gratuite", 'bleu')
else:
f += coul(u"cotisation %s/%d non réglée"% (ann_scol, ann_scol+1 ),'violet')
f += coul(u"cotisation %s/%d non réglée"% (ann_scol, ann_scol+1 ),'violet')
jour = 0
if jour :
f += coul(u"à jour",'vert')
f += coul(u"à jour",'vert')
f += '\n'
# Telephone
@ -428,12 +428,12 @@ def adher_details(adher) :
tel = u'%s %s %s %s %s' % ( tel[:2], tel[2:4], tel[4:6], tel[6:8], tel[8:] )
except :
pass
f += coul(u'Numéro de téléphone : ','gras') + "%s\n" % tel.ljust(12)
f += coul(u'Numéro de téléphone : ','gras') + "%s\n" % tel.ljust(12)
# Adresse
chbre = adher.chbre()
if chbre == 'EXT' :
# Adhérent extérieur
# Adhérent extérieur
addr = adher.adresse()
if addr[0] :
f += coul(u'Adresse : ','gras')
@ -443,7 +443,7 @@ def adher_details(adher) :
elif chbre == '????' :
f += coul(u'Chambre invalide\n','violet')
else :
# Chambre + prise (d'après annuaire)
# Chambre + prise (d'après annuaire)
etat, vlans = prise_etat(adher.chbre())
f += coul(u'Chambre : ','gras') + u"%s " % chbre
f += u'(%s)' % etat
@ -453,12 +453,12 @@ def adher_details(adher) :
f += coul(u'VLAN : ','gras') + u'%s' % vlans
f += u'\n'
# Études
# Études
if adher.etudes(1).isdigit() :
f += coul(u'Études : ','gras')+ "%s %s%s\n" % \
f += coul(u'Études : ','gras')+ "%s %s%s\n" % \
( adher.etudes(0), adher.etudes(1), adher.etudes(2) )
elif adher.etudes(0) :
f += coul(u'Études : ','gras')+ "%s %s %s\n" % \
f += coul(u'Études : ','gras')+ "%s %s %s\n" % \
( adher.etudes(0), adher.etudes(1), adher.etudes(2) )
# Solde
@ -476,15 +476,15 @@ def adher_details(adher) :
if d :
f += coul(u"Droits sur les serveurs : ",'gras') + ', '.join(d)
if adher.droitsGeles():
f += coul(u" (droits gelés car pas cotisé cette année)",'bleu')
f += coul(u" (droits gelés car pas cotisé cette année)",'bleu')
f += u'\n'
# Paiement
if adher.paiement() :
if len(adher.paiement()) == 1 :
f += coul(u'Cotisation payée pour l\'année scolaire :','gras')
f += coul(u'Cotisation payée pour l\'année scolaire :','gras')
else :
f += coul(u'Cotisation payée pour les années scolaires :','gras')
f += coul(u'Cotisation payée pour les années scolaires :','gras')
g = u''
for an in adher.paiement() : g += u" %i-%i" % ( an, an+1 )
if len(g) > 35 : f += '\n\t'
@ -492,12 +492,12 @@ def adher_details(adher) :
if 'p' in adher.controle(): f += coul(u' (OK)', 'vert')
f += u'\n'
# Cartes d'étudiant fournie
# Cartes d'étudiant fournie
if adher.carteEtudiant() :
if len(adher.carteEtudiant()) == 1 :
f += coul(u"Carte d'étudiant fournie pour l'année scolaire :",'gras')
f += coul(u"Carte d'étudiant fournie pour l'année scolaire :",'gras')
else :
f += coul(u"Carte d'étudiant fournie pour les années scolaires :",'gras')
f += coul(u"Carte d'étudiant fournie pour les années scolaires :",'gras')
g = u''
for an in adher.carteEtudiant() : g += u" %i-%i" % ( an, an+1 )
if len(g) > 25 : f += '\n\t'
@ -521,7 +521,7 @@ def adher_details(adher) :
clients_ipsec = None
def ipsec_ok(machine) :
"""Indique si une machine est correctement authentifiée"""
"""Indique si une machine est correctement authentifiée"""
prefix=""
if hostname != "ragnarok":
if not os.path.isfile("/usr/scripts/gestion/clef-encap"):
@ -535,7 +535,7 @@ def ipsec_ok(machine) :
def machine_details(machine) :
"""
Formatage du détail des propriétés d'une machine
Formatage du détail des propriétés d'une machine
"""
f = ''
f+= coul(u'mid=%s ' % machine.id(),'bleu')
@ -557,10 +557,10 @@ def machine_details(machine) :
f+= coul(u'IP : ','gras') + "%s\t\t" %machine.ip()
f+= coul(u'MAC : ','gras') + "%s\n" %machine.mac()
# Propriétaire
f+= coul(u'Propriétaire : ','gras')
# Propriétaire
f+= coul(u'Propriétaire : ','gras')
try :
f += machine.proprio + coul(' (adhérent détruit)', 'jaune')
f += machine.proprio + coul(' (adhérent détruit)', 'jaune')
a = AssociationCrans()
except :
a = machine.proprietaire()
@ -579,10 +579,10 @@ def machine_details(machine) :
f += coul(u'Nombre de prises : ', 'gras')
f += "%d\n" % n
# Adhérent blacklisté ?
# Adhérent blacklisté ?
bl = a.blacklist_actif()
if bl :
f += coul(u'Restrictions sur adhérent : ','gras')
f += coul(u'Restrictions sur adhérent : ','gras')
f += coul(u', '.join(bl),'rouge')
f += '\n'
@ -592,8 +592,8 @@ def machine_details(machine) :
f += machine.hotspot() and 'oui' or 'non'
position = machine.position()
if position:
f += coul(u'\t\t\tCoordonnées : ', 'gras')
f += u'%s°N, %s°E\n' % position
f += coul(u'\t\t\tCoordonnées : ', 'gras')
f += u'%s°N, %s°E\n' % position
else:
f += '\n'
@ -608,7 +608,7 @@ def machine_details(machine) :
f += coul(u'Puissance : ','gras') + u"%4.d" % int(machine.puissance())
f += coul(u'\tCanaux : ', 'gras') + machine.canal()
f += coul(u'\tÉtat : ', 'gras')
f += coul(u'\tÉtat : ', 'gras')
if borne_etat(machine.nom()):
f += coul(u'borne active', 'vert')
f += '\n'
@ -621,7 +621,7 @@ def machine_details(machine) :
if clients and base:
f += coul(u'Clients : \n','gras')
for (client, rssi) in clients:
# On va chercher le nom correspondant à l'adresse MAC
# On va chercher le nom correspondant à l'adresse MAC
res = base.search("mac=%s" % client)['machine']
authentification=""
if not res:
@ -630,7 +630,7 @@ def machine_details(machine) :
else:
client_nom = ", ".join(["%s [%s]" % (x.nom().split(".")[0],
x.proprietaire().Nom()) for x in res])
# On va regarder si le client est authentifié
# On va regarder si le client est authentifié
auth_ok = ipsec_ok(x)
if auth_ok != None:
if auth_ok:
@ -649,7 +649,7 @@ def machine_details(machine) :
coul("%d" % rssi, coul_rssi),
authentification)
else:
f += coul(u'borne éteinte','rouge')
f += coul(u'borne éteinte','rouge')
f += '\n'
if machine.nvram():
f += coul(u'NVRAM : ', 'gras')
@ -659,7 +659,7 @@ def machine_details(machine) :
f += coul(u'Clef IPsec : ','gras') + machine.ipsec()
f += '\n'
# Ports spéciaux
# Ports spéciaux
if machine.portTCPin():
f += coul(u'Ports TCP ouvert ext->machine : ','gras') + ' '.join(machine.portTCPin()) + '\n'
if machine.portTCPout():
@ -671,7 +671,7 @@ def machine_details(machine) :
# Exemption d'upload
if machine.exempt() :
f += coul(u'Upload exempté vers : ','gras') + ', '.join(machine.exempt()) + '\n'
f += coul(u'Upload exempté vers : ','gras') + ', '.join(machine.exempt()) + '\n'
f += _blacklist(machine)
f += _info(machine)
@ -681,7 +681,7 @@ def machine_details(machine) :
def club_details(club) :
"""
Affichage du détail des propriétés d'un club
Affichage du détail des propriétés d'un club
"""
f=''
# Cid
@ -697,16 +697,16 @@ def club_details(club) :
f += (coul(u'Imprimeurs : ', 'gras') + "%s\n" % ', '.join(map(lambda x:
club.search("aid=%s" % x)['adherent'][0].Nom(), club.imprimeurs())))
# État administratif
f += coul(u'État administratif : ','gras')
# État administratif
f += coul(u'État administratif : ','gras')
jour=1
if ann_scol not in club.paiement() :
if not jour : f += ' et '
f += coul(u"charte %s/%d non signée"% (ann_scol, ann_scol+1 ),'violet')
f += coul(u"charte %s/%d non signée"% (ann_scol, ann_scol+1 ),'violet')
jour = 0
if jour :
f += coul(u"à jour",'vert')
f += coul(u"à jour",'vert')
f += '\n'
# Chambre + prise
@ -721,7 +721,7 @@ def club_details(club) :
# Paiement
if club.paiement() :
f += coul(u'Charte signée pour les années scolaires :','gras')
f += coul(u'Charte signée pour les années scolaires :','gras')
g = ''
for an in club.paiement() : g += " %i-%i" % ( an, an+1 )
if len(g) > 35 : f += '\n\t'
@ -762,7 +762,7 @@ def club_details(club) :
return f
###########################################
# Fonctions annexes de formatage de données
# Fonctions annexes de formatage de données
def _blacklist(clas):
""" Formatage blackliste de la classe fournie """
@ -776,7 +776,7 @@ def _blacklist(clas):
event = event.split('$')
dates = strftime('%d/%m/%Y %H:%M', localtime(int(event[0])))
if event[1] == '-':
dates = u'à partir du %s' % dates
dates = u'à partir du %s' % dates
else:
dates = u'du %s au ' % dates
dates += strftime('%d/%m/%Y %H:%M', localtime(int(event[1])))
@ -836,14 +836,14 @@ def __bases_machines(m) :
elif isinstance(m, BorneWifi): t = 'born'
else : t='fixe'
# Déconnectée ?
# Déconnectée ?
b = m.blacklist_actif()
if not b :
bl = '-'
elif len(b) == 1 :
bl = coul(b[0],'rouge')
else :
bl = coul(u'cf détails','rouge')
bl = coul(u'cf détails','rouge')
return t , bl
@ -859,14 +859,14 @@ def borne_etat(borne) :
return False
def borne_clients_canal(borne) :
"""Renvoie la liste des adresses MAC associées à la borne ainsi que le canal.
"""Renvoie la liste des adresses MAC associées à la borne ainsi que le canal.
Chaque adresse MAC est en fait contenue dans un couple comprenant
l'adresse MAC et le RSSI du client associé.
l'adresse MAC et le RSSI du client associé.
On en profite pour renvoyer également le canal en cours de la
borne. On fait cela dans la même fonction car cela évite de faire
deux connexions ssh (ce qui est fort coûteux).
On en profite pour renvoyer également le canal en cours de la
borne. On fait cela dans la même fonction car cela évite de faire
deux connexions ssh (ce qui est fort coûteux).
Au final, on renvoie un dictionnaire
- mac-rssi: une liste de couples (MAC, RSSI)
@ -894,18 +894,18 @@ def borne_clients_canal(borne) :
return {"canal": canal, "mac-rssi": macs}
def prise_etat(chbre) :
""" Retoune un doublet contenant l'état de la prise associée à la chbre et les VLANs actives"""
""" Retoune un doublet contenant l'état de la prise associée à la chbre et les VLANs actives"""
f = u''
vlans = u''
try:
# On met aussi l'état
# On met aussi l'état
from hptools import sw_chbre, ConversationError
prise = sw_chbre(chbre)
vlans += ', '.join(prise.vlans())
f += u'prise %s' % prise.prise_brute
rows, cols = get_screen_size()
if prise.is_up() :
f += u', ' + coul(u'machine branchée','vert')
f += u', ' + coul(u'machine branchée','vert')
reste_cols = cols - 45
if prise.eth_mode().find('10Mbits')!=-1 :
f+= u', ' + coul(u'prise en 10Mbps','jaune')
@ -914,15 +914,15 @@ def prise_etat(chbre) :
macs = prise.show_prise_mac()
if len(macs) == 0:
if reste_cols < 20 :
# Faut aller à la ligne
# Faut aller à la ligne
f += u'\n '
f += coul(u'aucune MAC détectée', 'jaune')
f += coul(u'aucune MAC détectée', 'jaune')
else:
if len(macs) == 1 and reste_cols > 25 :
# Une seule mac et on a assez de place
f += u"MAC: %s" % macs[0]
else :
# On va à la ligne
# On va à la ligne
# Combien d'adresses MAC peut-on mettre par ligne ?
# Une adresse MAC =~ 20 caracteres
cols -= 17 # On met 15espaces devant chaque ligne
@ -936,9 +936,9 @@ def prise_etat(chbre) :
f += u"%s" % macs.pop()
count += 1
elif not prise.is_enable() :
f+= u', ' + coul(u'prise désactivée','rouge')
f+= u', ' + coul(u'prise désactivée','rouge')
else :
f+= u', activée, lien non détecté'
f+= u', activée, lien non détecté'
except ConversationError, r:
# Switch non manageable ou down
f += ', '
@ -956,7 +956,7 @@ def prise_etat(chbre) :
return f, vlans
##############################################################################
## Partie dévolue au système de recherche
## Partie dévolue au système de recherche
def __usage_brief(err='') :
""" Message d'erreur """
@ -1004,7 +1004,7 @@ def __usage() :
accu = champ
longueur = len(champ)
# Dernière ligne
# Dernière ligne
liste.append(accu)
cprint(__doc__ % { 'prog': sys.argv[0].split('/')[-1].split('.')[0],
@ -1015,11 +1015,11 @@ def __usage() :
def __recherche() :
"""
Recherche et affichage des résultats à partir des options founies (sys.argv)
Recherche et affichage des résultats à partir des options founies (sys.argv)
"""
global aff_ipsec, limit_aff_details, limit_aff_historique, debug
# Récupération des options
# Récupération des options
if len(sys.argv) == 1 :
# Pas d'option fournie
__usage_brief()
@ -1045,37 +1045,37 @@ def __recherche() :
# Mode debug
debug = 1
elif opt == '-l' or opt =='--limit':
# Passage mode condensé, mode détaillé
# Passage mode condensé, mode détaillé
try : limit_aff_details = int(val)
except :
__usage_brief(u'Valeur du paramètre %s incorecte (doit être un entier positif)' % opt)
__usage_brief(u'Valeur du paramètre %s incorecte (doit être un entier positif)' % opt)
elif opt == '-L' or opt =='--limit-historique':
# Limitation du nombre de lignes d'historique
try : limit_aff_historique = int(val)
except :
__usage_brief(u'Valeur du paramètre %s incorecte (doit être un entier positif)' % opt)
__usage_brief(u'Valeur du paramètre %s incorecte (doit être un entier positif)' % opt)
elif opt in [ '-a', '--adherent' ] :
only_adh = 1
cprint(u"Affichage limité aux adhérents.")
cprint(u"Affichage limité aux adhérents.")
elif opt in [ '-m', '--machine' ] :
only_mac = 1
cprint(u"Affichage limité aux machines.")
cprint(u"Affichage limité aux machines.")
elif opt in [ '-c', '--club' ] :
only_club = 1
cprint(u"Affichage limité aux clubs.")
cprint(u"Affichage limité aux clubs.")
elif opt == '--crans' :
only_crans = 1
mtech = 1
cprint(u"Affichage limité aux machines du crans.")
cprint(u"Affichage limité aux machines du crans.")
elif opt in [ '-b', '--bornes' ] :
only_bornes = 1
cprint(u"Affichage limité aux bornes wifi.")
cprint(u"Affichage limité aux bornes wifi.")
# On va tenter de limiter un peu la recherche
if not arg :
# Recherche initiale sans critère
# Recherche initiale sans critère
arg = [ 'canal=*&host=*.crans.org']
elif arg[0].find('=')!=-1 :
# Recherche avec critères
# Recherche avec critères
arg += [ '&canal=*' ]
elif opt in [ '-t', '--tech' ] :
# Format affichage des machines
@ -1085,13 +1085,13 @@ def __recherche() :
aff_ipsec = 1
if only_adh + only_mac + only_club + only_bornes > 1 :
__usage_brief(u'Options utilisées incompatibles')
__usage_brief(u'Options utilisées incompatibles')
arg = ' '.join(arg)
# Cas particulier de recherche sur prise
if arg.count('=') == 1 and arg.split('=')[0] == 'prise' :
prise = arg.split('=')[1]
# Récupération de la chambre
# Récupération de la chambre
try:
from annuaires import reverse
chbre = reverse(prise[0].lower())[prise[1:]]
@ -1103,7 +1103,7 @@ def __recherche() :
if chbre:
if len(chbre) != 1 :
cprint(u"Prise correspondante à plusieurs chambres %s" % ' '.join(chbre))
cprint(u"Prise correspondante à plusieurs chambres %s" % ' '.join(chbre))
return
# On fait la recherche sur la chambre
chbre= prise[0] + chbre[0]
@ -1122,21 +1122,21 @@ def __recherche() :
except ValueError, c :
__usage_brief(c.args[0])
# Traitement du résultat
# Traitement du résultat
if not res['adherent'] and not res['machine'] and not res['club']:
# Pas de résultat dans la base
# Pas de résultat dans la base
# Recherche sur chambre ?
if arg.count('=') == 1 and arg.split('=')[0] == 'chbre' :
# Affichage des infos de la chambre
chbre = arg.split('=')[1]
cprint(u"Chambre %s inoccupée ou invalide (%s)" % (chbre,prise_etat(chbre)[0]))
cprint(u"Chambre %s inoccupée ou invalide (%s)" % (chbre,prise_etat(chbre)[0]))
else :
cprint(u"Aucun résultat trouvé.")
cprint(u"Aucun résultat trouvé.")
sys.exit(3)
# L'affichage souhaité a été précisé ?
# L'affichage souhaité a été précisé ?
elif only_bornes :
if not res['machine'] :
cprint(u'Aucun résultat à afficher')
cprint(u'Aucun résultat à afficher')
sys.exit(4)
else :
if len(res['machine']) > limit_aff_details :
@ -1154,11 +1154,11 @@ def __recherche() :
traite.append(a.id())
to_aff.append(m.proprietaire())
if not(to_aff) :
cprint(u'Aucun résultat à afficher')
cprint(u'Aucun résultat à afficher')
sys.exit(4)
aff(to_aff)
elif res['club'] :
cprint(u'Aucun résultat à afficher')
cprint(u'Aucun résultat à afficher')
sys.exit(4)
elif only_mac :
if res['machine'] : aff(res['machine'],mtech)
@ -1179,22 +1179,22 @@ def __recherche() :
traite.append(a.id())
to_aff.append(m.proprietaire())
if not(to_aff) :
cprint(u'Aucun résultat à afficher')
cprint(u'Aucun résultat à afficher')
sys.exit(4)
aff(to_aff)
elif res['adherent'] :
cprint(u'Aucun résultat à afficher')
cprint(u'Aucun résultat à afficher')
sys.exit(4)
# Non : on affiche tout.
else :
if res['adherent'] :
cprint(u"Résultats trouvés parmi les adhérents :", 'cyan')
cprint(u"Résultats trouvés parmi les adhérents :", 'cyan')
aff(res['adherent'])
if res['machine'] :
cprint(u"Résultats trouvés parmi les machines :", 'cyan')
cprint(u"Résultats trouvés parmi les machines :", 'cyan')
aff(res['machine'],mtech)
if res['club']:
cprint(u"Résultats trouvés parmi les clubs :", 'cyan')
cprint(u"Résultats trouvés parmi les clubs :", 'cyan')
aff(res['club'])
if __name__ == '__main__' :
@ -1214,12 +1214,12 @@ if __name__ == '__main__' :
# Fin
sys.exit(c)
except :
cprint(u"""Une erreur fatale s'est produite durant l'exécution.
Pour l'amélioration de ce programme merci de prévenir nounou en spécifiant la
marche à suivre pour reproduire cette erreur.""")
cprint(u"""Une erreur fatale s'est produite durant l'exécution.
Pour l'amélioration de ce programme merci de prévenir nounou en spécifiant la
marche à suivre pour reproduire cette erreur.""")
if debug :
cprint('-'*40)
cprint(u'Détails techniques :')
cprint(u'Détails techniques :')
import traceback
# On veut le traceback sur la sortie standard
sys.stderr = sys.stdout