File: test_inspect.py

package info (click to toggle)
python-papermill 2.6.0-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 2,216 kB
  • sloc: python: 4,977; makefile: 17; sh: 5
file content (108 lines) | stat: -rw-r--r-- 3,574 bytes parent folder | download | duplicates (2)
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
from pathlib import Path
from unittest.mock import MagicMock, patch

import pytest
from click import Context

from papermill.inspection import display_notebook_help, inspect_notebook

NOTEBOOKS_PATH = Path(__file__).parent / "notebooks"


def _get_fullpath(name):
    return NOTEBOOKS_PATH / name


@pytest.fixture
def click_context():
    mock = MagicMock(spec=Context, command=MagicMock())
    mock.command.get_usage.return_value = "Dummy usage"
    return mock


@pytest.mark.parametrize(
    "name, expected",
    [
        (_get_fullpath("no_parameters.ipynb"), {}),
        (
            _get_fullpath("simple_execute.ipynb"),
            {"msg": {"name": "msg", "inferred_type_name": "None", "default": "None", "help": ""}},
        ),
        (
            _get_fullpath("complex_parameters.ipynb"),
            {
                "msg": {"name": "msg", "inferred_type_name": "None", "default": "None", "help": ""},
                "a": {
                    "name": "a",
                    "inferred_type_name": "float",
                    "default": "2.25",
                    "help": "Variable a",
                },
                "b": {
                    "name": "b",
                    "inferred_type_name": "List[str]",
                    "default": "['Hello','World']",
                    "help": "Nice list",
                },
                "c": {"name": "c", "inferred_type_name": "NoneType", "default": "None", "help": ""},
            },
        ),
        (_get_fullpath("notimplemented_translator.ipynb"), {}),
    ],
)
def test_inspect_notebook(name, expected):
    assert inspect_notebook(name) == expected


def test_str_path():
    expected = {"msg": {"name": "msg", "inferred_type_name": "None", "default": "None", "help": ""}}
    assert inspect_notebook(str(_get_fullpath("simple_execute.ipynb"))) == expected


@pytest.mark.parametrize(
    "name, expected",
    [
        (
            _get_fullpath("no_parameters.ipynb"),
            [
                "Dummy usage",
                "\nParameters inferred for notebook '{name}':",
                "\n  No cell tagged 'parameters'",
            ],
        ),
        (
            _get_fullpath("simple_execute.ipynb"),
            [
                "Dummy usage",
                "\nParameters inferred for notebook '{name}':",
                "  msg: Unknown type (default None)",
            ],
        ),
        (
            _get_fullpath("complex_parameters.ipynb"),
            [
                "Dummy usage",
                "\nParameters inferred for notebook '{name}':",
                "  msg: Unknown type (default None)",
                "  a: float (default 2.25)         Variable a",
                "  b: List[str] (default ['Hello','World'])\n                                  Nice list",
                "  c: NoneType (default None)      ",
            ],
        ),
        (
            _get_fullpath("notimplemented_translator.ipynb"),
            [
                "Dummy usage",
                "\nParameters inferred for notebook '{name}':",
                "\n  Can't infer anything about this notebook's parameters. It may not have any parameter defined.",
            ],
        ),
    ],
)
def test_display_notebook_help(click_context, name, expected):
    with patch("papermill.inspection.click.echo") as echo:
        display_notebook_help(click_context, str(name), None)

        assert echo.call_count == len(expected)
        for call, target in zip(echo.call_args_list, expected):
            assert call[0][0] == target.format(name=str(name))