From 39b991800a13178b459cf3584e0c1cdae11514b1 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Thu, 2 Jul 2026 18:54:16 +0200 Subject: [PATCH] Track chained input type aliases --- .../test_generate_popular_node_signatures.py | 52 +++++++++++++++++++ tools/generate_popular_node_signatures.py | 12 +++++ 2 files changed, 64 insertions(+) diff --git a/tests/test_generate_popular_node_signatures.py b/tests/test_generate_popular_node_signatures.py index 75c8d01..a1f8fd9 100644 --- a/tests/test_generate_popular_node_signatures.py +++ b/tests/test_generate_popular_node_signatures.py @@ -3880,6 +3880,58 @@ NODE_CLASS_MAPPINGS = { self.assertEqual({}, result["nodes"]) self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_input_types_chained_alias_observed_by_arbitrary_call_skips_node(self): + source = ''' +class ChainedAliasObservedInputTypesNode: + RETURN_TYPES = ("IMAGE",) + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + }, + } + + A = B = INPUT_TYPES + observe(A) + + +NODE_CLASS_MAPPINGS = { + "ChainedAliasObservedInputTypesNode": ChainedAliasObservedInputTypesNode, +} +''' + result = self._extract_source(source, "chained-alias-observed-input-types-pack") + + self.assertEqual({}, result["nodes"]) + self.assertEqual("no_static_nodes", result["pack"]["status"]) + + def test_input_types_chained_alias_used_as_callee_skips_node(self): + source = ''' +class ChainedAliasCalleeInputTypesNode: + RETURN_TYPES = ("IMAGE",) + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + }, + } + + A = B = INPUT_TYPES + A() + + +NODE_CLASS_MAPPINGS = { + "ChainedAliasCalleeInputTypesNode": ChainedAliasCalleeInputTypesNode, +} +''' + result = self._extract_source(source, "chained-alias-callee-input-types-pack") + + self.assertEqual({}, result["nodes"]) + self.assertEqual("no_static_nodes", result["pack"]["status"]) + def test_input_types_default_observed_by_arbitrary_call_skips_node(self): source = ''' class DefaultObservedInputTypesNode: diff --git a/tools/generate_popular_node_signatures.py b/tools/generate_popular_node_signatures.py index a781966..a9123cb 100644 --- a/tools/generate_popular_node_signatures.py +++ b/tools/generate_popular_node_signatures.py @@ -1172,6 +1172,18 @@ def _input_types(cls, env, decorator_env): classmethod_shadowed = True if isinstance(stmt, ast.Assign): target_names = _assignment_target_names(stmt) + if len(stmt.targets) > 1 and _input_types_alias_sources(stmt.value, aliases): + target_aliases = [] + for target in stmt.targets: + target_name = _alias_target_name(target) + if target_name is None: + value = _INVALID + target_aliases = [] + break + target_aliases.append(target_name) + aliases.update(alias for alias in target_aliases if alias != "INPUT_TYPES") + if "INPUT_TYPES" not in target_names: + continue if ( len(stmt.targets) == 1 and isinstance(stmt.targets[0], ast.Name)