Skip to content

Using sys.stdout as argument breaks doc generation #122

@stmlange

Description

@stmlange

Expected Behavior

Doc generation works fine

Actual Behavior

python3.7 -m pdoc --html ./foo.py -o build/docs --force


Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 122, in _render_template
    return t.render(**config).strip()
  File "/usr/lib/python3/dist-packages/mako/template.py", line 462, in render
    return runtime._render(self, self.callable_, args, data)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 838, in _render
    **_kwargs_for_callable(callable_, data))
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 873, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 899, in _exec_template
    callable_(context, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/templates/html.mako", line 394, in render_body
    ${show_module(module)}
  File "/usr/local/lib/python3.7/dist-packages/pdoc/templates/html.mako", line 0, in show_module
    
  File "/usr/local/lib/python3.7/dist-packages/pdoc/templates/html.mako", line 160, in render_show_module
    ${show_func(f)}
  File "/usr/local/lib/python3.7/dist-packages/pdoc/templates/html.mako", line 101, in show_func
    <%
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1085, in params
    return self._params(self.obj, annotate=annotate, link=link, module=self.module)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1137, in _params
    p = safe_default_value(p)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1110, in safe_default_value
    replacement = html.escape(replacement or p.default)
  File "/usr/lib/python3.7/html/__init__.py", line 19, in escape
    s = s.replace("&", "&amp;") # Must be done first!
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'

/usr/lib/python3/dist-packages/apport/report.py:13: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import fnmatch, glob, traceback, errno, sys, atexit, locale, imp
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__main__.py", line 6, in <module>
    main()
  File "/usr/local/lib/python3.7/dist-packages/pdoc/cli.py", line 489, in main
    write_files(module, ext='.html', **template_config)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/cli.py", line 318, in write_files
    w.write(m.html(**kwargs))
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 686, in html
    html = _render_template('/html.mako', module=self, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 122, in _render_template
    return t.render(**config).strip()
  File "/usr/lib/python3/dist-packages/mako/template.py", line 462, in render
    return runtime._render(self, self.callable_, args, data)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 838, in _render
    **_kwargs_for_callable(callable_, data))
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 873, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 899, in _exec_template
    callable_(context, *args, **kwargs)
  File "_html_mako", line 127, in render_body
  File "_html_mako", line 30, in show_module
  File "_html_mako", line 396, in render_show_module
  File "_html_mako", line 311, in show_func
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1085, in params
    return self._params(self.obj, annotate=annotate, link=link, module=self.module)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1137, in _params
    p = safe_default_value(p)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1110, in safe_default_value
    replacement = html.escape(replacement or p.default)
  File "/usr/lib/python3.7/html/__init__.py", line 19, in escape
    s = s.replace("&", "&amp;") # Must be done first!
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__main__.py", line 6, in <module>
    main()
  File "/usr/local/lib/python3.7/dist-packages/pdoc/cli.py", line 489, in main
    write_files(module, ext='.html', **template_config)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/cli.py", line 318, in write_files
    w.write(m.html(**kwargs))
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 686, in html
    html = _render_template('/html.mako', module=self, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 122, in _render_template
    return t.render(**config).strip()
  File "/usr/lib/python3/dist-packages/mako/template.py", line 462, in render
    return runtime._render(self, self.callable_, args, data)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 838, in _render
    **_kwargs_for_callable(callable_, data))
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 873, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/usr/lib/python3/dist-packages/mako/runtime.py", line 899, in _exec_template
    callable_(context, *args, **kwargs)
  File "_html_mako", line 127, in render_body
  File "_html_mako", line 30, in show_module
  File "_html_mako", line 396, in render_show_module
  File "_html_mako", line 311, in show_func
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1085, in params
    return self._params(self.obj, annotate=annotate, link=link, module=self.module)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1137, in _params
    p = safe_default_value(p)
  File "/usr/local/lib/python3.7/dist-packages/pdoc/__init__.py", line 1110, in safe_default_value
    replacement = html.escape(replacement or p.default)
  File "/usr/lib/python3.7/html/__init__.py", line 19, in escape
    s = s.replace("&", "&amp;") # Must be done first!
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'

Steps to Reproduce

  1. create foo.py with the following content:
# -*- coding: utf-8 -*-
import sys


def sample(output=sys.stdout, content="┬──┬ ノ( ゜-゜ノ)\n"):
    output.write("%s\n" % (content * 100))


sample()

The offender seems to be declaring output=sys.stdout.

  1. run python3.7 -m pdoc --html ./foo.py -o build/docs --force

Additional info

  • pdoc version:
$ python3.7 -m pdoc --version
__main__.py 0.7.1
$ python3.7 --version
Python 3.7.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions