--- /dev/null
+#!/usr/bin/python
+# -*- encoding: utf-8 -*-
+
+""" Module pour afficher une sortie SQL «Comme si on y était». """
+
+def sql_pretty_print(liste, keys=None):
+ """Affiche (presque) la même chose que la sortie obtenue dans un prompt psql
+ si keys n'est pas fourni, l'ordre des champs ne sera pas toujours le même
+ crashe si liste est vide"""
+ if len(liste) == 0:
+ raise ExceptionsNote.EmptyResult("Impossible d'afficher un résultat vide.")
+ if keys == None:
+ keys = liste[0].keys()
+ # On unicodifie
+ for iligne in range(len(liste)):
+ for k, v in liste[iligne].items():
+ obj = dict(liste[iligne])
+ obj[k] = ("%s" % v).decode("utf8")
+ liste[iligne] = obj
+ # On cherche la largeur des colonnes
+ didi = dict([(k,k) for k in keys])
+ liste_plus_keys = liste + [didi]
+ maxs = dict([
+ (champ, max([
+ len(i[champ]) for i in liste_plus_keys
+ ])
+ )
+ for champ in keys
+ ])
+ # On aligne à gauche par défaut, mais pas si c'est un nombre
+ nombres = [int, float, long]
+ templateline = u" "+ u" | ".join([u"%%(%s)%s%ss" % (key, u"-"*(not type(liste[0][key]) in nombres), maxs[key]) for key in keys]) + u" \n"
+ output = templateline % didi
+ didi2 = dict([(k, "") for k in keys])
+ output += (templateline % didi2).replace(" ", "-").replace("|", "+")
+ for ligne in liste:
+ output += templateline % ligne
+ return output