diff --git a/python-typer-rpmlintrc b/python-typer-rpmlintrc new file mode 100644 index 0000000..f91f336 --- /dev/null +++ b/python-typer-rpmlintrc @@ -0,0 +1,5 @@ +# Upstream does not declare a dependency as it ships all files in both packages, +# which scarily works with pip unless you start uninstalling one of the two packages. +# We use files from python-typer-slim where they exist in both. Thus, we require +# the dependency although it is not there upstream. +addFilter("python\d+-typer.noarch: W: python-leftover-require python\d+-typer-slim") diff --git a/python-typer.changes b/python-typer.changes index 4425d41..79c1083 100644 --- a/python-typer.changes +++ b/python-typer.changes @@ -1,3 +1,17 @@ +------------------------------------------------------------------- +Sat Apr 6 13:05:09 UTC 2024 - Matthias Bach - 0.12.1 + +- Update to upstream version 0.12.1 + * The core functionality has been extracted into + python-typer-slim. + * The typer command is now provided as part of the main typer + package. + * Formerly optional dependencies required for full + functionality are now automatically installed. If they are not + required, the slim package can be used. +- Drop set-proper-pythonpath-for-tutorial-script-tests.patch as it + is now applied in python-typer-slim. + ------------------------------------------------------------------- Fri Mar 29 09:29:31 UTC 2024 - Matthias Bach - 0.11.1 diff --git a/python-typer.spec b/python-typer.spec index 8057038..f2a7d0c 100644 --- a/python-typer.spec +++ b/python-typer.spec @@ -17,31 +17,31 @@ # +%define plainpython python %{?sle15_python_module_pythons} Name: python-typer -Version: 0.11.1 +Version: 0.12.1 Release: 0 Summary: Typer, build great CLIs. Easy to code. Based on Python type hints License: MIT Group: Development/Languages/Python URL: https://github.com/tiangolo/typer Source: https://files.pythonhosted.org/packages/source/t/typer/typer-%{version}.tar.gz -Patch1: set-proper-pythonpath-for-tutorial-script-tests.patch -BuildRequires: %{python_module click} -BuildRequires: %{python_module coverage} +Source2: %{name}-rpmlintrc BuildRequires: %{python_module pdm} BuildRequires: %{python_module pip} -BuildRequires: %{python_module pytest} -BuildRequires: %{python_module rich} -BuildRequires: %{python_module shellingham} -BuildRequires: %{python_module typing_extensions} +BuildRequires: %{python_module typer-slim} BuildRequires: fdupes BuildRequires: python-rpm-macros -Requires: python-click >= 8.0.0 -Requires: python-typing_extensions >= 3.7.4.3 -Recommends: python-colorama -Recommends: python-rich -Recommends: python-shellingham +# Work around Python dependency not being auto-added as there are no modules provided +Requires: %{plainpython}(abi) = %{python_version} +Requires: python-click +Requires: python-rich +Requires: python-shellingham +Requires: python-typer-slim >= %version +Requires: python-typing_extensions +Requires(post): update-alternatives +Requires(postun): update-alternatives BuildArch: noarch %python_subpackages @@ -51,7 +51,10 @@ Typer is a library for building CLI applications based on Python 3.6+ type hints Based on type hints, Typer enables great editor support and completion for developers. With automatic help and completion, Typer makes CLIs easy to use for users. -This package provides the Typer Python package required to build and run Typer-based CLI applications. +This package provides the Typer Python package and ensures all dependencies required +for full functionality are provided. In addition, it provides the command "typer" +which allows users to run scripts not using typer with the same command line comfort +as those that do. %prep %setup -q -n typer-%{version} @@ -62,16 +65,27 @@ This package provides the Typer Python package required to build and run Typer-b %install %pyproject_install + +# Remove files that were already installed by typer-slim +%python_expand rm -r %{buildroot}%{$python_sitelib}/typer + +%python_clone -a %{buildroot}/%{_bindir}/typer + %python_expand %fdupes %{buildroot}%{$python_sitelib} %check -# the completion tests fail as build runs in sh which is not supported -%pytest -k 'not test_show_completion and not test_install_completion' +# There are no tests in the python package as it only pulls dependencies + +%post +%python_install_alternative typer + +%postun +%python_uninstall_alternative typer %files %{python_files} %doc README.md %license LICENSE -%{python_sitelib}/typer +%python_alternative %{_bindir}/typer %{python_sitelib}/typer-%{version}*-info %changelog diff --git a/set-proper-pythonpath-for-tutorial-script-tests.patch b/set-proper-pythonpath-for-tutorial-script-tests.patch deleted file mode 100644 index e98d410..0000000 --- a/set-proper-pythonpath-for-tutorial-script-tests.patch +++ /dev/null @@ -1,97 +0,0 @@ -From: Matthias Bach -Date: Fri, 24 Jun 2022 19:54:06 +0200 -Subject: [PATCH] Ensure the PYTHONPATH is set properly when testing the tutorial scripts -References: https://github.com/tiangolo/typer/pull/407 -Upstream: sent - -When packaging Typer for openSUSE I ran into errors because the tutorial -scripts were unable to import their colocated modules. Curiously this -only seems to be occurring when these scripts are run via coverage, as -they are in the tests. Them being run via coverage however also prevents -just changing the working directory for the script runs, as then the -coverage file would end up in the wrong directory. - -Curiously, I have not been able to reproduce this issue on openSUSE Leap -but only seen it on openSUSE Tumbleweed. Thus, there might be something -weird with the Python stack or the coverage version on Tumbleweed. -However, as the same PYTHONPATH-patching is also done for the tests of -the tutorial code that run it directly and not as a subprocess, I think -it is just consistent to also do this for the script test. - -For reference, this is the error that I am observing in the packaging -environment and that gets resolved by this commit: - -[ 123s] =================================== FAILURES =================================== -[ 123s] _________________________________ test_scripts _________________________________ -[ 123s] -[ 123s] mod = -[ 123s] -[ 123s] def test_scripts(mod): -[ 123s] from docs_src.subcommands.tutorial001 import items, users -[ 123s] -[ 123s] for module in [mod, items, users]: -[ 123s] result = subprocess.run( -[ 123s] ["coverage", "run", module.__file__, "--help"], -[ 123s] stdout=subprocess.PIPE, -[ 123s] stderr=subprocess.PIPE, -[ 123s] encoding="utf-8", -[ 123s] ) -[ 123s] > assert "Usage" in result.stdout -[ 123s] E assert 'Usage' in '' -[ 123s] E + where '' = CompletedProcess(args=['coverage', 'run', '/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial001/main.py', '--help'], returncode=1, stdout='', stderr='Traceback (most recent call last):\n File "/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial001/main.py", line 3, in \n import items\nModuleNotFoundError: No module named \'items\'\n').stdout -[ 123s] -[ 123s] tests/test_tutorial/test_subcommands/test_tutorial001.py:94: AssertionError -[ 123s] _________________________________ test_scripts _________________________________ -[ 123s] -[ 123s] mod = -[ 123s] -[ 123s] def test_scripts(mod): -[ 123s] from docs_src.subcommands.tutorial003 import items, lands, reigns, towns, users -[ 123s] -[ 123s] for module in [mod, items, lands, reigns, towns, users]: -[ 123s] result = subprocess.run( -[ 123s] ["coverage", "run", module.__file__, "--help"], -[ 123s] stdout=subprocess.PIPE, -[ 123s] stderr=subprocess.PIPE, -[ 123s] encoding="utf-8", -[ 123s] ) -[ 123s] > assert "Usage" in result.stdout -[ 123s] E assert 'Usage' in '' -[ 123s] E + where '' = CompletedProcess(args=['coverage', 'run', '/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial003/main.py', '--help'], returncode=1, stdout='', stderr='Traceback (most recent call last):\n File "/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial003/main.py", line 3, in \n import items\nModuleNotFoundError: No module named \'items\'\n').stdout -[ 123s] -[ 123s] tests/test_tutorial/test_subcommands/test_tutorial003.py:146: AssertionError - ---- - tests/test_tutorial/test_subcommands/test_tutorial001.py | 2 +- - tests/test_tutorial/test_subcommands/test_tutorial003.py | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tests/test_tutorial/test_subcommands/test_tutorial001.py b/tests/test_tutorial/test_subcommands/test_tutorial001.py -index 1280e22..6f86826 100644 ---- a/tests/test_tutorial/test_subcommands/test_tutorial001.py -+++ b/tests/test_tutorial/test_subcommands/test_tutorial001.py -@@ -87,7 +87,7 @@ def test_scripts(mod): - from docs_src.subcommands.tutorial001 import items, users - - env = os.environ.copy() -- env["PYTHONPATH"] = ":".join(list(tutorial001.__path__)) -+ env["PYTHONPATH"] = ":".join(list(tutorial001.__path__) + [env["PYTHONPATH"]] if "PYTHONPATH" in env else []) - - for module in [mod, items, users]: - result = subprocess.run( -diff --git a/tests/test_tutorial/test_subcommands/test_tutorial003.py b/tests/test_tutorial/test_subcommands/test_tutorial003.py -index 2d6149c..0a05ae0 100644 ---- a/tests/test_tutorial/test_subcommands/test_tutorial003.py -+++ b/tests/test_tutorial/test_subcommands/test_tutorial003.py -@@ -160,7 +160,7 @@ def test_scripts(mod): - from docs_src.subcommands.tutorial003 import items, lands, reigns, towns, users - - env = os.environ.copy() -- env["PYTHONPATH"] = ":".join(list(tutorial003.__path__)) -+ env["PYTHONPATH"] = ":".join(list(tutorial003.__path__) + [env["PYTHONPATH"]] if "PYTHONPATH" in env else []) - - for module in [mod, items, lands, reigns, towns, users]: - result = subprocess.run( --- -2.35.3 - diff --git a/typer-0.11.1.tar.gz b/typer-0.11.1.tar.gz deleted file mode 100644 index 22d9c53..0000000 --- a/typer-0.11.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f5ae987b97ebbbd59182f8e84407bbc925bc636867fa007bce87a7a71ac81d5c -size 87143 diff --git a/typer-0.12.1.tar.gz b/typer-0.12.1.tar.gz new file mode 100644 index 0000000..3d46ed6 --- /dev/null +++ b/typer-0.12.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72d218ef3c686aed9c6ff3ca25b238aee0474a1628b29c559b18b634cfdeca88 +size 93791