#31704: django.test.runner breaks if ipdb or dependencies raise unexpected
exceptions
---------------------------------------------+------------------------
               Reporter:  John Vandenberg    |          Owner:  nobody
                   Type:  Uncategorized      |         Status:  new
              Component:  Testing framework  |        Version:  3.0
               Severity:  Normal             |       Keywords:
           Triage Stage:  Unreviewed         |      Has patch:  0
    Needs documentation:  0                  |    Needs tests:  0
Patch needs improvement:  0                  |  Easy pickings:  1
                  UI/UX:  0                  |
---------------------------------------------+------------------------
 A particular trigger is when run within pytest which by default creates
 fake stdio handles, and very indirect prompt_toolkit spits the dummy with
 a io.UnsupportedOperation .  ipdb could behave a bit better in this
 situation, but the buck stops with django .  Unless it was explicitly told
 to use ipdb , it should fallback to pdb in the event of any exception.

 {{{
 Warning: Output is not a terminal (fd=8).
 Traceback (most recent call last):
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 459, in _importconftest
     return self._conftestpath2mod[key]
 KeyError: PosixPath('/home/jayvdb/projects/django/.../tests/conftest.py')

 During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
   File "/usr/lib/python3.8/site-packages/prompt_toolkit/input/vt100.py",
 line 50, in __init__
     stdin.fileno()
   File "/usr/lib/python3.8/site-packages/_pytest/capture.py", line 711, in
 fileno
     raise UnsupportedOperation("redirected stdin is pseudofile, has no
 fileno()")
 io.UnsupportedOperation: redirected stdin is pseudofile, has no fileno()

 During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
   File "/usr/lib64/python3.8/runpy.py", line 193, in _run_module_as_main
     return _run_code(code, main_globals, None,
   File "/usr/lib64/python3.8/runpy.py", line 86, in _run_code
     exec(code, run_globals)
   File "/usr/lib/python3.8/site-packages/pytest/__main__.py", line 7, in
 <module>
     raise SystemExit(pytest.main())
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 73, in main
     config = _prepareconfig(args, plugins)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 223, in _prepareconfig
     return pluginmanager.hook.pytest_cmdline_parse(
   File "/usr/lib/python3.8/site-packages/pluggy/hooks.py", line 286, in
 __call__
     return self._hookexec(self, self.get_hookimpls(), kwargs)
   File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 93, in
 _hookexec
     return self._inner_hookexec(hook, methods, kwargs)
   File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 84, in
 <lambda>
     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 203, in
 _multicall
     gen.send(outcome)
   File "/usr/lib/python3.8/site-packages/_pytest/helpconfig.py", line 89,
 in pytest_cmdline_parse
     config = outcome.get_result()
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 80, in
 get_result
     raise ex[1].with_traceback(ex[2])
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 187, in
 _multicall
     res = hook_impl.function(*args)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 794, in pytest_cmdline_parse
     self.parse(args)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 1000, in parse
     self._preparse(args, addopts=addopts)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 957, in _preparse
     self.hook.pytest_load_initial_conftests(
   File "/usr/lib/python3.8/site-packages/pluggy/hooks.py", line 286, in
 __call__
     return self._hookexec(self, self.get_hookimpls(), kwargs)
   File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 93, in
 _hookexec
     return self._inner_hookexec(hook, methods, kwargs)
   File "/usr/lib/python3.8/site-packages/pluggy/manager.py", line 84, in
 <lambda>
     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 208, in
 _multicall
     return outcome.get_result()
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 80, in
 get_result
     raise ex[1].with_traceback(ex[2])
   File "/usr/lib/python3.8/site-packages/pluggy/callers.py", line 187, in
 _multicall
     res = hook_impl.function(*args)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 857, in pytest_load_initial_conftests
 self.pluginmanager._set_initial_conftests(early_config.known_args_namespace)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 405, in _set_initial_conftests
     self._try_load_conftest(anchor)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 416, in _try_load_conftest
     self._getconftestmodules(x)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 437, in _getconftestmodules
     mod = self._importconftest(conftestpath)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 484, in _importconftest
     self.consider_conftest(mod)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 537, in consider_conftest
     self.register(conftestmodule, name=conftestmodule.__file__)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 350, in register
     self.consider_module(plugin)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 543, in consider_module
     self._import_plugin_specs(getattr(mod, "pytest_plugins", []))
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 548, in _import_plugin_specs
     self.import_plugin(import_spec)
   File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line
 575, in import_plugin
     __import__(importspec)
   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
   File "<frozen importlib._bootstrap>", line 975, in
 _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
   File "/usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py",
 line 143, in exec_module
     exec(co, module.__dict__)
   File "/usr/lib/python3.8/site-packages/pytest_djangoapp/plugin.py", line
 6, in <module>
     from django.test.runner import DiscoverRunner
   File "/usr/lib/python3.8/site-packages/django/test/runner.py", line 23,
 in <module>
     import ipdb as pdb
   File "/usr/lib/python3.8/site-packages/ipdb/__init__.py", line 7, in
 <module>
     from ipdb.__main__ import set_trace, post_mortem, pm, run
 # noqa
   File "/usr/lib/python3.8/site-packages/ipdb/__main__.py", line 33, in
 <module>
     ipapp.initialize(['--no-term-title'])
   File "<decorator-gen-128>", line 2, in initialize
   File "/usr/lib/python3.8/site-packages/traitlets/config/application.py",
 line 87, in catch_config_error
     return method(app, *args, **kwargs)
   File "/usr/lib/python3.8/site-packages/IPython/terminal/ipapp.py", line
 317, in initialize
     self.init_shell()
   File "/usr/lib/python3.8/site-packages/IPython/terminal/ipapp.py", line
 331, in init_shell
     self.shell = self.interactive_shell_class.instance(parent=self,
   File "/usr/lib/python3.8/site-
 packages/traitlets/config/configurable.py", line 412, in instance
     inst = cls(*args, **kwargs)
   File "/usr/lib/python3.8/site-
 packages/IPython/terminal/interactiveshell.py", line 525, in __init__
     self.init_prompt_toolkit_cli()
   File "/usr/lib/python3.8/site-
 packages/IPython/terminal/interactiveshell.py", line 318, in
 init_prompt_toolkit_cli
     self.pt_app = PromptSession(
   File "/usr/lib/python3.8/site-
 packages/prompt_toolkit/shortcuts/prompt.py", line 458, in __init__
     self.app = self._create_application(editing_mode, erase_when_done)
   File "/usr/lib/python3.8/site-
 packages/prompt_toolkit/shortcuts/prompt.py", line 701, in
 _create_application
     application: Application[_T] = Application(
   File "/usr/lib/python3.8/site-
 packages/prompt_toolkit/application/application.py", line 267, in __init__
     self.input = input or session.input
   File "/usr/lib/python3.8/site-
 packages/prompt_toolkit/application/current.py", line 57, in input
     self._input = create_input()
   File "/usr/lib/python3.8/site-
 packages/prompt_toolkit/input/defaults.py", line 43, in create_input
     return Vt100Input(stdin)
   File "/usr/lib/python3.8/site-packages/prompt_toolkit/input/vt100.py",
 line 57, in __init__
     raise io.UnsupportedOperation("Stdin is not a terminal.")
 io.UnsupportedOperation: Stdin is not a terminal.

 If you suspect this is an IPython 7.15.0 bug, please report it at:
     https://github.com/ipython/ipython/issues
 or send an email to the mailing list at ipython-...@python.org

 You can print a more detailed traceback right now with "%tb", or use
 "%debug"
 to interactively debug it.

 Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
     c.Application.verbose_crash=True

 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31704>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.84f2b273e60f72deaa0c9efb619449fb%40djangoproject.com.

Reply via email to