Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-02-02 08:43:35 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-02 08:43:35 +0400
commit697e77a49457d90821ffdfc21f0fcf60843eee05 (patch)
tree6b3dc5d7ebd65cd9d34dda1c99d7d93078a7f354 /source
parent5a221dd0dea81fbe31f5e6431911288e8e3f4b53 (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.c8
-rw-r--r--source/blender/python/intern/bpy_rna.c30
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)