daizutabi / mkapi

A plugin for MkDocs to generate API documentation
https://daizutabi.github.io/mkapi/
MIT License
95 stars 19 forks source link

[BUG] Exception on document generation #19

Closed phil65 closed 7 months ago

phil65 commented 4 years ago

mkapi can crash for some specific classes on document generation. Exception gets thrown in core/docstring.py:194 and core/object.py:133:

ERROR - Error reading page 'api\prettyqt.custom_widgets.promptlineedit.md': descriptor 'mro' of 'type' object needs an argument Traceback (most recent call last): File "c:\python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "c:\python37\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Python37\Scripts\mkdocs.exe\__main__.py", line 7, in <module> File "c:\python37\lib\site-packages\click\core.py", line 829, in __call__ return self.main(*args, **kwargs) File "c:\python37\lib\site-packages\click\core.py", line 782, in main rv = self.invoke(ctx) File "c:\python37\lib\site-packages\click\core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "c:\python37\lib\site-packages\click\core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "c:\python37\lib\site-packages\click\core.py", line 610, in invoke return callback(*args, **kwargs) File "c:\python37\lib\site-packages\mkdocs\__main__.py", line 152, in build_command build.build(config.load_config(**kwargs), dirty=not clean) File "c:\python37\lib\site-packages\mkdocs\commands\build.py", line 271, in build _populate_page(file.page, config, files, dirty) File "c:\python37\lib\site-packages\mkdocs\commands\build.py", line 168, in _populate_page 'page_markdown', page.markdown, page=page, config=config, files=files File "c:\python37\lib\site-packages\mkdocs\plugins.py", line 94, in run_event result = method(item, **kwargs) File "c:\python37\lib\site-packages\mkapi\plugins\mkdocs.py", line 116, in on_page_markdown markdown, abs_src_path, self.abs_api_paths, filters=self.config["filters"] File "<string>", line 8, in __init__ File "c:\python37\lib\site-packages\mkapi\core\page.py", line 41, in __post_init__ self.markdown = "\n\n".join(self.split(source)) File "c:\python37\lib\site-packages\mkapi\core\page.py", line 75, in split inherit(node) File "c:\python37\lib\site-packages\mkapi\core\inherit.py", line 155, in inherit for base in bases: File "c:\python37\lib\site-packages\mkapi\core\inherit.py", line 130, in <genexpr> yield node, (get_node(base) for base in bases) File "c:\python37\lib\site-packages\mkapi\core\node.py", line 234, in get_node return Node(obj, sourcefile_index) File "<string>", line 5, in __init__ File "c:\python37\lib\site-packages\mkapi\core\node.py", line 31, in __post_init__ super().__post_init__() File "c:\python37\lib\site-packages\mkapi\core\structure.py", line 106, in __post_init__ self.members = self.get_members() File "c:\python37\lib\site-packages\mkapi\core\node.py", line 82, in get_members return get_members(self.obj) File "c:\python37\lib\site-packages\mkapi\core\node.py", line 214, in get_members member = get_node(obj, sourcefile_index) File "c:\python37\lib\site-packages\mkapi\core\node.py", line 234, in get_node return Node(obj, sourcefile_index) File "<string>", line 5, in __init__ File "c:\python37\lib\site-packages\mkapi\core\node.py", line 31, in __post_init__ super().__post_init__() File "c:\python37\lib\site-packages\mkapi\core\structure.py", line 104, in __post_init__ self.docstring = get_docstring(obj) File "c:\python37\lib\site-packages\mkapi\core\docstring.py", line 294, in get_docstring postprocess(docstring, obj) File "c:\python37\lib\site-packages\mkapi\core\docstring.py", line 236, in postprocess parse_bases(doc, obj) File "c:\python37\lib\site-packages\mkapi\core\docstring.py", line 194, in parse_bases objs = obj.mro()[1:-1] TypeError: descriptor 'mro' of 'type' object needs an argument

Can fix that by replacing the line with:

try:
    objs = obj.mro()[1:-1]
except TypeError:
    objs = obj.mro(type)[1:-1]

but not sure if that is the best fix.

For me it happened for a class inherited from QtCharts.QAbstractSeries (https://pypi.org/project/PyQtChart/)

This here might be a similar issue, from another project: https://github.com/agronholm/sphinx-autodoc-typehints/issues/73

daizutabi commented 4 years ago

I tried to fix this issue but I'm not sure if the error doesn't happen in your package. So could you please clone the repository and build your documentation?

phil65 commented 4 years ago

No exception anymore, but it only builds some few md/html files, not the complete package.

daizutabi commented 4 years ago

Thank you for your cooperation. Now Version 1.0.11 is available.