Source: rich Version: 12.4.4-1 Severity: serious Tags: sid bookworm User: debian...@lists.debian.org Usertags: needs-update User: debian-pyt...@lists.debian.org Usertags: python3.11 Control: affects -1 src:python3-defaults
Dear maintainer(s),We are in the transition of adding python3.11 as a supported Python version [0]. With a recent upload of python3-defaults the autopkgtest of rich fails in testing when that autopkgtest is run with the binary packages of python3-defaults from unstable. It passes when run with only packages from testing. In tabular form:
pass fail python3-defaults from testing 3.10.6-3 rich from testing 12.4.4-1 all others from testing from testing I copied some of the output at the bottom of this report.Currently this regression is blocking the migration of python3-defaults to testing [1]. https://docs.python.org/3/whatsnew/3.11.html lists what's new in Python3.11, it may help to identify what needs to be updated.
More information about this bug and the reason for filing it can be found on https://wiki.debian.org/ContinuousIntegration/RegressionEmailInformation Paul [0] https://bugs.debian.org/1021984 [1] https://qa.debian.org/excuses.php?package=python3-defaults https://ci.debian.net/data/autopkgtest/testing/amd64/r/rich/28796437/log.gz=================================== FAILURES =================================== ______________________________ test_inspect_text _______________________________
@skip_pypy3 def test_inspect_text(): expected = ( "╭──────────────── <class 'str'> ─────────────────╮\n" "│ str(object='') -> str │\n" "│ str(bytes_or_buffer[, encoding[, errors]]) -> │\n" "│ str │\n" "│ │\n" "│ 33 attribute(s) not shown. Run │\n" "│ inspect(inspect) for options. │\n" "╰────────────────────────────────────────────────╯\n" ) print(repr(expected))
E AssertionError: assert '╭───────────...──────────╯\n' == '╭───────────...──────────╯\n'assert expected == render("Hello")
E Skipping 248 identical leading characters in diff, use -v to show E Skipping 140 identical trailing characters in diff, use -v to show E │ E - │ 34 attribut E ? ^ E + │ 33 attribut E ? ^ tests/test_inspect.py:102: AssertionError----------------------------- Captured stdout call ----------------------------- "╭──────────────── <class 'str'> ─────────────────╮\n│ str(object='') -> str │\n│ str(bytes_or_buffer[, encoding[, errors]]) -> │\n│ str │\n│ │\n│ 33 attribute(s) not shown. Run │\n│ inspect(inspect) for options. │\n╰────────────────────────────────────────────────╯\n" ________________________ test_inspect_builtin_function _________________________
@skip_pypy3 def test_inspect_builtin_function(): 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" )
E AssertionError: assert '╭────────── ...──────────╯\n' == '╭────────── ...──────────╯\n'assert expected == render(print)
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 - │ Prints the values to a stream, or to │ E - │ sys.stdout by default. │...E E ...Full output truncated (10 lines hidden), use '-vv' to show
tests/test_inspect.py:142: AssertionError______________________ test_inspect_integer_with_methods _______________________
@skip_py36 @skip_py37 @skip_py38 @skip_py39 def test_inspect_integer_with_methods(): 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" )
E AssertionError: assert '╭───────────...──────────╯\n' == '╭───────────...──────────╯\n'assert expected == render(1, methods=True)
E Skipping 1091 identical leading characters in diff, use -v to show E Skipping 206 identical trailing characters in diff, use -v to show E - byteorder='big', *, │ E ? ------ E + byteorder, *, │ E ? ++++++ E │ signed=False): Return the │...E E ...Full output truncated (11 lines hidden), use '-vv' to show
tests/test_inspect.py:243: AssertionError___________________________________ test_log ___________________________________
def test_log(): expected = replace_link_ids("\x1b[TIME]\x1b\x1b \x1b \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b32\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b \x1bHello from \x1b<\x1b\x1bconsole\x1b\x1b \x1b\x1bwidth\x1b\x1b=\x1b\x1b80\x1b\x1b ColorSystem.TRUECOLOR\x1b\x1b>\x1b ! \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b33\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b \x1b\x1b[\x1b\x1b1\x1b, \x1b2\x1b, \x1b3\x1b\x1b]\x1b \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b34\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b╭─\x1b\x1b───────────────────── \x1b\x1blocals\x1b\x1b ─────────────────────\x1b\x1b─╮\x1b \x1b \x1b\n\x1b \x1b\x1b│\x1b \x1bconsole\x1b\x1b =\x1b \x1b<\x1b\x1bconsole\x1b\x1b \x1b\x1bwidth\x1b\x1b=\x1b\x1b80\x1b\x1b ColorSystem.TRUECOLOR\x1b\x1b>\x1b \x1b│\x1b \x1b \x1b\n\x1b \x1b\x1b╰────────────────────────────────────────────────────╯\x1b \x1b \x1b\n"
) rendered = render_log() print(repr(rendered))
E AssertionError: assert '\x1b[T... \x1b\n' == '\x1b[T... \x1b\n'assert rendered == expected
E Skipping 277 identical leading characters in diff, use -v to showE - ColorSystem.TRUECOLOR> ! ]8;id=0;foo\source.py]8;;\:]8;id=0;foo\33]8;;\
E ? ^^^^^^^^^^ ^^^^^^^^^^E + 3> ! ]8;id=0;foo\source.py]8;;\:]8;id=0;foo\33]8;;\
E ? ^^^ ^^^^^^^^ ++++++++++++++++++++E [1, 2, 3] ]8;i... E E ...Full output truncated (13 lines hidden), use '-vv' to show
tests/test_log.py:44: AssertionError----------------------------- Captured stdout call ----------------------------- '\x1b[TIME]\x1b\x1b \x1b \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b32\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b \x1bHello from \x1b<\x1b\x1bconsole\x1b\x1b \x1b\x1bwidth\x1b\x1b=\x1b\x1b80\x1b\x1b \x1b\x1b3\x1b\x1b>\x1b ! \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b33\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b \x1b\x1b[\x1b\x1b1\x1b, \x1b2\x1b, \x1b3\x1b\x1b]\x1b \x1b]8;id=0;foo\x1b\\\x1bsource.py\x1b\x1b]8;;\x1b\\\x1b:\x1b\x1b]8;id=0;foo\x1b\\\x1b34\x1b\x1b]8;;\x1b\\\n\x1b \x1b\x1b╭─\x1b\x1b─────────── \x1b\x1blocals\x1b\x1b ───────────\x1b\x1b─╮\x1b \x1b \x1b\n\x1b \x1b\x1b│\x1b \x1bconsole\x1b\x1b =\x1b \x1b<\x1b\x1bconsole\x1b\x1b \x1b\x1bwidth\x1b\x1b=\x1b\x1b80\x1b\x1b \x1b\x1b3\x1b\x1b>\x1b \x1b│\x1b \x1b \x1b\n\x1b \x1b\x1b╰────────────────────────────────╯\x1b \x1b \x1b\n' ______________________________ test_attrs_broken _______________________________
@skip_py36 @skip_py310 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'))"
E assert 'Foo(bar=Attr...te \'bar\'"))' == "Foo(bar=Attr...Error('bar'))"assert result == expected
E - Foo(bar=AttributeError('bar')) E + Foo(bar=AttributeError("'Foo' object has no attribute 'bar'")) tests/test_pretty.py:489: AssertionError----------------------------- Captured stdout call -----------------------------
'Foo(bar=AttributeError("\'Foo\' object has no attribute \'bar\'"))'=============================== warnings summary ===============================
tests/test_markup.py:147/tmp/autopkgtest-lxc.v94n7e7e/downtmp/autopkgtest_tmp/tests/test_markup.py:147: DeprecationWarning: invalid escape sequence '\['
result = str(render("[dim white]\[url=[/]")) tests/test_traceback.py:52/tmp/autopkgtest-lxc.v94n7e7e/downtmp/autopkgtest_tmp/tests/test_traceback.py:52: DeprecationWarning: invalid escape sequence '\.'
"^│ .+rich/tests/test_traceback\.py:", -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html=========================== short test summary info ============================ FAILED tests/test_inspect.py::test_inspect_text - AssertionError: assert '╭──... FAILED tests/test_inspect.py::test_inspect_builtin_function - AssertionError:... FAILED tests/test_inspect.py::test_inspect_integer_with_methods - AssertionEr...
FAILED tests/test_log.py::test_log - AssertionError: assert '\x1b[T... ...FAILED tests/test_pretty.py::test_attrs_broken - assert 'Foo(bar=Attr...te \'... ============ 5 failed, 648 passed, 19 skipped, 2 warnings in 4.75s =============
autopkgtest [01:16:19]: test unittests
OpenPGP_signature
Description: OpenPGP digital signature