Skip to content
This repository has been archived by the owner on Dec 7, 2021. It is now read-only.

Commit

Permalink
Merge pull request #31 from liiight/master
Browse files Browse the repository at this point in the history
Created PorcelainTable class
  • Loading branch information
Robpol86 authored Aug 3, 2016
2 parents 6f209ed + 8dc71cc commit 607c639
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions terminaltables/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from terminaltables.github_table import GithubFlavoredMarkdownTable # noqa
from terminaltables.other_tables import DoubleTable # noqa
from terminaltables.other_tables import SingleTable # noqa
from terminaltables.other_tables import PorcelainTable # noqa

__author__ = '@Robpol86'
__license__ = 'MIT'
Expand Down
22 changes: 22 additions & 0 deletions terminaltables/other_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,25 @@ class DoubleTable(WindowsTableDouble):
"""

pass


class PorcelainTable(AsciiTable):
"""An AsciiTable stripped to a minimum.
Meant to be machine passable and roughly follow format set by git --porcelain option (hence the name).
:ivar iter table_data: List (empty or list of lists of strings) representing the table.
"""

def __init__(self, table_data):
"""Constructor.
:param iter table_data: List (empty or list of lists of strings) representing the table.
"""
# Porcelain table won't support title since it has no outer birders.
super(PorcelainTable, self).__init__(table_data)

# Removes outer border, and inner footing and header row borders.
self.inner_footing_row_border = False
self.inner_heading_row_border = False
self.outer_border = False
59 changes: 59 additions & 0 deletions tests/test_all_tables_e2e/test_porcelain_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
"""PorcelainTable end to end testing."""

from terminaltables import PorcelainTable


def test_single_line():
"""Test single-lined cells."""
table_data = [
['Name', 'Color', 'Type'],
['Avocado', 'green', 'nut'],
['Tomato', 'red', 'fruit'],
['Lettuce', 'green', 'vegetable'],
['Watermelon', 'green']
]
table = PorcelainTable(table_data)
table.justify_columns[0] = 'left'
table.justify_columns[1] = 'center'
table.justify_columns[2] = 'right'
actual = table.table

expected = (
' Name | Color | Type \n'
' Avocado | green | nut \n'
' Tomato | red | fruit \n'
' Lettuce | green | vegetable \n'
' Watermelon | green | '
)
assert actual == expected


def test_multi_line():
"""Test multi-lined cells."""
table_data = [
['Show', 'Characters'],
['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
]
table = PorcelainTable(table_data)

# Test defaults.
actual = table.table
expected = (
' Show | Characters \n'
' Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, \n'
' | Dil Pickles \n'
' South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
)
assert actual == expected

# Justify right.
table.justify_columns = {1: 'right'}
actual = table.table
expected = (
' Show | Characters \n'
' Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, \n'
' | Dil Pickles \n'
' South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
)
assert actual == expected

0 comments on commit 607c639

Please sign in to comment.