Is there an alternative mechanism for achieving the same result available? >From this revision onwards I've lost the ability to set the object's colour from the LuxRender material editor, which is something our users find really useful.
TBH, I'm a bit peeved that something like this would be disabled without discussion with addon developers and without a reasonable alternative API in place. Cheers, Doug. On 4 December 2010 06:25, Campbell Barton <[email protected]> wrote: > Revision: 33462 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33462 > Author: campbellbarton > Date: 2010-12-04 07:25:36 +0100 (Sat, 04 Dec 2010) > > Log Message: > ----------- > disallow setting RNA attributes while drawing, this is bad practice so > enforcing here has the benifit of making sure people are not manipulating > blender scene data in a drawing panel for eg. > > This is ifdef'd and may be disabled later on, or only enabled in debug > mode. > > This applies to setting any RNA value that has an ID and is not a screen or > window-manager datablock. > > Some addons break this rule and need fixing but from my tests blender UI > scripts are ok. > > Modified Paths: > -------------- > trunk/blender/source/blender/python/intern/bpy_rna.c > > Modified: trunk/blender/source/blender/python/intern/bpy_rna.c > =================================================================== > --- trunk/blender/source/blender/python/intern/bpy_rna.c 2010-12-04 > 06:21:08 UTC (rev 33461) > +++ trunk/blender/source/blender/python/intern/bpy_rna.c 2010-12-04 > 06:25:36 UTC (rev 33462) > @@ -50,6 +50,7 @@ > #include "DNA_anim_types.h" > #include "ED_keyframing.h" > > +#define USE_PEDANTIC_WRITE > #define USE_MATHUTILS > #define USE_STRING_COERCE > > @@ -67,7 +68,32 @@ > > /* bpyrna vector/euler/quat callbacks */ > static int mathutils_rna_array_cb_index= -1; /* index for our callbacks */ > +#ifdef USE_PEDANTIC_WRITE > +static short rna_disallow_writes= FALSE; > > +static int rna_id_write_error(PointerRNA *ptr, PyObject *key) > +{ > + ID *id= ptr->id.data; > + if(id) { > + const short idcode= GS(id->name); > + if(!ELEM(idcode, ID_WM, ID_SCR)) { /* may need more added > here */ > + const char *idtype= BKE_idcode_to_name(idcode); > + const char *pyname; > + if(key && PyUnicode_Check(key)) pyname= > _PyUnicode_AsString(key); > + else > pyname= "<UNKNOWN>"; > + > + /* make a nice string error */ > + assert(idtype != NULL); > + PyErr_Format(PyExc_RuntimeError, "Writing to ID > classes in this context is not allowed: %.200s, %.200s datablock, error > setting %.200s.%.200s", id->name+2, idtype, > RNA_struct_identifier(ptr->type), pyname); > + > + return TRUE; > + } > + } > + return FALSE; > +} > + > +#endif > + > /* subtype not used much yet */ > #define MATHUTILS_CB_SUBTYPE_EUL 0 > #define MATHUTILS_CB_SUBTYPE_VEC 1 > @@ -104,7 +130,13 @@ > float min, max; > if(self->prop==NULL) > return 0; > - > + > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, NULL)) { > + return 0; > + } > +#endif > + > if (!RNA_property_editable_flag(&self->ptr, self->prop)) { > PyErr_Format(PyExc_AttributeError, "bpy_prop > \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), > RNA_property_identifier(self->prop)); > return 0; > @@ -157,6 +189,12 @@ > if(self->prop==NULL) > return 0; > > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, NULL)) { > + return 0; > + } > +#endif > + > if (!RNA_property_editable_flag(&self->ptr, self->prop)) { > PyErr_Format(PyExc_AttributeError, "bpy_prop > \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), > RNA_property_identifier(self->prop)); > return 0; > @@ -201,7 +239,13 @@ > > if(self->prop==NULL) > return 0; > - > + > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, NULL)) { > + return 0; > + } > +#endif > + > if (!RNA_property_editable_flag(&self->ptr, self->prop)) { > PyErr_Format(PyExc_AttributeError, "bpy_prop > \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), > RNA_property_identifier(self->prop)); > return 0; > @@ -1903,6 +1947,12 @@ > { > IDProperty *group= RNA_struct_idprops(&self->ptr, 1); > > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, key)) { > + return -1; > + } > +#endif > + > if(group==NULL) { > PyErr_SetString(PyExc_TypeError, "bpy_struct[key] = val: id > properties not supported for this type"); > return -1; > @@ -2727,6 +2777,12 @@ > char *name = _PyUnicode_AsString(pyname); > PropertyRNA *prop= NULL; > > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, pyname)) { > + return -1; > + } > +#endif > + > if(name == NULL) { > PyErr_SetString(PyExc_AttributeError, "bpy_struct: > __setattr__ must be a string"); > return -1; > @@ -2840,6 +2896,12 @@ > PropertyRNA *prop; > PointerRNA r_ptr; > > +#ifdef USE_PEDANTIC_WRITE > + if(rna_disallow_writes && rna_id_write_error(&self->ptr, pyname)) { > + return -1; > + } > +#endif > + > if(name == NULL) { > PyErr_SetString(PyExc_AttributeError, "bpy_prop: __setattr__ > must be a string"); > return -1; > @@ -5080,7 +5142,11 @@ > PyGILState_STATE gilstate; > > bContext *C= BPy_GetContext(); // XXX - NEEDS FIXING, QUITE BAD. > - > +#ifdef USE_PEDANTIC_WRITE > + /* testing, for correctness, not operator and not draw function */ > + const short is_readonly= strstr("draw", > RNA_function_identifier(func)) || !RNA_struct_is_a(ptr->type, > &RNA_Operator); > +#endif > + > py_class= RNA_struct_py_type_get(ptr->type); > > /* rare case. can happen when registering subclasses */ > @@ -5177,8 +5243,19 @@ > i++; > } > > +#ifdef USE_PEDANTIC_WRITE > + rna_disallow_writes= is_readonly ? TRUE:FALSE; > +#endif > + /* *** Main Caller *** */ > + > ret = PyObject_Call(item, args, NULL); > > + /* *** Done Calling *** */ > + > +#ifdef USE_PEDANTIC_WRITE > + rna_disallow_writes= FALSE; > +#endif > + > RNA_parameter_list_end(&iter); > Py_DECREF(item); > Py_DECREF(args); > > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
