1
0

Accepting request 946700 from home:buschmann23:branches:devel:languages:python:pytest

- Update to 2.5.0
  * Features
    + Full compatibility with pytest 7 - no deprecation warnings or
      use of legacy features.
    + New --dist=loadgroup option, which ensures all tests marked
      with @pytest.mark.xdist_group run in the same session/worker.
      Other tests run distributed as in --dist=load.
  * Trivial Changes
    + Use @pytest.hookspec decorator to declare hook options in
      newhooks.py to avoid warnings in pytest 7.0.
    + Use up-to-date setup.cfg/pyproject.toml packaging setup.
    + Started using type annotations and mypy checking internally.
      The types are incomplete and not published.
- Changes from 2.4.0
  * Features
    + On Linux, the process title now changes to indicate the current
      worker state (running/idle). Depends on the setproctitle package,
      which can be installed with pip install pytest-xdist[setproctitle].
    + Add support for Python 3.10.
- Changes from 2.3.0
  * Deprecations and Removals
    + Python 3.5 is no longer supported.
  * Features
    + Add --numprocesses=logical flag, which automatically uses the
      number of logical CPUs available, instead of physical CPUs
      with auto. This is very useful for test suites which are not
      CPU-bound.
    + Added new pytest_handlecrashitem hook to allow handling and
      rescheduling crashed items.
  * Bug Fixes
    + Copy the parent process sys.path into local workers, to work
      around execnet's python -c adding the current directory to sys.path.
    + Fix issue caused by changing the branch name of the pytest repository.
  * Trivial Changes
    + Replace master with controller where ever possible.
    + Use 'main' to refer to pytest default branch in tox env names.
- Update patches
  * reintroduce-slave-terminology.patch
  * 0001-Revert-Remove-compat-for-pytest-6.patch
- Require setuptools_scm >= 6.0 for building

OBS-URL: https://build.opensuse.org/request/show/946700
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:pytest/python-pytest-xdist?expand=0&rev=26
This commit is contained in:
Matej Cepl 2022-01-17 06:28:23 +00:00 committed by Git OBS Bridge
parent d2c09f045a
commit c9d5ba2911
6 changed files with 115 additions and 97 deletions

View File

