"Blessedtable", a python package for building colorful formatted ASCII tables

I have been using texttable and blessed a lot for building stylized ASCII tables. Recently, I published my code as a python package that combines these two modules for building colorful foormatted ASCII tables.

Installing the package

pip install blessedtable

Getting started

Inializing the table with default parameters will print the a table without any formatting. To know more about structuring the ascii table follow this link

from blessedtable import Blessedtable

table = Blessedtable()
table.set_deco(15)
table.set_cols_align(["l", "r", "c"])
table.set_cols_valign(["t", "m", "b"])
table.add_rows([["Name", "Age", "Nickname"],
    ["Mr\nXavier\nHuon", 32, "Xav'"],
    ["Mr\nBaptiste\nClement", 1, "Baby"],
    ["Mme\nLouise\nBourgeau", 28, "Lou\n\nLoue"]])

print(table.draw())

For styling blessedtable uses three parameters over textable. These are border_format, header_format, and column_format.

border_format needs to be either None , or of type str
header_format needs to be either None, or of type str, or a list of strings
column_format needs to be either None, or of type str, or a list of strings

Note: The strings should be formatting strings. Examples are given below.

'normal_on_normal' # text and background both have default color
'red' # text color is red, background has default color
'red_on_white' # text color is red, background is white
'italic_red_on_blue' # text italic and red, and background is white

All the color names should be by name; all the color names can be found here. To know more about blessed's formatting, follow this link

The three parameters can be set either while initializing or using setters.

table = Blessedtable(header_format='green_on_blue', border_format='blue', column_format='blue_on_rosybrown2')
#or
table = Blessedtable()
table.set_deco(15)
table.set_cols_align(["l", "r", "c"])
table.set_cols_valign(["t", "m", "b"])
table.add_rows([["Name", "Age", "Nickname"],
    ["Mr\nXavier\nHuon", 32, "Xav'"],
    ["Mr\nBaptiste\nClement", 1, "Baby"],
    ["Mme\nLouise\nBourgeau", 28, "Lou\n\nLoue"]])
table.header_format = 'green_on_blue'
table.border_format = 'blue'
table.column_format = 'blue_on_rosybrown2'

print(table.draw())

To achieve different colors for the columns for both header and the rows, pass a list having format strings corresponding to each of the columns.

Note: The number of elements in the list should be equal to the number of columns in a row; each element (format string) correspomds to successive columns. If header_format is None then it inherits the column_format and vice versa. If you don't want it to inherit the styles, set the header_format or column_format to "normal_on_normal"

hf = ['green', 'italic_blue', 'purple']
cf = ['white_on_green', 'italic_orange_on_blue', 'teal']
table.header_format = hf
table.border_format = 'yellow'
table.column_format = cf

print(table.draw())

Play with it and let me know what you think in the comments!

The code is hosted on github.

22