Hello community,
here is the log from the commit of package python-pytest4 for openSUSE:Factory checked in at 2019-07-08 14:59:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest4 (Old)
and /work/SRC/openSUSE:Factory/.python-pytest4.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest4"
Mon Jul 8 14:59:39 2019 rev:5 rq:713062 version:4.6.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest4/python-pytest4.changes 2019-06-18 14:49:53.589671744 +0200
+++ /work/SRC/openSUSE:Factory/.python-pytest4.new.4615/python-pytest4.changes 2019-07-08 14:59:39.622410761 +0200
@@ -1,0 +2,9 @@
+Tue Jul 2 13:27:39 UTC 2019 - Tomáš Chvátal
+
+- Update to 4.6.4:
+ * #5404: Emit a warning when attempting to unwrap a broken object raises an exception, for easier debugging (#5080).
+ * #5444: Fix --stepwise mode when the first file passed on the command-line fails to collect.
+ * #5482: Fix bug introduced in 4.6.0 causing collection errors when passing more than 2 positional arguments to pytest.mark.parametrize.
+ * #5505: Fix crash when discovery fails while using -p no:terminal.
+
+-------------------------------------------------------------------
Old:
----
pytest-4.6.3.tar.gz
New:
----
pytest-4.6.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest4.spec ++++++
--- /var/tmp/diff_new_pack.Oeavdu/_old 2019-07-08 14:59:40.326411825 +0200
+++ /var/tmp/diff_new_pack.Oeavdu/_new 2019-07-08 14:59:40.330411830 +0200
@@ -26,7 +26,7 @@
%bcond_with test
%endif
Name: python-pytest4%{psuffix}
-Version: 4.6.3
+Version: 4.6.4
Release: 0
Summary: Python testing tool with autodiscovery and detailed asserts
License: MIT
@@ -48,7 +48,7 @@
Requires: python-wcwidth
Requires(post): update-alternatives
Requires(postun): update-alternatives
-Conflicts: python-pytest < 4.0
+Conflicts: python-pytest
Provides: python-pytest = %{version}-%{release}
Obsoletes: python-pytest4-doc
BuildArch: noarch
@@ -56,7 +56,7 @@
BuildRequires: %{python_module hypothesis}
BuildRequires: %{python_module importlib_metadata >= 0.12}
BuildRequires: %{python_module pygments-pytest}
-BuildRequires: %{python_module pytest >= %{version}}
+BuildRequires: %{python_module pytest4 >= %{version}}
BuildRequires: %{python_module setuptools_scm}
BuildRequires: python-funcsigs
BuildRequires: python-mock
++++++ pytest-4.6.3.tar.gz -> pytest-4.6.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/AUTHORS new/pytest-4.6.4/AUTHORS
--- old/pytest-4.6.3/AUTHORS 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/AUTHORS 2019-06-29 04:00:08.000000000 +0200
@@ -135,6 +135,7 @@
Katarzyna Jachim
Katerina Koukiou
Kevin Cox
+Kevin J. Foley
Kodi B. Arfer
Kostis Anagnostopoulos
Kristoffer Nordström
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/CHANGELOG.rst new/pytest-4.6.4/CHANGELOG.rst
--- old/pytest-4.6.3/CHANGELOG.rst 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/CHANGELOG.rst 2019-06-29 04:00:08.000000000 +0200
@@ -18,6 +18,26 @@
.. towncrier release notes start
+pytest 4.6.4 (2019-06-28)
+=========================
+
+Bug Fixes
+---------
+
+- `#5404 https://github.com/pytest-dev/pytest/issues/5404`_: Emit a warning when attempting to unwrap a broken object raises an exception,
+ for easier debugging (`#5080 https://github.com/pytest-dev/pytest/issues/5080`__).
+
+
+- `#5444 https://github.com/pytest-dev/pytest/issues/5444`_: Fix ``--stepwise`` mode when the first file passed on the command-line fails to collect.
+
+
+- `#5482 https://github.com/pytest-dev/pytest/issues/5482`_: Fix bug introduced in 4.6.0 causing collection errors when passing
+ more than 2 positional arguments to ``pytest.mark.parametrize``.
+
+
+- `#5505 https://github.com/pytest-dev/pytest/issues/5505`_: Fix crash when discovery fails while using ``-p no:terminal``.
+
+
pytest 4.6.3 (2019-06-11)
=========================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/PKG-INFO new/pytest-4.6.4/PKG-INFO
--- old/pytest-4.6.3/PKG-INFO 2019-06-11 18:55:35.000000000 +0200
+++ new/pytest-4.6.4/PKG-INFO 2019-06-29 04:00:24.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest
-Version: 4.6.3
+Version: 4.6.4
Summary: pytest: simple powerful testing with Python
Home-page: https://docs.pytest.org/en/latest/
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/doc/en/announce/index.rst new/pytest-4.6.4/doc/en/announce/index.rst
--- old/pytest-4.6.3/doc/en/announce/index.rst 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/doc/en/announce/index.rst 2019-06-29 04:00:08.000000000 +0200
@@ -6,6 +6,7 @@
:maxdepth: 2
+ release-4.6.4
release-4.6.3
release-4.6.2
release-4.6.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/doc/en/announce/release-4.6.4.rst new/pytest-4.6.4/doc/en/announce/release-4.6.4.rst
--- old/pytest-4.6.3/doc/en/announce/release-4.6.4.rst 1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-4.6.4/doc/en/announce/release-4.6.4.rst 2019-06-29 04:00:08.000000000 +0200
@@ -0,0 +1,22 @@
+pytest-4.6.4
+=======================================
+
+pytest 4.6.4 has just been released to PyPI.
+
+This is a bug-fix release, being a drop-in replacement. To upgrade::
+
+ pip install --upgrade pytest
+
+The full changelog is available at https://docs.pytest.org/en/latest/changelog.html.
+
+Thanks to all who contributed to this release, among them:
+
+* Anthony Sottile
+* Bruno Oliveira
+* Daniel Hahler
+* Thomas Grainger
+* Zac Hatfield-Dodds
+
+
+Happy testing,
+The pytest Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/_version.py new/pytest-4.6.4/src/_pytest/_version.py
--- old/pytest-4.6.3/src/_pytest/_version.py 2019-06-11 18:55:34.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/_version.py 2019-06-29 04:00:23.000000000 +0200
@@ -1,4 +1,4 @@
# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
-version = '4.6.3'
+version = '4.6.4'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/compat.py new/pytest-4.6.4/src/_pytest/compat.py
--- old/pytest-4.6.3/src/_pytest/compat.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/compat.py 2019-06-29 04:00:08.000000000 +0200
@@ -377,7 +377,7 @@
else:
def safe_str(v):
- """returns v as string, converting to ascii if necessary"""
+ """returns v as string, converting to utf-8 if necessary"""
try:
return str(v)
except UnicodeError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/doctest.py new/pytest-4.6.4/src/_pytest/doctest.py
--- old/pytest-4.6.3/src/_pytest/doctest.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/doctest.py 2019-06-29 04:00:08.000000000 +0200
@@ -8,6 +8,7 @@
import platform
import sys
import traceback
+import warnings
from contextlib import contextmanager
import pytest
@@ -17,6 +18,7 @@
from _pytest.compat import safe_getattr
from _pytest.fixtures import FixtureRequest
from _pytest.outcomes import Skipped
+from _pytest.warning_types import PytestWarning
DOCTEST_REPORT_CHOICE_NONE = "none"
DOCTEST_REPORT_CHOICE_CDIFF = "cdiff"
@@ -374,10 +376,18 @@
else:
def _mock_aware_unwrap(obj, stop=None):
- if stop is None:
- return real_unwrap(obj, stop=_is_mocked)
- else:
+ try:
+ if stop is None or stop is _is_mocked:
+ return real_unwrap(obj, stop=_is_mocked)
return real_unwrap(obj, stop=lambda obj: _is_mocked(obj) or stop(obj))
+ except Exception as e:
+ warnings.warn(
+ "Got %r when unwrapping %r. This is usually caused "
+ "by a violation of Python's object protocol; see e.g. "
+ "https://github.com/pytest-dev/pytest/issues/5080" % (e, obj),
+ PytestWarning,
+ )
+ raise
inspect.unwrap = _mock_aware_unwrap
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/mark/structures.py new/pytest-4.6.4/src/_pytest/mark/structures.py
--- old/pytest-4.6.3/src/_pytest/mark/structures.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/mark/structures.py 2019-06-29 04:00:08.000000000 +0200
@@ -104,10 +104,7 @@
return cls(parameterset, marks=[], id=None)
@staticmethod
- def _parse_parametrize_args(argnames, argvalues, **_):
- """It receives an ignored _ (kwargs) argument so this function can
- take also calls from parametrize ignoring scope, indirect, and other
- arguments..."""
+ def _parse_parametrize_args(argnames, argvalues, *args, **kwargs):
if not isinstance(argnames, (tuple, list)):
argnames = [x.strip() for x in argnames.split(",") if x.strip()]
force_tuple = len(argnames) == 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/nodes.py new/pytest-4.6.4/src/_pytest/nodes.py
--- old/pytest-4.6.3/src/_pytest/nodes.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/nodes.py 2019-06-29 04:00:08.000000000 +0200
@@ -329,7 +329,7 @@
# Respect explicit tbstyle option, but default to "short"
# (None._repr_failure_py defaults to "long" without "fulltrace" option).
- tbstyle = self.config.getoption("tbstyle")
+ tbstyle = self.config.getoption("tbstyle", "auto")
if tbstyle == "auto":
tbstyle = "short"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/_pytest/stepwise.py new/pytest-4.6.4/src/_pytest/stepwise.py
--- old/pytest-4.6.3/src/_pytest/stepwise.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/src/_pytest/stepwise.py 2019-06-29 04:00:08.000000000 +0200
@@ -29,6 +29,7 @@
self.config = config
self.active = config.getvalue("stepwise")
self.session = None
+ self.report_status = ""
if self.active:
self.lastfailed = config.cache.get("cache/stepwise", None)
@@ -70,12 +71,6 @@
config.hook.pytest_deselected(items=already_passed)
- def pytest_collectreport(self, report):
- if self.active and report.failed:
- self.session.shouldstop = (
- "Error when collecting test, stopping test execution."
- )
-
def pytest_runtest_logreport(self, report):
# Skip this hook if plugin is not active or the test is xfailed.
if not self.active or "xfail" in report.keywords:
@@ -104,7 +99,7 @@
self.lastfailed = None
def pytest_report_collectionfinish(self):
- if self.active and self.config.getoption("verbose") >= 0:
+ if self.active and self.config.getoption("verbose") >= 0 and self.report_status:
return "stepwise: %s" % self.report_status
def pytest_sessionfinish(self, session):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/pytest.egg-info/PKG-INFO new/pytest-4.6.4/src/pytest.egg-info/PKG-INFO
--- old/pytest-4.6.3/src/pytest.egg-info/PKG-INFO 2019-06-11 18:55:34.000000000 +0200
+++ new/pytest-4.6.4/src/pytest.egg-info/PKG-INFO 2019-06-29 04:00:23.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest
-Version: 4.6.3
+Version: 4.6.4
Summary: pytest: simple powerful testing with Python
Home-page: https://docs.pytest.org/en/latest/
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/src/pytest.egg-info/SOURCES.txt new/pytest-4.6.4/src/pytest.egg-info/SOURCES.txt
--- old/pytest-4.6.3/src/pytest.egg-info/SOURCES.txt 2019-06-11 18:55:34.000000000 +0200
+++ new/pytest-4.6.4/src/pytest.egg-info/SOURCES.txt 2019-06-29 04:00:24.000000000 +0200
@@ -197,6 +197,7 @@
doc/en/announce/release-4.6.1.rst
doc/en/announce/release-4.6.2.rst
doc/en/announce/release-4.6.3.rst
+doc/en/announce/release-4.6.4.rst
doc/en/announce/sprint2016.rst
doc/en/example/attic.rst
doc/en/example/conftest.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/testing/python/metafunc.py new/pytest-4.6.4/testing/python/metafunc.py
--- old/pytest-4.6.3/testing/python/metafunc.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/testing/python/metafunc.py 2019-06-29 04:00:08.000000000 +0200
@@ -1765,3 +1765,16 @@
result.stdout.fnmatch_lines(
["*test_func_a*0*PASS*", "*test_func_a*2*PASS*", "*test_func_b*10*PASS*"]
)
+
+ def test_parametrize_positional_args(self, testdir):
+ testdir.makepyfile(
+ """
+ import pytest
+
+ @pytest.mark.parametrize("a", [1], False)
+ def test_foo(a):
+ pass
+ """
+ )
+ result = testdir.runpytest()
+ result.assert_outcomes(passed=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/testing/test_config.py new/pytest-4.6.4/testing/test_config.py
--- old/pytest-4.6.3/testing/test_config.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/testing/test_config.py 2019-06-29 04:00:08.000000000 +0200
@@ -15,6 +15,7 @@
from _pytest.config.findpaths import determine_setup
from _pytest.config.findpaths import get_common_ancestor
from _pytest.config.findpaths import getcfg
+from _pytest.main import EXIT_INTERRUPTED
from _pytest.main import EXIT_NOTESTSCOLLECTED
from _pytest.main import EXIT_OK
from _pytest.main import EXIT_TESTSFAILED
@@ -752,10 +753,10 @@
**{
"conftest": conftest_source,
"subdir/conftest": conftest_source,
- "subdir/test_foo": """
+ "subdir/test_foo": """\
def test_foo(pytestconfig):
assert pytestconfig.getini('foo') == 'subdir'
- """,
+ """,
}
)
@@ -788,6 +789,12 @@
assert "ValueError" in err
+def test_no_terminal_discovery_error(testdir):
+ testdir.makepyfile("raise TypeError('oops!')")
+ result = testdir.runpytest("-p", "no:terminal", "--collect-only")
+ assert result.ret == EXIT_INTERRUPTED
+
+
def test_load_initial_conftest_last_ordering(testdir, _config_for_test):
pm = _config_for_test.pluginmanager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/testing/test_doctest.py new/pytest-4.6.4/testing/test_doctest.py
--- old/pytest-4.6.3/testing/test_doctest.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/testing/test_doctest.py 2019-06-29 04:00:08.000000000 +0200
@@ -3,11 +3,14 @@
from __future__ import division
from __future__ import print_function
+import inspect
import sys
import textwrap
import pytest
from _pytest.compat import MODULE_NOT_FOUND_ERROR
+from _pytest.doctest import _is_mocked
+from _pytest.doctest import _patch_unwrap_mock_aware
from _pytest.doctest import DoctestItem
from _pytest.doctest import DoctestModule
from _pytest.doctest import DoctestTextfile
@@ -1237,3 +1240,25 @@
)
result = testdir.runpytest("--doctest-modules")
result.stdout.fnmatch_lines(["* 1 passed *"])
+
+
+class Broken:
+ def __getattr__(self, _):
+ raise KeyError("This should be an AttributeError")
+
+
+@pytest.mark.skipif(not hasattr(inspect, "unwrap"), reason="nothing to patch")
+@pytest.mark.parametrize( # pragma: no branch (lambdas are not called)
+ "stop", [None, _is_mocked, lambda f: None, lambda f: False, lambda f: True]
+)
+def test_warning_on_unwrap_of_broken_object(stop):
+ bad_instance = Broken()
+ assert inspect.unwrap.__module__ == "inspect"
+ with _patch_unwrap_mock_aware():
+ assert inspect.unwrap.__module__ != "inspect"
+ with pytest.warns(
+ pytest.PytestWarning, match="^Got KeyError.* when unwrapping"
+ ):
+ with pytest.raises(KeyError):
+ inspect.unwrap(bad_instance, stop=stop)
+ assert inspect.unwrap.__module__ == "inspect"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-4.6.3/testing/test_stepwise.py new/pytest-4.6.4/testing/test_stepwise.py
--- old/pytest-4.6.3/testing/test_stepwise.py 2019-06-11 18:55:18.000000000 +0200
+++ new/pytest-4.6.4/testing/test_stepwise.py 2019-06-29 04:00:08.000000000 +0200
@@ -157,14 +157,12 @@
assert "test_success PASSED" in stdout
-def test_stop_on_collection_errors(broken_testdir):
- result = broken_testdir.runpytest(
- "-v",
- "--strict-markers",
- "--stepwise",
- "working_testfile.py",
- "broken_testfile.py",
- )
-
- stdout = result.stdout.str()
- assert "errors during collection" in stdout
+@pytest.mark.parametrize("broken_first", [True, False])
+def test_stop_on_collection_errors(broken_testdir, broken_first):
+ """Stop during collection errors. Broken test first or broken test last
+ actually surfaced a bug (#5444), so we test both situations."""
+ files = ["working_testfile.py", "broken_testfile.py"]
+ if broken_first:
+ files.reverse()
+ result = broken_testdir.runpytest("-v", "--strict-markers", "--stepwise", *files)
+ result.stdout.fnmatch_lines("*errors during collection*")