From 67217b0e56cae8e88ebb861d3894551e3dedb1b7 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 20 Sep 2022 16:59:09 +0100 Subject: columns: Useful __str__, __repr__ implementation The default implementations for __str__ and __repr__ are rubbish. >>> from osc_lib.cli import format_columns >>> str(format_columns.DictColumn({'foo': 'bar'})) '' >>> repr(format_columns.DictColumn({'foo': 'bar'})) '' Make it useful. >>> from osc_lib.cli import format_columns >>> str(format_columns.DictColumn({'foo': 'bar'})) "foo='bar'" >>> repr(format_columns.DictColumn({'foo': 'bar'})) "DictColumn({'foo': 'bar'})" This helps when testing as the reason for mismatches will be more obvious. Change-Id: I8b8598875f896cb3dbf417515d377e7758b3b98b Signed-off-by: Stephen Finucane --- cliff/columns.py | 6 ++++++ cliff/tests/test_columns.py | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/cliff/columns.py b/cliff/columns.py index b9cac5e..3462176 100644 --- a/cliff/columns.py +++ b/cliff/columns.py @@ -31,6 +31,12 @@ class FormattableColumn(object, metaclass=abc.ABCMeta): self.__class__ == other.__class__ and self._value < other._value ) + def __str__(self): + return self.human_readable() + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, self.machine_readable()) + @abc.abstractmethod def human_readable(self): """Return a basic human readable version of the data.""" diff --git a/cliff/tests/test_columns.py b/cliff/tests/test_columns.py index 6bce767..364d258 100644 --- a/cliff/tests/test_columns.py +++ b/cliff/tests/test_columns.py @@ -23,17 +23,31 @@ class FauxColumn(columns.FormattableColumn): class TestColumns(unittest.TestCase): - def test_faux_column_machine(self): + def test_machine_readable(self): c = FauxColumn(['list', 'of', 'values']) self.assertEqual(['list', 'of', 'values'], c.machine_readable()) - def test_faux_column_human(self): + def test_human_readable(self): c = FauxColumn(['list', 'of', 'values']) self.assertEqual( - u"I made this string myself: ['list', 'of', 'values']", + "I made this string myself: ['list', 'of', 'values']", c.human_readable(), ) + def test_str(self): + c = FauxColumn(['list', 'of', 'values']) + self.assertEqual( + "I made this string myself: ['list', 'of', 'values']", + str(c), + ) + + def test_repr(self): + c = FauxColumn(['list', 'of', 'values']) + self.assertEqual( + "FauxColumn(['list', 'of', 'values'])", + repr(c), + ) + def test_sorting(self): cols = [ FauxColumn('foo'), -- cgit v1.2.1