Attempting to patch terminal only if terminalreporter is available

This fixes the flag "--paste=all" when running tests with xdist, as slaves would
attempt to patch a non-existing terminal during pytest_configure. Only the master
node has a terminalreporter installed.

--HG--
branch : pastebin-xdist
This commit is contained in:
Bruno Oliveira 2015-01-19 19:20:01 -02:00
parent 8859936301
commit 7e15fb7f2d
1 changed files with 10 additions and 6 deletions

View File

@ -14,13 +14,17 @@ def pytest_addoption(parser):
@pytest.mark.trylast @pytest.mark.trylast
def pytest_configure(config): def pytest_configure(config):
if config.option.pastebin == "all": if config.option.pastebin == "all":
config._pastebinfile = tempfile.TemporaryFile('w+')
tr = config.pluginmanager.getplugin('terminalreporter') tr = config.pluginmanager.getplugin('terminalreporter')
oldwrite = tr._tw.write # if no terminal reporter plugin is present, nothing we can do here;
def tee_write(s, **kwargs): # this can happen when this function executes in a slave node
oldwrite(s, **kwargs) # when using pytest-xdist, for example
config._pastebinfile.write(str(s)) if tr is not None:
tr._tw.write = tee_write config._pastebinfile = tempfile.TemporaryFile('w+')
oldwrite = tr._tw.write
def tee_write(s, **kwargs):
oldwrite(s, **kwargs)
config._pastebinfile.write(str(s))
tr._tw.write = tee_write
def pytest_unconfigure(config): def pytest_unconfigure(config):
if hasattr(config, '_pastebinfile'): if hasattr(config, '_pastebinfile'):