[stats_cableurs2] Maj pour les adhésions glissantes, et rationalisation.

* Il y a une fonction pour afficher des tableaux, j'ai ajouté le colour swapping
 sur les lignes.
 * Le parsing des arguments est amélioré.
 * J'ai viré les tabulations.
 * Il faut aérer le code !
This commit is contained in:
Pierre-Elliott Bécue 2014-09-01 00:06:15 +02:00
parent 87cfd39b7f
commit 096a243c77
2 changed files with 119 additions and 130 deletions

View file

@ -9,8 +9,8 @@
# ---------
#
# Décorateur :
# static_var(name, val), un décorateur pour créer une variable
# statique dans une fonction
# static_var([(name, val)]), un décorateur pour créer des variables
# statiques dans une fonction
#
# Fonctions :
# getTerminalSize(), une fonction qui récupère le couple
@ -47,14 +47,15 @@ term_format = '\x1b\[[0-1];([0-9]|[0-9][0-9])m'
dialog_format = '\\\Z.'
sep_col = u"|"
def static_var(name, val):
def static_var(couples):
"""Decorator setting static variable
to a function.
"""
def decorate(fun):
functools.wraps(fun)
setattr(fun, name, val)
for (name, val) in couples:
setattr(fun, name, val)
return fun
return decorate
@ -220,7 +221,7 @@ def nostyle(dialog=False):
return "\Zn"
return "\033[1;0m"
@static_var("styles", {})
@static_var([("styles", {})])
def style(texte, what=[], dialog=False):
"""
Pretty text is pretty
@ -396,7 +397,7 @@ def format_data(data, format):
return "%.2f %s" % (data/oct_sizes[i], oct_names[i])
return "%.0f o" % (data)
def tableau(data, titre=None, largeur=None, alignement=None, format=None, dialog=False, width=None, styles=None):
def tableau(data, titre=None, largeur=None, alignement=None, format=None, dialog=False, width=None, styles=None, swap=[]):
"""
Retourne une chaine formatée repésentant un tableau.
@ -418,6 +419,10 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None, dialog
o = octet
Si None, s pour chaque colonne
width : force la largeur
styles : applique une liste de styles, un à chaque colonne.
swap : Met styles à None et alterne une ligne sur deux niveau couleurs.
"""
if data and isinstance(data, list):
@ -428,6 +433,11 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None, dialog
if format is None:
format = ['s'] * nb_cols
if swap != []:
styles = None
else:
swap = [None]
if styles is None:
styles = [None] * nb_cols
@ -465,7 +475,15 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None, dialog
# Les données
#############
chaine += u'\n'.join([sep_col + sep_col.join([style(ligne[i], styles[i]) for i in range(nb_cols)]) + sep_col for ligne in data])
j = 0
for ligne in data:
chaine += u"%s" % (sep_col,)
if swap:
chaine += sep_col.join([style(ligne[i], swap[j]) for i in range(nb_cols)])
else:
chaine += sep_col.join([style(ligne[i], styles[i]) for i in range(nb_cols)])
chaine += u"%s\n" % (sep_col,)
j = (j + 1) % len(swap)
return chaine