From 136a06285f0e953f65dc432a4dba1ff3d1f781ee Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 May 2022 21:43:38 +1000 Subject: Fix T88792: WindowManager.clipboard missing in Python API docs Support RNA types using the Py/C-API PyGetSetDef defined properties. Currently `WindowManager.clipboard` is the only instance of this. --- doc/python_api/sphinx_doc_gen.py | 6 ++++++ release/scripts/modules/rna_info.py | 8 ++++++++ source/blender/python/intern/bpy_rna_types_capi.c | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index eba12b75b63..d87d8b71ce5 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -1474,6 +1474,12 @@ def pyrna2sphinx(basepath): pyprop2sphinx(" ", fw, identifier, py_prop) del py_properties, py_prop + # C/Python attributes: `GetSetDescriptorType`. + key = descr = None + for key, descr in sorted(struct.get_py_c_properties_getset()): + py_descr2sphinx(" ", fw, descr, "bpy.types", struct_id, key) + del key, descr + for func in struct.functions: args_str = ", ".join(prop.get_arg_default(force=False) for prop in func.args) diff --git a/release/scripts/modules/rna_info.py b/release/scripts/modules/rna_info.py index b009cc4fefe..687f3c95d0b 100644 --- a/release/scripts/modules/rna_info.py +++ b/release/scripts/modules/rna_info.py @@ -206,6 +206,14 @@ class InfoStructRNA: functions.append((identifier, attr)) return functions + def get_py_c_properties_getset(self): + import types + properties_getset = [] + for identifier, descr in self.py_class.__dict__.items(): + if type(descr) == types.GetSetDescriptorType: + properties_getset.append((identifier, descr)) + return properties_getset + def __str__(self): txt = "" diff --git a/source/blender/python/intern/bpy_rna_types_capi.c b/source/blender/python/intern/bpy_rna_types_capi.c index d58adb66b37..c3a07847aff 100644 --- a/source/blender/python/intern/bpy_rna_types_capi.c +++ b/source/blender/python/intern/bpy_rna_types_capi.c @@ -107,6 +107,7 @@ static struct PyMethodDef pyrna_text_methods[] = { * and creating the buffer, causing writes past the allocated length. * \{ */ +PyDoc_STRVAR(pyrna_WindowManager_clipboard_doc, "Clipboard text storage.\n\n:type: string"); static PyObject *pyrna_WindowManager_clipboard_get(PyObject *UNUSED(self), void *UNUSED(flag)) { int text_len = 0; @@ -154,7 +155,7 @@ static struct PyGetSetDef pyrna_windowmanager_getset[] = { {"clipboard", pyrna_WindowManager_clipboard_get, pyrna_WindowManager_clipboard_set, - NULL, + pyrna_WindowManager_clipboard_doc, NULL}, {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; -- cgit v1.2.3