]> gitweb.pimeys.fr Git - scripts-20-100.git/blobdiff - bde/pretty_print.py
[bde] Shortcuts utiles++
[scripts-20-100.git] / bde / pretty_print.py
diff --git a/bde/pretty_print.py b/bde/pretty_print.py
new file mode 100644 (file)
index 0000000..e0b525c
--- /dev/null
@@ -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