[Bf-blender-cvs] [3d1de1e44e8] functions: cache enum items in python

Jacques Lucke noreply at git.blender.org
Thu Aug 1 18:23:08 CEST 2019


Commit: 3d1de1e44e8cd67a2463f795e965916449bf63ca
Author: Jacques Lucke
Date:   Thu Aug 1 14:15:28 2019 +0200
Branches: functions
https://developer.blender.org/rB3d1de1e44e8cd67a2463f795e965916449bf63ca

cache enum items in python

===================================================================

M	release/scripts/startup/nodes/declaration/variadic.py
M	release/scripts/startup/nodes/search.py
A	release/scripts/startup/nodes/utils/enum_items_cache.py

===================================================================

diff --git a/release/scripts/startup/nodes/declaration/variadic.py b/release/scripts/startup/nodes/declaration/variadic.py
index 5f7e3ab3a10..d5ed8500ac7 100644
--- a/release/scripts/startup/nodes/declaration/variadic.py
+++ b/release/scripts/startup/nodes/declaration/variadic.py
@@ -5,6 +5,7 @@ from . base import SocketDeclBase
 from .. types import type_infos
 from .. base import DataSocket
 from .. sockets import OperatorSocket
+from .. utils.enum_items_cache import cache_enum_items
 
 class AnyVariadicDecl(SocketDeclBase):
     def __init__(self, node, identifier: str, prop_name: str, message: str):
@@ -94,12 +95,9 @@ class AnyVariadicDecl(SocketDeclBase):
 class DataTypeGroup(bpy.types.PropertyGroup):
     bl_idname = "fn_DataTypeGroup"
 
-    def tree_update(self, context):
-        self.id_data.update()
-
-    data_type: StringProperty(update=tree_update)
-    display_name: StringProperty(update=tree_update)
-    identifier_prefix: StringProperty(update=tree_update)
+    data_type: StringProperty()
+    display_name: StringProperty()
+    identifier_prefix: StringProperty()
 
 class AppendAnyVariadicOperator(bpy.types.Operator):
     bl_idname = "fn.append_any_variadic"
@@ -111,7 +109,7 @@ class AppendAnyVariadicOperator(bpy.types.Operator):
     node_name: StringProperty()
     prop_name: StringProperty()
 
-    item: EnumProperty(items=type_infos.get_data_type_items_cb())
+    item: EnumProperty(items=cache_enum_items(type_infos.get_data_type_items_cb()))
 
     def invoke(self, context, event):
         context.window_manager.invoke_search_popup(self)
diff --git a/release/scripts/startup/nodes/search.py b/release/scripts/startup/nodes/search.py
index ff8263d69b9..a57756e38b7 100644
--- a/release/scripts/startup/nodes/search.py
+++ b/release/scripts/startup/nodes/search.py
@@ -1,6 +1,7 @@
 import bpy
 from bpy.props import *
 from . base import BaseNode
+from . utils.enum_items_cache import cache_enum_items
 
 class NodeSearch(bpy.types.Operator):
     bl_idname = "fn.node_search"
@@ -16,7 +17,7 @@ class NodeSearch(bpy.types.Operator):
                 items.append(item)
         return items
 
-    item: EnumProperty(items=get_search_items)
+    item: EnumProperty(items=cache_enum_items(get_search_items))
 
     @classmethod
     def poll(cls, context):
diff --git a/release/scripts/startup/nodes/utils/enum_items_cache.py b/release/scripts/startup/nodes/utils/enum_items_cache.py
new file mode 100644
index 00000000000..fcba1539dac
--- /dev/null
+++ b/release/scripts/startup/nodes/utils/enum_items_cache.py
@@ -0,0 +1,11 @@
+import functools
+
+cached_items = set()
+
+def cache_enum_items(items_cb):
+    @functools.wraps(items_cb)
+    def wrapper(self, context):
+        items = items_cb(self, context)
+        cached_items.update(items)
+        return items
+    return wrapper



More information about the Bf-blender-cvs mailing list