Skip to content

Tests fail with Python 3.14 #15

@opoplawski

Description

@opoplawski

When trying to build with Python 3.14 we are getting:

+ py.test-3.14 capturer/tests.py
============================= test session starts ==============================
platform linux -- Python 3.14.0b3, pytest-8.3.5, pluggy-1.6.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /builddir/build/BUILD/python-capturer-3.0-build/python-capturer-3.0
configfile: tox.ini
collecting ... collected 14 items

capturer/tests.py::CapturerTestCase::test_carriage_return_interpretation PASSED [  7%]
capturer/tests.py::CapturerTestCase::test_combined_capture_same_process FAILED [ 14%]
capturer/tests.py::CapturerTestCase::test_combined_capture_same_process ERROR [ 14%]
capturer/tests.py::CapturerTestCase::test_combined_capture_subprocess ERROR [ 21%]
capturer/tests.py::CapturerTestCase::test_combined_capture_subprocess ERROR [ 21%]
capturer/tests.py::CapturerTestCase::test_combined_current_and_subprocess ERROR [ 28%]
capturer/tests.py::CapturerTestCase::test_combined_current_and_subprocess ERROR [ 28%]
capturer/tests.py::CapturerTestCase::test_error_handling ERROR           [ 35%]
capturer/tests.py::CapturerTestCase::test_error_handling ERROR           [ 35%]
capturer/tests.py::CapturerTestCase::test_non_interpreted_lines_capture ERROR [ 42%]
capturer/tests.py::CapturerTestCase::test_non_interpreted_lines_capture ERROR [ 42%]
capturer/tests.py::CapturerTestCase::test_partial_read ERROR             [ 50%]
capturer/tests.py::CapturerTestCase::test_partial_read ERROR             [ 50%]
capturer/tests.py::CapturerTestCase::test_save_to_path ERROR             [ 57%]
capturer/tests.py::CapturerTestCase::test_save_to_path ERROR             [ 57%]
capturer/tests.py::CapturerTestCase::test_stderr_capture_same_process ERROR [ 64%]
capturer/tests.py::CapturerTestCase::test_stderr_capture_same_process ERROR [ 64%]
capturer/tests.py::CapturerTestCase::test_stderr_capture_subprocess ERROR [ 71%]
capturer/tests.py::CapturerTestCase::test_stderr_capture_subprocess ERROR [ 71%]
capturer/tests.py::CapturerTestCase::test_stdout_capture_same_process ERROR [ 78%]
capturer/tests.py::CapturerTestCase::test_stdout_capture_same_process ERROR [ 78%]
capturer/tests.py::CapturerTestCase::test_stdout_capture_subprocess ERROR [ 85%]
capturer/tests.py::CapturerTestCase::test_stdout_capture_subprocess ERROR [ 85%]
capturer/tests.py::CapturerTestCase::test_text_capture ERROR             [ 92%]
capturer/tests.py::CapturerTestCase::test_text_capture ERROR             [ 92%]
capturer/tests.py::CapturerTestCase::test_unmerged_capture ERROR         [100%]
capturer/tests.py::CapturerTestCase::test_unmerged_capture ERROR         [100%]

==================================== ERRORS ====================================
___ ERROR at teardown of CapturerTestCase.test_combined_capture_same_process ___

self = <contextlib._GeneratorContextManager object at 0x7f953bc731d0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____ ERROR at setup of CapturerTestCase.test_combined_capture_subprocess ______

self = <contextlib._GeneratorContextManager object at 0x7f953b455860>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
____ ERROR at teardown of CapturerTestCase.test_combined_capture_subprocess ____

self = <contextlib._GeneratorContextManager object at 0x7f953b435e90>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___ ERROR at setup of CapturerTestCase.test_combined_current_and_subprocess ____

self = <contextlib._GeneratorContextManager object at 0x7f953b5d6170>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
__ ERROR at teardown of CapturerTestCase.test_combined_current_and_subprocess __

self = <contextlib._GeneratorContextManager object at 0x7f953c232450>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
____________ ERROR at setup of CapturerTestCase.test_error_handling ____________

self = <contextlib._GeneratorContextManager object at 0x7f953b4028d0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
__________ ERROR at teardown of CapturerTestCase.test_error_handling ___________

