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-04-28 11:53:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-typer (Old) and /work/SRC/openSUSE:Factory/.python-typer.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-typer" Tue Apr 28 11:53:25 2026 rev:33 rq:1349285 version:0.24.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-typer/python-typer.changes 2026-03-30 18:29:35.846826355 +0200 +++ /work/SRC/openSUSE:Factory/.python-typer.new.11940/python-typer.changes 2026-04-28 11:53:41.534835235 +0200 @@ -1,0 +2,15 @@ +Sat Apr 25 20:45:16 UTC 2026 - Dirk Müller <[email protected]> + +- update to 0.24.2: + * Ensure that `typer.launch` forwards correctly when + launching a file. PR #1708 by @svlandeg. + * Ensure `ty` runs without errors. PR #1628 by @svlandeg. + * Add dates to release notes. PR #1612 by @YuriiMotov. + * Fix code blocks in reference docs overflowing table width. + * Fix broken link to FastAPI and Friends newsletter. PR #1540 + * Handle external links `target=_blank` and CSS automatically + in JS and CSS. PR #1622 by @tiangolo. + * Remove link to Typer developer survey. PR #1609 by + * Clean up documentation in `install.md` file. PR #1606 by + +------------------------------------------------------------------- Old: ---- typer-0.24.1.tar.gz New: ---- typer-0.24.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-typer.spec ++++++ --- /var/tmp/diff_new_pack.dGFZMn/_old 2026-04-28 11:53:42.310867279 +0200 +++ /var/tmp/diff_new_pack.dGFZMn/_new 2026-04-28 11:53:42.314867444 +0200 @@ -1,8 +1,7 @@ # # spec file for package python-typer # -# Copyright (c) 2026 SUSE LLC -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2021 Matthias Bach <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -26,7 +25,7 @@ %endif %{?sle15_python_module_pythons} Name: python-typer -Version: 0.24.1 +Version: 0.24.2 Release: 0 Summary: Typer, build great CLIs. Easy to code. Based on Python type hints License: MIT ++++++ typer-0.24.1.tar.gz -> typer-0.24.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/PKG-INFO new/typer-0.24.2/PKG-INFO --- old/typer-0.24.1/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/typer-0.24.2/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: typer -Version: 0.24.1 +Version: 0.24.2 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 @@ -77,10 +77,6 @@ * **Grow large**: Grow in complexity as much as you want, create arbitrarily complex trees of commands and groups of subcommands, with options and arguments. * **Run scripts**: Typer includes a `typer` command/program that you can use to run scripts, automatically converting them to CLIs, even if they don't use Typer internally. -## 2026 February - Typer developer survey - -Help us define Typer's future by filling the <a href="https://forms.gle/nYvutPrVkmBQZLas7" class="external-link" target="_blank">Typer developer survey</a>. ✨ - ## FastAPI of CLIs **Typer** is <a href="https://fastapi.tiangolo.com" class="external-link" target="_blank">FastAPI</a>'s little sibling, it's the FastAPI of CLIs. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/README.md new/typer-0.24.2/README.md --- old/typer-0.24.1/README.md 2026-02-21 17:54:33.771807400 +0100 +++ new/typer-0.24.2/README.md 2026-04-22 19:45:28.353569500 +0200 @@ -40,10 +40,6 @@ * **Grow large**: Grow in complexity as much as you want, create arbitrarily complex trees of commands and groups of subcommands, with options and arguments. * **Run scripts**: Typer includes a `typer` command/program that you can use to run scripts, automatically converting them to CLIs, even if they don't use Typer internally. -## 2026 February - Typer developer survey - -Help us define Typer's future by filling the <a href="https://forms.gle/nYvutPrVkmBQZLas7" class="external-link" target="_blank">Typer developer survey</a>. ✨ - ## FastAPI of CLIs **Typer** is <a href="https://fastapi.tiangolo.com" class="external-link" target="_blank">FastAPI</a>'s little sibling, it's the FastAPI of CLIs. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/pyproject.toml new/typer-0.24.2/pyproject.toml --- old/typer-0.24.1/pyproject.toml 2026-02-21 17:54:38.863812200 +0100 +++ new/typer-0.24.2/pyproject.toml 2026-04-22 19:45:31.531579000 +0200 @@ -43,7 +43,7 @@ "annotated-doc >=0.0.2", ] readme = "README.md" -version = "0.24.1" +version = "0.24.2" [project.urls] Homepage = "https://github.com/fastapi/typer" @@ -82,10 +82,10 @@ "smokeshow >=0.5.0", ] tests = [ - "coverage[toml] >=6.2", + "coverage[toml] >=7.13", "mypy >=1.19.1", - "ty >=0.0.9", - "pytest >=7.4.0", + "ty >=0.0.25", + "pytest >=9.0.0", "pytest-cov >=4.0.0", "pytest-sugar >=0.9.5", "pytest-xdist >=1.32.0", @@ -108,13 +108,13 @@ "scripts/", ] -[tool.pytest.ini_options] +[tool.pytest] +minversion = "9.0" addopts = [ "--strict-config", "--strict-markers", ] -xfail_strict = true -junit_family = "xunit2" +strict_xfail = true filterwarnings = [ "error", "ignore::DeprecationWarning:xdist", @@ -245,3 +245,6 @@ [tool.ruff.lint.flake8-tidy-imports.banned-api."shellingham.detect_shell"] msg = "Use 'typer._completion_shared._get_shell_name' instead of using 'shellingham.detect_shell' directly.\n" + +[tool.ty.terminal] +error-on-warning = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/scripts/add_latest_release_date.py new/typer-0.24.2/scripts/add_latest_release_date.py --- old/typer-0.24.1/scripts/add_latest_release_date.py 1970-01-01 01:00:00.000000000 +0100 +++ new/typer-0.24.2/scripts/add_latest_release_date.py 2026-04-22 19:45:28.370477700 +0200 @@ -0,0 +1,40 @@ +"""Check release-notes.md and add today's date to the latest release header if missing.""" + +import re +import sys +from datetime import date + +RELEASE_NOTES_FILE = "docs/release-notes.md" +RELEASE_HEADER_PATTERN = re.compile(r"^## (\d+\.\d+\.\d+)\s*(\(.*\))?\s*$") + + +def main() -> None: + with open(RELEASE_NOTES_FILE) as f: + lines = f.readlines() + + for i, line in enumerate(lines): + match = RELEASE_HEADER_PATTERN.match(line) + if not match: + continue + + version = match.group(1) + date_part = match.group(2) + + if date_part: + print(f"Latest release {version} already has a date: {date_part}") + sys.exit(0) + + today = date.today().isoformat() + lines[i] = f"## {version} ({today})\n" + print(f"Added date: {version} ({today})") + + with open(RELEASE_NOTES_FILE, "w") as f: + f.writelines(lines) + sys.exit(0) + + print("No release header found") + sys.exit(1) + + +if __name__ == "__main__": + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/tests/test_launch.py new/typer-0.24.2/tests/test_launch.py --- old/typer-0.24.1/tests/test_launch.py 2026-02-21 17:54:33.788807400 +0100 +++ new/typer-0.24.2/tests/test_launch.py 2026-04-22 19:45:28.372724800 +0200 @@ -4,6 +4,8 @@ import pytest import typer +from tests.utils import needs_windows + url = "http://example.com" @@ -53,4 +55,18 @@ with patch("typer.main.click.launch", return_value=0) as launch_mock: typer.launch("not a url") - launch_mock.assert_called_once_with("not a url") + launch_mock.assert_called_once_with("not a url", wait=False, locate=False) + + +@needs_windows +def test_launch_file(): + with ( + patch("click._termui_impl.sys.platform", "win32"), + patch("click._termui_impl.WIN", True), + patch("click._termui_impl.CYGWIN", False), + patch("subprocess.call", return_value=0) as call_mock, + ): + result = typer.launch("C:/tmp/file.txt", locate=True) + + assert result == 0 + call_mock.assert_called_once_with(["explorer", "/select,C:/tmp/file.txt"]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/tests/utils.py new/typer-0.24.2/tests/utils.py --- old/typer-0.24.1/tests/utils.py 2026-02-21 17:54:33.796807300 +0100 +++ new/typer-0.24.2/tests/utils.py 2026-04-22 19:45:28.381250900 +0200 @@ -9,6 +9,9 @@ needs_linux = pytest.mark.skipif( not sys.platform.startswith("linux"), reason="Test requires Linux" ) +needs_windows = pytest.mark.skipif( + not sys.platform.startswith("win"), reason="Test requires Windows" +) needs_rich = pytest.mark.skipif(not HAS_RICH, reason="Test requires Rich") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/typer/__init__.py new/typer-0.24.2/typer/__init__.py --- old/typer-0.24.1/typer/__init__.py 2026-02-21 17:54:33.796807300 +0100 +++ new/typer-0.24.2/typer/__init__.py 2026-04-22 19:45:28.381250900 +0200 @@ -1,6 +1,6 @@ """Typer, build great CLIs. Easy to code. Based on Python type hints.""" -__version__ = "0.24.1" +__version__ = "0.24.2" from shutil import get_terminal_size as get_terminal_size diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/typer/cli.py new/typer-0.24.2/typer/cli.py --- old/typer-0.24.1/typer/cli.py 2026-02-21 17:54:33.797807500 +0100 +++ new/typer-0.24.2/typer/cli.py 2026-04-22 19:45:28.381578700 +0200 @@ -131,6 +131,7 @@ else: typer.echo(f"Could not import as Python module: {state.module}", err=True) sys.exit(1) + assert spec is not None module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) # type: ignore obj = get_typer_from_module(module) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/typer/core.py new/typer-0.24.2/typer/core.py --- old/typer-0.24.1/typer/core.py 2026-02-21 17:54:33.797807500 +0100 +++ new/typer-0.24.2/typer/core.py 2026-04-22 19:45:28.381578700 +0200 @@ -376,7 +376,7 @@ help = f"{help} {extra_str}" if help else f"{extra_str}" return name, help - def make_metavar(self, ctx: click.Context | None = None) -> str: + def make_metavar(self, ctx: click.Context) -> str: # Modified version of click.core.Argument.make_metavar() # to include Argument name if self.metavar is not None: @@ -387,8 +387,7 @@ var = (self.name or "").upper() if not self.required: var = f"[{var}]" - type_var = self.type.get_metavar(self, ctx=ctx) # type: ignore[arg-type] - # type_var = self.type.get_metavar(self, ctx=ctx) + type_var = self.type.get_metavar(self, ctx=ctx) if type_var: var += f":{type_var}" if self.nargs != 1: @@ -487,8 +486,8 @@ ) -> Any | Callable[[], Any] | None: return _extract_default_help_str(self, ctx=ctx) - def make_metavar(self, ctx: click.Context | None = None) -> str: - return super().make_metavar(ctx=ctx) # type: ignore[arg-type] + def make_metavar(self, ctx: click.Context) -> str: + return super().make_metavar(ctx=ctx) def get_help_record(self, ctx: click.Context) -> tuple[str, str] | None: # Duplicate all of Click's logic only to modify a single line, to allow boolean diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typer-0.24.1/typer/main.py new/typer-0.24.2/typer/main.py --- old/typer-0.24.1/typer/main.py 2026-02-21 17:54:33.797807500 +0100 +++ new/typer-0.24.2/typer/main.py 2026-04-22 19:45:28.381578700 +0200 @@ -1386,7 +1386,7 @@ rich_markup_mode: MarkupMode, ) -> click.Command: assert command_info.callback, "A command must have a callback function" - name = command_info.name or get_command_name(command_info.callback.__name__) # ty:ignore[unresolved-attribute] + name = command_info.name or get_command_name(command_info.callback.__name__) # ty: ignore use_help = command_info.help if use_help is None: use_help = inspect.getdoc(command_info.callback) @@ -2010,4 +2010,4 @@ return 0 else: - return click.launch(url) + return click.launch(url, wait=wait, locate=locate)
