Skip to content

Conversation

Bastian-Krause
Copy link
Member

@Bastian-Krause Bastian-Krause commented Aug 28, 2025

Description
The release of Python 3.14 is scheduled for 2025-10-07. This PR is meant to track what's left to be done until we can advertise Python 3.14 support in labgrid.

labgrid itself:

Dependencies:

Checklist

  • PR has been tested

Copy link

codecov bot commented Aug 28, 2025

❌ 22 Tests Failed:

Tests completed Failed Passed Skipped
381 22 359 5
View the top 3 failed test(s) by shortest run time
tests/test_powerdriver.py::TestNetworkPowerDriver::test_import_backend_tplink
Stack Traces | 0.144s run time
self = <test_powerdriver.TestNetworkPowerDriver object at 0x7f4c22c96530>

    def test_import_backend_tplink(self):
>       pytest.importorskip("kasa")

tests/test_powerdriver.py:300: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../site-packages/kasa/__init__.py:20: in <module>
    from kasa.device import Device
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../site-packages/kasa/device.py:118: in <module>
    from .deviceconfig import (
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../site-packages/kasa/deviceconfig.py:96: in <module>
    class DeviceConnectionParameters(_DeviceConfigBaseMixin):
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../mashumaro/mixins/dict.py:26: in __init_subclass__
    compile_mixin_unpacker(cls, **builder_params["unpacker"])
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../core/meta/mixin.py:49: in compile_mixin_unpacker
    builder.add_unpack_method()
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../meta/code/builder.py:584: in add_unpack_method
    self._add_unpack_method_lines(method_name)
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../meta/code/builder.py:489: in _add_unpack_method_lines
    ).build(
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../meta/code/builder.py:1330: in build
    unpacked_value = UnpackerRegistry.get(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = Registry(_registry=[<function unpack_type_with_overridden_deserialization at 0x7f4c1a003b60>, <function unpack_seriali...ck_pathlike at 0x7f4c1a015bc0>, <function unpack_enum at 0x7f4c1a015d20>, <function unpack_pattern at 0x7f4c1a015e80>])
spec = ValueSpec(type=int | None, origin_type=<class 'typing.Union'>, expression='value', builder=<mashumaro.core.meta.code.b...metadata={}, packer=None, unpacker=None), could_be_none=False, annotated_type=None, owner=None, no_copy_collections=())

    def get(self, spec: ValueSpec) -> Expression:
        if is_annotated(spec.type):
            spec.annotated_type = spec.builder.get_real_type(
                spec.field_ctx.name, spec.type
            )
            spec.type = get_type_origin(spec.type)
        spec.type = spec.builder.get_real_type(spec.field_ctx.name, spec.type)
        spec.builder.add_type_modules(spec.type)
        for packer in self._registry:
            expr = packer(spec)
            if expr is not None:
                return expr
>       raise UnserializableField(
            spec.field_ctx.name, spec.type, spec.builder.cls
        )
E       mashumaro.exceptions.UnserializableField: Field "login_version" of type Optional[int] in DeviceConnectionParameters is not serializable

.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14.../meta/types/common.py:225: UnserializableField
tests/test_client.py::test_connect_error
Stack Traces | 0.49s run time
def test_connect_error():
        with pexpect.spawn('python -m labgrid.remote.client -x 127.0.0.1:20409 places') as spawn:
>           spawn.expect("Could not connect to coordinator")

tests/test_client.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:354: in expect
    return self.expect_list(compiled_pattern_list,
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:383: in expect_list
    return exp.expect_loop(timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:179: in expect_loop
    return self.eof(e)
           ^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f4c22406d00>
err = EOF('End Of File (EOF). Exception style platform.')

    def eof(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn._buffer = spawn.buffer_type()
        spawn._before = spawn.buffer_type()
        spawn.after = EOF
        index = self.searcher.eof_index
        if index >= 0:
            spawn.match = EOF
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = EOF(msg)
            exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.
E           <pexpect.pty_spawn.spawn object at 0x7f4c222bbed0>
E           command: .../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python
E           args: ['.../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python', '-m', 'labgrid.remote.client', '-x', '127.0.0.1:20409', 'places']
E           buffer (last 100 chars): b''
E           before (last 100 chars): b"cationWarning: 'asyncio.get_event_loop_policy' is deprecated and slated for removal in Python 3.16\r\n"
E           after: <class 'pexpect.exceptions.EOF'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: True
E           pid: 9068
E           child_fd: 13
E           closed: False
E           timeout: 30
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_re:
E               0: re.compile(b'Could not connect to coordinator')

.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:122: EOF
tests/test_client.py::test_reservation_custom_config
Stack Traces | 0.879s run time
coordinator = <conftest.Coordinator object at 0x7f4c22213750>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c222351d0>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_acquire_enforce
Stack Traces | 0.88s run time
coordinator = <conftest.Coordinator object at 0x7f4c22267b50>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c22288050>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_match_duplicates
Stack Traces | 0.881s run time
coordinator = <conftest.Coordinator object at 0x7f4c223e38a0>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210db110>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_remoteplace_target
Stack Traces | 0.881s run time
coordinator = <conftest.Coordinator object at 0x7f4c223e66d0>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c22289e50>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_alias
Stack Traces | 0.882s run time
coordinator = <conftest.Coordinator object at 0x7f4c223f0770>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210d96d0>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_comment
Stack Traces | 0.882s run time
coordinator = <conftest.Coordinator object at 0x7f4c223f0b00>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210da210>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_release_from
Stack Traces | 0.882s run time
coordinator = <conftest.Coordinator object at 0x7f4c22238aa0>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c22288f50>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_remoteplace_target_without_env
Stack Traces | 0.882s run time
coordinator = <conftest.Coordinator object at 0x7f4c22cc7ee0>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c2228a850>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_reservation
Stack Traces | 0.882s run time
coordinator = <conftest.Coordinator object at 0x7f4c22363c50>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c2228b9d0>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_acquire_broken
Stack Traces | 0.883s run time
coordinator = <conftest.Coordinator object at 0x7f4c22228a50>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c222887d0>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_resource_conflict
Stack Traces | 0.883s run time
coordinator = <conftest.Coordinator object at 0x7f4c22363950>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c2228b110>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_acquire
Stack Traces | 0.884s run time
coordinator = <conftest.Coordinator object at 0x7f4c223e3bd0>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210db890>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_same_name_resources
Stack Traces | 0.885s run time
coordinator = <conftest.Coordinator object at 0x7f4c221f8730>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c22235950>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_match
Stack Traces | 0.886s run time
coordinator = <conftest.Coordinator object at 0x7f4c22332d50>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210da990>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_resource_acquired_state_on_exporter_restart
Stack Traces | 0.886s run time
coordinator = <conftest.Coordinator object at 0x7f4c2223d390>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c222342d0>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_place_add_no_name
Stack Traces | 0.887s run time
coordinator = <conftest.Coordinator object at 0x7f4c22239400>

    def test_place_add_no_name(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client create') as spawn:
>           spawn.expect("missing place name")

tests/test_client.py:244: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:354: in expect
    return self.expect_list(compiled_pattern_list,
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:383: in expect_list
    return exp.expect_loop(timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:179: in expect_loop
    return self.eof(e)
           ^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f4c210d33f0>
err = EOF('End Of File (EOF). Exception style platform.')

    def eof(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn._buffer = spawn.buffer_type()
        spawn._before = spawn.buffer_type()
        spawn.after = EOF
        index = self.searcher.eof_index
        if index >= 0:
            spawn.match = EOF
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = EOF(msg)
            exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.
E           <pexpect.pty_spawn.spawn object at 0x7f4c22289590>
E           command: .../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python
E           args: ['.../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python', '-m', 'labgrid.remote.client', 'create']
E           buffer (last 100 chars): b''
E           before (last 100 chars): b"cationWarning: 'asyncio.get_event_loop_policy' is deprecated and slated for removal in Python 3.16\r\n"
E           after: <class 'pexpect.exceptions.EOF'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: True
E           pid: 9179
E           child_fd: 14
E           closed: False
E           timeout: 30
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_re:
E               0: re.compile(b'missing place name')

.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:122: EOF
tests/test_client.py::test_place_del_no_name
Stack Traces | 0.889s run time
coordinator = <conftest.Coordinator object at 0x7f4c223e67b0>

    def test_place_del_no_name(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client delete') as spawn:
>           spawn.expect("place pattern not specified")

tests/test_client.py:251: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:354: in expect
    return self.expect_list(compiled_pattern_list,
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:383: in expect_list
    return exp.expect_loop(timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:179: in expect_loop
    return self.eof(e)
           ^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f4c210d3460>
err = EOF('End Of File (EOF). Exception style platform.')

    def eof(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn._buffer = spawn.buffer_type()
        spawn._before = spawn.buffer_type()
        spawn.after = EOF
        index = self.searcher.eof_index
        if index >= 0:
            spawn.match = EOF
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = EOF(msg)
            exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.
E           <pexpect.pty_spawn.spawn object at 0x7f4c22289950>
E           command: .../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python
E           args: ['.../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python', '-m', 'labgrid.remote.client', 'delete']
E           buffer (last 100 chars): b''
E           before (last 100 chars): b"cationWarning: 'asyncio.get_event_loop_policy' is deprecated and slated for removal in Python 3.16\r\n"
E           after: <class 'pexpect.exceptions.EOF'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: True
E           pid: 9190
E           child_fd: 14
E           closed: False
E           timeout: 30
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_re:
E               0: re.compile(b'place pattern not specified')

.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:122: EOF
tests/test_client.py::test_place_show
Stack Traces | 0.89s run time
coordinator = <conftest.Coordinator object at 0x7f4c210d8410>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c210d8f50>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_exporter_timeout
Stack Traces | 0.896s run time
coordinator = <conftest.Coordinator object at 0x7f4c2223e360>

    @pytest.fixture(scope='function')
    def place(coordinator):
        with pexpect.spawn('python -m labgrid.remote.client -p test create') as spawn:
            spawn.expect(pexpect.EOF)
            spawn.close()
>           assert spawn.exitstatus == 0, spawn.before.strip()
E           AssertionError: b'Traceback (most recent call last):\r
E               File ".../_cygrpc/aio/common.pyx.pxi", line 184, ...^^^^^^^^^\r
E             DeprecationWarning: \'asyncio.get_event_loop_policy\' is deprecated and slated for removal in Python 3.16'
E           assert 2 == 0
E            +  where 2 = <pexpect.pty_spawn.spawn object at 0x7f4c22234a50>.exitstatus

tests/test_client.py:16: AssertionError
tests/test_client.py::test_connect_timeout
Stack Traces | 0.897s run time
coordinator = <conftest.Coordinator object at 0x7f4c222bb390>

    def test_connect_timeout(coordinator):
        coordinator.suspend_tree()
        try:
            with pexpect.spawn('python -m labgrid.remote.client places') as spawn:
>               spawn.expect("connection attempt timed out before receiving SETTINGS frame")

tests/test_client.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:354: in expect
    return self.expect_list(compiled_pattern_list,
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/spawnbase.py:383: in expect_list
    return exp.expect_loop(timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:179: in expect_loop
    return self.eof(e)
           ^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f4c2244e210>
err = EOF('End Of File (EOF). Exception style platform.')

    def eof(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn._buffer = spawn.buffer_type()
        spawn._before = spawn.buffer_type()
        spawn.after = EOF
        index = self.searcher.eof_index
        if index >= 0:
            spawn.match = EOF
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = EOF(msg)
            exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.
E           <pexpect.pty_spawn.spawn object at 0x7f4c222b8b90>
E           command: .../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python
E           args: ['.../hostedtoolcache/Python/3.14.0-rc..../x64/bin/python', '-m', 'labgrid.remote.client', 'places']
E           buffer (last 100 chars): b''
E           before (last 100 chars): b"cationWarning: 'asyncio.get_event_loop_policy' is deprecated and slated for removal in Python 3.16\r\n"
E           after: <class 'pexpect.exceptions.EOF'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: True
E           pid: 9078
E           child_fd: 14
E           closed: False
E           timeout: 30
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_re:
E               0: re.compile(b'connection attempt timed out before receiving SETTINGS frame')

.../hostedtoolcache/Python/3.14.0-rc..../x64/lib/python3.14....../site-packages/pexpect/expect.py:122: EOF

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@threexc
Copy link
Contributor

threexc commented Aug 28, 2025

Thanks for this - when I'm back from travel I'll see if I can help out with the dependencies.

…t --help

argparse [1] enables colors by default since Python 3.14. This breaks
asserting that the help text contains
"--lg-coordinator=COORDINATOR_ADDRESS" due to escape codes and a
different output format.

Fix that by passing NO_COLOR=1 in the test's environment.

[1] https://docs.python.org/3.14/library/argparse.html#color

Signed-off-by: Bastian Krause <[email protected]>
This allows us to test Python releases prior to the final release. It
shouldn't hurt adding this.

Signed-off-by: Bastian Krause <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants