PyDoc: support building full API docs on macOS & WIN32

Accessing context members depended on `ctypes` to access symbols
which were hidden for macOS & WIN32.

Add an API call that doesn't require the symbols to be exported.

This allows most symbols to be hidden on Linux, see D14971.
This commit is contained in:
2022-05-18 16:59:16 +10:00
parent 88fbe94d70
commit c8edc458d1
2 changed files with 72 additions and 26 deletions

View File

@@ -1200,34 +1200,18 @@ def pycontext2sphinx(basepath):
del write_contex_cls
# end
# nasty, get strings directly from Blender because there is no other way to get it
import ctypes
context_strings = (
"screen_context_dir",
"view3d_context_dir",
"buttons_context_dir",
"image_context_dir",
"node_context_dir",
"text_context_dir",
"clip_context_dir",
"sequencer_context_dir",
"file_context_dir",
)
# Internal API call only intended to be used to extract context members.
from _bpy import context_members
context_member_map = context_members()
del context_members
# Track unique for `context_strings` to validate `context_type_map`.
unique_context_strings = set()
blend_cdll = ctypes.CDLL("")
for ctx_str in context_strings:
for ctx_str, ctx_members in sorted(context_member_map.items()):
subsection = "%s Context" % ctx_str.split("_")[0].title()
fw("\n%s\n%s\n\n" % (subsection, (len(subsection) * '-')))
attr = ctypes.addressof(getattr(blend_cdll, ctx_str))
c_char_p_p = ctypes.POINTER(ctypes.c_char_p)
char_array = c_char_p_p.from_address(attr)
i = 0
while char_array[i] is not None:
member = ctypes.string_at(char_array[i]).decode(encoding="ascii")
for member in ctx_members:
unique_all_len = len(unique)
unique.add(member)
member_visited = unique_all_len == len(unique)
@@ -2167,10 +2151,7 @@ def rna2sphinx(basepath):
# context
if "bpy.context" not in EXCLUDE_MODULES:
# one of a kind, context doc (uses ctypes to extract info!)
# doesn't work on mac and windows
if PLATFORM not in {"darwin", "windows"}:
pycontext2sphinx(basepath)
pycontext2sphinx(basepath)
# internal modules
write_rst_bpy(basepath) # bpy, disabled by default