Bug 2251910 - python-pexpect fails to build with Python 3.13: test failure: tests.test_interact.InteractTestCase.test_interact_escape_None
Summary: python-pexpect fails to build with Python 3.13: test failure: tests.test_inte...
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-pexpect
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Scott Talbert
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: PYTHON3.13
TreeView+ depends on / blocked
 
Reported: 2023-11-28 11:56 UTC by Karolina Surma
Modified: 2023-11-29 03:09 UTC (History)
7 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2023-11-29 03:09:19 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Karolina Surma 2023-11-28 11:56:56 UTC
python-pexpect fails to build with Python 3.13.0a2.

This report is automated and not very verbose, but we'll try to get back here with details.

__________________ InteractTestCase.test_interact_escape_None __________________

self = <tests.test_interact.InteractTestCase testMethod=test_interact_escape_None>

    def test_interact_escape_None(self):
        " Return only after Termination when `escape_character=None'. "
        p = pexpect.spawn('{self.interact_py} --no-escape'.format(self=self),
                          timeout=5, env=self.env)
        p.expect('READY')
        p.sendcontrol(']')
        p.expect('29<STOP>')
        p.send('\x00')
        if not os.environ.get('CI', None):
            # on CI platforms, we sometimes miss trailing stdout from the
            # chain of child processes, not entirely sure why. So this
            # is skipped on such systems.
>           p.expect('0<STOP>')

tests/test_interact.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pexpect/spawnbase.py:354: in expect
    return self.expect_list(compiled_pattern_list,
pexpect/spawnbase.py:383: in expect_list
    return exp.expect_loop(timeout)
pexpect/expect.py:179: in expect_loop
    return self.eof(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f43ed369f10>
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 0x7f43ed369700>
E           command: /usr/bin/python3
E           args: ['/usr/bin/python3', 'interact.py', '--no-escape']
E           buffer (last 100 chars): b''
E           before (last 100 chars): b'\r\nEscaped interact\r\n'
E           after: <class 'pexpect.exceptions.EOF'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: True
E           pid: 546
E           child_fd: 16
E           closed: False
E           timeout: 5
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'0<STOP>')

pexpect/expect.py:122: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_interact.InteractTestCase.test_interact_escape_None 

=========================== short test summary info ============================
FAILED tests/test_interact.py::InteractTestCase::test_interact_escape_None - ...
============ 1 failed, 256 passed, 85 warnings in 240.18s (0:04:00) ============

https://docs.python.org/3.13/whatsnew/3.13.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.13/fedora-rawhide-x86_64/06701276-python-pexpect/

For all our attempts to build python-pexpect with Python 3.13, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.13/package/python-pexpect/

Testing and mass rebuild of packages is happening in copr.
You can follow these instructions to test locally in mock if your package builds with Python 3.13:
https://copr.fedorainfracloud.org/coprs/g/python/python3.13/

Let us know here if you have any questions.

Python 3.13 is planned to be included in Fedora 41.
To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.13.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires),
so if this package is required a lot, it's important for us to get it fixed soon.

We'd appreciate help from the people who know this package best,
but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Scott Talbert 2023-11-29 03:09:19 UTC
Should be fixed.


Note You need to log in before you can comment on or make changes to this bug.