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 109 110 111 112 113 114 115 116 117 118 119 120
|
"""Tests for the kernelspecapp"""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import os
import warnings
from pathlib import Path
import pytest
from jupyter_client.kernelspecapp import (
InstallKernelSpec,
KernelSpecApp,
ListKernelSpecs,
ListProvisioners,
RemoveKernelSpec,
)
def test_kernelspec_sub_apps(jp_kernel_dir):
app = InstallKernelSpec()
prefix = os.path.dirname(os.environ["JUPYTER_DATA_DIR"])
kernel_dir = os.path.join(prefix, "share/jupyter/kernels")
app.kernel_spec_manager.kernel_dirs.append(kernel_dir)
app.prefix = prefix
app.initialize([str(jp_kernel_dir)])
with warnings.catch_warnings():
warnings.simplefilter("ignore")
app.start()
app1 = ListKernelSpecs()
app1.kernel_spec_manager.kernel_dirs.append(kernel_dir)
specs = app1.start()
assert specs and "echo" in specs
app2 = RemoveKernelSpec(spec_names=["echo"], force=True)
app2.kernel_spec_manager.kernel_dirs.append(kernel_dir)
app2.start()
app3 = ListKernelSpecs()
app3.kernel_spec_manager.kernel_dirs.append(kernel_dir)
specs = app3.start()
assert specs and "echo" not in specs
app4 = ListKernelSpecs(missing_kernels=True)
app4.kernel_spec_manager.kernel_dirs.append(kernel_dir)
specs = app4.start()
assert specs is None
def test_kernelspec_app():
app = KernelSpecApp()
app.initialize(["list"])
app.start()
def test_list_provisioners_app():
app = ListProvisioners()
app.initialize([])
app.start()
@pytest.fixture
def dummy_kernelspecs():
import sys
p = Path.cwd().resolve()
# some missing kernelspecs
out = {
name: {
"resource_dir": str(p / name),
"spec": {
"argv": [
str(p / name / "bin" / "python"),
"-Xfrozen_modules=off",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"env": {},
"display_name": "Python [venv: dummy0]",
"language": "python",
"interrupt_mode": "signal",
"metadata": {"debugger": True},
},
}
for name in ("dummy0", "dummy1")
}
out["good"] = {
"resource_dir": str(p / "good"),
"spec": {
"argv": [
sys.executable,
"-Xfrozen_modules=off",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"env": {},
"display_name": "Python [venv: dummy0]",
"language": "python",
"interrupt_mode": "signal",
"metadata": {"debugger": True},
},
}
return out
def test__limit_to_missing(dummy_kernelspecs) -> None:
from jupyter_client.kernelspecapp import _limit_to_missing
paths = {k: v["resource_dir"] for k, v in dummy_kernelspecs.items()}
paths, specs = _limit_to_missing(paths, dummy_kernelspecs)
assert specs == {k: v for k, v in dummy_kernelspecs.items() if k != "good"}
assert paths == {k: v["resource_dir"] for k, v in dummy_kernelspecs.items() if k != "good"}
|