forked from pool/python-typer
- Add run-subprocesses-with-correct-python.patch to ensure tests aren't accidentally running subprocesses using the wrong Python version. - Add set-proper-pythonpath-for-tutorial-script-tests.patch to fix issue with build failing due to import failures. OBS-URL: https://build.opensuse.org/request/show/984949 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-typer?expand=0&rev=7
121 lines
5.9 KiB
Diff
121 lines
5.9 KiB
Diff
From: Matthias Bach <marix@marix.org>
|
|
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 = <module 'docs_src.subcommands.tutorial001.main' from '/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial001/main.py'>
|
|
[ 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 <module>\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 = <module 'docs_src.subcommands.tutorial003.main' from '/home/abuild/rpmbuild/BUILD/typer-0.4.1/docs_src/subcommands/tutorial003/main.py'>
|
|
[ 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 <module>\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 | 5 +++++
|
|
tests/test_tutorial/test_subcommands/test_tutorial003.py | 5 +++++
|
|
2 files changed, 10 insertions(+)
|
|
|
|
diff --git a/tests/test_tutorial/test_subcommands/test_tutorial001.py b/tests/test_tutorial/test_subcommands/test_tutorial001.py
|
|
index 1b8b60e..392cf24 100644
|
|
--- a/tests/test_tutorial/test_subcommands/test_tutorial001.py
|
|
+++ b/tests/test_tutorial/test_subcommands/test_tutorial001.py
|
|
@@ -1,3 +1,4 @@
|
|
+import os
|
|
import subprocess
|
|
import sys
|
|
|
|
@@ -85,11 +86,15 @@ def test_users_delete(app):
|
|
def test_scripts(mod):
|
|
from docs_src.subcommands.tutorial001 import items, users
|
|
|
|
+ env = os.environ.copy()
|
|
+ env["PYTHONPATH"] = ":".join(list(tutorial001.__path__))
|
|
+
|
|
for module in [mod, items, users]:
|
|
result = subprocess.run(
|
|
[sys.executable, "-m", "coverage", "run", module.__file__, "--help"],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
encoding="utf-8",
|
|
+ env=env,
|
|
)
|
|
assert "Usage" in result.stdout
|
|
diff --git a/tests/test_tutorial/test_subcommands/test_tutorial003.py b/tests/test_tutorial/test_subcommands/test_tutorial003.py
|
|
index 57f1174..7de9107 100644
|
|
--- a/tests/test_tutorial/test_subcommands/test_tutorial003.py
|
|
+++ b/tests/test_tutorial/test_subcommands/test_tutorial003.py
|
|
@@ -1,3 +1,4 @@
|
|
+import os
|
|
import subprocess
|
|
import sys
|
|
|
|
@@ -137,11 +138,15 @@ def test_lands_towns_burn(app):
|
|
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__))
|
|
+
|
|
for module in [mod, items, lands, reigns, towns, users]:
|
|
result = subprocess.run(
|
|
[sys.executable, "-m", "coverage", "run", module.__file__, "--help"],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
encoding="utf-8",
|
|
+ env=env,
|
|
)
|
|
assert "Usage" in result.stdout
|
|
--
|
|
2.35.3
|
|
|