This is an experimental implementation of the Jupyter protocol, to be used by both clients and kernels.
A few notes on the pieces and ideas:
- The
messages
module contains many functions for constructing messages of different types. The idea is to encapsulate as much of the message structure as possible here, to reduce the ambiguity where a kernel written in Python speaks a protocol defined partly by a library and partly by the kernel's own implementation. - A Session handles (de)serialisation. Its scope is reduced from the Session
class in
jupyter_client
, because it no longer handles sending and receiving. - The messaging classes in
jupyter_protocol.sockets
handle setting up ZMQ sockets, sending and receiving messages. There is one for each piece that communicates:KernelMessaging
,ClientMessaging
,NannyMessaging
. - I try to consistently represent unserialised messages as
Message
objects. These objects include the idents and buffers that we previously handled separately from the main JSON-able message parts. Theadapter
module is currently an exception (it works with dicts). - The message schemas from
jupyter_kernel_test
are going to come here too, but this hasn't happened yet.