[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