Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-click-extra for openSUSE:Factory checked in at 2026-09-10 11:49:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-click-extra (Old) and /work/SRC/openSUSE:Factory/.python-click-extra.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-click-extra" Thu Sep 10 11:49:32 2026 rev:32 rq:1376836 version:9.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-click-extra/python-click-extra.changes 2026-08-20 16:17:15.937425867 +0200 +++ /work/SRC/openSUSE:Factory/.python-click-extra.new.1265/python-click-extra.changes 2026-09-10 11:52:07.732446603 +0200 @@ -1,0 +2,59 @@ +Thu Sep 10 02:14:57 UTC 2026 - Steve Kowalik <[email protected]> + +- Update to 9.1.0: + * Add --record to click-extra screenshot, running the command under a + pseudo-terminal and writing an animated SVG of every screen it draws. + * Draw the invocation above a capture as a shell prompt; --prompt overrides + or hides it, and --closing-prompt draws the prompt the shell returns to. + * Open a recorded animation by typing its command line out, with --typing, + --submit and the new type_line(). + * Match a configuration key against a parameter name whatever its case, so + Foo-Bar and FOO_BAR both reach the foo_bar parameter. + * Fix a drawn prompt dropping the quotes around an argument or environment + value holding a space, so a captured command line pastes back as the + command it pictures. + * Fix an argument declared with a plain click.argument(help=...) drawing a + blank Positional arguments entry on the help screen. + * Fix a MulticallGroup and a VersionOption failing to copy on Python 3.10 + with Click 8.4. + * Paint the (DEPRECATED) label with the deprecated theme slot in --tree and + the --params help column, as the help screen already does. + * Breaking: Rename every camel-cased spinner preset to kebab case, so + boxBounce is now box-bounce. + * Add a click-extra screenshot subcommand capturing any CLI's colored + output as an SVG image, an HTML document or raw escape sequences. + * Lay a capture out at the longest line it holds with an auto width, or + emit it as a bare inline-styled HTML block with --fragment. + * Tell a captured command its chrome through CLITHEME and COLORFGBG, so a + CLI passing --theme auto renders for the window it lands in. + * Add a click-extra snippet subcommand and a click_extra.snippet module + coloring a source file with Pygments and drawing it. + * Add a :mirror: option to the click:run directive, keeping a Markdown + link to that capture in the source, refreshed by refresh-directives. + * Add a click_extra.recording module rebuilding a terminal's screen from + the stream a command writes at it, in-process with ScreenRecorder or from + a Unix command with record_command. + * Render an animated SVG capture from a sequence of frames, tuned by hold, + blank, speed and quantize(), and fed by the new Spinner.frame_lines(). + * Add render_help(), the HELP_FORMATS and INSTALLABLE_FORMATS registries, + and the to_markdown(), to_dict(), to_json(), read_manpage(), + format_manpage() and install_manpages() backends behind them. + * Add --output-dir and --install to every installable wrap --help-format + rendering, so a man page reaches your man directory the way a Carapace + spec reaches Carapace's. + * Add sort_subcommands and subcommand_priorities to @group, plus a + sort_subcommands context setting inherited by every subgroup, ordering + subcommands by registration or priority. Closes + * Add an option_priorities argument to @command and @group, reordering the + help screen without moving the order option callbacks run in, plus + iter_params_for_display(). + * Add LazySubcommand, declaring a lazy subcommand's Cloup section and + fallback_to_default_section beside its import path. + * Track Click 8.5.0: keep click_extra.testing.isolated_filesystem() alive, + re-export custom_version_option, and keep get_binary_stream and + get_text_stream bound by a star import. +- Add patches: + * do-not-use-bare-python.patch + * monkeypatch-shutil-correctly.patch + +------------------------------------------------------------------- Old: ---- click-extra-8.9.1.tar.gz New: ---- click-extra-9.1.0.tar.gz do-not-use-bare-python.patch monkeypatch-shutil-correctly.patch ----------(New B)---------- New:- Add patches: * do-not-use-bare-python.patch * monkeypatch-shutil-correctly.patch New: * do-not-use-bare-python.patch * monkeypatch-shutil-correctly.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-click-extra.spec ++++++ --- /var/tmp/diff_new_pack.j3ROmS/_old 2026-09-10 11:52:08.561481374 +0200 +++ /var/tmp/diff_new_pack.j3ROmS/_new 2026-09-10 11:52:08.563481458 +0200 @@ -27,18 +27,22 @@ %{?sle15_python_module_pythons} Name: python-click-extra -Version: 8.9.1 +Version: 9.1.0 Release: 0 Summary: Drop-in replacement for Click to make user-friendly and colorful CLI License: GPL-2.0-or-later URL: https://github.com/kdeldycke/click-extra Source: https://github.com/kdeldycke/click-extra/archive/v%{version}.tar.gz#/%{module_name}-%{version}.tar.gz +# PATCH-FIX-UPSTREAM gh#kdeldycke/click-extra#1933 +Patch0: do-not-use-bare-python.patch +# PATCH-FIX-UPSTREAM gh#kdeldycke/click-extra#1934 +Patch1: monkeypatch-shutil-correctly.patch BuildRequires: %{python_module pip} BuildRequires: %{python_module uv-build} # SECTION Build dependencies # https://github.com/kdeldycke/click-extra/blob/v6.0.3/pyproject.toml#L73 BuildRequires: %{python_module boltons >= 20.0.0} -BuildRequires: %{python_module click >= 8.3.1} +BuildRequires: %{python_module click >= 8.4.1} BuildRequires: %{python_module cloup >= 3.0.7} BuildRequires: %{python_module deepmerge >= 1.0.1} BuildRequires: %{python_module extra-platforms >= 13.4} @@ -71,7 +75,7 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-boltons >= 20.0.0 -Requires: python-click >= 8.3.1 +Requires: python-click >= 8.4.1 Requires: python-cloup >= 3.0.7 Requires: python-deepmerge >= 1.0.1 Requires: python-extra-platforms >= 13.4 ++++++ click-extra-8.9.1.tar.gz -> click-extra-9.1.0.tar.gz ++++++ ++++ 64924 lines of diff (skipped) ++++++ do-not-use-bare-python.patch ++++++ >From bf0d2a6f1d5f8347cabeed49058f4d54322805b9 Mon Sep 17 00:00:00 2001 From: Steve Kowalik <[email protected]> Date: Thu, 10 Sep 2026 11:15:34 +1000 Subject: [PATCH] Do not use bare python in recording tests Calling bare "python" in the testsuite makes a number of assumptions, not least of which is that the current interpreter under test is also called that. Instead, use sys.executable, which is the current interpreter. --- tests/test_recording.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/test_recording.py b/tests/test_recording.py index 05ee9f6da..54e545694 100644 --- a/tests/test_recording.py +++ b/tests/test_recording.py @@ -20,6 +20,7 @@ import io import re +import sys import time from itertools import pairwise from typing import cast @@ -290,7 +291,7 @@ def test_record_command_recovers_a_foreign_animation(): `stderr`, where a spinner and a progress bar both write. """ frames = record_command( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, duration=5.0, ) @@ -322,7 +323,7 @@ def test_record_command_reassembles_a_glyph_split_across_reads(): the recorder must hold the partial sequence until its tail arrives. """ frames = record_command( - ("python", "-c", SPLIT_GLYPH_SCRIPT), + (sys.executable, "-c", SPLIT_GLYPH_SCRIPT), columns=40, duration=5.0, ) @@ -336,7 +337,7 @@ def test_record_command_reassembles_a_glyph_split_across_reads(): def test_record_and_render_draws_the_prompt_on_every_frame(): """The stated invocation leads each frame, styled as a shell prompt.""" svg, returncode = record_and_render( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, prompt="basket ripen --all", unique_id="pantry-run", @@ -353,7 +354,7 @@ def test_record_and_render_draws_the_prompt_on_every_frame(): def test_record_and_render_hides_an_empty_prompt(): """An empty --prompt draws no invocation at all.""" svg, _returncode = record_and_render( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, prompt="", unique_id="bare-run", @@ -365,7 +366,7 @@ def test_record_and_render_hides_an_empty_prompt(): def test_record_and_render_reports_the_exit_code(): """The command's own verdict travels beside the picture of it.""" _svg, returncode = record_and_render( - ("python", "-c", "import sys; print('rotten'); sys.exit(3)"), + (sys.executable, "-c", "import sys; print('rotten'); sys.exit(3)"), columns=40, prompt="", ) @@ -376,7 +377,7 @@ def test_record_and_render_reports_the_exit_code(): def test_record_and_render_refuses_an_empty_recording(): """A command that drew nothing leaves nothing to animate.""" with pytest.raises(ValueError, match="drew no screen"): - record_and_render(("python", "-c", "pass"), columns=40) + record_and_render((sys.executable, "-c", "pass"), columns=40) @pytest.mark.parametrize( @@ -548,13 +549,13 @@ def test_a_typed_opening_walks_its_cursor_one_cell_at_a_time(): def test_a_recording_types_its_prompt_when_asked(): """The typed opening leads the recorded frames, under the prompt it types.""" plain, _ = record_and_render( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, prompt="basket ripen --all", unique_id="orchard", ) typed, _ = record_and_render( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, prompt="basket ripen --all", unique_id="orchard", @@ -574,7 +575,7 @@ def frame_count(svg: str) -> int: def test_a_recording_types_nothing_unless_asked(): """The default opens on the finished prompt, as every recording so far does.""" svg, _ = record_and_render( - ("python", "-c", BAR_SCRIPT), + (sys.executable, "-c", BAR_SCRIPT), columns=40, prompt="basket ripen --all", unique_id="orchard", @@ -616,7 +617,7 @@ def window_height(svg: str) -> float: def recorded(script: str, **kwargs: object) -> str: """Record one script, however the capture is asked to close.""" svg, _returncode = record_and_render( - ("python", "-c", script), + (sys.executable, "-c", script), columns=40, prompt="basket ripen --all", unique_id="orchard", ++++++ monkeypatch-shutil-correctly.patch ++++++ >From d905f6e6e371b2863f16e85eda4d5c176e9253c3 Mon Sep 17 00:00:00 2001 From: Steve Kowalik <[email protected]> Date: Thu, 10 Sep 2026 11:34:32 +1000 Subject: [PATCH] Accept kwargs in get_terminal_size monkeypatch test_version monkeypatches shutil.get_terminal_size() in a way that will only accept positional arguments, and not keyword arguments, leading to confusing tracebacks from pytest. --- tests/test_version.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_version.py b/tests/test_version.py index 1179472fd..6c53c8592 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1349,7 +1349,9 @@ def terminal_width(monkeypatch): def pin(columns: int) -> None: monkeypatch.setattr( - shutil, "get_terminal_size", lambda *_: os.terminal_size((columns, 24)) + shutil, + "get_terminal_size", + lambda *args, **kwargs: os.terminal_size((columns, 24)), ) return pin
