DEV Community

Cover image for "Blessedtable", a python package for building colorful formatted ASCII tables
Shuvo Paul
Shuvo Paul

Posted on

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

__Blessedtable__.

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
Enter fullscreen mode Exit fullscreen mode

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())
Enter fullscreen mode Exit fullscreen mode

Empty table

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
Enter fullscreen mode Exit fullscreen mode

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())
Enter fullscreen mode Exit fullscreen mode

initial table

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())
Enter fullscreen mode Exit fullscreen mode

multi formatted table

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

The code is hosted on github.

Latest comments (0)