#17 Update to 6.0.1
Merged 3 years ago by churchyard. Opened 3 years ago by churchyard.
rpms/ churchyard/pytest 6  into  master

file modified
+14 -11
@@ -1,6 +1,6 @@ 

  Name:           pytest

- Version:        5.4.3

- Release:        2%{?dist}

+ Version:        6.0.1

+ Release:        1%{?dist}

  Summary:        Simple powerful testing with Python

  License:        MIT

  URL:            https://pytest.org
@@ -35,10 +35,12 @@ 

  # We keep them unconditionality, so we don't accidentally build pytest

  # before them and get broken dependencies

  BuildRequires:  python3-attrs

+ BuildRequires:  python3-iniconfig

  BuildRequires:  python3-more-itertools

  BuildRequires:  python3-packaging

  BuildRequires:  python3-pluggy >= 0.12

  BuildRequires:  python3-py >= 1.5.0

+ BuildRequires:  python3-toml

  BuildRequires:  python3-wcwidth

  

  %if %{with tests}
@@ -53,7 +55,6 @@ 

  BuildRequires:  python3-nose

  BuildRequires:  python3-numpy

  BuildRequires:  python3-pexpect

- BuildRequires:  python3-pytest-xdist

  BuildRequires:  python3-twisted

  %endif

  %if %{with timeout}
@@ -64,6 +65,7 @@ 

  %if %{with docs}

  BuildRequires:  %{_bindir}/rst2html

  BuildRequires:  python3-pygments-pytest

+ BuildRequires:  python3-Pallets-Sphinx-Themes

  BuildRequires:  python3-sphinx

  BuildRequires:  python3-sphinx-removed-in

  BuildRequires:  python3-sphinxcontrib-trio
@@ -86,7 +88,7 @@ 

  py.test provides simple, yet powerful testing for Python.

  

  %prep

- %autosetup -p1

+ %autosetup -p1 -n %{name}-%{version}

  

  %build

  %py3_build
@@ -127,13 +129,8 @@ 

  

  %if %{with tests}

  %check

- PYTHONDONTWRITEBYTECODE=1 \

- PATH=%{buildroot}%{_bindir}:${PATH} \

- PYTHONPATH=%{buildroot}%{python3_sitelib} \

-   %{buildroot}%{_bindir}/pytest-%{python3_version} -r s testing \

-   %if %{with timeout}

-   --timeout=30

-   %endif

+ %global __pytest %{buildroot}%{_bindir}/pytest

+ %pytest testing %{?with_timeout:--timeout=30}

  %endif

  

  %files -n python3-%{name}
@@ -155,6 +152,12 @@ 

  %{python3_sitelib}/pytest/

  

  %changelog

+ * Thu Aug 06 2020 Miro Hrončok <mhroncok@redhat.com> - 6.0.1-1

