File: test_kernelspecapp.py

package info (click to toggle)
jupyter-client 8.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,620 kB
  • sloc: python: 9,137; makefile: 168; sh: 33
file content (120 lines) | stat: -rw-r--r-- 3,332 bytes parent folder | download
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"}