Skip to content

Commit ea48f00

Browse files
committed
fix: update remaining test assertions for Python 3.14 compatibility
- Add 3.14 to USING_COVERAGE in CI workflow - Fix 5 additional output type assertions in TestSysExit and TestOutputFormatting that also use hard-coded output indices - Use next() to find error outputs by type when accessing ename/evalue
1 parent a5e0e56 commit ea48f00

2 files changed

Lines changed: 25 additions & 12 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
name: "Python ${{ matrix.python-version }}"
1313
runs-on: "ubuntu-latest"
1414
env:
15-
USING_COVERAGE: '3.10,3.11,3.12,3.13'
15+
USING_COVERAGE: '3.10,3.11,3.12,3.13,3.14'
1616

1717
strategy:
1818
fail-fast: false

papermill/tests/test_execute.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,12 @@ def test_sys_exit(self):
283283
self.assertEqual(nb.cells[0].cell_type, "code")
284284
self.assertEqual(nb.cells[0].execution_count, 1)
285285
self.assertEqual(nb.cells[1].execution_count, 2)
286-
self.assertEqual(nb.cells[1].outputs[0].output_type, 'error')
287-
self.assertEqual(nb.cells[1].outputs[0].ename, 'SystemExit')
288-
self.assertEqual(nb.cells[1].outputs[0].evalue, '')
286+
# Python 3.14+ may emit a stderr stream before the error output
287+
output_types = [o.output_type for o in nb.cells[1].outputs]
288+
self.assertIn('error', output_types)
289+
error_output = next(o for o in nb.cells[1].outputs if o.output_type == 'error')
290+
self.assertEqual(error_output.ename, 'SystemExit')
291+
self.assertEqual(error_output.evalue, '')
289292
self.assertEqual(nb.cells[2].execution_count, None)
290293

291294
def test_sys_exit0(self):
@@ -296,9 +299,12 @@ def test_sys_exit0(self):
296299
self.assertEqual(nb.cells[0].cell_type, "code")
297300
self.assertEqual(nb.cells[0].execution_count, 1)
298301
self.assertEqual(nb.cells[1].execution_count, 2)
299-
self.assertEqual(nb.cells[1].outputs[0].output_type, 'error')
300-
self.assertEqual(nb.cells[1].outputs[0].ename, 'SystemExit')
301-
self.assertEqual(nb.cells[1].outputs[0].evalue, '0')
302+
# Python 3.14+ may emit a stderr stream before the error output
303+
output_types = [o.output_type for o in nb.cells[1].outputs]
304+
self.assertIn('error', output_types)
305+
error_output = next(o for o in nb.cells[1].outputs if o.output_type == 'error')
306+
self.assertEqual(error_output.ename, 'SystemExit')
307+
self.assertEqual(error_output.evalue, '0')
302308
self.assertEqual(nb.cells[2].execution_count, None)
303309

304310
def test_sys_exit1(self):
@@ -314,7 +320,9 @@ def test_sys_exit1(self):
314320
self.assertEqual(nb.cells[2].cell_type, "markdown")
315321
self.assertRegex(nb.cells[2].source, '<span id="papermill-error-cell" .*</span>')
316322
self.assertEqual(nb.cells[3].execution_count, 2)
317-
self.assertEqual(nb.cells[3].outputs[0].output_type, 'error')
323+
# Python 3.14+ may emit a stderr stream before the error output
324+
output_types = [o.output_type for o in nb.cells[3].outputs]
325+
self.assertIn('error', output_types)
318326

319327
self.assertEqual(nb.cells[4].execution_count, None)
320328

@@ -326,9 +334,12 @@ def test_system_exit(self):
326334
self.assertEqual(nb.cells[0].cell_type, "code")
327335
self.assertEqual(nb.cells[0].execution_count, 1)
328336
self.assertEqual(nb.cells[1].execution_count, 2)
329-
self.assertEqual(nb.cells[1].outputs[0].output_type, 'error')
330-
self.assertEqual(nb.cells[1].outputs[0].ename, 'SystemExit')
331-
self.assertEqual(nb.cells[1].outputs[0].evalue, '')
337+
# Python 3.14+ may emit a stderr stream before the error output
338+
output_types = [o.output_type for o in nb.cells[1].outputs]
339+
self.assertIn('error', output_types)
340+
error_output = next(o for o in nb.cells[1].outputs if o.output_type == 'error')
341+
self.assertEqual(error_output.ename, 'SystemExit')
342+
self.assertEqual(error_output.evalue, '')
332343
self.assertEqual(nb.cells[2].execution_count, None)
333344

334345
def test_line_magic_error(self):
@@ -460,6 +471,8 @@ def test_output_formatting(self):
460471
self.assertEqual(nb.cells[2].cell_type, "markdown")
461472
self.assertRegex(nb.cells[2].source, '<span id="papermill-error-cell" .*</span>')
462473
self.assertEqual(nb.cells[3].execution_count, 2)
463-
self.assertEqual(nb.cells[3].outputs[0].output_type, 'error')
474+
# Python 3.14+ may emit a stderr stream before the error output
475+
output_types = [o.output_type for o in nb.cells[3].outputs]
476+
self.assertIn('error', output_types)
464477

465478
self.assertEqual(nb.cells[4].execution_count, None)

0 commit comments

Comments
 (0)