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