PyAPI: support PyGetSetDef when extending RNA types

Support extending properties as well as methods.
This commit is contained in:
2020-05-13 15:57:29 +10:00
parent 8f4f3cce03
commit 75d0287cee
3 changed files with 19 additions and 6 deletions

View File

@@ -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);
}