1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
import os
from textwrap import dedent
import pytest
from .test_embed_kernel import setup_kernel
TIMEOUT = 15
if os.name == "nt":
pytest.skip("skipping tests on windows", allow_module_level=True)
@pytest.mark.flaky(max_runs=3)
def test_ipython_start_kernel_userns():
import IPython
if IPython.version_info > (9, 0): # noqa:SIM108
EXPECTED = "IPythonMainModule"
else:
# not this since https://github.com/ipython/ipython/pull/14754
EXPECTED = "DummyMod"
cmd = dedent(
"""
from ipykernel.kernelapp import launch_new_instance
ns = {"custom": 123}
launch_new_instance(user_ns=ns)
"""
)
with setup_kernel(cmd) as client:
client.inspect("custom")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["found"]
text = content["data"]["text/plain"]
assert "123" in text
# user_module should be an instance of DummyMod
client.execute("usermod = get_ipython().user_module")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["status"] == "ok"
client.inspect("usermod")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["found"]
text = content["data"]["text/plain"]
assert EXPECTED in text
def test_start_kernel_background_thread():
cmd = dedent(
"""
import threading
import asyncio
from ipykernel.kernelapp import launch_new_instance
def launch():
# Threads don't always have a default event loop so we need to
# create and set a default
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
launch_new_instance()
thread = threading.Thread(target=launch)
thread.start()
thread.join()
"""
)
with setup_kernel(cmd) as client:
client.execute("a = 1")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["status"] == "ok"
client.inspect("a")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["found"]
text = content["data"]["text/plain"]
assert "1" in text
@pytest.mark.flaky(max_runs=3)
def test_ipython_start_kernel_no_userns():
# Issue #4188 - user_ns should be passed to shell as None, not {}
cmd = dedent(
"""
from ipykernel.kernelapp import launch_new_instance
launch_new_instance()
"""
)
with setup_kernel(cmd) as client:
# user_module should not be an instance of DummyMod
client.execute("usermod = get_ipython().user_module")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["status"] == "ok"
client.inspect("usermod")
msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg["content"]
assert content["found"]
text = content["data"]["text/plain"]
assert "DummyMod" not in text
|