diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-02 08:43:35 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-02 08:43:35 +0400 |
commit | 697e77a49457d90821ffdfc21f0fcf60843eee05 (patch) | |
tree | 6b3dc5d7ebd65cd9d34dda1c99d7d93078a7f354 /source | |
parent | 5a221dd0dea81fbe31f5e6431911288e8e3f4b53 (diff) |
fix [#29666] Duplicate entries in bpy.types
Python operator subclasses and operator types each get their own SRNA, causing double ups for bpy.types.__dir__()
From the operator type - these share names.
* ot->ext.srna
* ot->srna
Note that this conflict is still there, this only disables 'ot->ext.srna' from being included in dir(bpy.types).
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/makesrna/intern/rna_wm.c | 8 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 30 |
2 files changed, 37 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 52a4a1db36b..b5c24ec568e 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -1050,6 +1050,9 @@ static StructRNA *rna_Operator_register(Main *bmain, ReportList *reports, void * rna_Operator_unregister(bmain, ot->ext.srna); } + /* XXX, this doubles up with the operator name [#29666] + * for now just remove from dir(bpy.types) */ + /* create a new operator type */ dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator"); RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */ @@ -1126,7 +1129,10 @@ static StructRNA *rna_MacroOperator_register(Main *bmain, ReportList *reports, v rna_Operator_unregister(bmain, ot->ext.srna); } - /* create a new menu type */ + /* XXX, this doubles up with the operator name [#29666] + * for now just remove from dir(bpy.types) */ + + /* create a new operator type */ dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator"); dummyot.ext.data= data; dummyot.ext.call= call; diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index bfb79ea6531..11e79fdee2a 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -6298,6 +6298,8 @@ static struct PyMethodDef pyrna_basetype_methods[] = { {NULL, NULL, 0, NULL} }; +/* used to call ..._keys() direct, but we need to filter out operator subclasses */ +#if 0 static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self) { PyObject *list; @@ -6318,6 +6320,34 @@ static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self) return list; } +#else + +static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self) +{ + PyObject *ret = PyList_New(0); + PyObject *item; + + RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + StructRNA *srna = itemptr.data; + StructRNA *srna_base = RNA_struct_base(itemptr.data); + /* skip own operators, these double up [#29666] */ + if (srna_base == &RNA_Operator) { + /* do nothing */ + } + else { + /* add to python list */ + item = PyUnicode_FromString(RNA_struct_identifier(srna)); + PyList_Append(ret, item); + Py_DECREF(item); + } + } + RNA_PROP_END; + + return ret; +} + +#endif + static PyTypeObject pyrna_basetype_Type = BLANK_PYTHON_TYPE; PyObject *BPY_rna_types(void) |