cacheprovider: use warnings directly
Allows for filtering of PytestCacheWarning. Using `_issue_warning_captured` is not necessary here, and was probably only used because the cacheprovider misses warnings during `pytest_sessionfinish`, which is also fixed here. I think the usage of `_issue_warning_captured` can be removed/reduced further, but also that this is good enough for now. Ref: https://github.com/pytest-dev/pytest/issues/6681.
This commit is contained in:
		
							parent
							
								
									67e69a7e49
								
							
						
					
					
						commit
						02aa8adae1
					
				|  | @ -71,10 +71,10 @@ class Cache: | |||
|         return resolve_from_str(config.getini("cache_dir"), config.rootdir) | ||||
| 
 | ||||
|     def warn(self, fmt, **args): | ||||
|         from _pytest.warnings import _issue_warning_captured | ||||
|         import warnings | ||||
|         from _pytest.warning_types import PytestCacheWarning | ||||
| 
 | ||||
|         _issue_warning_captured( | ||||
|         warnings.warn( | ||||
|             PytestCacheWarning(fmt.format(**args) if args else fmt), | ||||
|             self._config.hook, | ||||
|             stacklevel=3, | ||||
|  |  | |||
|  | @ -136,6 +136,15 @@ def pytest_terminal_summary(terminalreporter): | |||
|         yield | ||||
| 
 | ||||
| 
 | ||||
| @pytest.hookimpl(hookwrapper=True) | ||||
| def pytest_sessionfinish(session): | ||||
|     config = session.config | ||||
|     with catch_warnings_for_item( | ||||
|         config=config, ihook=config.hook, when="config", item=None | ||||
|     ): | ||||
|         yield | ||||
| 
 | ||||
| 
 | ||||
| def _issue_warning_captured(warning, hook, stacklevel): | ||||
|     """ | ||||
|     This function should be used instead of calling ``warnings.warn`` directly when we are in the "configure" stage: | ||||
|  |  | |||
|  | @ -56,9 +56,7 @@ class TestNewAPI: | |||
|             testdir.tmpdir.ensure_dir(".pytest_cache").chmod(mode) | ||||
| 
 | ||||
|     @pytest.mark.skipif(sys.platform.startswith("win"), reason="no chmod on windows") | ||||
|     @pytest.mark.filterwarnings( | ||||
|         "ignore:could not create cache path:pytest.PytestWarning" | ||||
|     ) | ||||
|     @pytest.mark.filterwarnings("default") | ||||
|     def test_cache_failure_warns(self, testdir, monkeypatch): | ||||
|         monkeypatch.setenv("PYTEST_DISABLE_PLUGIN_AUTOLOAD", "1") | ||||
|         cache_dir = str(testdir.tmpdir.ensure_dir(".pytest_cache")) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue