|
|
from __future__ import annotations |
|
|
|
|
|
from _pytest.config import Config |
|
|
from _pytest.config import ExitCode |
|
|
from _pytest.config.argparsing import Parser |
|
|
from _pytest.fixtures import FixtureDef |
|
|
from _pytest.fixtures import SubRequest |
|
|
import pytest |
|
|
|
|
|
|
|
|
def pytest_addoption(parser: Parser) -> None: |
|
|
group = parser.getgroup("debugconfig") |
|
|
group.addoption( |
|
|
"--setupplan", |
|
|
"--setup-plan", |
|
|
action="store_true", |
|
|
help="Show what fixtures and tests would be executed but " |
|
|
"don't execute anything", |
|
|
) |
|
|
|
|
|
|
|
|
@pytest.hookimpl(tryfirst=True) |
|
|
def pytest_fixture_setup( |
|
|
fixturedef: FixtureDef[object], request: SubRequest |
|
|
) -> object | None: |
|
|
|
|
|
if request.config.option.setupplan: |
|
|
my_cache_key = fixturedef.cache_key(request) |
|
|
fixturedef.cached_result = (None, my_cache_key, None) |
|
|
return fixturedef.cached_result |
|
|
return None |
|
|
|
|
|
|
|
|
@pytest.hookimpl(tryfirst=True) |
|
|
def pytest_cmdline_main(config: Config) -> int | ExitCode | None: |
|
|
if config.option.setupplan: |
|
|
config.option.setuponly = True |
|
|
config.option.setupshow = True |
|
|
return None |
|
|
|