self = <contextlib._GeneratorContextManager object at 0x7f953b21a7b0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
____ ERROR at setup of CapturerTestCase.test_non_interpreted_lines_capture _____

self = <contextlib._GeneratorContextManager object at 0x7f953b21a890>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___ ERROR at teardown of CapturerTestCase.test_non_interpreted_lines_capture ___

self = <contextlib._GeneratorContextManager object at 0x7f953b21a9e0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____________ ERROR at setup of CapturerTestCase.test_partial_read _____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21a970>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___________ ERROR at teardown of CapturerTestCase.test_partial_read ____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21aba0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____________ ERROR at setup of CapturerTestCase.test_save_to_path _____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21a5f0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___________ ERROR at teardown of CapturerTestCase.test_save_to_path ____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21ad60>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____ ERROR at setup of CapturerTestCase.test_stderr_capture_same_process ______

self = <contextlib._GeneratorContextManager object at 0x7f953b21a6d0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
____ ERROR at teardown of CapturerTestCase.test_stderr_capture_same_process ____

self = <contextlib._GeneratorContextManager object at 0x7f953b21b000>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
______ ERROR at setup of CapturerTestCase.test_stderr_capture_subprocess _______

self = <contextlib._GeneratorContextManager object at 0x7f953b21b150>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____ ERROR at teardown of CapturerTestCase.test_stderr_capture_subprocess _____

self = <contextlib._GeneratorContextManager object at 0x7f953b21b2a0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____ ERROR at setup of CapturerTestCase.test_stdout_capture_same_process ______

self = <contextlib._GeneratorContextManager object at 0x7f953b21b3f0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
____ ERROR at teardown of CapturerTestCase.test_stdout_capture_same_process ____

self = <contextlib._GeneratorContextManager object at 0x7f953b21b540>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
______ ERROR at setup of CapturerTestCase.test_stdout_capture_subprocess _______

self = <contextlib._GeneratorContextManager object at 0x7f953b21af90>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____ ERROR at teardown of CapturerTestCase.test_stdout_capture_subprocess _____

self = <contextlib._GeneratorContextManager object at 0x7f953b21b930>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_____________ ERROR at setup of CapturerTestCase.test_text_capture _____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21b9a0>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___________ ERROR at teardown of CapturerTestCase.test_text_capture ____________

self = <contextlib._GeneratorContextManager object at 0x7f953b21b770>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
___________ ERROR at setup of CapturerTestCase.test_unmerged_capture ___________

self = <contextlib._GeneratorContextManager object at 0x7f953b21bc40>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
_________ ERROR at teardown of CapturerTestCase.test_unmerged_capture __________

self = <contextlib._GeneratorContextManager object at 0x7f953b21be70>
typ = None, value = None, traceback = None

    def __exit__(self, typ, value, traceback):
        if typ is None:
            try:
>               next(self.gen)
E               OSError: [Errno 29] Illegal seek

/usr/lib64/python3.14/contextlib.py:148: OSError
=================================== FAILURES ===================================
_____________ CapturerTestCase.test_combined_capture_same_process ______________

self = <capturer.tests.CapturerTestCase testMethod=test_combined_capture_same_process>

    def test_combined_capture_same_process(self):
        """Test combined standard output and error capturing from the same process."""
        expected_stdout = random_string()
        expected_stderr = random_string()
>       with CaptureOutput() as capturer:

capturer/tests.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
capturer/__init__.py:276: in __enter__
    self.start_capture()
capturer/__init__.py:328: in start_capture
    pseudo_terminal.start_capture()
capturer/__init__.py:487: in start_capture
    self.start_child(self.capture_loop)
capturer/__init__.py:153: in start_child
    child_process.start()
/usr/lib64/python3.14/multiprocessing/process.py:121: in start
    self._popen = self._Popen(self)
/usr/lib64/python3.14/multiprocessing/context.py:224: in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
/usr/lib64/python3.14/multiprocessing/context.py:300: in _Popen
    return Popen(process_obj)
/usr/lib64/python3.14/multiprocessing/popen_forkserver.py:35: in __init__
    super().__init__(process_obj)
/usr/lib64/python3.14/multiprocessing/popen_fork.py:20: in __init__
    self._launch(process_obj)
