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.
This commit is contained in:
Campbell Barton 2022-05-18 21:43:38 +10:00
parent 1fcdb1ea28
commit 136a06285f
3 changed files with 16 additions and 1 deletions

View File

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

View File

@ -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 = ""

View File

@ -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 */
};