-
-
Notifications
You must be signed in to change notification settings - Fork 42
Open
Description
test_functions_with_locals_in_pdb and test_debug_namespace from console/tests/test_console_kernel.py are failing with python 3.14.
The problem was reported for debian at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1123355
with test logs available at https://people.debian.org/~sanvila/build-logs/202512/spyder-kernels_3.0.3-1_amd64-20251216T151525.311Z
I can reproduce the errors locally
$ python3.14 -m pytest -v -k "test_functions_with_locals or test_debug" spyder_kernels/console/tests/test_console_kernel.py
================================================================================================================================== test session starts ===================================================================================================================================
platform linux -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python3.14
cachedir: .pytest_cache
hypothesis profile 'default'
Test order randomisation NOT enabled. Enable with --random-order or --random-order-bucket=<bucket_type>
benchmark: 5.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /projects/python/build/spyder-kernels
configfile: pyproject.toml
plugins: rerunfailures-16.1, remotedata-0.4.1, hypothesis-6.151.9, cov-5.0.0, arraydiff-0.6.1, xdist-3.8.0, mock-3.15.1, filter-subpackage-0.2.0, timeout-2.4.0, typeguard-4.4.4, xvfb-3.0.0, astropy-0.11.0, random-order-0.0.0, anyio-4.12.1, openfiles-0.6.0, flaky-3.8.1, benchmark-5.2.3, mpi-0.6, asyncio-1.3.0, astropy-header-0.2.2, doctestplus-1.7.1
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 53 items / 50 deselected / 3 selected
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb FAILED [ 33%]
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2 PASSED [ 66%]
spyder_kernels/console/tests/test_console_kernel.py::test_debug_namespace FAILED [100%]
======================================================================================================================================== FAILURES ========================================================================================================================================
___________________________________________________________________________________________________________________________ test_functions_with_locals_in_pdb ____________________________________________________________________________________________________________________________
kernel = <spyder_kernels.console.kernel.SpyderKernel object at 0x7f0a95a91d30>
def test_functions_with_locals_in_pdb(kernel):
"""
Test that functions with locals work in Pdb.
This is a regression test for spyder-ide/spyder-kernels#345
"""
pdb_obj = SpyderPdb()
Frame = namedtuple("Frame", ["f_globals"])
pdb_obj.curframe = Frame(f_globals=kernel.shell.user_ns)
pdb_obj.curframe_locals = kernel.shell.user_ns
kernel.shell._namespace_stack = [pdb_obj]
# Create a local function.
> kernel.shell.pdb_session.default(
'def fun_a(): return [i for i in range(1)]')
spyder_kernels/console/tests/test_console_kernel.py:1078:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
spyder_kernels/customize/spyderpdb.py:163: in default
local_ns = self.curframe_locals
^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/_py_warnings.py:800: in wrapper
return arg(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <spyder_kernels.customize.spyderpdb.SpyderPdb object at 0x7f0a95a91a90>
@property
@deprecated("The frame locals reference is no longer cached. Use 'curframe.f_locals' instead.")
def curframe_locals(self):
> return self.curframe.f_locals
^^^^^^^^^^^^^^^^^^^^^^
E AttributeError: 'Frame' object has no attribute 'f_locals'. Did you mean: 'f_globals'?
/usr/lib/python3.14/pdb.py:533: AttributeError
--------------------------------------------------------------------------------------------------------------------------------- Captured stderr setup ----------------------------------------------------------------------------------------------------------------------------------
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
__________________________________________________________________________________________________________________________________ test_debug_namespace __________________________________________________________________________________________________________________________________
tmpdir = local('/tmp/pytest-of-me/pytest-90/test_debug_namespace2')
@pytest.mark.flaky(max_runs=3)
def test_debug_namespace(tmpdir):
"""
Test that the kernel uses the proper namespace while debugging.
"""
# Command to start the kernel
cmd = "from spyder_kernels.console import start; start.main()"
with setup_kernel(cmd) as client:
# Write code to a file
d = tmpdir.join("pdb-ns-test.py")
d.write('def func():\n bb = "hello"\n breakpoint()\nfunc()')
# Run code file `d`
client.execute("%runfile {}".format(repr(str(d))))
# make sure that 'bb' returns 'hello'
> client.get_stdin_msg(timeout=TIMEOUT)
spyder_kernels/console/tests/test_console_kernel.py:1288:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/jupyter_core/utils/__init__.py:165: in wrapped
return loop.run_until_complete(inner)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/asyncio/base_events.py:719: in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/jupyter_client/client.py:175: in _async_get_stdin_msg
return await ensure_async(self.stdin_channel.get_msg(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <jupyter_client.channels.ZMQSocketChannel object at 0x7f0a9301ae40>, timeout = 15
def get_msg(self, timeout: float | None = None) -> t.Dict[str, t.Any]:
"""Gets a message if there is one that is ready."""
assert self.socket is not None
timeout_ms = None if timeout is None else int(timeout * 1000) # seconds to ms
ready = self.socket.poll(timeout_ms)
if ready:
res = self._recv()
return res
else:
> raise Empty
E _queue.Empty
/usr/lib/python3/dist-packages/jupyter_client/channels.py:235: Empty
==================================================================================================================================== warnings summary ====================================================================================================================================
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
/projects/python/build/spyder-kernels/spyder_kernels/customize/spyderpdb.py:87: DeprecationWarning: Setting 'curframe_locals' no longer has any effect. Update the contents of 'curframe.f_locals' instead.
self.curframe_locals = None
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb
/projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1074: DeprecationWarning: Setting 'curframe_locals' no longer has any effect. Update the contents of 'curframe.f_locals' instead.
pdb_obj.curframe_locals = kernel.shell.user_ns
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
/projects/python/build/spyder-kernels/spyder_kernels/customize/spyderpdb.py:163: DeprecationWarning: The frame locals reference is no longer cached. Use 'curframe.f_locals' instead.
local_ns = self.curframe_locals
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
/projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1105: DeprecationWarning: Setting 'curframe_locals' no longer has any effect. Update the contents of 'curframe.f_locals' instead.
pdb_obj.curframe_locals = pdb_obj.curframe.f_locals
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
/projects/python/build/spyder-kernels/spyder_kernels/console/shell.py:300: DeprecationWarning: The frame locals reference is no longer cached. Use 'curframe.f_locals' instead.
return session.curframe_locals
spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb_2
/projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1132: DeprecationWarning: Setting 'curframe_locals' no longer has any effect. Update the contents of 'curframe.f_locals' instead.
pdb_obj.curframe_locals = None
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
===Flaky Test Report===
test_debug_namespace failed (2 runs remaining out of 3).
<class '_queue.Empty'>
[<TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:353>, <TracebackEntry /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/logging.py:850>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/capture.py:900>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/skipping.py:268>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:179>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:1720>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:166>, <TracebackEntry /projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1288>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_core/utils/__init__.py:165>, <TracebackEntry /usr/lib/python3.14/asyncio/base_events.py:719>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/client.py:175>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/channels.py:235>]
test_debug_namespace failed (1 runs remaining out of 3).
<class '_queue.Empty'>
[<TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:353>, <TracebackEntry /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/logging.py:850>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/capture.py:900>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/skipping.py:268>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:179>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:1720>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:166>, <TracebackEntry /projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1288>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_core/utils/__init__.py:165>, <TracebackEntry /usr/lib/python3.14/asyncio/base_events.py:719>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/client.py:175>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/channels.py:235>]
test_debug_namespace failed; it passed 0 out of the required 1 times.
<class '_queue.Empty'>
[<TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:353>, <TracebackEntry /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/logging.py:850>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/capture.py:900>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/skipping.py:268>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/runner.py:179>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:1720>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_hooks.py:512>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_manager.py:120>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:167>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:139>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:53>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_result.py:103>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:38>, <TracebackEntry /usr/lib/python3/dist-packages/pluggy/_callers.py:121>, <TracebackEntry /usr/lib/python3/dist-packages/_pytest/python.py:166>, <TracebackEntry /projects/python/build/spyder-kernels/spyder_kernels/console/tests/test_console_kernel.py:1288>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_core/utils/__init__.py:165>, <TracebackEntry /usr/lib/python3.14/asyncio/base_events.py:719>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/client.py:175>, <TracebackEntry /usr/lib/python3/dist-packages/jupyter_client/channels.py:235>]
===End Flaky Test Report===
================================================================================================================================ short test summary info =================================================================================================================================
FAILED spyder_kernels/console/tests/test_console_kernel.py::test_functions_with_locals_in_pdb - AttributeError: 'Frame' object has no attribute 'f_locals'. Did you mean: 'f_globals'?
FAILED spyder_kernels/console/tests/test_console_kernel.py::test_debug_namespace - _queue.Empty
================================================================================================================ 2 failed, 1 passed, 50 deselected, 17 warnings in 53.10s ================================================================================================================
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels