summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <sfinucan@redhat.com>2021-01-28 11:34:44 +0000
committerStephen Finucane <sfinucan@redhat.com>2021-01-29 15:40:42 +0000
commitc1c991045cece85dd55494f9d4670429e370e131 (patch)
tree7cefcabd9326a6f8a42edc0eb061d808ffca4ff8
parent4f45f9a30e657265c5b5ac119af3aaa0e5ec7184 (diff)
downloadcliff-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.py5
-rw-r--r--cliff/tests/test_columns.py13
-rw-r--r--releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml9
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.