From 58f57d754163fe0a8d19894fe0df729f30f1e114 Mon Sep 17 00:00:00 2001 From: Tomer Haskalovitch Date: Wed, 14 May 2025 02:40:59 +0300 Subject: [PATCH] mgr/dashboard: add missing fields to subsytem list command Signed-off-by: Tomer Haskalovitch (cherry picked from commit 2962b4c02610a8445d34ca16961188250f3a2274) --- src/pybind/mgr/dashboard/model/nvmeof.py | 3 +++ .../mgr/dashboard/services/nvmeof_client.py | 4 ++-- .../mgr/dashboard/tests/test_nvmeof_client.py | 22 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/dashboard/model/nvmeof.py b/src/pybind/mgr/dashboard/model/nvmeof.py index 49b175a02e1..59136ddd252 100644 --- a/src/pybind/mgr/dashboard/model/nvmeof.py +++ b/src/pybind/mgr/dashboard/model/nvmeof.py @@ -39,6 +39,9 @@ class Subsystem(NamedTuple): namespace_count: int subtype: str max_namespaces: int + has_dhchap_key: bool + allow_any_host: bool + created_without_key: bool = False class SubsystemList(NamedTuple): diff --git a/src/pybind/mgr/dashboard/services/nvmeof_client.py b/src/pybind/mgr/dashboard/services/nvmeof_client.py index 556b59eb365..36b8d0c8e09 100644 --- a/src/pybind/mgr/dashboard/services/nvmeof_client.py +++ b/src/pybind/mgr/dashboard/services/nvmeof_client.py @@ -205,6 +205,7 @@ else: def _lazily_create_namedtuple(data: Any, target_type: Type[NamedTuple], depth: int, max_depth: int) -> Generator: + # pylint: disable=protected-access """ Lazily create NamedTuple from a dict """ field_values = {} for field, field_type in zip(target_type._fields, @@ -224,8 +225,7 @@ else: except StopIteration: return else: - # If the field is missing assign None - field_values[field] = None + field_values[field] = target_type._field_defaults.get(field) namedtuple_instance = target_type(**field_values) # type: ignore yield namedtuple_instance diff --git a/src/pybind/mgr/dashboard/tests/test_nvmeof_client.py b/src/pybind/mgr/dashboard/tests/test_nvmeof_client.py index 76fcd63f7cf..6df2ec3e0f9 100644 --- a/src/pybind/mgr/dashboard/tests/test_nvmeof_client.py +++ b/src/pybind/mgr/dashboard/tests/test_nvmeof_client.py @@ -301,6 +301,11 @@ class EmptyModel(NamedTuple): pass +class ModelWithDefaultParam(NamedTuple): + a: str + b: str = 'iamdefault' + + @pytest.fixture(name="person_func") def fixture_person_func(): @convert_to_model(Boy) @@ -355,6 +360,23 @@ class TestConvertToModel: result = get_adult() assert result == {'name': 'Charlie', 'age': 40, "children": [], 'hobby': None} + def test_fields_default_value(self, disable_message_to_dict): + # pylint: disable=unused-argument + @convert_to_model(ModelWithDefaultParam) + def get() -> dict: + return {"a": "bla"} + + result = get() + assert result == {'a': 'bla', 'b': "iamdefault"} + + # pylint: disable=unused-argument + @convert_to_model(ModelWithDefaultParam) + def get2() -> dict: + return {"a": "bla", "b": 'notdefault'} + + result = get2() + assert result == {'a': 'bla', 'b': "notdefault"} + def test_nested_fields(self, disable_message_to_dict): # pylint: disable=unused-argument @convert_to_model(Adult) -- 2.39.5