Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/_pytest/setuponly.py : 12%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from typing import Generator
2from typing import Optional
3from typing import Union
5import pytest
6from _pytest._io.saferepr import saferepr
7from _pytest.config import Config
8from _pytest.config import ExitCode
9from _pytest.config.argparsing import Parser
10from _pytest.fixtures import FixtureDef
11from _pytest.fixtures import SubRequest
14def pytest_addoption(parser: Parser) -> None:
15 group = parser.getgroup("debugconfig")
16 group.addoption(
17 "--setuponly",
18 "--setup-only",
19 action="store_true",
20 help="only setup fixtures, do not execute tests.",
21 )
22 group.addoption(
23 "--setupshow",
24 "--setup-show",
25 action="store_true",
26 help="show setup of fixtures while executing tests.",
27 )
30@pytest.hookimpl(hookwrapper=True)
31def pytest_fixture_setup(
32 fixturedef: FixtureDef, request: SubRequest
33) -> Generator[None, None, None]:
34 yield
35 if request.config.option.setupshow:
36 if hasattr(request, "param"):
37 # Save the fixture parameter so ._show_fixture_action() can
38 # display it now and during the teardown (in .finish()).
39 if fixturedef.ids:
40 if callable(fixturedef.ids):
41 param = fixturedef.ids(request.param)
42 else:
43 param = fixturedef.ids[request.param_index]
44 else:
45 param = request.param
46 fixturedef.cached_param = param # type: ignore[attr-defined]
47 _show_fixture_action(fixturedef, "SETUP")
50def pytest_fixture_post_finalizer(fixturedef: FixtureDef) -> None:
51 if fixturedef.cached_result is not None:
52 config = fixturedef._fixturemanager.config
53 if config.option.setupshow:
54 _show_fixture_action(fixturedef, "TEARDOWN")
55 if hasattr(fixturedef, "cached_param"):
56 del fixturedef.cached_param # type: ignore[attr-defined]
59def _show_fixture_action(fixturedef: FixtureDef, msg: str) -> None:
60 config = fixturedef._fixturemanager.config
61 capman = config.pluginmanager.getplugin("capturemanager")
62 if capman:
63 capman.suspend_global_capture()
65 tw = config.get_terminal_writer()
66 tw.line()
67 tw.write(" " * 2 * fixturedef.scopenum)
68 tw.write(
69 "{step} {scope} {fixture}".format(
70 step=msg.ljust(8), # align the output to TEARDOWN
71 scope=fixturedef.scope[0].upper(),
72 fixture=fixturedef.argname,
73 )
74 )
76 if msg == "SETUP":
77 deps = sorted(arg for arg in fixturedef.argnames if arg != "request")
78 if deps:
79 tw.write(" (fixtures used: {})".format(", ".join(deps)))
81 if hasattr(fixturedef, "cached_param"):
82 tw.write("[{}]".format(saferepr(fixturedef.cached_param, maxsize=42))) # type: ignore[attr-defined]
84 tw.flush()
86 if capman:
87 capman.resume_global_capture()
90@pytest.hookimpl(tryfirst=True)
91def pytest_cmdline_main(config: Config) -> Optional[Union[int, ExitCode]]:
92 if config.option.setuponly:
93 config.option.setupshow = True
94 return None