From 99c81721f90547b2ee27be55b6bb4c7f0e5d7263 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sat, 24 Feb 2024 12:44:29 +0100 Subject: [PATCH] Add test for passing None to add_formatter --- src/tablib/core.py | 5 +++-- tests/test_tablib.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/tablib/core.py b/src/tablib/core.py index e83e5dac..70e26f04 100644 --- a/src/tablib/core.py +++ b/src/tablib/core.py @@ -623,7 +623,8 @@ def get_col(self, index): def add_formatter(self, col, handler): """Adds a formatter to the :class:`Dataset`. - :param col: column to. Accepts index int or header str. + :param col: column to. Accepts index int, header str, or None to apply + the formatter to all columns. :param handler: reference to callback function to execute against each cell value. """ @@ -634,7 +635,7 @@ def add_formatter(self, col, handler): else: raise KeyError - if not col > self.width: + if col is None or col <= self.width: self._formatters.append((col, handler)) else: raise InvalidDatasetIndex diff --git a/tests/test_tablib.py b/tests/test_tablib.py index 0977cd65..ee562b9b 100755 --- a/tests/test_tablib.py +++ b/tests/test_tablib.py @@ -577,6 +577,22 @@ def _formatter(cell_value): # Test once more as the result should be the same self.assertEqual(self.founders.dict, expected) + def test_formatters_all_cols(self): + """ + Passing None as first add_formatter param apply formatter to all columns. + """ + + def _formatter(cell_value): + return str(cell_value).upper() + + self.founders.add_formatter(None, _formatter) + + self.assertEqual(self.founders.dict, [ + {'first_name': 'JOHN', 'last_name': 'ADAMS', 'gpa': '90'}, + {'first_name': 'GEORGE', 'last_name': 'WASHINGTON', 'gpa': '67'}, + {'first_name': 'THOMAS', 'last_name': 'JEFFERSON', 'gpa': '50'}, + ]) + def test_unicode_renders_markdown_table(self): # add another entry to test right field width for # integer