Skip to content

MAINT: Fix `pytest.PytestRemovedIn9Warning` since pytest 8.2.0

Yuji Ikeda requested to merge yuzie007/ase:fix-pytest-8.2.0 into master

Since pytest 8.2.0 the following pytest.PytestRemovedIn9Warning is raised when running ASE tests:

% pytest
Traceback (most recent call last):
  File "/Users/ikeda/miniforge3/envs/myenv/bin/pytest", line 10, in <module>
    sys.exit(console_main())
             ^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 206, in console_main
    code = main()
           ^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 159, in main
    config = _prepareconfig(args, plugins)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 346, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/helpconfig.py", line 106, in pytest_cmdline_parse
    config = yield
             ^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 1152, in pytest_cmdline_parse
    self.parse(args)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 1501, in parse
    self._preparse(args, addopts=addopts)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 1405, in _preparse
    self.hook.pytest_load_initial_conftests(
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/warnings.py", line 150, in pytest_load_initial_conftests
    return (yield)
            ^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/capture.py", line 153, in pytest_load_initial_conftests
    yield
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 1230, in pytest_load_initial_conftests
    self.pluginmanager._set_initial_conftests(
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 588, in _set_initial_conftests
    self._try_load_conftest(
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 626, in _try_load_conftest
    self._loadconftestmodules(
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 666, in _loadconftestmodules
    mod = self._importconftest(
          ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 742, in _importconftest
    self.consider_conftest(mod, registration_name=conftestpath_plugin_name)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 823, in consider_conftest
    self.register(conftestmodule, name=registration_name)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 508, in register
    plugin_name = super().register(plugin, name)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_manager.py", line 168, in register
    self._verify_hook(hook, hookimpl)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_manager.py", line 360, in _verify_hook
    _warn_for_function(argname_warning, hookimpl.function)
  File "/Users/ikeda/miniforge3/envs/myenv/lib/python3.11/site-packages/pluggy/_manager.py", line 41, in _warn_for_function
    warnings.warn_explicit(
pytest.PytestRemovedIn9Warning: The (startdir: py.path.local) argument is deprecated, please use (start_path: pathlib.Path)
see https://docs.pytest.org/en/latest/deprecations.html#py-path-local-arguments-for-hooks-replaced-with-pathlib-path

I found this is caused by the usage of startdir (deprecated since pytest 7.0.0) in pytest_report_header in ase/test/conftest.py. Using start_path instead, the warning is gone.

https://docs.pytest.org/en/8.2.x/reference/reference.html#pytest.hookspec.pytest_report_header

I found this issue from the recent failure of windows-test pipeline

For the pipeline of the present MR, I turned on windows-test, which passed.

https://gitlab.com/yuzie007/ase/-/jobs/6755329900

On the other hand, oldlibs failed likely due to the usage of pytest==6.2.5, which should be fixed maybe on the ase-dockers side. (I will make another MR on ase-dockers soon.)

https://gitlab.com/yuzie007/ase/-/jobs/6755329891

https://gitlab.com/ase/ase-dockers/-/blob/c03529d1edc0279f976d8bdc7a16589cfe4b5bef/oldlibs/Dockerfile

Checklist

Edited by Yuji Ikeda

Merge request reports