/usr/lib64/python3.14/multiprocessing/popen_forkserver.py:47: in _launch
    reduction.dump(process_obj, buf)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

obj = <Process name='Process-1' parent=198 initial daemon>
file = <_io.BytesIO object at 0x7f953b5ff600>, protocol = None

    def dump(obj, file, protocol=None):
        '''Replacement for pickle.dump() using ForkingPickler.'''
>       ForkingPickler(file, protocol).dump(obj)
E       TypeError: cannot pickle 'BufferedReader' instances
E       when serializing dict item 'output_handle'
E       when serializing capturer.PseudoTerminal state
E       when serializing capturer.PseudoTerminal object
E       when serializing tuple item 0
E       when serializing method reconstructor arguments
E       when serializing method object
E       when serializing dict item '_target'
E       when serializing multiprocessing.context.Process state
E       when serializing multiprocessing.context.Process object

/usr/lib64/python3.14/multiprocessing/reduction.py:60: TypeError
=========================== short test summary info ============================
FAILED capturer/tests.py::CapturerTestCase::test_combined_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_combined_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_combined_capture_subprocess
ERROR capturer/tests.py::CapturerTestCase::test_combined_capture_subprocess
ERROR capturer/tests.py::CapturerTestCase::test_combined_current_and_subprocess
ERROR capturer/tests.py::CapturerTestCase::test_combined_current_and_subprocess
ERROR capturer/tests.py::CapturerTestCase::test_error_handling - OSError: [Er...
ERROR capturer/tests.py::CapturerTestCase::test_error_handling - OSError: [Er...
ERROR capturer/tests.py::CapturerTestCase::test_non_interpreted_lines_capture
ERROR capturer/tests.py::CapturerTestCase::test_non_interpreted_lines_capture
ERROR capturer/tests.py::CapturerTestCase::test_partial_read - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_partial_read - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_save_to_path - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_save_to_path - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_stderr_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_stderr_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_stderr_capture_subprocess - O...
ERROR capturer/tests.py::CapturerTestCase::test_stderr_capture_subprocess - O...
ERROR capturer/tests.py::CapturerTestCase::test_stdout_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_stdout_capture_same_process
ERROR capturer/tests.py::CapturerTestCase::test_stdout_capture_subprocess - O...
ERROR capturer/tests.py::CapturerTestCase::test_stdout_capture_subprocess - O...
ERROR capturer/tests.py::CapturerTestCase::test_text_capture - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_text_capture - OSError: [Errn...
ERROR capturer/tests.py::CapturerTestCase::test_unmerged_capture - OSError: [...
ERROR capturer/tests.py::CapturerTestCase::test_unmerged_capture - OSError: [...
==================== 1 failed, 1 passed, 25 errors in 0.16s ====================
Traceback (most recent call last):
  File "/usr/bin/py.test-3.14", line 8, in <module>
    sys.exit(console_main())
             ~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/config/__init__.py", line 201, in console_main
    code = main()
  File "/usr/lib/python3.14/site-packages/_pytest/config/__init__.py", line 175, in main
    ret: ExitCode | int = config.hook.pytest_cmdline_main(config=config)
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/pluggy/_hooks.py", line 512, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/pluggy/_callers.py", line 167, in _multicall
    raise exception
  File "/usr/lib/python3.14/site-packages/pluggy/_callers.py", line 121, in _multicall
    res = hook_impl.function(*args)
  File "/usr/lib/python3.14/site-packages/_pytest/main.py", line 330, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "/usr/lib/python3.14/site-packages/_pytest/main.py", line 325, in wrap_session
    config._ensure_unconfigure()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/config/__init__.py", line 1127, in _ensure_unconfigure
    fin()
    ~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/capture.py", line 776, in stop_global_capturing
    self._global_capturing.pop_outerr_to_orig()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/capture.py", line 657, in pop_outerr_to_orig
    out, err = self.readouterr()
               ~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/capture.py", line 704, in readouterr
    out = self.out.snap() if self.out else ""
          ~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/_pytest/capture.py", line 589, in snap
    self.tmpfile.seek(0)
    ~~~~~~~~~~~~~~~~~^^^
OSError: [Errno 29] Illegal seek

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions