Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-typer for openSUSE:Factory checked in at 2026-08-09 21:32:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-typer (Old) and /work/SRC/openSUSE:Factory/.python-typer.new.16738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-typer" Sun Aug 9 21:32:33 2026 rev:38 rq:1370101 version:0.27.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-typer/python-typer.changes 2026-07-20 09:57:02.899503089 +0200 +++ /work/SRC/openSUSE:Factory/.python-typer.new.16738/python-typer.changes 2026-08-09 21:33:36.734647343 +0200 @@ -1,0 +2,7 @@ +Thu Aug 6 18:02:08 UTC 2026 - Matthias Bach <[email protected]> + +- Update to 0.27.1 + * Fix showing fast button as external link in animated terminals + in docs. + +------------------------------------------------------------------- Old: ---- typer-0.27.0.tar.gz New: ---- typer-0.27.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-typer.spec ++++++ --- /var/tmp/diff_new_pack.7JOnDS/_old 2026-08-09 21:33:37.202663226 +0200 +++ /var/tmp/diff_new_pack.7JOnDS/_new 2026-08-09 21:33:37.202663226 +0200 @@ -25,7 +25,7 @@ %endif %{?sle15_python_module_pythons} Name: python-typer -Version: 0.27.0 +Version: 0.27.1 Release: 0 Summary: Typer, build great CLIs. Easy to code. Based on Python type hints License: MIT ++++++ typer-0.27.0.tar.gz -> typer-0.27.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/PKG-INFO new/typer-0.27.1/PKG-INFO --- old/typer-0.27.0/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/typer-0.27.1/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: typer -Version: 0.27.0 +Version: 0.27.1 Summary: Typer, build great CLIs. Easy to code. Based on Python type hints. Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <[email protected]> License-Expression: MIT @@ -80,18 +80,21 @@ ## Installation -Create and activate a [virtual environment](https://typer.tiangolo.com/virtual-environments/) and then install **Typer**: +First, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add **Typer** to your project: <div class="termy"> ```console -$ pip install typer +$ uv add typer ---> 100% -Successfully installed typer rich shellingham ``` </div> +This installs both the Typer library and the `typer` command in the project's virtual environment. To use `typer` directly with shell completion, [activate the project environment and install completion](tutorial/install.md#activate-the-virtual-environment). + +If you prefer to use `pip`, install `typer` inside a virtual environment. See the [installation guide](tutorial/install.md) for the alternative steps. + ## Example ### The absolute minimum @@ -173,7 +176,7 @@ ```console // Run your application -$ python main.py +$ uv run python main.py // You get a nice error, you are missing 'name' Usage: main.py [OPTIONS] {name} @@ -184,7 +187,7 @@ // You get a --help for free -$ python main.py --help +$ uv run python main.py --help Usage: main.py [OPTIONS] {name} @@ -196,7 +199,7 @@ ╰───────────────────────────────────────────────────╯ // Now pass the 'name' argument -$ python main.py Camila +$ uv run python main.py Camila Hello Camila @@ -256,7 +259,7 @@ <div class="termy"> ```console -$ python main.py --help +$ uv run python main.py --help Usage: main.py [OPTIONS] COMMAND [ARGS]... @@ -289,7 +292,7 @@ <div class="termy"> ```console -$ python main.py hello --help +$ uv run python main.py hello --help Usage: main.py hello [OPTIONS] {name} @@ -308,7 +311,7 @@ <div class="termy"> ```console -$ python main.py goodbye --help +$ uv run python main.py goodbye --help Usage: main.py goodbye [OPTIONS] {name} @@ -333,19 +336,19 @@ ```console // Use it with the hello command -$ python main.py hello Camila +$ uv run python main.py hello Camila Hello Camila // And with the goodbye command -$ python main.py goodbye Camila +$ uv run python main.py goodbye Camila Bye Camila! // And with --formal -$ python main.py goodbye --formal Camila +$ uv run python main.py goodbye --formal Camila Goodbye Ms. Camila. Have a good day. ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/README.md new/typer-0.27.1/README.md --- old/typer-0.27.0/README.md 2026-07-15 21:21:01.552980000 +0200 +++ new/typer-0.27.1/README.md 2026-08-03 16:40:58.725499400 +0200 @@ -43,18 +43,21 @@ ## Installation -Create and activate a [virtual environment](https://typer.tiangolo.com/virtual-environments/) and then install **Typer**: +First, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add **Typer** to your project: <div class="termy"> ```console -$ pip install typer +$ uv add typer ---> 100% -Successfully installed typer rich shellingham ``` </div> +This installs both the Typer library and the `typer` command in the project's virtual environment. To use `typer` directly with shell completion, [activate the project environment and install completion](tutorial/install.md#activate-the-virtual-environment). + +If you prefer to use `pip`, install `typer` inside a virtual environment. See the [installation guide](tutorial/install.md) for the alternative steps. + ## Example ### The absolute minimum @@ -136,7 +139,7 @@ ```console // Run your application -$ python main.py +$ uv run python main.py // You get a nice error, you are missing 'name' Usage: main.py [OPTIONS] {name} @@ -147,7 +150,7 @@ // You get a --help for free -$ python main.py --help +$ uv run python main.py --help Usage: main.py [OPTIONS] {name} @@ -159,7 +162,7 @@ ╰───────────────────────────────────────────────────╯ // Now pass the 'name' argument -$ python main.py Camila +$ uv run python main.py Camila Hello Camila @@ -219,7 +222,7 @@ <div class="termy"> ```console -$ python main.py --help +$ uv run python main.py --help Usage: main.py [OPTIONS] COMMAND [ARGS]... @@ -252,7 +255,7 @@ <div class="termy"> ```console -$ python main.py hello --help +$ uv run python main.py hello --help Usage: main.py hello [OPTIONS] {name} @@ -271,7 +274,7 @@ <div class="termy"> ```console -$ python main.py goodbye --help +$ uv run python main.py goodbye --help Usage: main.py goodbye [OPTIONS] {name} @@ -296,19 +299,19 @@ ```console // Use it with the hello command -$ python main.py hello Camila +$ uv run python main.py hello Camila Hello Camila // And with the goodbye command -$ python main.py goodbye Camila +$ uv run python main.py goodbye Camila Bye Camila! // And with --formal -$ python main.py goodbye --formal Camila +$ uv run python main.py goodbye --formal Camila Goodbye Ms. Camila. Have a good day. ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/pyproject.toml new/typer-0.27.1/pyproject.toml --- old/typer-0.27.0/pyproject.toml 2026-07-15 21:21:03.806383100 +0200 +++ new/typer-0.27.1/pyproject.toml 2026-08-03 16:41:01.968499000 +0200 @@ -43,7 +43,7 @@ "colorama; platform_system == 'Windows'", ] readme = "README.md" -version = "0.27.0" +version = "0.27.1" [project.urls] Homepage = "https://github.com/fastapi/typer" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/tests/test_rich_markup_mode.py new/typer-0.27.1/tests/test_rich_markup_mode.py --- old/typer-0.27.0/tests/test_rich_markup_mode.py 2026-07-15 21:21:01.565547500 +0200 +++ new/typer-0.27.1/tests/test_rich_markup_mode.py 2026-08-03 16:40:58.746045000 +0200 @@ -330,3 +330,50 @@ # We're assuming the test suite is run with rich installed app = typer.Typer() assert app.rich_markup_mode == "rich" + + [email protected]( + "mode", + ["markdown", "rich", None], +) +def test_markup_mode_epilog(mode): + app = typer.Typer(rich_markup_mode=mode) + + help_string = "Here is a help string" + + epilog_string = """ + Just wrapping up: + + This is the first conclusion + Here is conclusion two + + That's all folks! + """ + + @app.command(help=help_string, epilog=epilog_string) + def main(): + print("Hello World") + + assert app.rich_markup_mode == mode + + result = runner.invoke(app) + assert "Hello World" in result.stdout + + result = runner.invoke(app, ["--help"]) + result_lines = [line.strip() for line in result.stdout.split("\n")] + first_index = result_lines.index("Just wrapping up:") + assert first_index > 0 + assert result_lines[first_index + 1] == "" + + if mode == "rich": + assert result_lines[first_index + 2] == "This is the first conclusion" + assert result_lines[first_index + 3] == "Here is conclusion two" + assert result_lines[first_index + 4] == "" + assert result_lines[first_index + 5] == "That's all folks!" + else: + assert ( + result_lines[first_index + 2] + == "This is the first conclusion Here is conclusion two" + ) + assert result_lines[first_index + 3] == "" + assert result_lines[first_index + 4] == "That's all folks!" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/typer/__init__.py new/typer-0.27.1/typer/__init__.py --- old/typer-0.27.0/typer/__init__.py 2026-07-15 21:21:01.571152000 +0200 +++ new/typer-0.27.1/typer/__init__.py 2026-08-03 16:40:58.755499000 +0200 @@ -1,6 +1,6 @@ """Typer, build great CLIs. Easy to code. Based on Python type hints.""" -__version__ = "0.27.0" +__version__ = "0.27.1" from shutil import get_terminal_size as get_terminal_size diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.27.0/typer/rich_utils.py new/typer-0.27.1/typer/rich_utils.py --- old/typer-0.27.0/typer/rich_utils.py 2026-07-15 21:21:01.571390600 +0200 +++ new/typer-0.27.1/typer/rich_utils.py 2026-08-03 16:40:58.757045300 +0200 @@ -222,8 +222,7 @@ if remaining_paragraphs: # Add a newline inbetween the header and the remaining paragraphs yield Text("") - # Join with double linebreaks for markdown and Rich markup - remaining_lines = "\n\n".join(remaining_paragraphs) + remaining_lines = _fix_linebreaks(remaining_paragraphs, markup_mode) yield _make_rich_text( text=remaining_lines, @@ -232,6 +231,11 @@ ) +def _fix_linebreaks(paragraphs: list[str], markup_mode: MarkupModeStrict) -> str: + # Join with double linebreaks for markdown and Rich markup + return "\n\n".join(paragraphs) + + def _get_parameter_help( *, param: TyperOption | TyperArgument | _click.Parameter, @@ -685,7 +689,7 @@ if obj.epilog: # Remove single linebreaks, replace double with single lines = obj.epilog.split("\n\n") - epilogue = "\n".join([x.replace("\n", " ").strip() for x in lines]) + epilogue = _fix_linebreaks(lines, markup_mode) epilogue_text = _make_rich_text(text=epilogue, markup_mode=markup_mode) console.print(Padding(Align(epilogue_text, pad=False), 1))
