Compare commits

..

11 Commits

Author SHA1 Message Date
Bruno Oliveira
ec6129639e Release 1.23.2 2018-09-28 06:38:50 -03:00
Bruno Oliveira
f6ac209cd5 Merge pull request #345 from BrandonHoffman/master
add exception handeling for warning serialization issues
2018-09-28 06:38:14 -03:00
Bruno Oliveira
b176b37606 Add a test which reproduces #344 and fix the handling code
Fix #344
2018-09-27 22:18:52 -03:00
Brandon Hoffman
22e36c9cb4 run black formatter 2018-09-27 19:32:10 -05:00
Brandon Hoffman
8825e7e234 use module name and class name for method instead of the reference to them 2018-09-27 19:27:49 -05:00
Brandon Hoffman
5d5f87b600 add moduel and class name to warning text 2018-09-27 19:24:58 -05:00
Brandon Hoffman
571d08fb8b remove unneeded lines 2018-09-26 21:05:30 -05:00
Brandon Hoffman
36c28ee154 add test case for invalid warning handeling 2018-09-26 20:44:01 -05:00
Brandon Hoffman
af3e975664 add changelog 2018-09-26 19:46:28 -05:00
Brandon Hoffman
bc2ba55f70 add exception handeling for warning serialization issues 2018-09-26 19:32:13 -05:00
Bruno Oliveira
8475876ce3 Merge pull request #343 from nicoddemus/release-1.23.1
Release 1.23.1
2018-09-25 17:05:40 -03:00
4 changed files with 48 additions and 2 deletions

View File

@@ -1,3 +1,12 @@
pytest-xdist 1.23.2 (2018-09-28)
================================
Bug Fixes
---------
- `#344 <https://github.com/pytest-dev/pytest-xdist/issues/344>`_: Fix issue where Warnings could cause pytest to fail if they do not set the args attribute correctly.
pytest-xdist 1.23.1 (2018-09-25)
================================

View File

@@ -429,6 +429,35 @@ class TestTerminalReporting:
result = testdir.runpytest(n)
result.stdout.fnmatch_lines(["*this is a warning*", "*1 passed, 1 warnings*"])
@pytest.mark.parametrize("n", ["-n0", "-n1"])
def test_custom_subclass(self, testdir, n):
"""Check that warning subclasses that don't honor the args attribute don't break
pytest-xdist (#344)
"""
from pkg_resources import parse_version
if parse_version(pytest.__version__) < parse_version("3.1"):
pytest.skip("pytest warnings requires >= 3.1")
testdir.makepyfile(
"""
import warnings, py, pytest
class MyWarning(UserWarning):
def __init__(self, p1, p2):
self.p1 = p1
self.p2 = p2
self.args = ()
def test_func(request):
warnings.warn(MyWarning("foo", 1))
"""
)
testdir.syspathinsert()
result = testdir.runpytest(n)
result.stdout.fnmatch_lines(["*MyWarning*", "*1 passed, 1 warnings*"])
def test_logfinish_hook(self, testdir):
"""Ensure the pytest_runtest_logfinish hook is being properly handled"""
from _pytest import hookspec

View File

@@ -182,7 +182,7 @@ def serialize_warning_message(warning_message):
message_module = type(warning_message.message).__module__
message_class_name = type(warning_message.message).__name__
message_args = warning_message.message.args
message_str = None
message_str = str(warning_message.message)
else:
message_str = warning_message.message
message_module = None

View File

@@ -426,7 +426,15 @@ def unserialize_warning_message(data):
if data["message_module"]:
mod = importlib.import_module(data["message_module"])
cls = getattr(mod, data["message_class_name"])
message = cls(*data["message_args"])
try:
message = cls(*data["message_args"])
except TypeError:
message_text = "{mod}.{cls}: {msg}".format(
mod=data["message_module"],
cls=data["message_class_name"],
msg=data["message_str"],
)
message = Warning(message_text)
else:
message = data["message_str"]