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))
|