From d44becb7a9c710ddde3c2e0f95edbcda3970f4dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20D=C3=B6tsch?= Date: Fri, 18 Sep 2026 05:18:58 +0000 Subject: [PATCH] inspect: order multi attributes --- .../serveradmin/servershell/views.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/serveradmin/serveradmin/servershell/views.py b/packages/serveradmin/serveradmin/servershell/views.py index b86e3e0b..76131ac4 100644 --- a/packages/serveradmin/serveradmin/servershell/views.py +++ b/packages/serveradmin/serveradmin/servershell/views.py @@ -241,6 +241,20 @@ def edit(request): return _edit(request, server, True) +def _sort_multi_values(values) -> list: + """Sort multi attribute values for display + + Multi attribute values are sets and have no stable order. Sort them + by their natural order and fall back to the string representation for + values that can not be compared with each other, e.g. inet attributes + without an address family restriction holding IPv4 and IPv6 values. + """ + try: + return sorted(values) + except TypeError: + return sorted(values, key=str) + + def _edit(request: HttpRequest, server, edit_mode=False, template='edit'): # NOQA: C901 # @TODO work with ServerAttribute models here and use Django forms invalid_attrs = set() @@ -360,6 +374,9 @@ def _edit(request: HttpRequest, server, edit_mode=False, template='edit'): # NO ): is_related_attribute = True + if attribute.multi and value is not None: + value = _sort_multi_values(value) + fields_set.add(key) fields.append({ 'key': key,