diff options
author | Stephen Finucane <sfinucan@redhat.com> | 2021-01-28 11:34:44 +0000 |
---|---|---|
committer | Stephen Finucane <sfinucan@redhat.com> | 2021-01-29 15:40:42 +0000 |
commit | c1c991045cece85dd55494f9d4670429e370e131 (patch) | |
tree | 7cefcabd9326a6f8a42edc0eb061d808ffca4ff8 | |
parent | 4f45f9a30e657265c5b5ac119af3aaa0e5ec7184 (diff) | |
download | cliff-c1c991045cece85dd55494f9d4670429e370e131.tar.gz |
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 <sfinucan@redhat.com>
-rw-r--r-- | cliff/columns.py | 5 | ||||
-rw-r--r-- | cliff/tests/test_columns.py | 13 | ||||
-rw-r--r-- | releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml | 9 |
3 files changed, 27 insertions, 0 deletions
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. |