Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

👷‍♂️ Ensure the PYTHONPATH is set properly when testing the tutorial scripts #407

Merged

Commits on Nov 6, 2022

  1. Ensure the PYTHONPATH is set properly when testing the tutorial scripts

    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
    theMarix committed Nov 6, 2022
    Configuration menu
    Copy the full SHA
    8e4c716 View commit details
    Browse the repository at this point in the history