From 61a8db3f961d8ff4963b5eafbb992f2f1f9086c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 18 Oct 2016 11:20:06 +0200 Subject: [PATCH] Added workaround for EnumProperty string limitation See https://www.blender.org/api/blender_python_api_master/bpy.props.html#bpy.props.EnumProperty --- blender_cloud/blender.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/blender_cloud/blender.py b/blender_cloud/blender.py index 2021771..c70b36b 100644 --- a/blender_cloud/blender.py +++ b/blender_cloud/blender.py @@ -44,6 +44,29 @@ def redraw(self, context): context.area.tag_redraw() +def pyside_cache(wrapped): + """Stores the result of the callable in Python-managed memory. + + This is to work around the warning at + https://www.blender.org/api/blender_python_api_master/bpy.props.html#bpy.props.EnumProperty + """ + + import functools + + @functools.wraps(wrapped) + # We can't use (*args, **kwargs), because EnumProperty explicitly checks + # for the number of fixed positional arguments. + def wrapper(self, context): + result = None + try: + result = wrapped(self, context) + return result + finally: + wrapped._cached_result = result + return wrapper + + +@pyside_cache def blender_syncable_versions(self, context): """Returns the list of items used by SyncStatusProperties.version EnumProperty.""" @@ -106,6 +129,7 @@ class SyncStatusProperties(PropertyGroup): self['available_blender_versions'] = new_versions +@pyside_cache def bcloud_available_projects(self, context): """Returns the list of items used by BlenderCloudProjectGroup.project EnumProperty."""