From c1c991045cece85dd55494f9d4670429e370e131 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Thu, 28 Jan 2021 11:34:44 +0000 Subject: Make 'FormattableColumn' comparable Implement the '__lt__' magic method, thus providing the minimal set of rich comparison methods necessary to support sorting. This will allows users using these formatters for the more basic types (i.e. not dicts) to sort their output using the standard '--sort-column' option. Change-Id: I08e1f1bc75fa6452f19dfb9d221c1daec194d58d Signed-off-by: Stephen Finucane --- cliff/columns.py | 5 +++++ cliff/tests/test_columns.py | 13 +++++++++++++ .../comparable-FormattableColumn-31c0030ced70b7fb.yaml | 9 +++++++++ 3 files changed, 27 insertions(+) create mode 100644 releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml diff --git a/cliff/columns.py b/cliff/columns.py index 6ecef64..b9cac5e 100644 --- a/cliff/columns.py +++ b/cliff/columns.py @@ -26,6 +26,11 @@ class FormattableColumn(object, metaclass=abc.ABCMeta): self.__class__ == other.__class__ and self._value == other._value ) + def __lt__(self, other): + return ( + self.__class__ == other.__class__ and self._value < other._value + ) + @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 fef1128..aec43b2 100644 --- a/cliff/tests/test_columns.py +++ b/cliff/tests/test_columns.py @@ -33,3 +33,16 @@ class TestColumns(unittest.TestCase): u"I made this string myself: ['list', 'of', 'values']", c.human_readable(), ) + + def test_sorting(self): + cols = [ + FauxColumn('foo'), + FauxColumn('bar'), + FauxColumn('baz'), + FauxColumn('foo'), + ] + cols.sort() + self.assertEqual( + ['bar', 'baz', 'foo', 'foo'], + [c.machine_readable() for c in cols], + ) diff --git a/releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml b/releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml new file mode 100644 index 0000000..f32322e --- /dev/null +++ b/releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Instances of ``cliff.columns.FormattableColumn`` are now comparable. This + allows implementations of ``FormattableColumn`` storing primitive data + types or containers with primitive data types to be sorted using the + ``--sort-column`` option. Implementations of ``FormattableColumn`` that + store other types of data will still need to implement their own rich + comparison magic methods. -- cgit v1.2.1