diff --git a/src/ipython_shell/transport.py b/src/ipython_shell/transport.py new file mode 100644 index 0000000..f069d95 --- /dev/null +++ b/src/ipython_shell/transport.py @@ -0,0 +1,20 @@ +from dataclasses import dataclass + + +@dataclass +class KernelMessage: + """A decoded Jupyter message kept at the transport boundary.""" + + msg_type: str + parent_id: str | None + content: dict[str, object] + buffers: list[bytes] + + +@dataclass +class InputRequest: + """A request for user input emitted by a running kernel call.""" + + call_id: str + prompt: str + password: bool diff --git a/tests/test_transport.py b/tests/test_transport.py new file mode 100644 index 0000000..8c4b7f7 --- /dev/null +++ b/tests/test_transport.py @@ -0,0 +1,21 @@ +import unittest + +from ipython_shell.transport import KernelMessage + + +class TransportTests(unittest.TestCase): + def test_kernel_message_keeps_content_and_buffers(self): + message = KernelMessage( + msg_type="display_data", + parent_id="call-1", + content={"data": {"text/plain": "42"}}, + buffers=[b"binary"], + ) + + self.assertEqual(message.parent_id, "call-1") + self.assertEqual(message.content["data"], {"text/plain": "42"}) + self.assertEqual(message.buffers, [b"binary"]) + + +if __name__ == "__main__": + unittest.main()