papermill icon indicating copy to clipboard operation
papermill copied to clipboard

Add support for Python 3.14

Open willingc opened this issue 2 months ago • 1 comments

🚀 Feature

Support Python 3.14.

willingc avatar Nov 13 '25 22:11 willingc

Test results on Python 3.14

_________________________________________ TestBrokenNotebook1.test __________________________________________

self = <papermill.tests.test_execute.TestBrokenNotebook1 testMethod=test>

    def test(self):
        path = get_notebook_path('broken1.ipynb')
    
        # check that the notebook has two existing marker cells, so that this test is sure to be
        # validating the removal logic (the markers are simulating an error in the first code cell
        # that has since been fixed)
        original_nb = load_notebook_node(path)
        self.assertEqual(original_nb.cells[0].metadata["tags"], ["papermill-error-cell-tag"])
        self.assertIn("In [1]", original_nb.cells[0].source)
        self.assertEqual(original_nb.cells[2].metadata["tags"], ["papermill-error-cell-tag"])
    
        result_path = os.path.join(self.test_dir, 'broken1.ipynb')
        with self.assertRaises(PapermillExecutionError):
            execute_notebook(path, result_path)
        nb = load_notebook_node(result_path)
        self.assertEqual(nb.cells[0].cell_type, "markdown")
        self.assertRegex(nb.cells[0].source, r'^<span .*<a href="#papermill-error-cell".*In \[2\].*</span>$')
        self.assertEqual(nb.cells[0].metadata["tags"], ["papermill-error-cell-tag"])
    
        self.assertEqual(nb.cells[1].cell_type, "markdown")
        self.assertEqual(nb.cells[2].execution_count, 1)
        self.assertEqual(nb.cells[3].cell_type, "markdown")
        self.assertEqual(nb.cells[4].cell_type, "markdown")
    
        self.assertEqual(nb.cells[5].cell_type, "markdown")
        self.assertRegex(nb.cells[5].source, '<span id="papermill-error-cell" .*</span>')
        self.assertEqual(nb.cells[5].metadata["tags"], ["papermill-error-cell-tag"])
        self.assertEqual(nb.cells[6].execution_count, 2)
>       self.assertEqual(nb.cells[6].outputs[0].output_type, 'error')
E       AssertionError: 'stream' != 'error'
E       - stream
E       + error

papermill/tests/test_execute.py:162: AssertionError
------------------------------------------- Captured stderr call --------------------------------------------
Executing:  83%|██████████████████████████████████████████████████          | 5/6 [00:00<00:00,  6.60cell/s]
============================================= warnings summary ==============================================
papermill/tests/test_iorw.py::TestPapermillIO::test_read
papermill/tests/test_iorw.py::TestPapermillIO::test_write
  /Users/willingc/Code/repos-nteract/papermill/papermill/iorw.py:149: UserWarning: the file is not specified with any extension : path
    warnings.warn(f"the file is not specified with any extension : {os.path.basename(path)}")

papermill/tests/test_iorw.py::TestPapermillIO::test_read_stdin
papermill/tests/test_iorw.py::TestPapermillIO::test_write_stdout
  /Users/willingc/Code/repos-nteract/papermill/papermill/iorw.py:149: UserWarning: the file is not specified with any extension : -
    warnings.warn(f"the file is not specified with any extension : {os.path.basename(path)}")

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================== tests coverage ===============================================
_____________________________ coverage: platform darwin, python 3.14.0-final-0 ______________________________

Name                        Stmts   Miss  Cover
-----------------------------------------------
papermill/__init__.py           4      0   100%
papermill/__main__.py           1      1     0%
papermill/abs.py               33      0   100%
papermill/adl.py               34      0   100%
papermill/cli.py              116      4    97%
papermill/clientwrap.py        55      5    91%
papermill/engines.py          191      8    96%
papermill/exceptions.py        36      6    83%
papermill/execute.py           83      0   100%
papermill/inspection.py        57      0   100%
papermill/iorw.py             344     67    81%
papermill/log.py                2      0   100%
papermill/models.py             2      0   100%
papermill/parameterize.py      49      1    98%
papermill/s3.py               197     43    78%
papermill/translators.py      368      8    98%
papermill/utils.py             63      3    95%
-----------------------------------------------
TOTAL                        1635    146    91%
========================================== short test summary info ==========================================
FAILED papermill/tests/test_execute.py::TestBrokenNotebook1::test - AssertionError: 'stream' != 'error'
================================ 1 failed, 546 passed, 4 warnings in 54.76s =================================
py314: exit 1 (56.51 seconds) /Users/willingc/Code/repos-nteract/papermill> pytest -v --maxfail=2 --cov=papermill -W always pid=19907
  py314: FAIL code 1 (83.98=setup[27.47]+cmd[56.51] seconds)
  evaluation failed :( (84.02 seconds)

willingc avatar Nov 14 '25 04:11 willingc