Skip to content

Commit

Permalink
gitignore
Browse files Browse the repository at this point in the history
  • Loading branch information
CrazyPilot committed Jan 30, 2023
1 parent a7b5723 commit ad24590
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# py-fancy-tables
Fancy tables for python console

https://en.wikipedia.org/wiki/Box-drawing_character#Box_Drawing
50 changes: 27 additions & 23 deletions fancy_table/fancy_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,20 @@ def colorize(text, color, colors_enabled):
return text


class Section:
class TableRowBase:
def to_string(self, prev, next, colors_enabled):
raise NotImplementedError()


class Section(TableRowBase):
name = None
_table: 'FancyTable' = None

def __init__(self, name, table):
self.name = name
self._table = table

def to_string(self, colors_enabled):
def to_string(self, prev, next, colors_enabled):
def border(t):
return colorize(t, Fore.LIGHTBLACK_EX, colors_enabled)

Expand All @@ -28,33 +33,28 @@ def border(t):
return result


class Row:
row = None
class Row(TableRowBase):
row: list = None
_table: 'FancyTable' = None

def __init__(self, row, table):
self.row = row
self._table = table

def to_string(self, colors_enabled):
def to_string(self, prev=None, next=None, colors_enabled):
def border(t):
return colorize(t, Fore.LIGHTBLACK_EX, colors_enabled)

widths = self._table.widths
result = list()
result.append(border('┠─' + '─┴─'.join(['─'*w for w in widths]) + '─┨'))
result.append(border('┃ ') + self.name.center(sum(widths) + 3 * (len(widths) - 1)) + border(' ┃'))
result.append(border('┠─' + '─┬─'.join(['─' * w for w in widths]) + '─┨'))
result.append(
border('┃ ') +
border(' │ ').join([td.center(widths[idx]) for idx, td in enumerate(self.row)]) +
border(' ┃')
)
return result


class Row:
fields = None

def __init__(self, fields):
self.fields = fields


class FancyTable:
columns = []
rows = []
Expand All @@ -73,7 +73,7 @@ def add_row(self, row: list):
for idx, field in enumerate(row):
if self.widths[idx] < len(field):
self.widths[idx] = len(field)
self.rows.append(row)
self.rows.append(Row(row, self))

def add_section(self, section_name):
self.rows.append(Section(section_name, self))
Expand All @@ -92,13 +92,17 @@ def border(t):
header = border('┃ ') + border(' │ ').join(header) + border(' ┃')
result.append(header)

result.append(border('┣━' + '━┿━'.join(['━' * w for w in self.widths]) + '━┫'))

for row in self.rows:
if type(row) == Section:
result += row.to_string(colors_enabled)
else:
result.append(border('┃ ') + border(' │ ').join([td.center(self.widths[idx]) for idx, td in enumerate(row)]) + border(' ┃'))
if type(self.rows[0]) == Row:
result.append(border('┣━' + '━┿━'.join(['━' * w for w in self.widths]) + '━┫'))
else:
result.append(border('┣━' + '━┷━'.join(['━' * w for w in self.widths]) + '━┫'))

for idx, row in enumerate(self.rows):
result += row.to_string(
row[idx-1] if idx > 0 else None,
row[idx+1] if idx < len(self.rows)-1 else None,
colors_enabled
)

result.append(border('┗━' + '━┷━'.join(['━' * w for w in self.widths]) + '━┛'))
return '\n'.join(result)

0 comments on commit ad24590

Please sign in to comment.