PuDBInvoke failes when an exception's raised in tests when pytest's run with --capture=no, pytest_pudb.py::PuDBInvoke raises:
Traceback (most recent call last):
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/main.py", line 178, in wrap_session
session.exitstatus = doit(config, session) or 0
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/main.py", line 215, in _main
config.hook.pytest_runtestloop(session=session)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/hooks.py", line 258, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 67, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 61, in <lambda>
firstresult=hook.spec_opts.get('firstresult'),
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 201, in _multicall
return outcome.get_result()
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 76, in get_result
raise ex[1].with_traceback(ex[2])
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 180, in _multicall
res = hook_impl.function(*args)
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/main.py", line 236, in pytest_runtestloop
item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/hooks.py", line 258, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 67, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 61, in <lambda>
firstresult=hook.spec_opts.get('firstresult'),
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 201, in _multicall
return outcome.get_result()
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 76, in get_result
raise ex[1].with_traceback(ex[2])
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 180, in _multicall
res = hook_impl.function(*args)
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/runner.py", line 66, in pytest_runtest_protocol
runtestprotocol(item, nextitem=nextitem)
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/runner.py", line 81, in runtestprotocol
reports.append(call_and_report(item, "call", log))
File ".../.virtualenvs/.../lib/python3.4/site-packages/_pytest/runner.py", line 167, in call_and_report
hook.pytest_exception_interact(node=item, call=call, report=report)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/hooks.py", line 258, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 67, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/manager.py", line 61, in <lambda>
firstresult=hook.spec_opts.get('firstresult'),
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 201, in _multicall
return outcome.get_result()
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 76, in get_result
raise ex[1].with_traceback(ex[2])
File ".../.virtualenvs/.../lib/python3.4/site-packages/pluggy/callers.py", line 180, in _multicall
res = hook_impl.function(*args)
File ".../.virtualenvs/.../lib/python3.4/site-packages/pytest_pudb.py", line 69, in pytest_exception_interact
out, err = _suspend_capture(capman, in_=True)
TypeError: 'NoneType' object is not iterable
pytest==3.7.4
pytest-pudb==0.6
My local workaround's below, but this doesn't fix the real issue within PuDBInvoke and _suspend_capture:
*** pytest_pudb.py.orig Thu Sep 6 05:25:27 2018
--- pytest_pudb.py Thu Sep 6 04:38:33 2018
*************** class PuDBInvoke(object):
*** 66,74 ****
def pytest_exception_interact(self, node, call, report):
capman = node.config.pluginmanager.getplugin("capturemanager")
if capman:
! out, err = _suspend_capture(capman, in_=True)
! sys.stdout.write(out)
! sys.stdout.write(err)
_enter_pudb(node, call.excinfo, report)
def pytest_internalerror(self, excrepr, excinfo):
--- 66,76 ----
def pytest_exception_interact(self, node, call, report):
capman = node.config.pluginmanager.getplugin("capturemanager")
if capman:
! capture_streams = _suspend_capture(capman, in_=True)
! if capture_streams:
! out, err = capture_streams
! sys.stdout.write(out)
! sys.stdout.write(err)
_enter_pudb(node, call.excinfo, report)
def pytest_internalerror(self, excrepr, excinfo):