Package: src:python-papermill Version: 2.6.0-5 Severity: serious Tags: ftbfs forky sid
Dear maintainer: During a rebuild of all packages in unstable, this package failed to build. Below you will find the last part of the build log (probably the most relevant part, but not necessarily). If required, the full build log is available here: https://people.debian.org/~sanvila/build-logs/202603/ About the archive rebuild: The build was made on virtual machines from AWS, using sbuild and a reduced chroot with only build-essential packages. If you cannot reproduce the bug please contact me privately, as I am willing to provide ssh access to a virtual machine where the bug is fully reproducible. If this is really a bug in one of the build-depends, please use reassign and add an affects on src:python-papermill, so that this is still visible in the BTS web page for this package. Thanks. -------------------------------------------------------------------------------- [...] debian/rules clean dh clean --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary dh binary --buildsystem=pybuild dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild dh_auto_build -O--buildsystem=pybuild I: pybuild plugin_pyproject:142: Building wheel for python3.14 with "build" module I: pybuild base:384: python3.14 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14 * Building wheel... /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. [... snipped ...] tests/test_translators.py::test_translate_codify_fsharp[parameters3-(* Parameters *)\nlet foo = 1.1\n] PASSED [ 82%] tests/test_translators.py::test_translate_codify_fsharp[parameters4-(* Parameters *)\nlet foo = [ "bar"; "baz" ]\n] PASSED [ 82%] tests/test_translators.py::test_translate_codify_fsharp[parameters5-(* Parameters *)\nlet foo = [ ("bar", "baz" :> IComparable) ] |> Map.ofList\n] PASSED [ 82%] tests/test_translators.py::test_translate_type_julia[foo-"foo"] PASSED [ 82%] tests/test_translators.py::test_translate_type_julia[{"foo": "bar"}-"{\\"foo\\": \\"bar\\"}"] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input2-Dict("foo" => "bar")] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input3-Dict("foo" => "\\"bar\\"")] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input4-Dict("foo" => ["bar"])] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input5-Dict("foo" => Dict("bar" => "baz"))] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input6-Dict("foo" => Dict("bar" => "\\"baz\\""))] PASSED [ 83%] tests/test_translators.py::test_translate_type_julia[test_input7-["foo"]] PASSED [ 84%] tests/test_translators.py::test_translate_type_julia[test_input8-["foo", "\\"bar\\""]] PASSED [ 84%] tests/test_translators.py::test_translate_type_julia[test_input9-[Dict("foo" => "bar")]] PASSED [ 84%] tests/test_translators.py::test_translate_type_julia[test_input10-[Dict("foo" => "\\"bar\\"")]] PASSED [ 84%] tests/test_translators.py::test_translate_type_julia[12345-12345] PASSED [ 84%] tests/test_translators.py::test_translate_type_julia[-54321--54321] PASSED [ 85%] tests/test_translators.py::test_translate_type_julia[1.2345-1.2345] PASSED [ 85%] tests/test_translators.py::test_translate_type_julia[-5432.1--5432.1] PASSED [ 85%] tests/test_translators.py::test_translate_type_julia[True-true] PASSED [ 85%] tests/test_translators.py::test_translate_type_julia[False-false] PASSED [ 85%] tests/test_translators.py::test_translate_type_julia[None-nothing] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters0-# Parameters\nfoo = "bar"\n] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters1-# Parameters\nfoo = true\n] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters2-# Parameters\nfoo = 5\n] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters3-# Parameters\nfoo = 1.1\n] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters4-# Parameters\nfoo = ["bar", "baz"]\n] PASSED [ 86%] tests/test_translators.py::test_translate_codify_julia[parameters5-# Parameters\nfoo = Dict("bar" => "baz")\n] PASSED [ 87%] tests/test_translators.py::test_translate_codify_julia[parameters6-# Parameters\nfoo = "bar"\nbaz = ["buz"]\n] PASSED [ 87%] tests/test_translators.py::test_translate_comment_julia[-#] PASSED [ 87%] tests/test_translators.py::test_translate_comment_julia[foo-# foo] PASSED [ 87%] tests/test_translators.py::test_translate_comment_julia[["best effort"]-# ["best effort"]] PASSED [ 87%] tests/test_translators.py::test_translate_type_matlab[foo-"foo"] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[{"foo": "bar"}-"{""foo"": ""bar""}"] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[test_input2-containers.Map({'1'}, {"foo"})] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[test_input3-containers.Map({'1.0'}, {"foo"})] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[test_input4-containers.Map({'None'}, {"foo"})] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[test_input5-containers.Map({'True'}, {"foo"})] PASSED [ 88%] tests/test_translators.py::test_translate_type_matlab[test_input6-containers.Map({'foo'}, {"bar"})] PASSED [ 89%] tests/test_translators.py::test_translate_type_matlab[test_input7-containers.Map({'foo'}, {"""bar"""})] PASSED [ 89%] tests/test_translators.py::test_translate_type_matlab[test_input8-containers.Map({'foo'}, {{"bar"}})] PASSED [ 89%] tests/test_translators.py::test_translate_type_matlab[test_input9-containers.Map({'foo'}, {containers.Map({'bar'}, {"baz"})})] PASSED [ 89%] tests/test_translators.py::test_translate_type_matlab[test_input10-containers.Map({'foo'}, {containers.Map({'bar'}, {"""baz"""})})] PASSED [ 89%] tests/test_translators.py::test_translate_type_matlab[test_input11-{"foo"}] PASSED [ 90%] tests/test_translators.py::test_translate_type_matlab[test_input12-{"foo", """bar"""}] PASSED [ 90%] tests/test_translators.py::test_translate_type_matlab[test_input13-{containers.Map({'foo'}, {"bar"})}] PASSED [ 90%] tests/test_translators.py::test_translate_type_matlab[test_input14-{containers.Map({'foo'}, {"""bar"""})}] PASSED [ 90%] tests/test_translators.py::test_translate_type_matlab[12345-12345] PASSED [ 90%] tests/test_translators.py::test_translate_type_matlab[-54321--54321] PASSED [ 91%] tests/test_translators.py::test_translate_type_matlab[1.2345-1.2345] PASSED [ 91%] tests/test_translators.py::test_translate_type_matlab[-5432.1--5432.1] PASSED [ 91%] tests/test_translators.py::test_translate_type_matlab[True-true] PASSED [ 91%] tests/test_translators.py::test_translate_type_matlab[False-false] PASSED [ 91%] tests/test_translators.py::test_translate_type_matlab[None-NaN] PASSED [ 91%] tests/test_translators.py::test_translate_codify_matlab[parameters0-% Parameters\nfoo = "bar";\n] PASSED [ 92%] tests/test_translators.py::test_translate_codify_matlab[parameters1-% Parameters\nfoo = true;\n] PASSED [ 92%] tests/test_translators.py::test_translate_codify_matlab[parameters2-% Parameters\nfoo = 5;\n] PASSED [ 92%] tests/test_translators.py::test_translate_codify_matlab[parameters3-% Parameters\nfoo = 1.1;\n] PASSED [ 92%] tests/test_translators.py::test_translate_codify_matlab[parameters4-% Parameters\nfoo = {"bar", "baz"};\n] PASSED [ 92%] tests/test_translators.py::test_translate_codify_matlab[parameters5-% Parameters\nfoo = containers.Map({'bar'}, {"baz"});\n] PASSED [ 93%] tests/test_translators.py::test_translate_codify_matlab[parameters6-% Parameters\nfoo = "bar";\nbaz = {"buz"};\n] PASSED [ 93%] tests/test_translators.py::test_translate_comment_matlab[-%] PASSED [ 93%] tests/test_translators.py::test_translate_comment_matlab[foo-% foo] PASSED [ 93%] tests/test_translators.py::test_translate_comment_matlab[['best effort']-% ['best effort']] PASSED [ 93%] tests/test_translators.py::test_find_translator_with_exact_kernel_name PASSED [ 94%] tests/test_translators.py::test_find_translator_with_exact_language PASSED [ 94%] tests/test_translators.py::test_find_translator_with_no_such_kernel_or_language PASSED [ 94%] tests/test_translators.py::test_translate_uses_str_representation_of_unknown_types PASSED [ 94%] tests/test_translators.py::test_translator_must_implement_translate_dict PASSED [ 94%] tests/test_translators.py::test_translator_must_implement_translate_list PASSED [ 94%] tests/test_translators.py::test_translator_must_implement_comment PASSED [ 95%] tests/test_translators.py::test_translate_type_sh[foo-foo] PASSED [ 95%] tests/test_translators.py::test_translate_type_sh[foo space-'foo space'] PASSED [ 95%] tests/test_translators.py::test_translate_type_sh[foo's apostrophe-'foo'"'"'s apostrophe'] PASSED [ 95%] tests/test_translators.py::test_translate_type_sh[shell ( is ) <dumb>-'shell ( is ) <dumb>'] PASSED [ 95%] tests/test_translators.py::test_translate_type_sh[12345-12345] PASSED [ 96%] tests/test_translators.py::test_translate_type_sh[-54321--54321] PASSED [ 96%] tests/test_translators.py::test_translate_type_sh[1.2345-1.2345] PASSED [ 96%] tests/test_translators.py::test_translate_type_sh[-5432.1--5432.1] PASSED [ 96%] tests/test_translators.py::test_translate_type_sh[True-true] PASSED [ 96%] tests/test_translators.py::test_translate_type_sh[False-false] PASSED [ 97%] tests/test_translators.py::test_translate_type_sh[None-] PASSED [ 97%] tests/test_translators.py::test_translate_comment_sh[-#] PASSED [ 97%] tests/test_translators.py::test_translate_comment_sh[foo-# foo] PASSED [ 97%] tests/test_translators.py::test_translate_comment_sh[['best effort']-# ['best effort']] PASSED [ 97%] tests/test_translators.py::test_translate_codify_sh[parameters0-# Parameters\nfoo=bar\n] PASSED [ 97%] tests/test_translators.py::test_translate_codify_sh[parameters1-# Parameters\nfoo='shell ( is ) <dumb>'\n] PASSED [ 98%] tests/test_translators.py::test_translate_codify_sh[parameters2-# Parameters\nfoo=true\n] PASSED [ 98%] tests/test_translators.py::test_translate_codify_sh[parameters3-# Parameters\nfoo=5\n] PASSED [ 98%] tests/test_translators.py::test_translate_codify_sh[parameters4-# Parameters\nfoo=1.1\n] PASSED [ 98%] tests/test_translators.py::test_translate_codify_sh[parameters5-# Parameters\nfoo=bar\nbaz='$dumb(shell)'\n] PASSED [ 98%] tests/test_utils.py::test_no_tagged_cell PASSED [ 99%] tests/test_utils.py::test_tagged_cell PASSED [ 99%] tests/test_utils.py::test_merge_kwargs PASSED [ 99%] tests/test_utils.py::test_remove_args PASSED [ 99%] tests/test_utils.py::test_retry PASSED [ 99%] tests/test_utils.py::test_chdir PASSED [100%] =================================== FAILURES =================================== ___________________________ TestBrokenNotebook2.test ___________________________ self = <tests.test_execute.TestBrokenNotebook2 testMethod=test> def test(self): path = get_notebook_path('broken2.ipynb') result_path = os.path.join(self.test_dir, 'broken2.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[1].execution_count, 1) self.assertEqual(nb.cells[2].cell_type, "markdown") self.assertRegex(nb.cells[2].source, '<span id="papermill-error-cell" .*</span>') self.assertEqual(nb.cells[3].execution_count, 2) > self.assertEqual(nb.cells[3].outputs[0].output_type, 'display_data') E AssertionError: 'error' != 'display_data' E - error E + display_data tests/test_execute.py:191: AssertionError ----------------------------- Captured stderr call ----------------------------- Executing: 0%| | 0/3 [00:00<?, ?cell/s] Executing: 33%|ââââ | 1/3 [00:00<00:01, 1.74cell/s] Executing: 67%|âââââââ | 2/3 [00:00<00:00, 2.26cell/s] _________________ TestOutputFormatting.test_output_formatting __________________ self = <tests.test_execute.TestOutputFormatting testMethod=test_output_formatting> def test_output_formatting(self): notebook_name = 'sysexit1.ipynb' result_path = os.path.join(self.test_dir, f'output_{notebook_name}') try: > execute_notebook(get_notebook_path(notebook_name), result_path) tests/test_execute.py:446: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ papermill/execute.py:131: in execute_notebook raise_for_execution_errors(nb, output_path) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nb = {'cells': [{'id': '96952347', 'cell_type': 'markdown', 'source': '<span style="color:red; font-family:Helvetica Neue, ...end_time': '2026-03-05T20:38:48.237966', 'duration': 4.017985, 'exception': True}}, 'nbformat': 4, 'nbformat_minor': 5} output_path = '/tmp/tmp6qa6iy4j/output_sysexit1.ipynb' def raise_for_execution_errors(nb, output_path): """Assigned parameters into the appropriate place in the input notebook Parameters ---------- nb : NotebookNode Executable notebook object output_path : str Path to write executed notebook """ error = None for index, cell in enumerate(nb.cells): has_sys_exit = False # check if there is any cell error output if "outputs" in cell: for output in cell.outputs: if output.output_type == "error": if output.ename == "SystemExit" and (output.evalue == "" or output.evalue == "0"): has_sys_exit = True continue error = PapermillExecutionError( cell_index=index, exec_count=cell.execution_count, source=cell.source, ename=output.ename, evalue=output.evalue, traceback=output.traceback, ) break # handle the CellExecutionError exceptions raised that didn't produce a cell error output if ( error is None and not has_sys_exit and cell.get("metadata", {}).get("papermill", {}).get("exception") is True ): error = PapermillExecutionError( cell_index=index, exec_count=cell.execution_count, source=cell.source, ename="CellExecutionError", evalue="", traceback=[], ) break if error: # Write notebook back out with the Error Message at the top of the Notebook, and a link to # the relevant cell (by adding a note just before the failure with an HTML anchor) error_msg = ERROR_MESSAGE_TEMPLATE % str(error.exec_count) error_msg_cell = nbformat.v4.new_markdown_cell(error_msg) error_msg_cell.metadata['tags'] = [ERROR_MARKER_TAG] error_anchor_cell = nbformat.v4.new_markdown_cell(ERROR_ANCHOR_MSG) error_anchor_cell.metadata['tags'] = [ERROR_MARKER_TAG] # Upgrade the Notebook to the latest v4 before writing into it nb = nbformat.v4.upgrade(nb) # put the anchor before the cell with the error, before all the indices change due to the # heading-prepending nb.cells.insert(error.cell_index, error_anchor_cell) nb.cells.insert(0, error_msg_cell) write_ipynb(nb, output_path) > raise error E papermill.exceptions.PapermillExecutionError: E --------------------------------------------------------------------------- E Exception encountered at "In [2]": E An exception has occurred, use %tb to see the full traceback. E E SystemExit: 1 papermill/execute.py:251: PapermillExecutionError During handling of the above exception, another exception occurred: self = <tests.test_execute.TestOutputFormatting testMethod=test_output_formatting> def test_output_formatting(self): notebook_name = 'sysexit1.ipynb' result_path = os.path.join(self.test_dir, f'output_{notebook_name}') try: execute_notebook(get_notebook_path(notebook_name), result_path) # exception should be thrown by now self.assertFalse(True) except PapermillExecutionError as ex: > self.assertEqual(ex.traceback[1], > "\x1b[0;31mSystemExit\x1b[0m\x1b[0;31m:\x1b[0m 1\n") E AssertionError: '\x1b[31mSystemExit\x1b[39m\x1b[31m:\x1b[39m 1\n' != '\x1b[0;31mSystemExit\x1b[0m\x1b[0;31m:\x1b[0m 1\n' E - [31mSystemExit[39m[31m:[39m 1 E ? ^^ ^^ E + [0;31mSystemExit[0m[0;31m:[0m 1 E ? ++ ^ ++ ^ tests/test_execute.py:450: AssertionError ----------------------------- Captured stderr call ----------------------------- Executing: 0%| | 0/3 [00:00<?, ?cell/s] Executing: 33%|ââââ | 1/3 [00:00<00:01, 1.64cell/s] Executing: 67%|âââââââ | 2/3 [00:04<00:02, 2.01s/cell] =============================== warnings summary =============================== tests/test_autosave.py: 43 warnings tests/test_clientwrap.py: 3 warnings tests/test_engines.py: 123 warnings tests/test_execute.py: 523 warnings /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/papermill/engines.py:125: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). return datetime.datetime.utcnow() tests/test_autosave.py: 2 warnings tests/test_execute.py: 27 warnings tests/test_inspect.py: 9 warnings tests/test_parameterize.py: 6 warnings /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/papermill/parameterize.py:26: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). "current_datetime_utc": datetime.utcnow(), tests/test_iorw.py::TestPapermillIO::test_read tests/test_iorw.py::TestPapermillIO::test_write /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/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)}") tests/test_iorw.py::TestPapermillIO::test_read_stdin tests/test_iorw.py::TestPapermillIO::test_write_stdout /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/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 =========================== short test summary info ============================ FAILED tests/test_execute.py::TestBrokenNotebook2::test - AssertionError: 'er... FAILED tests/test_execute.py::TestOutputFormatting::test_output_formatting - ... ==== 2 failed, 531 passed, 3 skipped, 11 deselected, 740 warnings in 52.87s ==== E: pybuild pybuild:483: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest --verbose -k "not GCSTest" --deselect tests/test_adl.py::ADLTest::test_create_adapter dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14 3.13" returned exit code 13 make: *** [debian/rules:8: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess failed with exit status 2 --------------------------------------------------------------------------------

