From 2c9452ae672f36f8cc9c388fa44aafe6173fea81 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Thu, 2 Jul 2026 16:35:19 +0200 Subject: [PATCH] Fail closed on invalid display mappings --- .../test_generate_popular_node_signatures.py | 52 +++++++++++++++++++ tools/generate_popular_node_signatures.py | 4 +- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/tests/test_generate_popular_node_signatures.py b/tests/test_generate_popular_node_signatures.py index 85b9d10..9e598a9 100644 --- a/tests/test_generate_popular_node_signatures.py +++ b/tests/test_generate_popular_node_signatures.py @@ -2354,6 +2354,58 @@ NODE_DISPLAY_NAME_MAPPINGS = build_displays() self.assertEqual({}, result["nodes"]) self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_non_string_display_mapping_value_skips_node(self): + source = ''' +class NonStringDisplayValueNode: + RETURN_TYPES = ("IMAGE",) + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + }, + } + + +NODE_CLASS_MAPPINGS = { + "NonStringDisplayValueNode": NonStringDisplayValueNode, +} +NODE_DISPLAY_NAME_MAPPINGS = { + "NonStringDisplayValueNode": 123, +} +''' + result = self._extract_source(source, "non-string-display-value-pack") + + self.assertEqual({}, result["nodes"]) + self.assertEqual("no_static_nodes", result["pack"]["status"]) + + def test_non_string_display_mapping_key_skips_node(self): + source = ''' +class NonStringDisplayKeyNode: + RETURN_TYPES = ("IMAGE",) + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + }, + } + + +NODE_CLASS_MAPPINGS = { + "NonStringDisplayKeyNode": NonStringDisplayKeyNode, +} +NODE_DISPLAY_NAME_MAPPINGS = { + 123: "Non String Display Key", +} +''' + result = self._extract_source(source, "non-string-display-key-pack") + + self.assertEqual({}, result["nodes"]) + self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_input_types_with_dynamic_control_flow_is_skipped(self): source = ''' def something(): diff --git a/tools/generate_popular_node_signatures.py b/tools/generate_popular_node_signatures.py index 8cb0e03..4862366 100644 --- a/tools/generate_popular_node_signatures.py +++ b/tools/generate_popular_node_signatures.py @@ -1074,7 +1074,9 @@ def _display_mappings(tree): return {} if displays is _INVALID: return _INVALID - return {str(k): str(v) for k, v in displays.items()} + if not all(isinstance(key, str) and isinstance(value, str) for key, value in displays.items()): + return _INVALID + return displays def _signature_from_class(node_type, cls, display, pack_meta, class_env, input_env):