test_vim.py fails with Python 3.12 (Fedora 39). It works fine on Fedora 38 with Python 3.11. I've packaged pynvim 798dfc3fa67c566867715852edd440c6c9efe164 for Fedora.
============================= test session starts ==============================
platform linux -- Python 3.12.0rc1, pytest-7.3.2, pluggy-1.2.0
cachedir: .tox/py312/.pytest_cache
rootdir: /builddir/build/BUILD/pynvim-0.4.3
configfile: setup.cfg
testpaths: test
plugins: timeout-2.1.0, asyncio-0.21.0
asyncio: mode=Mode.STRICT
collected 70 items
test/test_buffer.py ................. [ 24%]
test/test_client_rpc.py .... [ 30%]
test/test_concurrency.py .. [ 32%]
test/test_decorators.py . [ 34%]
test/test_events.py .... [ 40%]
test/test_host.py .... [ 45%]
test/test_logging.py . [ 47%]
test/test_tabpage.py ..... [ 54%]
test/test_vim.py ..................F. [ 82%]
test/test_window.py ............ [100%]
=================================== FAILURES ===================================
___________________________________ test_cwd ___________________________________
vim = <pynvim.api.nvim.Nvim object at 0x7f92c0ccd850>
tmpdir = local('/tmp/pytest-of-mockbuild/pytest-5/test_cwd0')
def test_cwd(vim: Nvim, tmpdir: Any) -> None:
> vim.command('python3 import os')
test/test_vim.py:201:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pynvim/api/nvim.py:311: in command
return self.request('nvim_command', string, **kwargs)
pynvim/api/nvim.py:199: in request
res = self._session.request(name, *args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pynvim.msgpack_rpc.session.Session object at 0x7f92c0cce210>
method = 'nvim_command', args = ('python3 import os',), kwargs = {}
async_ = False
v = ([0, 'Vim(python3):E319: No "python3" provider found. Run ":checkhealth provider"'], None)
err = [0, 'Vim(python3):E319: No "python3" provider found. Run ":checkhealth provider"']
rv = None
def request(self, method: AnyStr, *args: Any, **kwargs: Any) -> Any:
"""Send a msgpack-rpc request and block until as response is received.
If the event loop is running, this method must have been called by a
request or notification handler running on a greenlet. In that case,
send the quest and yield to the parent greenlet until a response is
available.
When the event loop is not running, it will perform a blocking request
like this:
- Send the request
- Run the loop until the response is available
- Put requests/notifications received while waiting into a queue
If the `async_` flag is present and True, a asynchronous notification
is sent instead. This will never block, and the return value or error
is ignored.
"""
async_ = check_async(kwargs.pop('async_', None), kwargs, False)
if async_:
self._async_session.notify(method, args)
return
if kwargs:
raise ValueError("request got unsupported keyword argument(s): {}"
.format(', '.join(kwargs.keys())))
if self._is_running:
v = self._yielding_request(method, args)
else:
v = self._blocking_request(method, args)
if not v:
# EOF
raise OSError('EOF')
err, rv = v
if err:
info("'Received error: %s", err)
> raise self.error_wrapper(err)
E pynvim.api.common.NvimError: Vim(python3):E319: No "python3" provider found. Run ":checkhealth provider"
pynvim/msgpack_rpc/session.py:137: NvimError
------------------------------ Captured log call -------------------------------
INFO pynvim.msgpack_rpc.session:session.py:136 'Received error: [0, 'Vim(python3):E319: No "python3" provider found. Run ":checkhealth provider"']
=============================== warnings summary ===============================
test/test_buffer.py: 17 warnings
test/test_client_rpc.py: 4 warnings
test/test_concurrency.py: 2 warnings
test/test_events.py: 4 warnings
test/test_host.py: 4 warnings
test/test_tabpage.py: 5 warnings
test/test_vim.py: 20 warnings
test/test_window.py: 12 warnings
/usr/lib64/python3.12/asyncio/events.py:824: DeprecationWarning: 'get_child_watcher' is deprecated as of Python 3.12 and will be removed in Python 3.14.
return get_event_loop_policy().get_child_watcher()
test/test_buffer.py: 2 warnings
test/test_client_rpc.py: 1 warning
test/test_events.py: 1 warning
test/test_host.py: 1 warning
test/test_tabpage.py: 1 warning
test/test_vim.py: 3 warnings
test/test_window.py: 2 warnings
/usr/lib/python3.12/site-packages/_pytest/unraisableexception.py:78: PytestUnraisableExceptionWarning: Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED test/test_vim.py::test_cwd - pynvim.api.common.NvimError: Vim(python3)...
================== 1 failed, 69 passed, 79 warnings in 3.04s ===================
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
self.write_eof()
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
self._loop.call_soon(self._call_connection_lost, None)
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
self._check_closed()
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f92c10b1b20>
Traceback (most recent call last):
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 126, in __del__
File "/usr/lib64/python3.12/asyncio/base_subprocess.py", line 104, in close
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 768, in close
File "/usr/lib64/python3.12/asyncio/unix_events.py", line 754, in write_eof
File "/usr/lib64/python3.12/asyncio/base_events.py", line 772, in call_soon
File "/usr/lib64/python3.12/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed
py312: exit 1 (3.54 seconds) /builddir/build/BUILD/pynvim-0.4.3> python -m pytest pid=458
py312: FAIL code 1 (3.56=setup[0.01]+cmd[3.54] seconds)
evaluation failed :( (3.63 seconds)
test_vim.py fails with Python 3.12 (Fedora 39). It works fine on Fedora 38 with Python 3.11. I've packaged pynvim 798dfc3fa67c566867715852edd440c6c9efe164 for Fedora.