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

1from __future__ import annotations 

2 

3import pytest 

4 

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 

8 

9 

10def pytest_addoption(parser: pytest.Parser) -> None: 

11 register_ini_options(parser) 

12 

13 

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 

21 

22 callobj = run_autotest_tree_sync 

23 if _has_anyio_plugin(config): 

24 callobj = run_autotest_tree_anyio 

25 

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) 

33 

34 

35def _has_anyio_plugin(config: pytest.Config) -> bool: 

36 return bool(config.pluginmanager.has_plugin("anyio")) 

37 

38 

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 

46 

47 

48__all__ = [ 

49 "pytest_addoption", 

50 "pytest_collection_modifyitems", 

51 "_autotest_anyio_runner", 

52]