Python 3.13 test regression in 3.10.0rc0 (compared to b1) #8551
Closed
Description
Describe the bug
In 3.10.0rc0, the tests/test_web_urldispatcher.py::test_access_mock_special_resource is failing on Python 3.13.0b4.
The problem was introduced in 4f834b6 (CC @steverep). The previous version passes all tests on 3.13.
To Reproduce
In a venv, inside a directory with the git checkout:
# using pypi sdist is easier
pip install --pre aiohttp pytest-cov yarl
python -m pytest tests/test_web_urldispatcher.py::test_access_mock_special_resource
Expected behavior
Tests passing :-).
Logs/tracebacks
$ python -m pytest tests/test_web_urldispatcher.py::test_access_mock_special_resource
========================================================= test session starts =========================================================
platform linux -- Python 3.13.0b4, pytest-8.3.2, pluggy-1.5.0 -- /tmp/aiohttp/.venv/bin/python
cachedir: .pytest_cache
rootdir: /tmp/aiohttp
configfile: setup.cfg
plugins: cov-5.0.0
collected 1 item
tests/test_web_urldispatcher.py::test_access_mock_special_resource[pyloop]
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/main.py", line 283, in wrap_session
INTERNALERROR> session.exitstatus = doit(config, session) or 0
INTERNALERROR> ~~~~^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/main.py", line 337, in _main
INTERNALERROR> config.hook.pytest_runtestloop(session=session)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 513, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 182, in _multicall
INTERNALERROR> return outcome.get_result()
INTERNALERROR> ~~~~~~~~~~~~~~~~~~^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_result.py", line 100, in get_result
INTERNALERROR> raise exc.with_traceback(exc.__traceback__)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 167, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/logging.py", line 805, in pytest_runtestloop
INTERNALERROR> return (yield) # Run all the tests.
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 167, in _multicall
INTERNALERROR> teardown.throw(outcome._exception)
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/terminal.py", line 673, in pytest_runtestloop
INTERNALERROR> result = yield
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 103, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/main.py", line 362, in pytest_runtestloop
INTERNALERROR> item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 513, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 139, in _multicall
INTERNALERROR> raise exception.with_traceback(exception.__traceback__)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/warnings.py", line 112, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/assertion/__init__.py", line 176, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/unittest.py", line 429, in pytest_runtest_protocol
INTERNALERROR> res = yield
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/faulthandler.py", line 87, in pytest_runtest_protocol
INTERNALERROR> return (yield)
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 103, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 113, in pytest_runtest_protocol
INTERNALERROR> runtestprotocol(item, nextitem=nextitem)
INTERNALERROR> ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 132, in runtestprotocol
INTERNALERROR> reports.append(call_and_report(item, "call", log))
INTERNALERROR> ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 244, in call_and_report
INTERNALERROR> report: TestReport = ihook.pytest_runtest_makereport(item=item, call=call)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 513, in __call__
INTERNALERROR> return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 139, in _multicall
INTERNALERROR> raise exception.with_traceback(exception.__traceback__)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/tmpdir.py", line 318, in pytest_runtest_makereport
INTERNALERROR> rep = yield
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
INTERNALERROR> teardown.throw(exception) # type: ignore[union-attr]
INTERNALERROR> ~~~~~~~~~~~~~~^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/skipping.py", line 269, in pytest_runtest_makereport
INTERNALERROR> rep = yield
INTERNALERROR> ^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 103, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 368, in pytest_runtest_makereport
INTERNALERROR> return TestReport.from_item_and_call(item, call)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/reports.py", line 376, in from_item_and_call
INTERNALERROR> longrepr = item.repr_failure(excinfo)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/python.py", line 1669, in repr_failure
INTERNALERROR> return self._repr_failure_py(excinfo, style=style)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/nodes.py", line 456, in _repr_failure_py
INTERNALERROR> return excinfo.getrepr(
INTERNALERROR> ~~~~~~~~~~~~~~~^
INTERNALERROR> funcargs=True,
INTERNALERROR> ^^^^^^^^^^^^^^
INTERNALERROR> ...<5 lines>...
INTERNALERROR> truncate_args=truncate_args,
INTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> )
INTERNALERROR> ^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/_code/code.py", line 690, in getrepr
INTERNALERROR> return fmt.repr_excinfo(self)
INTERNALERROR> ~~~~~~~~~~~~~~~~^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/_code/code.py", line 1058, in repr_excinfo
INTERNALERROR> reprtraceback = self.repr_traceback(excinfo_)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/_code/code.py", line 971, in repr_traceback
INTERNALERROR> traceback = self.tbfilter(excinfo)
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/python.py", line 1635, in _traceback_filter
INTERNALERROR> path, firstlineno = code.path, code.firstlineno
INTERNALERROR> ^^^^^^^^^
INTERNALERROR> File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/_code/code.py", line 97, in path
INTERNALERROR> if not p.exists():
INTERNALERROR> ~~~~~~~~^^
INTERNALERROR> File "/usr/lib/python3.13/pathlib/_abc.py", line 450, in exists
INTERNALERROR> self.stat(follow_symlinks=follow_symlinks)
INTERNALERROR> ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> TypeError: test_access_mock_special_resource.<locals>.mock_stat() got an unexpected keyword argument 'follow_symlinks'
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pytest/__main__.py", line 9, in <module>
raise SystemExit(pytest.console_main())
~~~~~~~~~~~~~~~~~~~^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/config/__init__.py", line 201, in console_main
code = main()
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/config/__init__.py", line 175, in main
ret: ExitCode | int = config.hook.pytest_cmdline_main(config=config)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 139, in _multicall
raise exception.with_traceback(exception.__traceback__)
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/main.py", line 330, in pytest_cmdline_main
return wrap_session(config, _main)
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/main.py", line 318, in wrap_session
config.hook.pytest_sessionfinish(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
session=session, exitstatus=session.exitstatus
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 513, in __call__
return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120, in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 139, in _multicall
raise exception.with_traceback(exception.__traceback__)
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
teardown.throw(exception) # type: ignore[union-attr]
~~~~~~~~~~~~~~^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/logging.py", line 870, in pytest_sessionfinish
return (yield)
^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
teardown.throw(exception) # type: ignore[union-attr]
~~~~~~~~~~~~~~^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/terminal.py", line 893, in pytest_sessionfinish
result = yield
^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 122, in _multicall
teardown.throw(exception) # type: ignore[union-attr]
~~~~~~~~~~~~~~^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/warnings.py", line 141, in pytest_sessionfinish
return (yield)
^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/pluggy/_callers.py", line 103, in _multicall
res = hook_impl.function(*args)
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/cacheprovider.py", line 477, in pytest_sessionfinish
config.cache.set("cache/nodeids", sorted(self.cached_nodeids))
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/cacheprovider.py", line 184, in set
self._mkdir(path.parent)
~~~~~~~~~~~^^^^^^^^^^^^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/cacheprovider.py", line 126, in _mkdir
self._ensure_cache_dir_and_supporting_files()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/cacheprovider.py", line 205, in _ensure_cache_dir_and_supporting_files
if self._cachedir.is_dir():
~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/pathlib/_abc.py", line 465, in is_dir
return S_ISDIR(self.stat(follow_symlinks=follow_symlinks).st_mode)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: test_access_mock_special_resource.<locals>.mock_stat() got an unexpected keyword argument 'follow_symlinks'
Exception ignored in atexit callback <function cleanup_numbered_dir at 0x7f9c06ad6d40>:
Traceback (most recent call last):
File "/tmp/aiohttp/.venv/lib/python3.13/site-packages/_pytest/pathlib.py", line 362, in cleanup_numbered_dir
if not root.exists():
File "/usr/lib/python3.13/pathlib/_abc.py", line 450, in exists
self.stat(follow_symlinks=follow_symlinks)
TypeError: test_access_mock_special_resource.<locals>.mock_stat() got an unexpected keyword argument 'follow_symlinks'Python Version
$ python --version
Python 3.13.0b4aiohttp Version
$ python -m pip show aiohttp
Name: aiohttp
Version: 3.10.0rc0
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author:
Author-email:
License: Apache 2
Location: /tmp/aiohttp/.venv/lib/python3.13/site-packages
Requires: aiohappyeyeballs, aiosignal, attrs, frozenlist, multidict, yarl
Required-by:multidict Version
$ python -m pip show multidict
Name: multidict
Version: 6.0.5
Summary: multidict implementation
Home-page: https://github.com/aio-libs/multidict
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache 2
Location: /tmp/aiohttp/.venv/lib/python3.13/site-packages
Requires:
Required-by: aiohttp, yarlyarl Version
$ python -m pip show yarl
Name: yarl
Version: 1.9.4
Summary: Yet another URL library
Home-page: https://github.com/aio-libs/yarl
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache-2.0
Location: /tmp/aiohttp/.venv/lib/python3.13/site-packages
Requires: idna, multidict
Required-by: aiohttpOS
Gentoo Linux amd64
Related component
Server, Client
Additional context
No response
Code of Conduct
- I agree to follow the aio-libs Code of Conduct