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           - SystemExit: 1
E           ?                  ^^         ^^
E           + SystemExit: 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
--------------------------------------------------------------------------------

Reply via email to