Merge branch 'pyreadline-workaround'
This commit is contained in:
commit
99a5067edb
1
AUTHORS
1
AUTHORS
|
@ -31,6 +31,7 @@ Eduardo Schettino
|
||||||
Elizaveta Shashkova
|
Elizaveta Shashkova
|
||||||
Eric Hunsberger
|
Eric Hunsberger
|
||||||
Eric Siegerman
|
Eric Siegerman
|
||||||
|
Erik M. Bray
|
||||||
Florian Bruhin
|
Florian Bruhin
|
||||||
Floris Bruynooghe
|
Floris Bruynooghe
|
||||||
Gabriel Reis
|
Gabriel Reis
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
this was a regression failing plugins combinations
|
this was a regression failing plugins combinations
|
||||||
like pytest-pep8 + pytest-flakes
|
like pytest-pep8 + pytest-flakes
|
||||||
|
|
||||||
|
- Workaround for exception that occurs in pyreadline when using
|
||||||
|
``--pdb`` with standard I/O capture enabled.
|
||||||
|
Thanks Erik M. Bray for the PR.
|
||||||
|
|
||||||
2.8.5
|
2.8.5
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ def pytest_addoption(parser):
|
||||||
|
|
||||||
@pytest.hookimpl(hookwrapper=True)
|
@pytest.hookimpl(hookwrapper=True)
|
||||||
def pytest_load_initial_conftests(early_config, parser, args):
|
def pytest_load_initial_conftests(early_config, parser, args):
|
||||||
|
_readline_workaround()
|
||||||
ns = early_config.known_args_namespace
|
ns = early_config.known_args_namespace
|
||||||
pluginmanager = early_config.pluginmanager
|
pluginmanager = early_config.pluginmanager
|
||||||
capman = CaptureManager(ns.capture)
|
capman = CaptureManager(ns.capture)
|
||||||
|
@ -442,3 +443,30 @@ class DontReadFromInput:
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def _readline_workaround():
|
||||||
|
"""
|
||||||
|
Ensure readline is imported so that it attaches to the correct stdio
|
||||||
|
handles on Windows.
|
||||||
|
|
||||||
|
Pdb uses readline support where available--when not running from the Python
|
||||||
|
prompt, the readline module is not imported until running the pdb REPL. If
|
||||||
|
running py.test with the --pdb option this means the readline module is not
|
||||||
|
imported until after I/O capture has been started.
|
||||||
|
|
||||||
|
This is a problem for pyreadline, which is often used to implement readline
|
||||||
|
support on Windows, as it does not attach to the correct handles for stdout
|
||||||
|
and/or stdin if they have been redirected by the FDCapture mechanism. This
|
||||||
|
workaround ensures that readline is imported before I/O capture is setup so
|
||||||
|
that it can attach to the actual stdin/out for the console.
|
||||||
|
|
||||||
|
See https://github.com/pytest-dev/pytest/pull/1281
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not sys.platform.startswith('win32'):
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
import readline # noqa
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
Loading…
Reference in New Issue