diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2021-09-06 04:12:52 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2021-09-06 04:12:52 +0000 |
commit | f42dcf1d6578df945fb52fb24703e88de54ad45b (patch) | |
tree | efd58347c05908c103cfdf8a2b3321c158a7e360 /cli_helpers/tabular_output/tabulate_adapter.py | |
parent | Adding upstream version 2.1.0. (diff) | |
download | cli-helpers-f42dcf1d6578df945fb52fb24703e88de54ad45b.tar.xz cli-helpers-f42dcf1d6578df945fb52fb24703e88de54ad45b.zip |
Adding upstream version 2.2.0.upstream/2.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'cli_helpers/tabular_output/tabulate_adapter.py')
-rw-r--r-- | cli_helpers/tabular_output/tabulate_adapter.py | 131 |
1 files changed, 112 insertions, 19 deletions
diff --git a/cli_helpers/tabular_output/tabulate_adapter.py b/cli_helpers/tabular_output/tabulate_adapter.py index 8c335b7..92e6f1d 100644 --- a/cli_helpers/tabular_output/tabulate_adapter.py +++ b/cli_helpers/tabular_output/tabulate_adapter.py @@ -4,24 +4,110 @@ from __future__ import unicode_literals from cli_helpers.utils import filter_dict_by_key -from cli_helpers.compat import (Terminal256Formatter, StringIO) -from .preprocessors import (convert_to_string, truncate_string, override_missing_value, - style_output, HAS_PYGMENTS) +from cli_helpers.compat import Terminal256Formatter, StringIO +from .preprocessors import ( + convert_to_string, + truncate_string, + override_missing_value, + style_output, + HAS_PYGMENTS, + escape_newlines, +) import tabulate -supported_markup_formats = ('mediawiki', 'html', 'latex', 'latex_booktabs', - 'textile', 'moinmoin', 'jira') -supported_table_formats = ('plain', 'simple', 'grid', 'fancy_grid', 'pipe', - 'orgtbl', 'psql', 'rst') + +tabulate.MIN_PADDING = 0 + +tabulate._table_formats["psql_unicode"] = tabulate.TableFormat( + lineabove=tabulate.Line("┌", "─", "┬", "┐"), + linebelowheader=tabulate.Line("├", "─", "┼", "┤"), + linebetweenrows=None, + linebelow=tabulate.Line("└", "─", "┴", "┘"), + headerrow=tabulate.DataRow("│", "│", "│"), + datarow=tabulate.DataRow("│", "│", "│"), + padding=1, + with_header_hide=None, +) + +tabulate._table_formats["double"] = tabulate.TableFormat( + lineabove=tabulate.Line("╔", "═", "╦", "╗"), + linebelowheader=tabulate.Line("╠", "═", "╬", "╣"), + linebetweenrows=None, + linebelow=tabulate.Line("╚", "═", "╩", "╝"), + headerrow=tabulate.DataRow("║", "║", "║"), + datarow=tabulate.DataRow("║", "║", "║"), + padding=1, + with_header_hide=None, +) + +tabulate._table_formats["ascii"] = tabulate.TableFormat( + lineabove=tabulate.Line("+", "-", "+", "+"), + linebelowheader=tabulate.Line("+", "-", "+", "+"), + linebetweenrows=None, + linebelow=tabulate.Line("+", "-", "+", "+"), + headerrow=tabulate.DataRow("|", "|", "|"), + datarow=tabulate.DataRow("|", "|", "|"), + padding=1, + with_header_hide=None, +) + +# "minimal" is the same as "plain", but without headers +tabulate._table_formats["minimal"] = tabulate._table_formats["plain"] + +supported_markup_formats = ( + "mediawiki", + "html", + "latex", + "latex_booktabs", + "textile", + "moinmoin", + "jira", +) +supported_table_formats = ( + "ascii", + "plain", + "simple", + "minimal", + "grid", + "fancy_grid", + "pipe", + "orgtbl", + "psql", + "psql_unicode", + "rst", + "github", + "double", +) + supported_formats = supported_markup_formats + supported_table_formats -preprocessors = (override_missing_value, convert_to_string, truncate_string, style_output) +default_kwargs = {"ascii": {"numalign": "left"}} +headless_formats = ("minimal",) + + +def get_preprocessors(format_name): + common_formatters = ( + override_missing_value, + convert_to_string, + truncate_string, + style_output, + ) + + if tabulate.multiline_formats.get(format_name): + return common_formatters + (style_output_table(format_name),) + else: + return common_formatters + (escape_newlines, style_output_table(format_name)) def style_output_table(format_name=""): - def style_output(data, headers, style=None, - table_separator_token='Token.Output.TableSeparator', **_): + def style_output( + data, + headers, + style=None, + table_separator_token="Token.Output.TableSeparator", + **_ + ): """Style the *table* a(e.g. bold, italic, and colors) .. NOTE:: @@ -71,24 +157,28 @@ def style_output_table(format_name=""): if not elt: return elt if elt.__class__ == tabulate.Line: - return tabulate.Line(*(style_field(table_separator_token, val) for val in elt)) + return tabulate.Line( + *(style_field(table_separator_token, val) for val in elt) + ) if elt.__class__ == tabulate.DataRow: - return tabulate.DataRow(*(style_field(table_separator_token, val) for val in elt)) + return tabulate.DataRow( + *(style_field(table_separator_token, val) for val in elt) + ) return elt srcfmt = tabulate._table_formats[format_name] - newfmt = tabulate.TableFormat( - *(addColorInElt(val) for val in srcfmt)) + newfmt = tabulate.TableFormat(*(addColorInElt(val) for val in srcfmt)) tabulate._table_formats[format_name] = newfmt return iter(data), headers + return style_output -def adapter(data, headers, table_format=None, preserve_whitespace=False, - **kwargs): + +def adapter(data, headers, table_format=None, preserve_whitespace=False, **kwargs): """Wrap tabulate inside a function for TabularOutputFormatter.""" - keys = ('floatfmt', 'numalign', 'stralign', 'showindex', 'disable_numparse') - tkwargs = {'tablefmt': table_format} + keys = ("floatfmt", "numalign", "stralign", "showindex", "disable_numparse") + tkwargs = {"tablefmt": table_format} tkwargs.update(filter_dict_by_key(kwargs, keys)) if table_format in supported_markup_formats: @@ -96,4 +186,7 @@ def adapter(data, headers, table_format=None, preserve_whitespace=False, tabulate.PRESERVE_WHITESPACE = preserve_whitespace - return iter(tabulate.tabulate(data, headers, **tkwargs).split('\n')) + tkwargs.update(default_kwargs.get(table_format, {})) + if table_format in headless_formats: + headers = [] + return iter(tabulate.tabulate(data, headers, **tkwargs).split("\n")) |