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 @@ def __eq__(self, other): 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 @@ def test_faux_column_human(self): 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.