From bde3b5a9868760190f1cbda3eb4e133d3db9409d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 18 Oct 2022 19:45:07 +0200 Subject: Merging upstream version 2.3.0. Signed-off-by: Daniel Baumann --- AUTHORS | 1 + CHANGELOG | 7 +++++ cli_helpers/__init__.py | 2 +- cli_helpers/tabular_output/tabulate_adapter.py | 22 +++++++++++++- docs/source/quickstart.rst | 14 ++++----- requirements-dev.txt | 2 +- tests/tabular_output/test_output_formatter.py | 41 ++++++++++++++++++++++++-- 7 files changed, 77 insertions(+), 12 deletions(-) diff --git a/AUTHORS b/AUTHORS index 4bad3dd..40f2b90 100644 --- a/AUTHORS +++ b/AUTHORS @@ -24,6 +24,7 @@ This project receives help from these awesome contributors: - Waldir Pimenta - Mel Dafert - Andrii Kohut +- Roland Walker Thanks ------ diff --git a/CHANGELOG b/CHANGELOG index 8563af2..3435b46 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,13 @@ Changelog ========= +Version 2.3.0 +------------- + +(released on 2022-10-12) + +* don't escape newlines, etc. in ascii tables, and add ascii_escaped table format + Version 2.2.1 ------------- diff --git a/cli_helpers/__init__.py b/cli_helpers/__init__.py index b19ee4b..55e4709 100644 --- a/cli_helpers/__init__.py +++ b/cli_helpers/__init__.py @@ -1 +1 @@ -__version__ = "2.2.1" +__version__ = "2.3.0" diff --git a/cli_helpers/tabular_output/tabulate_adapter.py b/cli_helpers/tabular_output/tabulate_adapter.py index a7eabc0..2c557f8 100644 --- a/cli_helpers/tabular_output/tabulate_adapter.py +++ b/cli_helpers/tabular_output/tabulate_adapter.py @@ -52,9 +52,25 @@ tabulate._table_formats["ascii"] = tabulate.TableFormat( with_header_hide=None, ) +tabulate._table_formats["ascii_escaped"] = 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"] +tabulate.multiline_formats["psql_unicode"] = "psql_unicode" +tabulate.multiline_formats["double"] = "double" +tabulate.multiline_formats["ascii"] = "ascii" +tabulate.multiline_formats["minimal"] = "minimal" + supported_markup_formats = ( "mediawiki", "html", @@ -66,6 +82,7 @@ supported_markup_formats = ( ) supported_table_formats = ( "ascii", + "ascii_escaped", "plain", "simple", "minimal", @@ -82,7 +99,10 @@ supported_table_formats = ( supported_formats = supported_markup_formats + supported_table_formats -default_kwargs = {"ascii": {"numalign": "left"}} +default_kwargs = { + "ascii": {"numalign": "left"}, + "ascii_escaped": {"numalign": "left"}, +} headless_formats = ("minimal",) diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst index 319655d..b304de2 100644 --- a/docs/source/quickstart.rst +++ b/docs/source/quickstart.rst @@ -15,7 +15,7 @@ CLI Helpers provides a simple way to display your tabular data (columns/rows) in >>> data = [[1, 'Asgard', True], [2, 'Camelot', False], [3, 'El Dorado', True]] >>> headers = ['id', 'city', 'visited'] - >>> print(tabular_output.format_output(data, headers, format_name='simple')) + >>> print("\n".join(tabular_output.format_output(iter(data), headers, format_name='simple'))) id city visited ---- --------- --------- @@ -57,7 +57,7 @@ same data from our first example and put it in the ``fancy_grid`` format:: >>> data = [[1, 'Asgard', True], [2, 'Camelot', False], [3, 'El Dorado', True]] >>> headers = ['id', 'city', 'visited'] - >>> print(formatter.format_output(data, headers, format_name='fancy_grid')) + >>> print("\n".join(formatter.format_output(iter(data), headers, format_name='fancy_grid'))) ╒══════╤═══════════╤═══════════╕ │ id │ city │ visited │ ╞══════╪═══════════╪═══════════╡ @@ -70,7 +70,7 @@ same data from our first example and put it in the ``fancy_grid`` format:: That was easy! How about CLI Helper's vertical table layout? - >>> print(formatter.format_output(data, headers, format_name='vertical')) + >>> print("\n".join(formatter.format_output(iter(data), headers, format_name='vertical'))) ***************************[ 1. row ]*************************** id | 1 city | Asgard @@ -93,7 +93,7 @@ object, you can specify a default formatter so you don't have to pass the format name each time you want to format your data:: >>> formatter = TabularOutputFormatter(format_name='plain') - >>> print(formatter.format_output(data, headers)) + >>> print("\n".join(formatter.format_output(iter(data), headers))) id city visited 1 Asgard True 2 Camelot False @@ -115,13 +115,13 @@ formats, we could:: >>> data = [[1, 1.5], [2, 19.605], [3, 100.0]] >>> headers = ['id', 'rating'] - >>> print(format_output(data, headers, format_name='simple', disable_numparse=True)) + >>> print("\n".join(format_output(iter(data), headers, format_name='simple', disable_numparse=True))) id rating ---- -------- 1 1.5 2 19.605 3 100.0 - >>> print(format_output(data, headers, format_name='simple', disable_numparse=False)) + >>> print("\n".join(format_output(iter(data), headers, format_name='simple', disable_numparse=False))) id rating ---- -------- 1 1.5 @@ -140,7 +140,7 @@ far-fetched example to prove the point:: >>> step = 3 >>> data = [range(n, n + step) for n in range(0, 9, step)] >>> headers = 'abc' - >>> print(format_output(data, headers, format_name='simple')) + >>> print("\n".join(format_output(iter(data), headers, format_name='simple'))) a b c --- --- --- 0 1 2 diff --git a/requirements-dev.txt b/requirements-dev.txt index 7846a4d..de1e52f 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,5 @@ autopep8==1.3.3 -codecov==2.0.9 +codecov==2.0.16 coverage==4.3.4 black>=20.8b1 Pygments>=2.4.0 diff --git a/tests/tabular_output/test_output_formatter.py b/tests/tabular_output/test_output_formatter.py index b307c1c..8e1fa92 100644 --- a/tests/tabular_output/test_output_formatter.py +++ b/tests/tabular_output/test_output_formatter.py @@ -21,6 +21,41 @@ def test_tabular_output_formatter(): ["hi", Decimal("1.1")], ["Pablo\rß\n", 0], ] + expected = dedent( + """\ + +-------+---------+ + | text | numeric | + +-------+---------+ + | abc | 1 | + | defg | 11.1 | + | hi | 1.1 | + | Pablo | 0 | + | ß | | + +-------+---------+""" + ) + + print(expected) + print( + "\n".join( + TabularOutputFormatter().format_output( + iter(data), headers, format_name="ascii" + ) + ) + ) + assert expected == "\n".join( + TabularOutputFormatter().format_output(iter(data), headers, format_name="ascii") + ) + + +def test_tabular_output_escaped(): + """Test the ascii_escaped output format.""" + headers = ["text", "numeric"] + data = [ + ["abc", Decimal(1)], + ["defg", Decimal("11.1")], + ["hi", Decimal("1.1")], + ["Pablo\rß\n", 0], + ] expected = dedent( """\ +------------+---------+ @@ -37,12 +72,14 @@ def test_tabular_output_formatter(): print( "\n".join( TabularOutputFormatter().format_output( - iter(data), headers, format_name="ascii" + iter(data), headers, format_name="ascii_escaped" ) ) ) assert expected == "\n".join( - TabularOutputFormatter().format_output(iter(data), headers, format_name="ascii") + TabularOutputFormatter().format_output( + iter(data), headers, format_name="ascii_escaped" + ) ) -- cgit v1.2.3