[Bf-blender-cvs] [7533b4416ea] functions: decision id cleanup
Jacques Lucke
noreply at git.blender.org
Tue Mar 19 17:11:59 CET 2019
Commit: 7533b4416eab6cdd2e3dcd2add81dbbb84d21983
Author: Jacques Lucke
Date: Tue Mar 19 17:11:49 2019 +0100
Branches: functions
https://developer.blender.org/rB7533b4416eab6cdd2e3dcd2add81dbbb84d21983
decision id cleanup
===================================================================
M release/scripts/startup/function_nodes/update_sockets.py
===================================================================
diff --git a/release/scripts/startup/function_nodes/update_sockets.py b/release/scripts/startup/function_nodes/update_sockets.py
index 725e502e820..56008d9431d 100644
--- a/release/scripts/startup/function_nodes/update_sockets.py
+++ b/release/scripts/startup/function_nodes/update_sockets.py
@@ -3,6 +3,7 @@ from . base import FunctionNode, DataSocket
from . inferencer import Inferencer
from collections import defaultdict
from . sockets import type_infos, OperatorSocket, DataSocket
+from dataclasses import dataclass
from . socket_decl import (
FixedSocketDecl,
@@ -52,6 +53,15 @@ def run_socket_operators(tree):
# Inferencing
#######################################
+ at dataclass
+class DecisionID:
+ node: bpy.types.Node
+ prop: object
+ prop_name: str
+
+ def __hash__(self):
+ return id(self)
+
def run_socket_type_inferencer(tree):
inferencer = Inferencer()
@@ -66,17 +76,10 @@ def run_socket_type_inferencer(tree):
nodes_to_rebuild = set()
for decision_id, value in inferencer.get_decisions().items():
- if decision_id[0] == "COLLECTION":
- node, prop_name, index, attr_name = decision_id[1:]
- item = getattr(node, prop_name)[index]
- if getattr(item, attr_name) != value:
- setattr(item, attr_name, value)
- nodes_to_rebuild.add(node)
- else:
- node, prop_name = decision_id
- if getattr(node, prop_name) != value:
- setattr(node, prop_name, value)
- nodes_to_rebuild.add(node)
+ decision_id: DecisionID
+ if getattr(decision_id.prop, decision_id.prop_name) != value:
+ setattr(decision_id.prop, decision_id.prop_name, value)
+ nodes_to_rebuild.add(decision_id.node)
for node in nodes_to_rebuild:
node.rebuild_and_try_keep_state()
@@ -101,7 +104,7 @@ def insert_constraints__within_node(inferencer, node):
elif isinstance(decl, VariadicListDecl):
for i, socket in enumerate(sockets[:-1]):
inferencer.insert_list_or_base_constraint(
- socket.to_id(node), decl.base_type, ("COLLECTION", node, decl.prop_name, i, "state"))
+ socket.to_id(node), decl.base_type, DecisionID(node, getattr(node, decl.prop_name)[i], "state"))
elif isinstance(decl, AnyVariadicDecl):
for socket in sockets[:-1]:
inferencer.insert_final_type(socket.to_id(node), socket.data_type)
@@ -109,7 +112,7 @@ def insert_constraints__within_node(inferencer, node):
inferencer.insert_union_constraint(
[sockets[0].to_id(node)],
decl.allowed_types,
- (node, decl.prop_name))
+ DecisionID(node, node, decl.prop_name))
properties = set()
properties.update(list_ids_per_prop.keys())
@@ -119,7 +122,7 @@ def insert_constraints__within_node(inferencer, node):
inferencer.insert_list_constraint(
list_ids_per_prop[prop],
base_ids_per_prop[prop],
- (node, prop))
+ DecisionID(node, node, prop))
def insert_constraints__link(inferencer, link):
if not isinstance(link.from_socket, DataSocket):
More information about the Bf-blender-cvs
mailing list