Track namespace-derived class aliases

This commit is contained in:
2026-07-02 17:30:00 +02:00
parent b560f238a1
commit 5844a0a433
2 changed files with 111 additions and 5 deletions
@@ -2151,6 +2151,106 @@ Alias.RETURN_TYPES = ("MASK",)
self.assertEqual({}, result["nodes"])
self.assertEqual("no_static_nodes", result["pack"]["status"])
def test_module_class_globals_subscript_alias_patch_after_mapping_skips_node(self):
source = '''
class GlobalsSubscriptAliasPatchedNode:
RETURN_TYPES = ("IMAGE",)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
},
}
NODE_CLASS_MAPPINGS = {
"GlobalsSubscriptAliasPatchedNode": GlobalsSubscriptAliasPatchedNode,
}
Alias = globals()["GlobalsSubscriptAliasPatchedNode"]
Alias.RETURN_TYPES = ("MASK",)
'''
result = self._extract_source(source, "globals-subscript-alias-patched-node-pack")
self.assertEqual({}, result["nodes"])
self.assertEqual("no_static_nodes", result["pack"]["status"])
def test_module_class_globals_get_alias_patch_after_mapping_skips_node(self):
source = '''
class GlobalsGetAliasPatchedNode:
RETURN_TYPES = ("IMAGE",)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
},
}
NODE_CLASS_MAPPINGS = {
"GlobalsGetAliasPatchedNode": GlobalsGetAliasPatchedNode,
}
Alias = globals().get("GlobalsGetAliasPatchedNode")
Alias.RETURN_TYPES = ("MASK",)
'''
result = self._extract_source(source, "globals-get-alias-patched-node-pack")
self.assertEqual({}, result["nodes"])
self.assertEqual("no_static_nodes", result["pack"]["status"])
def test_module_class_locals_subscript_alias_patch_after_mapping_skips_node(self):
source = '''
class LocalsSubscriptAliasPatchedNode:
RETURN_TYPES = ("IMAGE",)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
},
}
NODE_CLASS_MAPPINGS = {
"LocalsSubscriptAliasPatchedNode": LocalsSubscriptAliasPatchedNode,
}
Alias = locals()["LocalsSubscriptAliasPatchedNode"]
Alias.RETURN_TYPES = ("MASK",)
'''
result = self._extract_source(source, "locals-subscript-alias-patched-node-pack")
self.assertEqual({}, result["nodes"])
self.assertEqual("no_static_nodes", result["pack"]["status"])
def test_module_class_vars_get_alias_patch_after_mapping_skips_node(self):
source = '''
class VarsGetAliasPatchedNode:
RETURN_TYPES = ("IMAGE",)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
},
}
NODE_CLASS_MAPPINGS = {
"VarsGetAliasPatchedNode": VarsGetAliasPatchedNode,
}
Alias = vars().get("VarsGetAliasPatchedNode")
Alias.RETURN_TYPES = ("MASK",)
'''
result = self._extract_source(source, "vars-get-alias-patched-node-pack")
self.assertEqual({}, result["nodes"])
self.assertEqual("no_static_nodes", result["pack"]["status"])
def test_module_class_attribute_alias_mutation_before_mapping_skips_node(self):
source = '''
class PreMappingAttributeAliasNode:
+11 -5
View File
@@ -981,12 +981,18 @@ def _module_dict_entries(node, env, class_bindings, value_converter):
def _class_alias_sources(value, class_aliases, class_bindings):
if not isinstance(value, ast.Name):
if isinstance(value, ast.Name):
if value.id in class_aliases:
return set(class_aliases[value.id])
if value.id in class_bindings:
return {value.id}
return set()
if value.id in class_aliases:
return set(class_aliases[value.id])
if value.id in class_bindings:
return {value.id}
name = _namespace_subscript_name(value) or _namespace_lookup_name(value)
if name in class_aliases:
return set(class_aliases[name])
if name in class_bindings:
return {name}
return set()