--- Begin Message ---
Source: rich
Version: 13.7.1-1
Severity: normal
User: debian-pyt...@lists.debian.org
Usertags: python3.13
Forwarded: https://github.com/Textualize/rich/pull/3229
This package failed build from source when test-built against a version of
python3-defaults that includes 3.13 as a supported version.
To reproduce this issue, build against python3-defaults (python3-all-dev etc.)
from Debian experimental.
What's new in Python 3.13:
https://docs.python.org/3.13/whatsnew/3.13.html
I think upstream has dealt with these in newer releases.
https://github.com/Textualize/rich/issues?q=3.13
Log snippet:
debian/rules override_dh_auto_test
make[1]: Entering directory '/<<PKGBUILDDIR>>'
PYBUILD_SYSTEM=custom PYBUILD_TEST_ARGS="PYTHONPATH=/<<PKGBUILDDIR>>
{interpreter} -m pytest" dh_auto_test
I: pybuild base:311: PYTHONPATH=/<<PKGBUILDDIR>> python3.13 -m pytest
============================= test session starts ==============================
platform linux -- Python 3.13.0rc2, pytest-8.3.3, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>
configfile: pyproject.toml
testpaths: tests
plugins: typeguard-4.3.0
collected 826 items
tests/test_align.py ................ [ 1%]
tests/test_ansi.py ....... [ 2%]
tests/test_bar.py ....... [ 3%]
tests/test_block_bar.py .... [ 4%]
tests/test_box.py ...... [ 4%]
tests/test_card.py . [ 4%]
tests/test_cells.py ....... [ 5%]
tests/test_color.py ................. [ 7%]
tests/test_color_triplet.py ... [ 8%]
tests/test_columns.py . [ 8%]
tests/test_columns_align.py . [ 8%]
tests/test_console.py .................................................. [ 14%]
.............................................. [ 20%]
tests/test_constrain.py . [ 20%]
tests/test_containers.py .... [ 20%]
tests/test_control.py ....... [ 21%]
tests/test_emoji.py ...... [ 22%]
tests/test_file_proxy.py ... [ 22%]
tests/test_filesize.py .. [ 22%]
tests/test_getfileno.py ... [ 23%]
tests/test_highlighter.py .............................................. [ 28%]
.................................... [ 33%]
tests/test_inspect.py ...F....FFF.................................. [ 38%]
tests/test_json.py . [ 38%]
tests/test_jupyter.py ... [ 39%]
tests/test_layout.py ...... [ 39%]
tests/test_live.py .......... [ 41%]
tests/test_live_render.py .... [ 41%]
tests/test_log.py ... [ 41%]
tests/test_logging.py .... [ 42%]
tests/test_markdown.py ...... [ 43%]
tests/test_markdown_no_hyperlinks.py . [ 43%]
tests/test_markup.py ..................... [ 45%]
tests/test_measure.py .... [ 46%]
tests/test_null_file.py . [ 46%]
tests/test_padding.py ..... [ 46%]
tests/test_palette.py . [ 47%]
tests/test_panel.py .......... [ 48%]
tests/test_pick.py . [ 48%]
tests/test_pretty.py ........F.............F.....F..............FF..... [ 54%]
tests/test_progress.py ...................................... [ 59%]
tests/test_prompt.py ...... [ 59%]
tests/test_protocol.py ...... [ 60%]
tests/test_ratio.py ....... [ 61%]
tests/test_repr.py ........ [ 62%]
tests/test_rich_print.py ....... [ 63%]
tests/test_rule.py ................ [ 65%]
tests/test_rule_in_table.py .... [ 65%]
tests/test_screen.py . [ 65%]
tests/test_segment.py ................................................. [ 71%]
tests/test_spinner.py ..... [ 72%]
tests/test_stack.py . [ 72%]
tests/test_status.py .. [ 72%]
tests/test_style.py .......................... [ 75%]
tests/test_styled.py . [ 75%]
tests/test_syntax.py ....................... [ 78%]
tests/test_table.py ............... [ 80%]
tests/test_text.py ..................................................... [ 86%]
...................................................... [ 93%]
tests/test_theme.py ..... [ 94%]
tests/test_tools.py .... [ 94%]
tests/test_traceback.py ................... [ 96%]
tests/test_tree.py .....s.s. [ 97%]
tests/test_windows_renderer.py sssssssssssssssss [100%]
=================================== FAILURES ===================================
________________ test_inspect_builtin_function_except_python311 ________________
@skip_py312
@skip_py311
@skip_pypy3
def test_inspect_builtin_function_except_python311():
# Pre-3.11 Python versions - print builtin has no signature available
expected = (
"╭────────── <built-in function print> ───────────╮\n"
"│ def print(...) │\n"
"│ │\n"
"│ print(value, ..., sep=' ', end='\\n', │\n"
"│ file=sys.stdout, flush=False) │\n"
"│ │\n"
"│ 29 attribute(s) not shown. Run │\n"
"│ inspect(inspect) for options. │\n"
"╰────────────────────────────────────────────────╯\n"
)
> assert render(print) == expected
E AssertionError: assert '╭────────── ...──────────╯\n' == '╭──────────
...──────────╯\n'
E
E Skipping 53 identical leading characters in diff, use -v to show
E - def print(...) │
E + def print(*args, sep=' ', end='\n', file=None, │
E + │ flush=False): │
E │ │
E - │ print(value, ..., sep=' ', end='\n', │...
E
E ...Full output truncated (10 lines hidden), use '-vv' to show
tests/test_inspect.py:159: AssertionError
___________ test_inspect_integer_with_methods_python38_and_python39 ____________
@skip_py37
@skip_py310
@skip_py311
@skip_py312
def test_inspect_integer_with_methods_python38_and_python39():
expected = (
"╭──────────────── <class 'int'> ─────────────────╮\n"
"│ int([x]) -> integer │\n"
"│ int(x, base=10) -> integer │\n"
"│ │\n"
"│ denominator = 1 │\n"
"│ imag = 0 │\n"
"│ numerator = 1 │\n"
"│ real = 1 │\n"
"│ as_integer_ratio = def as_integer_ratio(): │\n"
"│ Return integer ratio. │\n"
"│ bit_length = def bit_length(): Number of │\n"
"│ bits necessary to represent │\n"
"│ self in binary. │\n"
"│ conjugate = def conjugate(...) Returns │\n"
"│ self, the complex conjugate │\n"
"│ of any int. │\n"
"│ from_bytes = def from_bytes(bytes, │\n"
"│ byteorder, *, │\n"
"│ signed=False): Return the │\n"
"│ integer represented by the │\n"
"│ given array of bytes. │\n"
"│ to_bytes = def to_bytes(length, │\n"
"│ byteorder, *, │\n"
"│ signed=False): Return an │\n"
"│ array of bytes representing │\n"
"│ an integer. │\n"
"╰────────────────────────────────────────────────╯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert '╭───────────...──────────╯\n' ==
'╭───────────...──────────╯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. │
E + Return a pair of integers, │
E + │ whose ratio is equal to the │
E + │ original int. │
E + │ bit_count = def bit_count(): Number of │...
E
E ...Full output truncated (36 lines hidden), use '-vv' to show
tests/test_inspect.py:252: AssertionError
_______________ test_inspect_integer_with_methods_python310only ________________
@skip_py37
@skip_py38
@skip_py39
@skip_py311
@skip_py312
def test_inspect_integer_with_methods_python310only():
expected = (
"╭──────────────── <class 'int'> ─────────────────╮\n"
"│ int([x]) -> integer │\n"
"│ int(x, base=10) -> integer │\n"
"│ │\n"
"│ denominator = 1 │\n"
"│ imag = 0 │\n"
"│ numerator = 1 │\n"
"│ real = 1 │\n"
"│ as_integer_ratio = def as_integer_ratio(): │\n"
"│ Return integer ratio. │\n"
"│ bit_count = def bit_count(): Number of │\n"
"│ ones in the binary │\n"
"│ representation of the │\n"
"│ absolute value of self. │\n"
"│ bit_length = def bit_length(): Number of │\n"
"│ bits necessary to represent │\n"
"│ self in binary. │\n"
"│ conjugate = def conjugate(...) Returns │\n"
"│ self, the complex conjugate │\n"
"│ of any int. │\n"
"│ from_bytes = def from_bytes(bytes, │\n"
"│ byteorder, *, │\n"
"│ signed=False): Return the │\n"
"│ integer represented by the │\n"
"│ given array of bytes. │\n"
"│ to_bytes = def to_bytes(length, │\n"
"│ byteorder, *, │\n"
"│ signed=False): Return an │\n"
"│ array of bytes representing │\n"
"│ an integer. │\n"
"╰────────────────────────────────────────────────╯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert '╭───────────...──────────╯\n' ==
'╭───────────...──────────╯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. │
E + Return a pair of integers, │
E + │ whose ratio is equal to the │
E + │ original int. │
E │ bit_count = def bit_count(): Number of │...
E
E ...Full output truncated (36 lines hidden), use '-vv' to show
tests/test_inspect.py:294: AssertionError
_________________ test_inspect_integer_with_methods_python311 __________________
@skip_py37
@skip_py38
@skip_py39
@skip_py310
@skip_py312
def test_inspect_integer_with_methods_python311():
# to_bytes and from_bytes methods on int had minor signature change -
# they now, as of 3.11, have default values for all of their parameters
expected = (
"╭──────────────── <class 'int'> ─────────────────╮\n"
"│ int([x]) -> integer │\n"
"│ int(x, base=10) -> integer │\n"
"│ │\n"
"│ denominator = 1 │\n"
"│ imag = 0 │\n"
"│ numerator = 1 │\n"
"│ real = 1 │\n"
"│ as_integer_ratio = def as_integer_ratio(): │\n"
"│ Return integer ratio. │\n"
"│ bit_count = def bit_count(): Number of │\n"
"│ ones in the binary │\n"
"│ representation of the │\n"
"│ absolute value of self. │\n"
"│ bit_length = def bit_length(): Number of │\n"
"│ bits necessary to represent │\n"
"│ self in binary. │\n"
"│ conjugate = def conjugate(...) Returns │\n"
"│ self, the complex conjugate │\n"
"│ of any int. │\n"
"│ from_bytes = def from_bytes(bytes, │\n"
"│ byteorder='big', *, │\n"
"│ signed=False): Return the │\n"
"│ integer represented by the │\n"
"│ given array of bytes. │\n"
"│ to_bytes = def to_bytes(length=1, │\n"
"│ byteorder='big', *, │\n"
"│ signed=False): Return an │\n"
"│ array of bytes representing │\n"
"│ an integer. │\n"
"╰────────────────────────────────────────────────╯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert '╭───────────...──────────╯\n' ==
'╭───────────...──────────╯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. │
E + Return a pair of integers, │
E + │ whose ratio is equal to the │
E + │ original int. │
E │ bit_count = def bit_count(): Number of │...
E
E ...Full output truncated (27 lines hidden), use '-vv' to show
tests/test_inspect.py:338: AssertionError
____________________________ test_pretty_dataclass _____________________________
def test_pretty_dataclass():
dc = ExampleDataclass(1000, "Hello, World", 999, ["foo", "bar", "baz"])
result = pretty_repr(dc, max_width=80)
print(repr(result))
assert (
result
== "ExampleDataclass(foo=1000, bar='Hello, World', baz=['foo',
'bar', 'baz'])"
)
result = pretty_repr(dc, max_width=16)
print(repr(result))
> assert (
result
== "ExampleDataclass(\n foo=1000,\n bar='Hello, World',\n
baz=[\n 'foo',\n 'bar',\n 'baz'\n ]\n)"
)
E assert "ExampleDatac...bar', 'baz'])" == "ExampleDatac...az'\n ]\n)"
E
E + ExampleDataclass(foo=1000, bar='Hello, World', baz=['foo', 'bar',
'baz'])
E - ExampleDataclass(
E - foo=1000,
E - bar='Hello, World',
E - baz=[
E - 'foo',...
E
E ...Full output truncated (4 lines hidden), use '-vv' to show
tests/test_pretty.py:180: AssertionError
----------------------------- Captured stdout call -----------------------------
"ExampleDataclass(foo=1000, bar='Hello, World', baz=['foo', 'bar', 'baz'])"
"ExampleDataclass(foo=1000, bar='Hello, World', baz=['foo', 'bar', 'baz'])"
________________________ test_reference_cycle_dataclass ________________________
def test_reference_cycle_dataclass():
@dataclass
class Example:
x: int
y: Any
test = Example(1, None)
test.y = test
res = pretty_repr(test)
> assert res == "Example(x=1, y=...)"
E AssertionError: assert 'test_referen...e(x=1, y=...)' == 'Example(x=1,
y=...)'
E
E - Example(x=1, y=...)
E + test_reference_cycle_dataclass.<locals>.Example(x=1, y=...)
tests/test_pretty.py:352: AssertionError
___________________________ test_max_depth_dataclass ___________________________
def test_max_depth_dataclass():
@dataclass
class Foo:
foo: object
@dataclass
class Bar:
bar: object
> assert (
pretty_repr(Foo(foo=Bar(bar=Foo(foo=[]))), max_depth=2)
== "Foo(foo=Bar(bar=Foo(...)))"
)
E AssertionError: assert 'test_max_dep...Foo(foo=[])))' ==
'Foo(foo=Bar(bar=Foo(...)))'
E
E - Foo(foo=Bar(bar=Foo(...)))
E +
test_max_depth_dataclass.<locals>.Foo(foo=test_max_depth_dataclass.<locals>.Bar(bar=test_max_depth_dataclass.<locals>.Foo(foo=[])))
tests/test_pretty.py:483: AssertionError
______________________________ test_attrs_broken _______________________________
@skip_py310
@skip_py311
@skip_py312
def test_attrs_broken():
@attr.define
class Foo:
bar: int
foo = Foo(1)
del foo.bar
result = pretty_repr(foo)
print(repr(result))
expected = "Foo(bar=AttributeError('bar'))"
> assert result == expected
E assert 'Foo(\n ba... \'bar\'")\n)' == "Foo(bar=Attr...Error('bar'))"
E
E - Foo(bar=AttributeError('bar'))
E + Foo(
E +
bar=AttributeError("'tests.test_pretty.test_attrs_broken.<locals>.Foo' object
has no attribute 'bar'")
E + )
tests/test_pretty.py:624: AssertionError
----------------------------- Captured stdout call -----------------------------
'Foo(\n
bar=AttributeError("\'tests.test_pretty.test_attrs_broken.<locals>.Foo\' object
has no attribute \'bar\'")\n)'
____________________________ test_attrs_broken_310 _____________________________
@skip_py37
@skip_py38
@skip_py39
def test_attrs_broken_310():
@attr.define
class Foo:
bar: int
foo = Foo(1)
del foo.bar
result = pretty_repr(foo)
print(repr(result))
expected = "Foo(bar=AttributeError(\"'Foo' object has no attribute
'bar'\"))"
> assert result == expected
E assert 'Foo(\n ba... \'bar\'")\n)' == 'Foo(bar=Attr...te \'bar\'"))'
E
E - Foo(bar=AttributeError("'Foo' object has no attribute 'bar'"))
E + Foo(
E +
bar=AttributeError("'tests.test_pretty.test_attrs_broken_310.<locals>.Foo'
object has no attribute 'bar'")
E + )
tests/test_pretty.py:640: AssertionError
----------------------------- Captured stdout call -----------------------------
'Foo(\n
bar=AttributeError("\'tests.test_pretty.test_attrs_broken_310.<locals>.Foo\'
object has no attribute \'bar\'")\n)'
=============================== warnings summary ===============================
tests/test_syntax.py:6
/<<PKGBUILDDIR>>/tests/test_syntax.py:6: DeprecationWarning: pkg_resources is
deprecated as an API. See
https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_inspect.py::test_inspect_builtin_function_except_python311
FAILED
tests/test_inspect.py::test_inspect_integer_with_methods_python38_and_python39
FAILED tests/test_inspect.py::test_inspect_integer_with_methods_python310only
FAILED tests/test_inspect.py::test_inspect_integer_with_methods_python311 - A...
FAILED tests/test_pretty.py::test_pretty_dataclass - assert "ExampleDatac...b...
FAILED tests/test_pretty.py::test_reference_cycle_dataclass - AssertionError:...
FAILED tests/test_pretty.py::test_max_depth_dataclass - AssertionError: asser...
FAILED tests/test_pretty.py::test_attrs_broken - assert 'Foo(\n ba... \'ba...
FAILED tests/test_pretty.py::test_attrs_broken_310 - assert 'Foo(\n ba... ...
============= 9 failed, 798 passed, 19 skipped, 1 warning in 5.39s =============
E: pybuild pybuild:389: test: plugin custom failed with: exit code=1:
PYTHONPATH=/<<PKGBUILDDIR>> python3.13 -m pytest
I: pybuild base:311: PYTHONPATH=/<<PKGBUILDDIR>> python3.12 -m pytest
============================= test session starts ==============================
platform linux -- Python 3.12.6, pytest-8.3.3, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>
configfile: pyproject.toml
testpaths: tests
plugins: typeguard-4.3.0
collected 826 items
tests/test_align.py ................ [ 1%]
tests/test_ansi.py ....... [ 2%]
tests/test_bar.py ....... [ 3%]
tests/test_block_bar.py .... [ 4%]
tests/test_box.py ...... [ 4%]
tests/test_card.py . [ 4%]
tests/test_cells.py ....... [ 5%]
tests/test_color.py ................. [ 7%]
tests/test_color_triplet.py ... [ 8%]
tests/test_columns.py . [ 8%]
tests/test_columns_align.py . [ 8%]
tests/test_console.py .................................................. [ 14%]
.............................................. [ 20%]
tests/test_constrain.py . [ 20%]
tests/test_containers.py .... [ 20%]
tests/test_control.py ....... [ 21%]
tests/test_emoji.py ...... [ 22%]
tests/test_file_proxy.py ... [ 22%]
tests/test_filesize.py .. [ 22%]
tests/test_getfileno.py ... [ 23%]
tests/test_highlighter.py .............................................. [ 28%]
.................................... [ 33%]
tests/test_inspect.py ...s....sss.................................. [ 38%]
tests/test_json.py . [ 38%]
tests/test_jupyter.py ... [ 39%]
tests/test_layout.py ...... [ 39%]
tests/test_live.py .......... [ 41%]
tests/test_live_render.py .... [ 41%]
tests/test_log.py ... [ 41%]
tests/test_logging.py .... [ 42%]
tests/test_markdown.py ...... [ 43%]
tests/test_markdown_no_hyperlinks.py . [ 43%]
tests/test_markup.py ..................... [ 45%]
tests/test_measure.py .... [ 46%]
tests/test_null_file.py . [ 46%]
tests/test_padding.py ..... [ 46%]
tests/test_palette.py . [ 47%]
tests/test_panel.py .......... [ 48%]
tests/test_pick.py . [ 48%]
tests/test_pretty.py ...........................................s...... [ 54%]
tests/test_progress.py ...................................... [ 59%]
tests/test_prompt.py ...... [ 59%]
tests/test_protocol.py ...... [ 60%]
tests/test_ratio.py ....... [ 61%]
tests/test_repr.py ........ [ 62%]
tests/test_rich_print.py ....... [ 63%]
tests/test_rule.py ................ [ 65%]
tests/test_rule_in_table.py .... [ 65%]
tests/test_screen.py . [ 65%]
tests/test_segment.py ................................................. [ 71%]
tests/test_spinner.py ..... [ 72%]
tests/test_stack.py . [ 72%]
tests/test_status.py .. [ 72%]
tests/test_style.py .......................... [ 75%]
tests/test_styled.py . [ 75%]
tests/test_syntax.py ....................... [ 78%]
tests/test_table.py ............... [ 80%]
tests/test_text.py ..................................................... [ 86%]
...................................................... [ 93%]
tests/test_theme.py ..... [ 94%]
tests/test_tools.py .... [ 94%]
tests/test_traceback.py ................... [ 96%]
tests/test_tree.py .....s.s. [ 97%]
tests/test_windows_renderer.py sssssssssssssssss [100%]
=============================== warnings summary ===============================
tests/test_syntax.py:6
/<<PKGBUILDDIR>>/tests/test_syntax.py:6: DeprecationWarning: pkg_resources is
deprecated as an API. See
https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================== 802 passed, 24 skipped, 1 warning in 5.40s ==================
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13
3.12" returned exit code 13
make[1]: *** [debian/rules:9: override_dh_auto_test] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:6: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
Build finished at 2024-09-19T11:14:08Z
If required, the full build log is available here (for the next 30 days):
https://debusine.debian.net/artifact/792472/
This bug has been filed at "normal" severity, as we haven't started the
transition to add 3.13 as a supported version, yet. This will be raised to RC
as soon as that happens, hopefully well before trixie.
Thanks,
Stefano
--- End Message ---