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>
This commit is contained in:
parent
4f45f9a30e
commit
c1c991045c
cliff
releasenotes/notes
@ -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."""
|
||||
|
@ -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],
|
||||
)
|
||||
|
@ -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.
|
Loading…
x
Reference in New Issue
Block a user