diff --git a/tests/test_generate_popular_node_signatures.py b/tests/test_generate_popular_node_signatures.py index 1cf79af..26b277e 100644 --- a/tests/test_generate_popular_node_signatures.py +++ b/tests/test_generate_popular_node_signatures.py @@ -1484,6 +1484,35 @@ NODE_CLASS_MAPPINGS = { self.assertEqual({}, result["nodes"]) self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_tuple_wrapped_mutable_env_subscript_alias_skips_static_node(self): + source = ''' +TYPES = (["ok"],) + + +class TupleWrappedMutableInputNode: + RETURN_TYPES = ("IMAGE",) + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mode": TYPES, + }, + } + + +NODE_CLASS_MAPPINGS = { + "TupleWrappedMutableInputNode": TupleWrappedMutableInputNode, +} + +alias = TYPES[0] +alias.append(1) +''' + result = self._extract_source(source, "tuple-wrapped-mutable-input-pack") + + self.assertEqual({}, result["nodes"]) + self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_unhashable_literal_input_key_skips_repo_without_raising(self): source = ''' INPUTS = { diff --git a/tools/generate_popular_node_signatures.py b/tools/generate_popular_node_signatures.py index 8214946..3b2fa95 100644 --- a/tools/generate_popular_node_signatures.py +++ b/tools/generate_popular_node_signatures.py @@ -84,7 +84,11 @@ def _invalidate_env_names(env, names): def _is_mutable_static_value(value): - return isinstance(value, (dict, list, set)) + if isinstance(value, (dict, list, set)): + return True + if isinstance(value, tuple): + return any(_is_mutable_static_value(item) for item in value) + return False def _namespace_call_function_name(node):