# bpydoc.py import pickle from fastapi import APIRouter from fastapi.responses import PlainTextResponse router = APIRouter() with open("routers/tool_bpy_doc_v4_1.pkl", 'rb') as file: bpy_doc_map = pickle.load(file) bpy_doc_map['__info'] = {'bases': None} def bpy_doc_get_documentation(api): parts = api.split('.') api = "" data = bpy_doc_map ctx = [] for part in parts: try: data = data[part] api += part ctx.append((api, data["__info"]['descr'])) api += '.' except Exception as ex: descr = f"{type(ex).__name__}: {ex}. Perhaps this object was implemented in a later version." ctx.append((api, descr)) break documentation = "" for obj, descr in ctx: documentation += f"{obj}:\n" documentation += f"{descr}\n\n" if len(data) > 1: documentation += f"Members of {api}:\n" info = data["__info"] if info['bases']: documentation += f"Inherits from {info['bases']}\n" for key, val in data.items(): if key != "__info": descr = "" if isinstance(val, list): val = val[0] descr = "`bpy_prop_collection` of {}".format( val['__info']["descr"].replace('\n', ' ')) else: descr = val['__info']["descr"].replace('\n', ' ') documentation += f"- {key}: {descr}\n" return documentation @router.get("/bpy_doc", response_class=PlainTextResponse) def bpy_doc(api: str = ""): message = bpy_doc_get_documentation(api) return message if __name__ == "__main__": test = bpy_doc("bpy.context") print(test)