[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31883] trunk/blender: pyrna: replace method for operators forwarding getattr/setattr access from self. * to self.properties.*

Campbell Barton ideasman42 at gmail.com
Sat Sep 11 17:13:22 CEST 2010


Revision: 31883
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31883
Author:   campbellbarton
Date:     2010-09-11 17:13:22 +0200 (Sat, 11 Sep 2010)

Log Message:
-----------
pyrna: replace method for operators forwarding getattr/setattr access from self.* to self.properties.* 

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy_types.py
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c

Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py	2010-09-11 14:43:27 UTC (rev 31882)
+++ trunk/blender/release/scripts/modules/bpy_types.py	2010-09-11 15:13:22 UTC (rev 31883)
@@ -637,16 +637,26 @@
 # Only defined so operators members can be used by accessing self.order
 class Operator(StructRNA, metaclass=OrderedMeta):
     __slots__ = ()
+    
+    def __getattribute__(self, attr):
+        properties = StructRNA.path_resolve(self, "properties")
+        if attr in properties.bl_rna.properties:
+            return getattr(properties, attr)
+        return super().__getattribute__(attr)
 
-    @classmethod
-    def easy_getsets(cls):
-        def bypass_attr(attr):
-            setattr(cls, attr, property(lambda self: getattr(self.properties, attr), lambda self, value: setattr(self.properties, attr, value)))
-        for attr, value in list(cls.__dict__.items()):
-            if type(value) == tuple and len(value) == 2 and type(value[1]) == dict:
-                bypass_attr(attr)
+    def __setattr__(self, attr, value):
+        properties = StructRNA.path_resolve(self, "properties")
+        if attr in properties.bl_rna.properties:
+            setattr(properties, attr, value)
+        return super().__setattr__(attr, value)
 
+    def __delattr__(self, attr):
+        properties = StructRNA.path_resolve(self, "properties")
+        if attr in properties.bl_rna.properties:
+            delattr(properties, attr)
+        return super().__delattr__(attr)
 
+
 class Macro(StructRNA, metaclass=OrderedMeta):
     # bpy_types is imported before ops is defined
     # so we have to do a local import on each run

Modified: trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2010-09-11 14:43:27 UTC (rev 31882)
+++ trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2010-09-11 15:13:22 UTC (rev 31883)
@@ -45,9 +45,6 @@
 		PyErr_Print(); /* failed to register operator props */
 		PyErr_Clear();
 	}
-	
-	// see bpy_types.py:Operator, May redo this some other way!
-	PyObject_CallMethod(py_class, "easy_getsets", NULL);
 }
 
 void operator_wrapper(wmOperatorType *ot, void *userdata)





More information about the Bf-blender-cvs mailing list