+ - Update to 6.0.1 (#1862097)

+ 

+ * Mon Jul 28 2020 Miro Hrončok <mhroncok@redhat.com> - 6.0.0~rc1-1

+ - Update to 6.0.0rc1

+ 

  * Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.3-2

  - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild

  

file modified
+1 -1
@@ -1,1 +1,1 @@ 

- SHA512 (pytest-5.4.3.tar.gz) = 0a07d4f4f791969c6f21961a0ba0f8c6670e5870c6cc1cebf93766587bb9cb3e10db8e57f0bd33dd22b275f3aad7aa674949f124ac80e0ccca64e35be4beee4e

+ SHA512 (pytest-6.0.1.tar.gz) = bdd790c3860da2ed3a3ff47f04512c3bfae4fa1e31fc6b96fc19bd57d1804a6fec968ecf17a11c5b20d30dcf82d6391ef0d893ae57a3da9ad777a15c078c129f

The following packages failed with pytest6 only:

borgbackup (fixed in pytest git)
custodia cannot parse pytest rc version
python-dbus-signature-pyparsing flaky test
python-diff-cover difference in dict report output
python-flake8 (fixed in flake8 git)
python-flask-caching pytest-cache broken and upstream dead
python-hypothesis needs investigation, xdist related warning
python-libsass failed in rawhide as well, later passed
python-llfuse catch_log_handler, is dead upstream
python-nikola uncovered logging failure
python-opencensus uncovered logging failure
python-photutils (fixed in pytest-remotedata git)
python-pingouin (fixed in pytest-remotedata git)
python-pydicom cannot parse pytest rc version
python-pynetdicom no idea
python-pytest-cov (fixed in xdist git)
python-pytest-forked (reported to pytest-forked upstream)
python-pytest-openfiles failed in rawhide as well, later passed
python-pytest-testmon mixup between [args] and *args
python-sphinxcontrib-programoutput sys.path problem
python-werkzeug unexpected text in traceback
python-zeroconf was updated and passes now

I will analyze them further.

borgbackup fails with:

______________________ test_progress_percentage_sameline _______________________

capfd = <_pytest.capture.CaptureFixture object at 0x7f9bd55e4d00>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f9bcbbced60>

    def test_progress_percentage_sameline(capfd, monkeypatch):
        # run the test as if it was in a 4x1 terminal
        monkeypatch.setenv('COLUMNS', '4')
        monkeypatch.setenv('LINES', '1')
        pi = ProgressIndicatorPercent(1000, step=5, start=0, msg="%3.0f%%")
        pi.logger.setLevel('INFO')
        pi.show(0)
        out, err = capfd.readouterr()
>       assert err == '  0%\r'
E       AssertionError: assert '  0%\n' == '  0%\r'
E         -   0%
E         ?     ^
E         +   0%
E         ?     ^

build/lib.linux-x86_64-3.9/borg/testsuite/helpers.py:748: AssertionError

Seems like capfd.readouterr now ether converts \r to \n. I don't see this mentioned in pytest changelog.

Reported at https://github.com/pytest-dev/pytest/issues/7517

custodia fails to parse pre-release pytest version:

============================= test session starts ==============================
platform linux -- Python 3.9.0b4, pytest-6.0.0rc1, py-1.9.0, pluggy-0.13.1
rootdir: /builddir/build/BUILD/custodia-0.6.0, configfile: tox.ini
collected 159 items / 1 error / 158 selected

==================================== ERRORS ====================================
_____________________ ERROR collecting tests/test_misc.py ______________________
tests/test_misc.py:14: in <module>
    PYTEST_VERSION = tuple(int(p) for p in pytest.__version__.split('.'))
tests/test_misc.py:14: in <genexpr>
    PYTEST_VERSION = tuple(int(p) for p in pytest.__version__.split('.'))
E   ValueError: invalid literal for int() with base 10: '0rc1'
=========================== short test summary info ============================
ERROR tests/test_misc.py - ValueError: invalid literal for int() with base 10...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.61s ===============================

@simo @cheimes You might want to report that upstream to custodia.

This problem was introduced long time ago by https://github.com/latchset/custodia/pull/182

python-dbus-signature-pyparsing hit a timeout two times in a row, will try couple more times:

__________________________ ParseTestCase.testParsing ___________________________

self = <tests.test_parser.ParseTestCase testMethod=testParsing>

    @given(dbus_signatures())
>   @settings(max_examples=100)

tests/test_parser.py:40: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.9/site-packages/hypothesis/core.py:611: in execute_once
    result = self.test_runner(data, run)
/usr/lib/python3.9/site-packages/hypothesis/executors.py:52: in default_new_style_executor
    return function(data)
/usr/lib/python3.9/site-packages/hypothesis/core.py:607: in run
    return test(*args, **kwargs)
tests/test_parser.py:40: in testParsing
    @settings(max_examples=100)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = (<tests.test_parser.ParseTestCase testMethod=testParsing>, 'aa{baa{b(bab)}}')
kwargs = {}, initial_draws = 1, start = 650.085757543, result = None
finish = 650.364898994, internal_draw_time = 0
runtime = datetime.timedelta(microseconds=279141)
current_deadline = timedelta(milliseconds=200)

    @proxies(self.test)
    def test(*args, **kwargs):
        self.__test_runtime = None
        initial_draws = len(data.draw_times)
        start = perf_counter()
        result = self.test(*args, **kwargs)
        finish = perf_counter()
        internal_draw_time = sum(data.draw_times[initial_draws:])
        runtime = datetime.timedelta(
            seconds=finish - start - internal_draw_time
        )
        self.__test_runtime = runtime
        current_deadline = self.settings.deadline
        if not is_final:
            current_deadline = (current_deadline // 4) * 5
        if runtime >= current_deadline:
>           raise DeadlineExceeded(runtime, self.settings.deadline)
E           hypothesis.errors.DeadlineExceeded: Test took 279.14ms, which exceeds the deadline of 200.00ms

/usr/lib/python3.9/site-packages/hypothesis/core.py:542: DeadlineExceeded
---------------------------------- Hypothesis ----------------------------------
Falsifying example: testParsing(
    self=<tests.test_parser.ParseTestCase testMethod=testParsing>,
    signature='aa{baa{b(bab)}}',
)
=========================== short test summary info ============================
FAILED tests/test_parser.py::ParseTestCase::testParsing - hypothesis.errors.D...
========================= 1 failed, 1 passed in 44.52s =========================

EDIT: it passes sometimes, the timeout is low and hence the test is flaky.

python-diff-cover has an unexpected path in report:

expected = '{"report_name": ["reports/coverage.xml"], "diff_name": "master", "src_stats": {"file1.py": {"percent_covered": 66.666...iolations": [[10, null], [11, null]]}}, "total_num_lines": 12, "total_num_violations": 4, "total_percent_covered": 66}'
actual = '{"report_name": ["reports/coverage.xml"], "diff_name": "master", "src_stats": {"subdir/file2.py": {"percent_covered":...iolations": [[10, null], [11, null]]}}, "total_num_lines": 12, "total_num_violations": 4, "total_percent_covered": 66}'

might be worth investigating with upstream

cc @abompard @dshea @cverna @kevin

python-flake8 was a tough nut to crack, because the traceback was an unreadable mess, but I've managed to fix the problem in https://gitlab.com/pycqa/flake8/-/merge_requests/443

@mrunge @sgallagh @fale You might need to backport the fix when we ship this.

python-hypothesis fails with:

pytest.PytestDeprecationWarning: The pytest_warning_captured is deprecated and will be removed in a future release.
Please use pytest_warning_recorded instead.

This is mentioned in the Features section of the changelog:

Introduced a new hook named pytest_warning_recorded to convey information about warnings captured by the internal pytest warnings plugin.

This hook is meant to replace pytest_warning_captured, which will be removed in a future release.

The code that triggers this is from pytest-xdist.

I'll make sure it is repeated in Deprecations as well and work with xdist to prefer pytest_warning_recorded if available.

https://github.com/pytest-dev/pytest/pull/7519
https://github.com/pytest-dev/pytest-xdist/pull/554 -> https://src.fedoraproject.org/rpms/python-pytest-xdist/c/0508e51e

See also https://github.com/pytest-dev/pytest-xdist/pull/554#issuecomment-660981785

python-flask-caching fails due to some incompatibility of python-pytest-cache (trough python-pytest-xprocess):

config = <_pytest.config.Config object at 0x7f59609498b0>, name = '.xprocess'

    def getrootdir(config, name):
        """ return a best-effort root subdir for this test run.

        Starting from files specified at the command line (or cwd)
        search starts upward for the first "tox.ini", "pytest.ini",
        "setup.cfg" or "setup.py" file.  The first directory containing
        such a file will be used to return a named subdirectory
        (py.path.local object).

        """
        if config.inicfg:
>           p = py.path.local(config.inicfg.config.path).dirpath()
E           AttributeError: 'dict' object has no attribute 'config'

config     = <_pytest.config.Config object at 0x7f59609498b0>
name       = '.xprocess'

/usr/lib/python3.9/site-packages/pytest_cache.py:217: AttributeError

This is listed in Trivial/Internal Changes:

#7291: Replaced py.iniconfig with iniconfig.

However, pytest-cache is no longer maintained since its functionality was integrated into pytest core starting with pytest-2.8.0 (source).

We could patch it somehow, but better if we migrate away from it.

cc @lbrabec, @chedi and @frantisekz

python-llfuse has:

+ py.test-3 -v test
============================= test session starts ==============================
platform linux -- Python 3.9.0b4, pytest-6.0.0rc1, py-1.9.0, pluggy-0.13.1 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /builddir/build/BUILD/llfuse-1.3.6/test, configfile: pytest.ini
collecting ... collected 14 items

test/test_api.py::test_inquire_bits ERROR                                [  7%]
test/test_api.py::test_inquire_bits ERROR                                [  7%]

==================================== ERRORS ====================================
_____________________ ERROR at setup of test_inquire_bits ______________________
Traceback (most recent call last):
  File "/builddir/build/BUILD/llfuse-1.3.6/test/pytest_checklogs.py", line 135, in pytest_runtest_setup
    check_output(item)
  File "/builddir/build/BUILD/llfuse-1.3.6/test/pytest_checklogs.py", line 131, in check_output
    check_test_log(item.catch_log_handler)
AttributeError: 'Function' object has no attribute 'catch_log_handler'
____________________ ERROR at teardown of test_inquire_bits ____________________
Traceback (most recent call last):
  File "/builddir/build/BUILD/llfuse-1.3.6/test/pytest_checklogs.py", line 141, in pytest_runtest_teardown
    check_output(item)
  File "/builddir/build/BUILD/llfuse-1.3.6/test/pytest_checklogs.py", line 131, in check_output
    check_test_log(item.catch_log_handler)
AttributeError: 'Function' object has no attribute 'catch_log_handler'
=========================== short test summary info ============================
ERROR test/test_api.py::test_inquire_bits - AttributeError: 'Function' object...
ERROR test/test_api.py::test_inquire_bits - AttributeError: 'Function' object...
!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 2 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!
============================== 2 errors in 0.10s ===============================

From the changelog:

#7224: The item.catch_log_handler and item.catch_log_handlers attributes, set by the logging plugin and never meant to be public , are no longer available.

However:

Warning - no longer maintained

Python-LLFUSE is no longer actively maintained. Unless you are stuck with Python 2.x or libfuse 2.x, we recommended to use the pyfuse3 module instead.

From https://github.com/python-llfuse/python-llfuse/blob/master/README.rst

cc @dfateyev @maci

python-nikola has a logging problem uncovered by tests.

...
  File "/builddir/build/BUILD/nikola-8.1.1/nikola/shortcodes.py", line 374, in apply_shortcodes
    LOGGER.error('Unknown shortcode {0} (started at {1})', name, _format_position(data, current[2]))
Message: 'Unknown shortcode {0} (started at {1})'
Arguments: ('start', 'line 1, column 1')

The log template uses %s syntax, not {0} syntax:

>>> import logging
>>> logging.error('Unknown shortcode {0} (started at {1})', 'start', 'line 1, column 1') 
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.8/logging/__init__.py", line 1081, in emit
    msg = self.format(record)
  File "/usr/lib64/python3.8/logging/__init__.py", line 925, in format
    return fmt.format(record)
  File "/usr/lib64/python3.8/logging/__init__.py", line 664, in format
    record.message = record.getMessage()
  File "/usr/lib64/python3.8/logging/__init__.py", line 369, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
  File "<stdin>", line 1, in <module>
Message: 'Unknown shortcode {0} (started at {1})'
Arguments: ('start', 'line 1, column 1')
>>> logging.error('Unknown shortcode %s (started at %s)', 'start', 'line 1, column 1') 
ERROR:root:Unknown shortcode start (started at line 1, column 1)

@jamatos @maxamillion You might want to inform upstream, the problem is (at least) at https://github.com/getnikola/nikola/blob/v8.1.1/nikola/shortcodes.py#L374

python-opencensus has another uncovered logging problem:

______________ TestLocalFileStorage.test_check_storage_size_full _______________

self = <test_storage.TestLocalFileStorage testMethod=test_check_storage_size_full>

    def test_check_storage_size_full(self):
        input = (1, 2, 3)
        with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd2'), 1) as stor:
            stor.put(input)
>           self.assertFalse(stor._check_storage_size())

contrib/opencensus-ext-azure/tests/test_storage.py:125: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../BUILDROOT/python-opencensus-0.7.10-1.fc33.x86_64/usr/lib/python3.9/site-packages/opencensus/ext/azure/common/storage.py:190: in _check_storage_size
    logger.warning(
/usr/lib64/python3.9/logging/__init__.py:1446: in warning
    self._log(WARNING, msg, args, **kwargs)
/usr/lib64/python3.9/logging/__init__.py:1577: in _log
    self.handle(record)
/usr/lib64/python3.9/logging/__init__.py:1587: in handle
    self.callHandlers(record)
/usr/lib64/python3.9/logging/__init__.py:1649: in callHandlers
    hdlr.handle(record)
/usr/lib64/python3.9/logging/__init__.py:948: in handle
    self.emit(record)
/usr/lib/python3.9/site-packages/_pytest/logging.py:326: in emit
    super().emit(record)
/usr/lib64/python3.9/logging/__init__.py:1087: in emit
    self.handleError(record)
/usr/lib64/python3.9/logging/__init__.py:1079: in emit
    msg = self.format(record)
/usr/lib64/python3.9/logging/__init__.py:923: in format
    return fmt.format(record)
/usr/lib/python3.9/site-packages/_pytest/logging.py:89: in format
    return super().format(record)
/usr/lib64/python3.9/logging/__init__.py:659: in format
    record.message = record.getMessage()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <LogRecord: opencensus.ext.azure.common.storage, 30, /builddir/build/BUILDROOT/python-opencensus-0.7.10-1.fc33.x86_64/...ently at %fKB. Telemetry will be lost. Please consider increasing the value of 'storage_max_size' in exporter config.">

    def getMessage(self):
        """
        Return the message for this LogRecord.

        Return the message for this LogRecord after merging any user-supplied
        arguments with the message.
        """
        msg = str(self.msg)
        if self.args:
>           msg = msg % self.args
E           TypeError: must be real number, not str

/usr/lib64/python3.9/logging/__init__.py:363: TypeError

The problem is here:

https://github.com/census-instrumentation/opencensus-python/blob/v0.7.10/contrib/opencensus-ext-azure/opencensus/ext/azure/common/storage.py#L190-L195

format(size/1024) returns a string, but it is applied into %f.

cc @melmorabity

All the uncovered logging problems, the relevant changelog section is:

#6433: If an error is encountered while formatting the message in a logging call, for example logging.warning("oh no!: %s: %s", "first") (a second argument is missing), pytest now propagates the error, likely causing the test to fail.

Previously, such a mistake would cause an error to be printed to stderr, which is not displayed by default for passing tests. This change makes the mistake visible during testing.

You may supress this behavior temporarily or permanently by setting logging.raiseExceptions = False.

python-photutils errors in setup of many tests:

________________ ERROR at setup of test_std_blocksum_mask_shape ________________

item = <Function test_std_blocksum_mask_shape>

    def pytest_runtest_setup(item):

>       if StrictVersion(pytest.__version__) < StrictVersion("3.6"):

/usr/lib/python3.9/site-packages/pytest_remotedata/plugin.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib64/python3.9/distutils/version.py:40: in __init__
    self.parse(vstring)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'StrictVersion' object has no attribute 'version'") raised in repr()] StrictVersion object at 0x7f54d060f4c0>
vstring = '6.0.0rc1'

    def parse (self, vstring):
        match = self.version_re.match(vstring)
        if not match:
>           raise ValueError("invalid version number '%s'" % vstring)
E           ValueError: invalid version number '6.0.0rc1'

cc @sergiopr -- possibly handling the pytest rc1 version via StrictVersion is not working, consider LooseVersion

python-pingouin has the very same problem as python-photutils, bacause the problem is in pytest_remotedata, not pingouin or photutils.

This was fixed in https://github.com/astropy/pytest-remotedata/pull/40

cc @lupinix

python-pydicom fails to parse the rc version as well:

+ /usr/bin/python3 -m pytest -k 'not test_color_3d and not test_handler_util'
============================= test session starts ==============================
platform linux -- Python 3.9.0b4, pytest-6.0.0rc1, py-1.9.0, pluggy-0.13.1
rootdir: /builddir/build/BUILD/pydicom-2.0.0
collected 1766 items / 1 error / 295 deselected / 1470 selected

==================================== ERRORS ====================================
________________ ERROR collecting pydicom/tests/test_config.py _________________
pydicom/tests/test_config.py:15: in <module>
    PYTEST = [int(x) for x in pytest.__version__.split('.')]
pydicom/tests/test_config.py:15: in <listcomp>
    PYTEST = [int(x) for x in pytest.__version__.split('.')]
E   ValueError: invalid literal for int() with base 10: '0rc1'
=========================== short test summary info ============================
ERROR pydicom/tests/test_config.py - ValueError: invalid literal for int() wi...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
======================= 295 deselected, 1 error in 6.48s =======================

cc @ignatenkobrain, the problem is in https://github.com/pydicom/pydicom/blob/v2.0.0/pydicom/tests/test_config.py#L15

The python-pynetdicom failure is beyond me, sorry. cc @alciregi

python-pytest-cov cc @chedi

________ ERROR collecting test_dist_not_collocated_coveragerc_source.py ________
ImportError while importing test module '/tmp/pytest-of-mockbuild/pytest-0/test_dist_not_collocated_coveragerc_source3/dir1/test_dist_not_collocated_coveragerc_source.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
__init__.py:5: in <module>
    from . import collect
E   ImportError: cannot import name 'collect' from partially initialized module 'dir1' (most likely due to a circular import) (/tmp/pytest-of-mockbuild/pytest-0/test_dist_not_collocated_coveragerc_source3/dir1/__init__.py)
________ ERROR collecting test_dist_not_collocated_coveragerc_source.py ________
ImportError while importing test module '/tmp/pytest-of-mockbuild/pytest-0/test_dist_not_collocated_coveragerc_source3/dir2/test_dist_not_collocated_coveragerc_source.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
__init__.py:5: in <module>
    from . import collect
E   ImportError: cannot import name 'collect' from partially initialized module 'dir2' (most likely due to a circular import) (/tmp/pytest-of-mockbuild/pytest-0/test_dist_not_collocated_coveragerc_source3/dir2/__init__.py)

This shows up on upstream CI but is not fixed yet: https://github.com/pytest-dev/pytest-cov/commit/5ffc2309428201b1cfc65eb75b31b02fa4df1e3d

pytest maintainer here, I started watching this thread and will be happy to help out where I can.

For python-pynetdicom: Where can I actually find the logs? In https://copr.fedorainfracloud.org/coprs/g/python/pytest6/build/1552180/ I only see builder-live.log.gz and backend.log.gz, neither of which contain pytest output from what I can see?

For pytest-cov, that looks like a problem which has been fixed in pytest-xdist (which pytest-cov uses for its tests): https://github.com/pytest-dev/pytest/issues/7487

I think the others have been taken care of already, but let me know if I missed something!

Thanks!

For python-pynetdicom: Where can I actually find the logs? In https://copr.fedorainfracloud.org/coprs/g/python/pytest6/build/1552180/ I only see builder-live.log.gz and backend.log.gz, neither of which contain pytest output from what I can see?

There is Source build logs: builder-live.log.gz , backend.log.gz and once more in the table below there is another backend.log.gz , builder-live.log.gz -- you need the second.

I think the others have been taken care of already, but let me know if I missed something!

I have trouble understanding the python-hypothsesis xdist related warning problem.

There is Source build logs: builder-live.log.gz , backend.log.gz and once more in the table below there is another backend.log.gz , builder-live.log.gz -- you need the second.

If I click those, I just get an empty page. With Firefox, I get a "Content Encoding Error". With curl/wget, I get a 404.

I have trouble understanding the python-hypothsesis xdist related warning problem.

I assume you mean the one you mentioned in https://github.com/pytest-dev/pytest-xdist/pull/554, right? I'll add a comment there.

Ah, I do see a more recent pynetdicom log. No idea what's happening there either, it doesn't seem related to pytest 6 from a quick glance. Do you know if the tests really pass in the same environment but with pytest 5.4.3?

New python-pynetdicom builds:

Differences in environment:

$ diff -u pytest5 pytest6 | grep -E '^[\+-]'
--- pytest5 2020-07-22 13:26:52.206002661 +0200
+++ pytest6 2020-07-22 13:26:21.072768742 +0200
+python3-iniconfig-1.0.0-1.fc33.noarch
-python3-pytest-5.4.3-1.fc33.noarch
+python3-pytest-6.0.0~rc1-1.fc33.noarch
+python3-toml-0.10.1-1.fc33.noarch
-python3-wcwidth-0.2.5-1.fc33.noarc

Running new builds now to verify the result is still the same.

python-pytest-forked:

___________________ ERROR at setup of ... ____________________

cls = <class '_pytest.runner.CallInfo'>
func = <function call_runtest_hook.<locals>.<lambda> at 0x7f32166bf4c0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    @classmethod
    def from_call(
        cls,
        func: "Callable[[], _T]",
        when: "Literal['collect', 'setup', 'call', 'teardown']",
        reraise: "Optional[Union[Type[BaseException], Tuple[Type[BaseException], ...]]]" = None,
    ) -> "CallInfo[_T]":
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result = func()  # type: Optional[_T]

/usr/lib/python3.9/site-packages/_pytest/runner.py:287: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.9/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: ihook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
/usr/lib/python3.9/site-packages/_pytest/runner.py:141: in pytest_runtest_setup
    item.session._setupstate.prepare(item)
/usr/lib/python3.9/site-packages/_pytest/runner.py:428: in prepare
    raise e
/usr/lib/python3.9/site-packages/_pytest/runner.py:425: in prepare
    col.setup()
/usr/lib/python3.9/site-packages/_pytest/python.py:1568: in setup
    self._request._fillfixtures()
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:568: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:581: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:601: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:683: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:1053: in execute
    result = hook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:1108: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:915: in call_fixture_func
    fixture_result = fixturefunc(**kwargs)
/usr/lib/python3.9/site-packages/_pytest/pytester.py:387: in testdir
    return Testdir(request, tmpdir_factory)
/usr/lib/python3.9/site-packages/_pytest/pytester.py:585: in __init__
    self.tmpdir = tmpdir_factory.mktemp(name, numbered=True)
/usr/lib/python3.9/site-packages/_pytest/tmpdir.py:120: in mktemp
    return py.path.local(self._tmppath_factory.mktemp(basename, numbered).resolve())
/usr/lib/python3.9/site-packages/_pytest/tmpdir.py:72: in mktemp
    basename = self._ensure_relative_to_basetemp(basename)
/usr/lib/python3.9/site-packages/_pytest/tmpdir.py:51: in _ensure_relative_to_basetemp
    if (self.getbasetemp() / basename).resolve().parent != self.getbasetemp():
/usr/lib/python3.9/site-packages/_pytest/tmpdir.py:98: in getbasetemp
    basetemp = make_numbered_dir_with_cleanup(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

root = PosixPath('/tmp/pytest-of-mockbuild'), prefix = 'pytest-', keep = 3
lock_timeout = 10800

    def make_numbered_dir_with_cleanup(
        root: Path, prefix: str, keep: int, lock_timeout: float
    ) -> Path:
        """creates a numbered dir with a cleanup lock and removes old ones"""
        e = None
        for i in range(10):
            try:
                p = make_numbered_dir(root, prefix)
                lock_path = create_cleanup_lock(p)
                register_cleanup_lock_removal(lock_path)
            except Exception as exc:
                e = exc
            else:
                consider_lock_dead_if_created_before = p.stat().st_mtime - lock_timeout
                # Register a cleanup for program exit
>               atexit.register(
                    cleanup_numbered_dir,
                    root,
                    prefix,
                    keep,
                    consider_lock_dead_if_created_before,
                )
E               TypeError: list.append() takes exactly one argument (5 given)

/usr/lib/python3.9/site-packages/_pytest/pathlib.py:354: TypeError

This seems like a pytest bug? Not sure, reported at: https://github.com/pytest-dev/pytest-forked/issues/45

python-pytest-forked is a bug in its conftest.py, I commented there.

As for pynetdicom, I have no idea. I tried reproducing the issues locally on Archlinux, where pynetdicom/tests/test_service_qr.py works fine with pytest master (which failed for you), and pynetdicom/apps/tests/test_qrscp_echo.py errors with pytest 5.4 (which worked for you). Giving up as well there.

python-pytest-testmon

___________________ TestmonDeselect.test_dont_readcoveragerc ___________________

self = <test.test_testmon.TestmonDeselect object at 0x7f0e9e09d5b0>
testdir = <Testdir local('/tmp/pytest-of-mockbuild/pytest-0/test_dont_readcoveragerc0')>

    def test_dont_readcoveragerc(self, testdir):
        p = testdir.tmpdir.join('.coveragerc')
        p.write("[")
        testdir.makepyfile(test_a="""
            def test_add():
                pass
        """)
>       testdir.inline_run(["--testmon", ])

/builddir/build/BUILD/pytest-testmon-0.9.19/test/test_testmon.py:111: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.9/site-packages/_pytest/pytester.py:969: in inline_run
    ret = pytest.main(list(args), plugins=plugins)
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:136: in main
    config = _prepareconfig(args, plugins)
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:313: in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
/usr/lib/python3.9/site-packages/_pytest/helpconfig.py:99: in pytest_cmdline_parse
    config = outcome.get_result()  # type: Config
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:932: in pytest_cmdline_parse
    self.parse(args)
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:1204: in parse
    self._preparse(args, addopts=addopts)
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:1085: in _preparse
    self._initini(args)
/usr/lib/python3.9/site-packages/_pytest/config/__init__.py:1005: in _initini
    self.rootdir, self.inifile, self.inicfg = determine_setup(
/usr/lib/python3.9/site-packages/_pytest/config/findpaths.py:166: in determine_setup
    dirs = get_dirs_from_args(args)
/usr/lib/python3.9/site-packages/_pytest/config/findpaths.py:153: in get_dirs_from_args
    return [get_dir_from_path(path) for path in possible_paths if path.exists()]
/usr/lib/python3.9/site-packages/_pytest/config/findpaths.py:153: in <listcomp>
    return [get_dir_from_path(path) for path in possible_paths if path.exists()]
/usr/lib/python3.9/site-packages/_pytest/config/findpaths.py:150: in <genexpr>
    if not is_option(arg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

x = ['--testmon']

    def is_option(x: str) -> bool:
>       return x.startswith("-")
E       AttributeError: 'list' object has no attribute 'startswith'

/usr/lib/python3.9/site-packages/_pytest/config/findpaths.py:136: AttributeError

This looks like inline_run expects *args instead of list of args but looking at the code that seems to be the case for pytest 5 as well :/

python-sphinxcontrib-programoutput

E   ModuleNotFoundError: No module named 'sphinxcontrib.programoutput'

This seem to be a sys.path thing.


python-werkzeug

____________________ test_import_string_provides_traceback _____________________

tmpdir = local('/tmp/pytest-of-mockbuild/pytest-0/test_import_string_provides_tr0')
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f93496a9a00>

    def test_import_string_provides_traceback(tmpdir, monkeypatch):
        monkeypatch.syspath_prepend(str(tmpdir))
        # Couple of packages
        dir_a = tmpdir.mkdir("a")
        dir_b = tmpdir.mkdir("b")
        # Totally packages, I promise
        dir_a.join("__init__.py").write("")
        dir_b.join("__init__.py").write("")
        # 'aa.a' that depends on 'bb.b', which in turn has a broken import
        dir_a.join("aa.py").write("from b import bb")
        dir_b.join("bb.py").write("from os import a_typo")

        # Do we get all the useful information in the traceback?
        with pytest.raises(ImportError) as baz_exc:
            utils.import_string("a.aa")
        traceback = "".join((str(line) for line in baz_exc.traceback))
>       assert "bb.py':1" in traceback  # a bit different than typical python tb
E       assert "bb.py':1" in "  File local('/builddir/build/BUILD/Werkzeug-1.0.1/tests/test_utils.py'):233 in test_import_string_provides_traceback...('/tmp/pytest-of-mockbuild/pytest-0/test_import_string_provides_tr0/b/bb.py'):1 in <module>\n  from os import a_typo\n"

tests/test_utils.py:235: AssertionError

This can be investigated with -vvv.

>       assert "bb.py':1" in traceback  # a bit different than typical python tb
E       assert "bb.py':1" in "  File local('/builddir/build/BUILD/Werkzeug-1.0.1/tests/test_utils.py'):233 in test_import_string_provides_traceback...('/tmp/pytest-of-mockbuild/pytest-0/test_import_string_provides_tr0/b/bb.py'):1 in

I suppose this is fine... there is just an extra ).

pytest-testmon: This broke due to dropping a str(...) inside pytest - but it never worked right, as it probably just passed something like "['--testmon']" as string before. Curiously, Fedora is packaging an older 0.9.19 release, but with the 1.0.0 release the tests were entirely removed from the repo upstream!?.

python-sphinxcontrib-programoutput: No idea off-hand. Will try to bisect.

python-werkzeug: I suppose how py.path.local objects are converted to strings changed somehow? Still, seems weird to have "local('...')" in a traceback. Even if minor, might be worth reporting upstream. Will also try to bisect.

python-sphinxcontrib-programoutput: Works for me locally. I suppose it's something about how Fedora runs those tests (with PYTHONPATH and such), but I haven't been able to reproduce. Not going to look into this in detail.

python-werkzeug: That's a regression in pytest, so I opened https://github.com/pytest-dev/pytest/issues/7534

python-flask-caching fails due to some incompatibility of python-pytest-cache (trough python-pytest-xprocess):
...
However, pytest-cache is no longer maintained since its functionality was integrated into pytest core starting with pytest-2.8.0 (source).
We could patch it somehow, but better if we migrate away from it.
cc @lbrabec, @chedi and @frantisekz

python-pytest-xprocess and python-flask-caching fixed by https://src.fedoraproject.org/rpms/python-pytest-xprocess/c/94f68ab35df4b201ee0f004fac64638f56b3e2a8?branch=master , thanks for ping :)

1 new commit added

  • Update to 6.0.1
3 years ago

rebased onto e60217f

3 years ago

Rebased to 6.0.1. Running Copr builds juts to be safe. In the meantime, sanity check on the diff is apreciated.

The failures with 6.0.1 (but not with 5.x) are:

babel (PytestDeprecationWarning treated as error)
python-aiomqtt (PytestDeprecationWarning treated as error)
python-docopt (PytestDeprecationWarning treated as error)
python-ffc (PytestDeprecationWarning treated as error)
python-flake8 (fixed in flake8 git)
python-html5lib (PytestDeprecationWarning treated as error) https://github.com/html5lib/html5lib-python/issues/505
python-httplib2 fixed
python-llfuse (dead upstream)
python-nikola (logging failure)
python-pynetdicom (see above)
python-pytest-isort (PytestDeprecationWarning treated as error)
python-pytest-randomly (PytestDeprecationWarning treated as error)

babel:

============================= test session starts ==============================
platform linux -- Python 3.9.0b5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1
rootdir: /builddir/build/BUILD/Babel-2.8.0, configfile: setup.cfg
collected 0 items / 1 error

==================================== ERRORS ====================================
________________________ ERROR collecting test session _________________________
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
conftest.py:11: in pytest_collect_file
    return DoctestModule(path, parent)
/usr/lib/python3.9/site-packages/_pytest/nodes.py:95: in __call__
    warnings.warn(NODE_USE_FROM_PARENT.format(name=self.__name__), stacklevel=2)
E   pytest.PytestDeprecationWarning: Direct construction of DoctestModule has been deprecated, please use DoctestModule.from_parent.
E   See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.
=========================== short test summary info ============================
ERROR  - pytest.PytestDeprecationWarning: Direct construction of DoctestModul...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.10s ===============================

cc @fschwarz

python-aiomqtt

____________________ ERROR collecting tests/test_client.py _____________________
tests/test_client.py:13: in <module>
    @pytest.fixture("module")
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:1358: in fixture
    warnings.warn(FIXTURE_POSITIONAL_ARGUMENTS, stacklevel=2)
E   pytest.PytestDeprecationWarning: Passing arguments to pytest.fixture() as positional arguments is deprecated - pass them as a keyword argument instead.

cc @fab

python-docopt

________________________ ERROR collecting test session _________________________
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
conftest.py:14: in pytest_collect_file
    return DocoptTestFile(path, parent)
/usr/lib/python3.9/site-packages/_pytest/nodes.py:95: in __call__
    warnings.warn(NODE_USE_FROM_PARENT.format(name=self.__name__), stacklevel=2)
E   pytest.PytestDeprecationWarning: Direct construction of DocoptTestFile has been deprecated, please use DocoptTestFile.from_parent.
E   See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.

cc @carlwgeorge @msivak @miminar

python-ffc

________________________ ERROR collecting test session _________________________
/usr/lib64/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:1030: in _gcd_import
    ???
<frozen importlib._bootstrap>:1007: in _find_and_load
    ???
<frozen importlib._bootstrap>:986: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:680: in _load_unlocked
    ???
/usr/lib/python3.9/site-packages/_pytest/assertion/rewrite.py:170: in exec_module
    exec(co, module.__dict__)
test/uflacs/crosslanguage/conftest.py:234: in <module>
    ???
/usr/lib/python3.9/site-packages/_pytest/fixtures.py:1358: in fixture
    warnings.warn(FIXTURE_POSITIONAL_ARGUMENTS, stacklevel=2)
E   pytest.PytestDeprecationWarning: Passing arguments to pytest.fixture() as positional arguments is deprecated - pass them as a keyword argument instead.

cc @zbyszek

python-html5lib

________________________ ERROR collecting test session _________________________
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
html5lib/tests/conftest.py:105: in pytest_collect_file
    return TokenizerFile(path, parent)
/usr/lib/python3.9/site-packages/_pytest/nodes.py:95: in __call__
    warnings.warn(NODE_USE_FROM_PARENT.format(name=self.__name__), stacklevel=2)
E   pytest.PytestDeprecationWarning: Direct construction of TokenizerFile has been deprecated, please use TokenizerFile.from_parent.
E   See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.

https://github.com/html5lib/html5lib-python/issues/505

python-httplib2

ERROR: Wrong expression passed to '-k': not test_unknown_server \
    and not test_socks5_auth and not \
    test_server_not_found_error_is_raised_for_invalid_hostname and not \
    test_functional_noproxy_star_https and not \
    test_sni_set_servername_callback and not test_not_trusted_ca and not \
    test_invalid_ca_certs_path and not test_max_tls_version and not \
    test_get_301_via_https and not test_client_cert_password_verified and not\
    test_get_via_https and not test_min_tls_version and not\
    test_client_cert_verified: at column 25: unexpected character "\"

cc @kevin @limb

Replacing ' with " in the multiline expression gets the job done, pushed.

python-pytest-isort

___________________________ TestIsortItem.test_init ____________________________

self = <test_isort.TestIsortItem object at 0x7f700248f9d0>
testdir = <Testdir local('/tmp/pytest-of-mockbuild/pytest-0/test_init0')>

    def test_init(self, testdir):
        class TestConfig:
            rootdir = testdir.tmpdir

            def getini(self, norecursedirs):
                return None

        session_mock = Mock()
        session_mock.configure_mock(
            _initialpaths=[testdir.tmpdir],
            config=TestConfig(),
        )

        class TestParent:
            fspath = testdir.tmpdir
            session = session_mock
            config = TestConfig()

        parent = TestParent()
        path = testdir.tmpdir
        kwargs = {}

>       test_obj = IsortItem(path, parent, **kwargs)

/builddir/build/BUILD/pytest-isort-1.1.0/test_isort.py:158: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <class 'pytest_isort.IsortItem'>
k = (local('/tmp/pytest-of-mockbuild/pytest-0/test_init0'), <test_isort.TestIsortItem.test_init.<locals>.TestParent object at 0x7f700248f580>)
kw = {}

    def __call__(self, *k, **kw):
>       warnings.warn(NODE_USE_FROM_PARENT.format(name=self.__name__), stacklevel=2)
E       pytest.PytestDeprecationWarning: Direct construction of IsortItem has been deprecated, please use IsortItem.from_parent.
E       See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.

cc @fab

python-pytest-randomly

________________________ ERROR collecting test session _________________________
/usr/lib/python3.9/site-packages/pluggy/hooks.py:286: in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:93: in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
/usr/lib/python3.9/site-packages/pluggy/manager.py:337: in traced_hookexec
    return outcome.get_result()
/usr/lib/python3.9/site-packages/pluggy/manager.py:335: in <lambda>
    outcome = _Result.from_call(lambda: oldcall(hook, hook_impls, kwargs))
/usr/lib/python3.9/site-packages/pluggy/manager.py:84: in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
conftest.py:29: in pytest_collect_file
    NoOpItem(str(path), parent, 'foo'),
/usr/lib/python3.9/site-packages/_pytest/nodes.py:95: in __call__
    warnings.warn(NODE_USE_FROM_PARENT.format(name=self.__name__), stacklevel=2)
E   pytest.PytestDeprecationWarning: Direct construction of NoOpItem has been deprecated, please use NoOpItem.from_parent.
E   See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.

cc @dcallagh

The diff looks good to me, the package is installable and pytest command works well :thumbsup:

Pull-Request has been merged by churchyard

3 years ago