Coverage for human_requests / pytest_plugin / __init__.py: 81%
26 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-07 17:38 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-07 17:38 +0000
1from __future__ import annotations
3import pytest
5from ._config import get_start_class_path, register_ini_options
6from ._constants import AUTOTEST_TEST_NAME
7from ._runtime import _autotest_anyio_runner, run_autotest_tree_anyio, run_autotest_tree_sync
10def pytest_addoption(parser: pytest.Parser) -> None:
11 register_ini_options(parser)
14def pytest_collection_modifyitems(
15 session: pytest.Session,
16 config: pytest.Config,
17 items: list[pytest.Item],
18) -> None:
19 if not get_start_class_path(config):
20 return
22 callobj = run_autotest_tree_sync
23 if _has_anyio_plugin(config):
24 callobj = run_autotest_tree_anyio
26 runner_parent = _pick_runner_parent(session=session, items=items)
27 runner = pytest.Function.from_parent(
28 parent=runner_parent,
29 name=AUTOTEST_TEST_NAME,
30 callobj=callobj,
31 )
32 items.append(runner)
35def _has_anyio_plugin(config: pytest.Config) -> bool:
36 return bool(config.pluginmanager.has_plugin("anyio"))
39def _pick_runner_parent(session: pytest.Session, items: list[pytest.Item]) -> pytest.Collector:
40 for item in items:
41 if isinstance(item, pytest.Function):
42 parent = item.parent
43 if isinstance(parent, pytest.Collector):
44 return parent
45 return session
48__all__ = [
49 "pytest_addoption",
50 "pytest_collection_modifyitems",
51 "_autotest_anyio_runner",
52]