Skip to content

magics

hlt

hlt(line, cell)

Highlight IPython cell magic. Captures the output of a cell and stores it in the cassini.environment.env.o highlights file.

If the cell returns a string, this is used as a caption for the output.

A title argument must be provided.

Source code in cassini/magics.py
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
def hlt(line: str, cell: str):
    """
    Highlight IPython cell magic. Captures the output of a cell and stores it in the [cassini.environment.env.o][cassini.environment._Env.o] highlights file.

    If the cell returns a string, this is used as a caption for the output.

    A title argument must be provided.
    """
    if env.is_shared(env):
        warn(
            "This notebook is in a shared context and therefore highlights magics won't work"
        )
        return cell

    if not isinstance(env.o, NotebookTierBase):
        raise ValueError(
            "Highlights can only be added to tiers that subclass NotebookTierBase"
        )

    if not line:
        raise ValueError("Please provide a title for the highlight")

    assert env.o

    outputs = []

    def capture_display(msg):
        if msg["content"]["data"] in outputs:  # display only once
            return None
        outputs.append(msg["content"])
        return msg

    cell = cell.strip()

    annotation = None

    if cell.endswith('"""'):
        *rest, annotation = cell.split('"""')[:-1]
        cell = '"""'.join(rest)

    shell = InteractiveShell.instance()
    # Capture any output that is displayed before output (like matplotlib plots)
    shell.display_pub.register_hook(capture_display)

    header = f"## {line}"

    try:
        publish_display_data({"text/markdown": header})

        result = shell.run_cell(cell).result

        if shell.display_formatter:
            outputs.append(
                dict(zip(("data", "metadata"), shell.display_formatter.format(result)))
            )

        if annotation:
            publish_display_data({"text/markdown": annotation})
    finally:
        shell.display_pub.unregister_hook(capture_display)

    all_out = outputs

    env.o.add_highlight(line, all_out)

    return None