| Server IP : 213.136.93.164 / Your IP : 216.73.216.20 Web Server : Apache System : Linux m14200.contabo.net 5.14.0-611.54.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed May 6 18:03:03 EDT 2026 x86_64 User : ki692510 ( 1047) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/pyfakefs/ |
Upload File : |
"""A pytest plugin for using pyfakefs as a fixture
When pyfakefs is installed, the "fs" fixture becomes available.
:Usage:
def my_fakefs_test(fs):
fs.create_file('/var/data/xx1.txt')
assert os.path.exists('/var/data/xx1.txt')
"""
import contextlib
import py
import pytest
from _pytest import capture
from pyfakefs.fake_filesystem_unittest import Patcher, Pause
try:
from _pytest import pathlib
except ImportError:
pathlib = None # type:ignore[assignment]
Patcher.SKIPMODULES.add(py)
Patcher.SKIPMODULES.add(pytest)
Patcher.SKIPMODULES.add(capture)
if pathlib is not None:
Patcher.SKIPMODULES.add(pathlib)
@pytest.fixture
def fs(request):
"""Fake filesystem."""
if hasattr(request, "param"):
# pass optional parameters via @pytest.mark.parametrize
patcher = Patcher(*request.param)
else:
patcher = Patcher()
patcher.setUp()
yield patcher.fs
patcher.tearDown()
@pytest.fixture(scope="class")
def fs_class(request):
"""Class-scoped fake filesystem fixture."""
if hasattr(request, "param"):
patcher = Patcher(*request.param)
else:
patcher = Patcher()
patcher.setUp()
yield patcher.fs
patcher.tearDown()
@pytest.fixture(scope="module")
def fs_module(request):
"""Module-scoped fake filesystem fixture."""
if hasattr(request, "param"):
patcher = Patcher(*request.param)
else:
patcher = Patcher()
patcher.setUp()
yield patcher.fs
patcher.tearDown()
@pytest.fixture(scope="session")
def fs_session(request):
"""Session-scoped fake filesystem fixture."""
if hasattr(request, "param"):
patcher = Patcher(*request.param)
else:
patcher = Patcher()
patcher.setUp()
yield patcher.fs
patcher.tearDown()
@pytest.hookimpl(tryfirst=True)
def pytest_sessionfinish(session, exitstatus):
"""Make sure that the cache is cleared before the final test shutdown."""
Patcher.clear_fs_cache()
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_logreport(report):
"""Make sure that patching is not active during reporting."""
pause = Patcher.PATCHER is not None and Patcher.PATCHER.is_patching
context_mgr = Pause(Patcher.PATCHER) if pause else contextlib.nullcontext()
with context_mgr:
yield
if pause and report.when == "teardown":
# if we get here, we are not in a function scope fixture
# in this case, we still want to pause patching between the tests
Patcher.PATCHER.pause()
@pytest.hookimpl(tryfirst=True)
def pytest_runtest_setup(item):
# resume patcher if not in a function scope
if Patcher.PATCHER is not None:
Patcher.PATCHER.resume()