Skip to content

Commit 635b463

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Fix AddressesColumn sorting in server list output"
2 parents 2f8535e + e767b1e commit 635b463

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,19 @@ def machine_readable(self) -> Any:
8989
for k, v in (self._value.items() if self._value else [])
9090
}
9191

92+
def __lt__(self, other: Any) -> bool:
93+
# cliff only ever compares two values from the same column,
94+
# so `other` is expected to also be an AddressesColumn
95+
return self.human_readable() < other.human_readable()
96+
97+
def __eq__(self, other: object) -> bool:
98+
if not isinstance(other, AddressesColumn):
99+
return NotImplemented
100+
return self.human_readable() == other.human_readable()
101+
102+
def __hash__(self) -> int:
103+
return hash(self.human_readable())
104+
92105

93106
class HostColumn(cliff_columns.FormattableColumn[str | None]):
94107
"""Generate a formatted string of a hostname."""

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,41 @@ def setup_sdk_servers_mock(self, count):
8484
return servers
8585

8686

87+
class TestAddressesColumn(test_utils.TestCommand):
88+
def setUp(self):
89+
super().setUp()
90+
91+
self.addr_a = server.AddressesColumn(
92+
{'demo-net': [{'addr': '10.0.0.144', 'version': 4}]}
93+
)
94+
self.addr_b = server.AddressesColumn(
95+
{'network1': [{'addr': '192.168.1.254', 'version': 4}]}
96+
)
97+
98+
def test_sorting(self):
99+
"""Verify AddressesColumn objects can be sorted."""
100+
addresses = [
101+
self.addr_b,
102+
self.addr_a,
103+
]
104+
105+
self.assertEqual(
106+
[self.addr_a, self.addr_b],
107+
sorted(addresses),
108+
)
109+
110+
def test_comparison(self):
111+
"""Verify AddressesColumn comparison uses human-readable values."""
112+
addr_a_dup = server.AddressesColumn(
113+
{'demo-net': [{'addr': '10.0.0.144', 'version': 4}]}
114+
)
115+
116+
self.assertLess(self.addr_a, self.addr_b)
117+
self.assertGreater(self.addr_b, self.addr_a)
118+
self.assertEqual(self.addr_a, addr_a_dup)
119+
self.assertNotEqual(self.addr_a, self.addr_b)
120+
121+
87122
class TestServerAddFixedIP(TestServer):
88123
def setUp(self):
89124
super().setUp()

0 commit comments

Comments
 (0)