Skip to content

Commit

Permalink
cacheprovider: use warnings directly
Browse files Browse the repository at this point in the history
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: pytest-dev#6681.
  • Loading branch information
blueyed committed Feb 15, 2020
1 parent 67e69a7 commit 02aa8ad
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/_pytest/cacheprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,10 @@ def cache_dir_from_config(config):
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,
Expand Down
9 changes: 9 additions & 0 deletions src/_pytest/warnings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 1 addition & 3 deletions testing/test_cacheprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@ def test_cache_writefail_permissions(self, testdir):
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"))
Expand Down

0 comments on commit 02aa8ad

Please sign in to comment.