From c26159d48f60e737ba6e308b3ed88858cd115cc7 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Wed, 30 Oct 2019 14:13:39 +0100 Subject: [PATCH] Implement feature new format: Cli. Generate adapter for tabulate. This close issue #340 * Implement feature new format: Cli. Generate adapter for tabulate. This close issue #340 * Write respective tests. * Correct name Clase Base Test * Implement missing class method to export cli. * Remove property headers in method export book Cli. * Remove cli from list to test Iterable data books. --- setup.py | 1 + src/tablib/core.py | 8 ++++++++ src/tablib/formats/__init__.py | 3 ++- src/tablib/formats/_cli.py | 20 ++++++++++++++++++++ tests/test_tablib.py | 6 ++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/tablib/formats/_cli.py diff --git a/setup.py b/setup.py index 2ba3e76..698ace7 100755 --- a/setup.py +++ b/setup.py @@ -9,6 +9,7 @@ install = [ 'xlrd', 'xlwt', 'pyyaml', + 'tabulate', ] diff --git a/src/tablib/core.py b/src/tablib/core.py index 17d9621..e0c4327 100644 --- a/src/tablib/core.py +++ b/src/tablib/core.py @@ -621,6 +621,14 @@ class Dataset: """ pass + @property + def cli(): + """A CLI table representation of the :class:`Dataset` object. + + .. note:: This method can be used for export only. + """ + pass + @property def jira(): """A Jira table representation of the :class:`Dataset` object. diff --git a/src/tablib/formats/__init__.py b/src/tablib/formats/__init__.py index 12f2610..b0afeec 100644 --- a/src/tablib/formats/__init__.py +++ b/src/tablib/formats/__init__.py @@ -14,6 +14,7 @@ from . import _tsv as tsv from . import _xls as xls from . import _xlsx as xlsx from . import _yaml as yaml +from . import _cli as cli # xlsx before as xls (xlrd) can also read xlsx -available = (json, xlsx, xls, yaml, csv, dbf, tsv, html, jira, latex, ods, df, rst) +available = (json, xlsx, xls, yaml, csv, dbf, tsv, html, jira, latex, ods, df, rst, cli) diff --git a/src/tablib/formats/_cli.py b/src/tablib/formats/_cli.py new file mode 100644 index 0000000..5441e2f --- /dev/null +++ b/src/tablib/formats/_cli.py @@ -0,0 +1,20 @@ +""" Tablib - CLI Support +""" +from tabulate import tabulate + +title = 'cli' +extensions = ('txt',) + +DEFAULT_FORMAT = 'plain' + +def export_set(dataset, **kwargs): + """Returns CLI representation of Dataset.""" + if( dataset.headers is not None ): + kwargs.setdefault('headers', dataset.headers) + kwargs.setdefault('tablefmt', DEFAULT_FORMAT) + return tabulate( dataset, **kwargs) + +def export_book(dataset, **kwargs): + """Returns CLI representation of Dataset.""" + kwargs.setdefault('tablefmt', DEFAULT_FORMAT) + return tabulate( dataset, **kwargs) diff --git a/tests/test_tablib.py b/tests/test_tablib.py index 695d13d..bd336f9 100755 --- a/tests/test_tablib.py +++ b/tests/test_tablib.py @@ -1214,6 +1214,12 @@ class JiraTests(BaseTestCase): def test_jira_export_empty_dataset(self): self.assertTrue(tablib.Dataset().jira is not None) +class CliTests(BaseTestCase): + def test_cli_export(self): + self.assertEqual('a b c', tablib.Dataset(['a', 'b', 'c']).cli) + + def test_cli_export_github(self): + self.assertEqual('|---|---|---|\n| a | b | c |', tablib.Dataset(['a','b','c']).export('cli',tablefmt='github')) class DocTests(unittest.TestCase):