Spaces:
Runtime error
Runtime error
import builtins | |
import inspect | |
import os | |
import pathlib | |
import shutil | |
import sys | |
import types | |
import pytest | |
# Must register before it gets imported | |
pytest.register_assert_rewrite("IPython.testing.tools") | |
from .testing import tools | |
def pytest_collection_modifyitems(items): | |
"""This function is automatically run by pytest passing all collected test | |
functions. | |
We use it to add asyncio marker to all async tests and assert we don't use | |
test functions that are async generators which wouldn't make sense. | |
""" | |
for item in items: | |
if inspect.iscoroutinefunction(item.obj): | |
item.add_marker("asyncio") | |
assert not inspect.isasyncgenfunction(item.obj) | |
def get_ipython(): | |
from .terminal.interactiveshell import TerminalInteractiveShell | |
if TerminalInteractiveShell._instance: | |
return TerminalInteractiveShell.instance() | |
config = tools.default_config() | |
config.TerminalInteractiveShell.simple_prompt = True | |
# Create and initialize our test-friendly IPython instance. | |
shell = TerminalInteractiveShell.instance(config=config) | |
return shell | |
def work_path(): | |
path = pathlib.Path("./tmp-ipython-pytest-profiledir") | |
os.environ["IPYTHONDIR"] = str(path.absolute()) | |
if path.exists(): | |
raise ValueError('IPython dir temporary path already exists ! Did previous test run exit successfully ?') | |
path.mkdir() | |
yield | |
shutil.rmtree(str(path.resolve())) | |
def nopage(strng, start=0, screen_lines=0, pager_cmd=None): | |
if isinstance(strng, dict): | |
strng = strng.get("text/plain", "") | |
print(strng) | |
def xsys(self, cmd): | |
"""Replace the default system call with a capturing one for doctest. | |
""" | |
# We use getoutput, but we need to strip it because pexpect captures | |
# the trailing newline differently from commands.getoutput | |
print(self.getoutput(cmd, split=False, depth=1).rstrip(), end="", file=sys.stdout) | |
sys.stdout.flush() | |
# for things to work correctly we would need this as a session fixture; | |
# unfortunately this will fail on some test that get executed as _collection_ | |
# time (before the fixture run), in particular parametrized test that contain | |
# yields. so for now execute at import time. | |
#@pytest.fixture(autouse=True, scope='session') | |
def inject(): | |
builtins.get_ipython = get_ipython | |
builtins._ip = get_ipython() | |
builtins.ip = get_ipython() | |
builtins.ip.system = types.MethodType(xsys, ip) | |
builtins.ip.builtin_trap.activate() | |
from .core import page | |
page.pager_page = nopage | |
# yield | |
inject() | |