Open
Description
Steps to Reproduce
I attempted to investigate the issue and determine its root cause or simpler steps to reproduce, but did not succeed in doing so.
To reproduce, check-out this repo and perform HTML documentation generation:
git clone git@gitlab.com:Hares-Lab/report-maker/report-maker.git
cd report-maker
python -m virtualenv --python=3.12 .venv
source .venv/bin/activate
pip install -e .[all]
pip install pdoc3
pdoc3 report_maker --html
Error:
Long stacktrace
Traceback (most recent call last):
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 157, in _render_template
return t.render(**config).strip()
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/template.py", line 434, in render
return runtime._render(self, self.callable_, args, data)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 874, in _render
_render_context(
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 916, in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 943, in _exec_template
callable_(context, *args, **kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 451, in render_body
${show_module(module)}
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 0, in show_module
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 243, in render_show_module
<dd>${show_desc(v)}</dd>
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 100, in show_desc
<%def name="show_module(module)">
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 67, in render_show_desc
${show_source(d)}
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 51, in show_source
<%def name="show_desc(d, short=False)">
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/templates/html.mako", line 31, in render_show_source
% if (show_source_code or git_link_template) and \
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 572, in source
lines, _ = inspect.getsourcelines(_unwrap_descriptor(self))
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 446, in _unwrap_descriptor
obj = getattr(dobj.module.obj, class_name)
AttributeError: module 'report_maker.extensions.builtin.code_converter' has no attribute 'ComposerPartTypeSourceCode'
Traceback (most recent call last):
File "/home/peter/git/temp/report-maker/.venv/bin/pdoc3", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/cli.py", line 609, in main
recursive_write_files(module, ext='.html', **template_config)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/cli.py", line 353, in recursive_write_files
recursive_write_files(submodule, ext=ext, **kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/cli.py", line 353, in recursive_write_files
recursive_write_files(submodule, ext=ext, **kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/cli.py", line 353, in recursive_write_files
recursive_write_files(submodule, ext=ext, **kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/cli.py", line 348, in recursive_write_files
f.write(m.html(**kwargs))
^^^^^^^^^^^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 905, in html
html = _render_template('/html.mako', module=self, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 157, in _render_template
return t.render(**config).strip()
^^^^^^^^^^^^^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/template.py", line 434, in render
return runtime._render(self, self.callable_, args, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 874, in _render
_render_context(
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 916, in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/mako/runtime.py", line 943, in _exec_template
callable_(context, *args, **kwargs)
File "_html_mako", line 145, in render_body
File "_html_mako", line 47, in show_module
File "_html_mako", line 504, in render_show_module
File "_html_mako", line 318, in show_desc
File "_html_mako", line 246, in render_show_desc
File "_html_mako", line 216, in show_source
File "_html_mako", line 188, in render_show_source
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 572, in source
lines, _ = inspect.getsourcelines(_unwrap_descriptor(self))
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/peter/git/temp/report-maker/.venv/lib/python3.12/site-packages/pdoc/__init__.py", line 446, in _unwrap_descriptor
obj = getattr(dobj.module.obj, class_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'report_maker.extensions.builtin.code_converter' has no attribute 'ComposerPartTypeSourceCode'
Meta
pdoc3
version: 0.11.6- Platforms:
- Windows 10 64bit: 19045.5965
- WSL: Ubuntu 22.04.5 LTS
- Python versions:
- 3.12.1
- 3.12.11
- 3.13.5
What I've Found
Or, to be precise, what I have not.
The root looks to lie in the combination of these facts:
- I am re-exporting
ComposerPartTypeSourceCode
fromreport_maker.config
asCodeConverterConfig
inreport_maker.extensions.builtin.code_converter
. - This class is decorated via
@dataclassabc
, which somehow erases docstring and changes__module__
attribute: Applying@dataclassabc
sets class__module__
to beabc
MichaelSchneeberger/dataclass-abc#3 pdoc
'sDoc.source
method hastry/except
block forValueError
,TypeError
, andOSError
, butAttributeError
is raised and thus not caught.
The code below does similar things (almost exactly these things), but causes no exception.
Similar example but no error
other.py
"""
This is the module `pdoc_issues.reexport.other`.
It just defines `CoolClassWithExtremelyLongName`.
"""
from abc import ABC, abstractmethod
from dataclassabc import dataclassabc
@dataclassabc(kw_only=True, frozen=True, slots=True)
class TheMostCoolestOfAllAbstractClasses(ABC):
"""
This is the most coolest of all abstract classes ever existed.
It defines `some_field` abstract property
which might be implemented as a dataclass member via `@dataclassabc` decoration.
"""
@property
@abstractmethod
def some_field(self) -> int:
...
@dataclassabc(kw_only=True, frozen=True, slots=True)
class CoolClassWithExtremelyLongName(TheMostCoolestOfAllAbstractClasses):
"""
This is a very cool class,
with a very and cool and long name,
and even cooler and longer description.
It also has a member `some_field` implementing `TheMostCoolestOfAllAbstractClasses`
and just a boolean `other_field`.
"""
some_field: int
other_field: bool
__all__ = \
[
'CoolClassWithExtremelyLongName',
]
this.py
"""
This is the module `pdoc_issues.reexport.this`.
It just reexports `CoolClassWithExtremelyLongName` as `CoolClass`.
"""
from .other import CoolClassWithExtremelyLongName as CoolClass
__all__ = \
[
'CoolClass',
]