| 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 |
|
|