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
messagesmodule 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.socketshandle 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
Messageobjects. These objects include the idents and buffers that we previously handled separately from the main JSON-able message parts. Theadaptermodule is currently an exception (it works with dicts). - The message schemas from
jupyter_kernel_testare going to come here too, but this hasn't happened yet.