[gestion/*.py] Ré-encodage de certains scripts en UTF-8
Ignore-this: dafa22ed56eaf0d816fd089e42672eb5 darcs-hash:20090309212124-0445d-09ac8ae4052b6f333706be1baa1c7f4d94455fd5.gz
This commit is contained in:
parent
7addc503a8
commit
cc31727b60
21 changed files with 1351 additions and 1351 deletions
302
gestion/whos.py
302
gestion/whos.py
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue