98 lines
5.4 KiB
Diff
98 lines
5.4 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 | 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
|
||
|
|