@ -5,16 +5,16 @@ Date: Mon, 31 Aug 2020 15:50:54 +0200
Subject: [PATCH] Revert "Remove compat for pytest < 6" Subject: [PATCH] Revert "Remove compat for pytest < 6"
This reverts commit d153e0a4c4b764c821da9907ba3d2cac31bc3884. This reverts commit d153e0a4c4b764c821da9907ba3d2cac31bc3884.
---
src/xdist/remote.py | 39 ++++++++++++++++++++++++++++----------
src/xdist/workermanage.py | 6 +++++-
testing/acceptance_test.py | 2 +-
3 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/src/xdist/remote.py b/src/xdist/remote.py Updated on 2022-01-15
index 26cf958..b78d744 100644 ---
--- a/src/xdist/remote.py src/xdist/remote.py | 44 ++++++++++++++++++++++++++++++++------------
+++ b/src/xdist/remote.py src/xdist/workermanage.py | 6 +++++-
testing/acceptance_test.py | 2 +-
3 files changed, 38 insertions(+), 14 deletions(-)
--- a/src/xdist/remote.py 2022-01-15 19:11:37.443540560 +0100
+++ b/src/xdist/remote.py 2022-01-15 19:18:58.911532654 +0100
@@ -11,6 +11,7 @@ import os @@ -11,6 +11,7 @@ import os
import time import time
@ -23,24 +23,27 @@ index 26cf958..b78d744 100644
import pytest import pytest
from execnet.gateway_base import dumps, DumpError from execnet.gateway_base import dumps, DumpError
@@ -100,8 +101,11 @@ class WorkerInteractor: @@ -147,9 +148,12 @@ class WorkerInteractor:
def pytest_runtest_logstart(self, nodeid, location): def pytest_runtest_logstart(self, nodeid, location):
self.sendevent("logstart", nodeid=nodeid, location=location) self.sendevent("logstart", nodeid=nodeid, location=location)
- @pytest.hookimpl
- def pytest_runtest_logfinish(self, nodeid, location): - def pytest_runtest_logfinish(self, nodeid, location):
- self.sendevent("logfinish", nodeid=nodeid, location=location) - self.sendevent("logfinish", nodeid=nodeid, location=location)
+ # the pytest_runtest_logfinish hook was introduced in pytest 3.4 + # the pytest_runtest_logfinish hook was introduced in pytest 3.4
+ if hasattr(_pytest.hookspec, "pytest_runtest_logfinish"): + if hasattr(_pytest.hookspec, "pytest_runtest_logfinish"):
+ +
+ @pytest.hookimpl
+ def pytest_runtest_logfinish(self, nodeid, location): + def pytest_runtest_logfinish(self, nodeid, location):
+ self.sendevent("logfinish", nodeid=nodeid, location=location) + self.sendevent("logfinish", nodeid=nodeid, location=location)
@pytest.hookimpl
def pytest_runtest_logreport(self, report): def pytest_runtest_logreport(self, report):
data = self.config.hook.pytest_report_to_serializable( @@ -171,15 +175,31 @@ class WorkerInteractor:
@@ -121,14 +125,29 @@ class WorkerInteractor:
) )
self.sendevent("collectreport", data=data) self.sendevent("collectreport", data=data)
- @pytest.hookimpl
- def pytest_warning_recorded(self, warning_message, when, nodeid, location): - def pytest_warning_recorded(self, warning_message, when, nodeid, location):
- self.sendevent( - self.sendevent(
- "warning_recorded", - "warning_recorded",
@ -52,6 +55,7 @@ index 26cf958..b78d744 100644
+ # the pytest_warning_recorded hook was introduced in pytest 6.0 + # the pytest_warning_recorded hook was introduced in pytest 6.0
+ if hasattr(_pytest.hookspec, "pytest_warning_recorded"): + if hasattr(_pytest.hookspec, "pytest_warning_recorded"):
+ +
+ @pytest.hookimpl
+ def pytest_warning_recorded(self, warning_message, when, nodeid, location): + def pytest_warning_recorded(self, warning_message, when, nodeid, location):
+ self.sendevent( + self.sendevent(
+ "warning_recorded", + "warning_recorded",
@ -64,6 +68,7 @@ index 26cf958..b78d744 100644
+ # the pytest_warning_captured hook was introduced in pytest 3.8 + # the pytest_warning_captured hook was introduced in pytest 3.8
+ elif hasattr(_pytest.hookspec, "pytest_warning_captured"): + elif hasattr(_pytest.hookspec, "pytest_warning_captured"):
+ +
+ @pytest.hookimpl
+ def pytest_warning_captured(self, warning_message, when, item): + def pytest_warning_captured(self, warning_message, when, item):
+ self.sendevent( + self.sendevent(
+ "warning_captured", + "warning_captured",
@ -75,11 +80,9 @@ index 26cf958..b78d744 100644
def serialize_warning_message(warning_message): def serialize_warning_message(warning_message):
diff --git a/src/xdist/workermanage.py b/src/xdist/workermanage.py --- a/src/xdist/workermanage.py 2022-01-15 19:11:37.443540560 +0100
index 9b00251..141d86a 100644 +++ b/src/xdist/workermanage.py 2022-01-15 19:11:59.967540157 +0100
--- a/src/xdist/workermanage.py @@ -386,7 +386,11 @@ class WorkerController:
+++ b/src/xdist/workermanage.py
@@ -383,7 +383,11 @@ class WorkerController:
except: # noqa except: # noqa
from _pytest._code import ExceptionInfo from _pytest._code import ExceptionInfo
@ -92,11 +95,9 @@ index 9b00251..141d86a 100644
print("!" * 20, excinfo) print("!" * 20, excinfo)
self.config.notify_exception(excinfo) self.config.notify_exception(excinfo)
self.shutdown() self.shutdown()
diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py --- a/testing/acceptance_test.py 2022-01-15 19:11:37.463540560 +0100
index 8cac669..eee794c 100644 +++ b/testing/acceptance_test.py 2022-01-15 19:11:59.967540157 +0100
--- a/testing/acceptance_test.py @@ -1530,7 +1530,7 @@ def parse_tests_and_workers_from_output(
+++ b/testing/acceptance_test.py
@@ -1364,7 +1364,7 @@ def parse_tests_and_workers_from_output(lines):
r""" r"""
\[(gw\d)\] # worker \[(gw\d)\] # worker
\s* \s*
@ -105,6 +106,3 @@ index 8cac669..eee794c 100644
\s(.*?) # status string ("PASSED") \s(.*?) # status string ("PASSED")
\s(.*::.*) # nodeid \s(.*::.*) # nodeid
""", """,
--
2.28.0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1d8edbb1a45e8e1f8e44b1260583107fc23f8bc8da6d18cb331ff61d41258ecf
size 64781

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf
size 72455

View File

@ -1,3 +1,47 @@
-------------------------------------------------------------------
Sat Jan 15 18:31:01 UTC 2022 - Matthias Fehring <buschmann23@opensuse.org>
- Update to 2.5.0
* Features
+ Full compatibility with pytest 7 - no deprecation warnings or
use of legacy features.
+ New --dist=loadgroup option, which ensures all tests marked
with @pytest.mark.xdist_group run in the same session/worker.
Other tests run distributed as in --dist=load.
* Trivial Changes
+ Use @pytest.hookspec decorator to declare hook options in
newhooks.py to avoid warnings in pytest 7.0.
+ Use up-to-date setup.cfg/pyproject.toml packaging setup.
+ Started using type annotations and mypy checking internally.
The types are incomplete and not published.
- Changes from 2.4.0
* Features
+ On Linux, the process title now changes to indicate the current
worker state (running/idle). Depends on the setproctitle package,
which can be installed with pip install pytest-xdist[setproctitle].
+ Add support for Python 3.10.
- Changes from 2.3.0
* Deprecations and Removals
+ Python 3.5 is no longer supported.
* Features
+ Add --numprocesses=logical flag, which automatically uses the
number of logical CPUs available, instead of physical CPUs
with auto. This is very useful for test suites which are not
CPU-bound.
+ Added new pytest_handlecrashitem hook to allow handling and
rescheduling crashed items.
* Bug Fixes
+ Copy the parent process sys.path into local workers, to work
around execnet's python -c adding the current directory to sys.path.
+ Fix issue caused by changing the branch name of the pytest repository.
* Trivial Changes
+ Replace master with controller where ever possible.
+ Use 'main' to refer to pytest default branch in tox env names.
- Update patches
* reintroduce-slave-terminology.patch
* 0001-Revert-Remove-compat-for-pytest-6.patch
- Require setuptools_scm >= 6.0 for building
------------------------------------------------------------------- -------------------------------------------------------------------
Tue Feb 2 09:53:19 UTC 2021 - Dirk Müller <dmueller@suse.com> Tue Feb 2 09:53:19 UTC 2021 - Dirk Müller <dmueller@suse.com>

View File

@ -1,7 +1,7 @@
# #
# spec file for package python-pytest-xdist # spec file for package python-pytest-xdist
# #
# Copyright (c) 2021 SUSE LLC # Copyright (c) 2022 SUSE LLC
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}} %{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1 %define skip_python2 1
Name: python-pytest-xdist Name: python-pytest-xdist
Version: 2.2.0 Version: 2.5.0
Release: 0 Release: 0
Summary: Distributed testing and loop-on-failing for py.test Summary: Distributed testing and loop-on-failing for py.test
License: MIT License: MIT
@ -36,7 +36,7 @@ BuildRequires: %{python_module filelock}
BuildRequires: %{python_module psutil >= 3.0.0} BuildRequires: %{python_module psutil >= 3.0.0}
BuildRequires: %{python_module pytest >= 4.4.0} BuildRequires: %{python_module pytest >= 4.4.0}
BuildRequires: %{python_module pytest-forked} BuildRequires: %{python_module pytest-forked}
BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools_scm >= 6.0}
BuildRequires: fdupes BuildRequires: fdupes
BuildRequires: python-rpm-macros BuildRequires: python-rpm-macros
Requires: python-execnet >= 1.1 Requires: python-execnet >= 1.1

View File

@ -5,45 +5,32 @@ Date: Mon, 31 Aug 2020 15:26:22 +0200
Subject: [PATCH] Revert "Finish removal of "slave" terminology" Subject: [PATCH] Revert "Finish removal of "slave" terminology"
This reverts commit de3e54fd278d49b9b5d64e64f5942512519545e5. This reverts commit de3e54fd278d49b9b5d64e64f5942512519545e5.
---
.appveyor.yml | 1 +
.travis.yml | 2 ++
setup.py | 10 ++++++----
src/xdist/dsession.py | 3 +++
src/xdist/plugin.py | 5 ++++-
src/xdist/remote.py | 3 +++
src/xdist/workermanage.py | 6 +++++-
testing/acceptance_test.py | 16 ++++++++++++++++
tox.ini | 4 ++++
9 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/setup.py b/setup.py Updated on 2022-01-15
index b6fb0f1..560069c 100644
--- a/setup.py ---
+++ b/setup.py setup.cfg | 2 +-
@@ -1,6 +1,6 @@ src/xdist/dsession.py | 3 +++
from setuptools import setup, find_packages src/xdist/plugin.py | 5 ++++-
src/xdist/remote.py | 3 +++
src/xdist/workermanage.py | 6 +++++-
testing/acceptance_test.py | 16 ++++++++++++++++
6 files changed, 32 insertions(+), 3 deletions(-)
--- a/setup.cfg 2021-12-10 12:41:52.000000000 +0100
+++ b/setup.cfg 2022-01-15 18:37:44.047576974 +0100
@@ -38,7 +38,7 @@ zip_safe = False
python_requires = >=3.6
install_requires =
execnet>=1.1
- pytest>=6.2.0
+ pytest>=4.4.0
pytest-forked
setup_requires = setuptools_scm>=6.0
-install_requires = ["execnet>=1.1", "pytest>=6.0.0", "pytest-forked"] --- a/src/xdist/dsession.py 2021-12-10 12:41:44.000000000 +0100
+install_requires = ["execnet>=1.1", "pytest>=4.4.0", "pytest-forked"] +++ b/src/xdist/dsession.py 2022-01-15 18:39:21.407575231 +0100
@@ -155,6 +155,9 @@ class DSession:
with open("README.rst") as f:
@@ -9,7 +9,8 @@ with open("README.rst") as f:
setup(
name="pytest-xdist",
use_scm_version={"write_to": "src/xdist/_version.py"},
- description="pytest xdist plugin for distributed testing and loop-on-failing modes",
+ description="pytest xdist plugin for distributed testing"
+ " and loop-on-failing modes",
long_description=long_description,
license="MIT",
author="holger krekel and contributors",
diff --git a/src/xdist/dsession.py b/src/xdist/dsession.py
index 07ef091..80edd9b 100644
--- a/src/xdist/dsession.py
+++ b/src/xdist/dsession.py
@@ -150,6 +150,9 @@ class DSession:
node.workerinfo["id"] = node.gateway.id node.workerinfo["id"] = node.gateway.id
node.workerinfo["spec"] = node.gateway.spec node.workerinfo["spec"] = node.gateway.spec
@ -53,11 +40,9 @@ index 07ef091..80edd9b 100644
self.config.hook.pytest_testnodeready(node=node) self.config.hook.pytest_testnodeready(node=node)
if self.shuttingdown: if self.shuttingdown:
node.shutdown() node.shutdown()
diff --git a/src/xdist/plugin.py b/src/xdist/plugin.py --- a/src/xdist/plugin.py 2021-12-10 12:41:44.000000000 +0100
index 2d8424d..f497603 100644 +++ b/src/xdist/plugin.py 2022-01-15 18:40:33.771573935 +0100
--- a/src/xdist/plugin.py @@ -76,11 +76,14 @@ def pytest_addoption(parser):
+++ b/src/xdist/plugin.py
@@ -65,11 +65,14 @@ def pytest_addoption(parser):
) )
group.addoption( group.addoption(
"--max-worker-restart", "--max-worker-restart",
@ -73,23 +58,19 @@ index 2d8424d..f497603 100644
) )
group.addoption( group.addoption(
"--dist", "--dist",
diff --git a/src/xdist/remote.py b/src/xdist/remote.py --- a/src/xdist/remote.py 2021-12-10 12:41:44.000000000 +0100
index 97dc180..26cf958 100644 +++ b/src/xdist/remote.py 2022-01-15 18:41:44.115572675 +0100
--- a/src/xdist/remote.py @@ -287,5 +287,8 @@ if __name__ == "__channelexec__":
+++ b/src/xdist/remote.py
@@ -233,5 +233,8 @@ if __name__ == "__channelexec__":
config._parser.prog = os.path.basename(workerinput["mainargv"][0]) config._parser.prog = os.path.basename(workerinput["mainargv"][0])
config.workerinput = workerinput config.workerinput = workerinput # type: ignore[attr-defined]
config.workeroutput = {} config.workeroutput = {} # type: ignore[attr-defined]
+ # TODO: deprecated name, backward compatibility only. Remove it in future + # TODO: deprecated name, backward compatibility only. Remove it in future
+ config.slaveinput = config.workerinput + config.slaveinput = config.workerinput
+ config.slaveoutput = config.workeroutput + config.slaveoutput = config.workeroutput
interactor = WorkerInteractor(config, channel) interactor = WorkerInteractor(config, channel) # type: ignore[name-defined]
config.hook.pytest_cmdline_main(config=config) config.hook.pytest_cmdline_main(config=config)
diff --git a/src/xdist/workermanage.py b/src/xdist/workermanage.py --- a/src/xdist/workermanage.py 2021-12-10 12:41:44.000000000 +0100
index dfcb59b..9b00251 100644 +++ b/src/xdist/workermanage.py 2022-01-15 18:43:34.595570697 +0100
--- a/src/xdist/workermanage.py
+++ b/src/xdist/workermanage.py
@@ -225,9 +225,13 @@ class WorkerController: @@ -225,9 +225,13 @@ class WorkerController:
self.workerinput = { self.workerinput = {
"workerid": gateway.id, "workerid": gateway.id,
@ -104,7 +85,7 @@ index dfcb59b..9b00251 100644
self._down = False self._down = False
self._shutdown_sent = False self._shutdown_sent = False
self.log = py.log.Producer("workerctl-%s" % gateway.id) self.log = py.log.Producer("workerctl-%s" % gateway.id)
@@ -326,7 +330,7 @@ class WorkerController: @@ -329,7 +333,7 @@ class WorkerController:
self.notify_inproc(eventname, node=self, **kwargs) self.notify_inproc(eventname, node=self, **kwargs)
elif eventname == "workerfinished": elif eventname == "workerfinished":
self._down = True self._down = True
@ -113,13 +94,11 @@ index dfcb59b..9b00251 100644
self.notify_inproc("workerfinished", node=self) self.notify_inproc("workerfinished", node=self)
elif eventname in ("logstart", "logfinish"): elif eventname in ("logstart", "logfinish"):
self.notify_inproc(eventname, node=self, **kwargs) self.notify_inproc(eventname, node=self, **kwargs)
diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py --- a/testing/acceptance_test.py 2021-12-10 12:41:44.000000000 +0100
index 48ed35f..8cac669 100644 +++ b/testing/acceptance_test.py 2022-01-15 18:44:54.711569262 +0100
--- a/testing/acceptance_test.py @@ -247,6 +247,22 @@ class TestDistribution:
+++ b/testing/acceptance_test.py
@@ -241,6 +241,22 @@ class TestDistribution:
result.stderr.fnmatch_lines(["--foobar=123 active! *"]) result.stderr.fnmatch_lines(["--foobar=123 active! *"])
assert dest.join(subdir.basename).check(dir=1) assert dest.joinpath(subdir.name).is_dir()
+ def test_backward_compatibility_worker_terminology(self, testdir): + def test_backward_compatibility_worker_terminology(self, testdir):
+ """Ensure that we still support "config.slaveinput" for backward compatibility (#234). + """Ensure that we still support "config.slaveinput" for backward compatibility (#234).
@ -137,9 +116,6 @@ index 48ed35f..8cac669 100644
+ result.stdout.fnmatch_lines("*1 passed*") + result.stdout.fnmatch_lines("*1 passed*")
+ assert result.ret == 0 + assert result.ret == 0
+ +
def test_data_exchange(self, testdir): def test_data_exchange(self, pytester: pytest.Pytester) -> None:
testdir.makeconftest( pytester.makeconftest(
""" """
--
2.28.0