Fix #116477: Node group sockets with subtypes have broken idnames #117133
|
@ -14,7 +14,25 @@ import bpy
|
||||||
args = None
|
args = None
|
||||||
|
|
||||||
|
|
||||||
type_info = {
|
base_idname = {
|
||||||
|
"VALUE": "NodeSocketFloat",
|
||||||
|
"INT": "NodeSocketInt",
|
||||||
|
"BOOLEAN": "NodeSocketBool",
|
||||||
|
"ROTATION": "NodeSocketRotation",
|
||||||
|
"VECTOR": "NodeSocketVector",
|
||||||
|
"RGBA": "NodeSocketColor",
|
||||||
|
"STRING": "NodeSocketString",
|
||||||
|
"SHADER": "NodeSocketShader",
|
||||||
|
"OBJECT": "NodeSocketObject",
|
||||||
|
"IMAGE": "NodeSocketImage",
|
||||||
|
"GEOMETRY": "NodeSocketGeometry",
|
||||||
|
"COLLECTION": "NodeSocketCollection",
|
||||||
|
"TEXTURE": "NodeSocketTexture",
|
||||||
|
"MATERIAL": "NodeSocketMaterial",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
subtype_idname = {
|
||||||
("VALUE", "NONE"): "NodeSocketFloat",
|
("VALUE", "NONE"): "NodeSocketFloat",
|
||||||
("VALUE", "UNSIGNED"): "NodeSocketFloatUnsigned",
|
("VALUE", "UNSIGNED"): "NodeSocketFloatUnsigned",
|
||||||
("VALUE", "PERCENTAGE"): "NodeSocketFloatPercentage",
|
("VALUE", "PERCENTAGE"): "NodeSocketFloatPercentage",
|
||||||
|
@ -63,8 +81,12 @@ class SocketSpec():
|
||||||
external_links: int = 1
|
external_links: int = 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def idname(self):
|
def base_idname(self):
|
||||||
return type_info[(self.type, self.subtype)]
|
return base_idname[self.type]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def subtype_idname(self):
|
||||||
|
return subtype_idname[(self.type, self.subtype)]
|
||||||
|
|
||||||
|
|
||||||
class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
|
@ -95,7 +117,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
|
|
||||||
# Examine the interface item.
|
# Examine the interface item.
|
||||||
self.assertEqual(item.name, spec.name)
|
self.assertEqual(item.name, spec.name)
|
||||||
self.assertEqual(item.bl_socket_idname, spec.idname)
|
self.assertEqual(item.bl_socket_idname, spec.base_idname)
|
||||||
self.assertEqual(item.identifier, spec.identifier)
|
self.assertEqual(item.identifier, spec.identifier)
|
||||||
|
|
||||||
# Types that have subtypes.
|
# Types that have subtypes.
|
||||||
|
@ -134,7 +156,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
socket = next(s for s in node.inputs if s.identifier == spec.identifier)
|
socket = next(s for s in node.inputs if s.identifier == spec.identifier)
|
||||||
self.assertIsNotNone(socket, f"Could not find socket for group input identifier {spec.identifier}")
|
self.assertIsNotNone(socket, f"Could not find socket for group input identifier {spec.identifier}")
|
||||||
self.assertEqual(socket.name, spec.name)
|
self.assertEqual(socket.name, spec.name)
|
||||||
self.assertEqual(socket.bl_idname, spec.idname)
|
self.assertEqual(socket.bl_idname, spec.subtype_idname)
|
||||||
self.assertEqual(socket.type, spec.type)
|
self.assertEqual(socket.type, spec.type)
|
||||||
self.assertEqual(socket.hide_value, spec.hide_value)
|
self.assertEqual(socket.hide_value, spec.hide_value)
|
||||||
if test_links:
|
if test_links:
|
||||||
|
@ -147,7 +169,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
self.assertIsNotNone(
|
self.assertIsNotNone(
|
||||||
socket, f"Could not find group input socket for group input identifier {spec.identifier}")
|
socket, f"Could not find group input socket for group input identifier {spec.identifier}")
|
||||||
self.assertEqual(socket.name, spec.name)
|
self.assertEqual(socket.name, spec.name)
|
||||||
self.assertEqual(socket.bl_idname, spec.idname)
|
self.assertEqual(socket.bl_idname, spec.subtype_idname)
|
||||||
self.assertEqual(socket.type, spec.type)
|
self.assertEqual(socket.type, spec.type)
|
||||||
self.assertEqual(socket.hide_value, spec.hide_value)
|
self.assertEqual(socket.hide_value, spec.hide_value)
|
||||||
if test_links:
|
if test_links:
|
||||||
|
@ -158,7 +180,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
socket = next(s for s in node.outputs if s.identifier == spec.identifier)
|
socket = next(s for s in node.outputs if s.identifier == spec.identifier)
|
||||||
self.assertIsNotNone(socket, f"Could not find socket for group output identifier {spec.identifier}")
|
self.assertIsNotNone(socket, f"Could not find socket for group output identifier {spec.identifier}")
|
||||||
self.assertEqual(socket.name, spec.name)
|
self.assertEqual(socket.name, spec.name)
|
||||||
self.assertEqual(socket.bl_idname, spec.idname)
|
self.assertEqual(socket.bl_idname, spec.subtype_idname)
|
||||||
self.assertEqual(socket.type, spec.type)
|
self.assertEqual(socket.type, spec.type)
|
||||||
self.assertEqual(socket.hide_value, spec.hide_value)
|
self.assertEqual(socket.hide_value, spec.hide_value)
|
||||||
if test_links:
|
if test_links:
|
||||||
|
@ -171,7 +193,7 @@ class AbstractNodeGroupInterfaceTest(unittest.TestCase):
|
||||||
self.assertIsNotNone(
|
self.assertIsNotNone(
|
||||||
socket, f"Could not find group output socket for group output identifier {spec.identifier}")
|
socket, f"Could not find group output socket for group output identifier {spec.identifier}")
|
||||||
self.assertEqual(socket.name, spec.name)
|
self.assertEqual(socket.name, spec.name)
|
||||||
self.assertEqual(socket.bl_idname, spec.idname)
|
self.assertEqual(socket.bl_idname, spec.subtype_idname)
|
||||||
self.assertEqual(socket.type, spec.type)
|
self.assertEqual(socket.type, spec.type)
|
||||||
self.assertEqual(socket.hide_value, spec.hide_value)
|
self.assertEqual(socket.hide_value, spec.hide_value)
|
||||||
if test_links:
|
if test_links:
|
||||||
|
|
Loading…
Reference in New Issue