X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fpretty_print.py;fp=bde%2Fpretty_print.py;h=e0b525cb38178077982c07282cc567690c57be21;hb=94aabfcffe6a4743649b11cf77c6d24f50f65415;hp=0000000000000000000000000000000000000000;hpb=e84d9b963152b15263f79be0696ff84d55dd9b56;p=scripts-20-100.git diff --git a/bde/pretty_print.py b/bde/pretty_print.py new file mode 100644 index 0000000..e0b525c --- /dev/null +++ b/bde/pretty_print.py @@ -0,0 +1,38 @@ +#!/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