[Bf-blender-cvs] [75d0287cee1] blender-v2.83-release: PyAPI: support PyGetSetDef when extending RNA types
Campbell Barton
noreply at git.blender.org
Wed May 13 08:05:50 CEST 2020
Commit: 75d0287cee1aae1a94e46d3fb90379ce016eda8c
Author: Campbell Barton
Date: Wed May 13 15:57:29 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rB75d0287cee1aae1a94e46d3fb90379ce016eda8c
PyAPI: support PyGetSetDef when extending RNA types
Support extending properties as well as methods.
===================================================================
M source/blender/python/intern/bpy_rna.c
M source/blender/python/intern/bpy_rna.h
M source/blender/python/intern/bpy_rna_types_capi.c
===================================================================
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 4da81e3380f..55bf87051ec 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -9034,9 +9034,11 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla
}
/**
- * Extend RNA types with C/API methods.
+ * Extend RNA types with C/API methods, properties.
*/
-void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *method)
+void pyrna_struct_type_extend_capi(struct StructRNA *srna,
+ struct PyMethodDef *method,
+ struct PyGetSetDef *getset)
{
PyObject *cls = pyrna_srna_Subtype(srna);
if (method != NULL) {
@@ -9052,6 +9054,16 @@ void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *m
Py_DECREF(args); /* Clears 'func' too. */
}
}
+
+ if (getset != NULL) {
+ for (; getset->name != NULL; getset++) {
+ PyObject *dict = ((PyTypeObject *)cls)->tp_dict;
+ PyObject *descr = PyDescr_NewGetSet((PyTypeObject *)cls, getset);
+ BLI_assert(PyDict_GetItem(dict, PyDescr_NAME(descr)) == NULL);
+ PyDict_SetItem(dict, PyDescr_NAME(descr), descr);
+ Py_DECREF(descr);
+ }
+ }
Py_DECREF(cls);
}
diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h
index 3f73ea20205..652d65fe64c 100644
--- a/source/blender/python/intern/bpy_rna.h
+++ b/source/blender/python/intern/bpy_rna.h
@@ -220,7 +220,9 @@ int pyrna_enum_value_from_id(const EnumPropertyItem *item,
int pyrna_deferred_register_class(struct StructRNA *srna, PyTypeObject *py_class);
-void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *py_method);
+void pyrna_struct_type_extend_capi(struct StructRNA *srna,
+ struct PyMethodDef *py_method,
+ struct PyGetSetDef *py_getset);
/* called before stopping python */
void pyrna_alloc_types(void);
diff --git a/source/blender/python/intern/bpy_rna_types_capi.c b/source/blender/python/intern/bpy_rna_types_capi.c
index 1b4533224b8..00442295e0b 100644
--- a/source/blender/python/intern/bpy_rna_types_capi.c
+++ b/source/blender/python/intern/bpy_rna_types_capi.c
@@ -121,9 +121,8 @@ static struct PyMethodDef pyrna_space_methods[] = {
void BPY_rna_types_extend_capi(void)
{
- pyrna_struct_type_extend_capi(&RNA_Space, pyrna_space_methods);
- pyrna_struct_type_extend_capi(
- &RNA_WindowManager, pyrna_windowmanager_methods);
+ pyrna_struct_type_extend_capi(&RNA_Space, pyrna_space_methods, NULL);
+ pyrna_struct_type_extend_capi(&RNA_WindowManager, pyrna_windowmanager_methods, NULL);
}
/** \} */
More information about the Bf-blender-cvs
mailing list