Warning
This documentation is for an old version of IPython. You can find docs for newer versions here.
Module: kernel.zmq.session
¶
Session object for building, serializing, sending, and receiving messages in IPython. The Session object supports serialization, HMAC signatures, and metadata on messages.
Also defined here are utilities for working with Sessions: * A SessionFactory to be used as a base class for configurables that work with Sessions. * A Message object for convenience that allows attribute-access to the msg dict.
Authors:
- Min RK
- Brian Granger
- Fernando Perez
3 Classes¶
-
class
IPython.kernel.zmq.session.
SessionFactory
(**kwargs)¶ Bases:
IPython.config.configurable.LoggingConfigurable
The Base class for configurables that have a Session, Context, logger, and IOLoop.
-
__init__
(**kwargs)¶
-
-
class
IPython.kernel.zmq.session.
Message
(msg_dict)¶ Bases:
object
A simple message object that maps dict keys to attributes.
A Message can be created from a dict and a dict from a Message instance simply by calling dict(msg_obj).
-
__init__
(msg_dict)¶
-
-
class
IPython.kernel.zmq.session.
Session
(**kwargs)¶ Bases:
IPython.config.configurable.Configurable
Object for handling serialization and sending of messages.
The Session object handles building messages and sending them with ZMQ sockets or ZMQStream objects. Objects can communicate with each other over the network via Session objects, and only need to work with the dict-based IPython message spec. The Session will handle serialization/deserialization, security, and metadata.
Sessions support configurable serialization via packer/unpacker traits, and signing with HMAC digests via the key/keyfile traits.
Parameters: debug : bool
whether to trigger extra debugging statements
packer/unpacker : str
importstrings for methods to serialize message parts. If just ‘json’ or ‘pickle’, predefined JSON and pickle packers will be used. Otherwise, the entire importstring must be used.
The functions must accept at least valid JSON input, and output bytes.
For example, to use msgpack: packer = ‘msgpack.packb’, unpacker=’msgpack.unpackb’
pack/unpack : callables
You can also set the pack/unpack callables for serialization directly.
session : bytes
the ID of this Session object. The default is to generate a new UUID.
username : unicode
username added to message headers. The default is to ask the OS.
key : bytes
The key used to initialize an HMAC signature. If unset, messages will not be signed or checked.
keyfile : filepath
The file containing a key. If this is set, key will be initialized to the contents of the file.
-
__init__
(**kwargs)¶ create a Session object
Parameters: debug : bool
whether to trigger extra debugging statements
packer/unpacker : str
importstrings for methods to serialize message parts. If just ‘json’ or ‘pickle’, predefined JSON and pickle packers will be used. Otherwise, the entire importstring must be used.
The functions must accept at least valid JSON input, and output bytes.
For example, to use msgpack: packer = ‘msgpack.packb’, unpacker=’msgpack.unpackb’
pack/unpack : callables
You can also set the pack/unpack callables for serialization directly.
session : unicode (must be ascii)
the ID of this Session object. The default is to generate a new UUID.
bsession : bytes
The session as bytes
username : unicode
username added to message headers. The default is to ask the OS.
key : bytes
The key used to initialize an HMAC signature. If unset, messages will not be signed or checked.
signature_scheme : str
The message digest scheme. Currently must be of the form ‘hmac-HASH’, where ‘HASH’ is a hashing function available in Python’s hashlib. The default is ‘hmac-sha256’. This is ignored if ‘key’ is empty.
keyfile : filepath
The file containing a key. If this is set, key will be initialized to the contents of the file.
-
feed_identities
(msg_list, copy=True)¶ Split the identities from the rest of the message.
Feed until DELIM is reached, then return the prefix as idents and remainder as msg_list. This is easily broken by setting an IDENT to DELIM, but that would be silly.
Parameters: msg_list : a list of Message or bytes objects
The message to be split.
copy : bool
flag determining whether the arguments are bytes or Messages
Returns: (idents, msg_list) : two lists
idents will always be a list of bytes, each of which is a ZMQ identity. msg_list will be a list of bytes or zmq.Messages of the form [HMAC,p_header,p_parent,p_content,buffer1,buffer2,...] and should be unpackable/unserializable via self.unserialize at this point.
-
msg
(msg_type, content=None, parent=None, header=None, metadata=None)¶ Return the nested message dict.
This format is different from what is sent over the wire. The serialize/unserialize methods converts this nested message dict to the wire format, which is a list of message parts.
-
msg_id
¶ always return new uuid
-
recv
(socket, mode=1, content=True, copy=True)¶ Receive and unpack a message.
Parameters: socket : ZMQStream or Socket
The socket or stream to use in receiving.
Returns: [idents], msg
[idents] is a list of idents and msg is a nested message dict of same format as self.msg returns.
-
send
(stream, msg_or_type, content=None, parent=None, ident=None, buffers=None, track=False, header=None, metadata=None)¶ Build and send a message via stream or socket.
The message format used by this function internally is as follows:
- [ident1,ident2,...,DELIM,HMAC,p_header,p_parent,p_content,
- buffer1,buffer2,...]
The serialize/unserialize methods convert the nested message dict into this format.
Parameters: stream : zmq.Socket or ZMQStream
The socket-like object used to send the data.
msg_or_type : str or Message/dict
Normally, msg_or_type will be a msg_type unless a message is being sent more than once. If a header is supplied, this can be set to None and the msg_type will be pulled from the header.
content : dict or None
The content of the message (ignored if msg_or_type is a message).
header : dict or None
The header dict for the message (ignored if msg_to_type is a message).
parent : Message or dict or None
The parent or parent header describing the parent of this message (ignored if msg_or_type is a message).
ident : bytes or list of bytes
The zmq.IDENTITY routing path.
metadata : dict or None
The metadata describing the message
buffers : list or None
The already-serialized buffers to be appended to the message.
track : bool
Whether to track. Only for use with Sockets, because ZMQStream objects cannot track messages.
Returns: msg : dict
The constructed message.
-
send_raw
(stream, msg_list, flags=0, copy=True, ident=None)¶ Send a raw message via ident path.
This method is used to send a already serialized message.
Parameters: stream : ZMQStream or Socket
The ZMQ stream or socket to use for sending the message.
msg_list : list
The serialized list of messages to send. This only includes the [p_header,p_parent,p_metadata,p_content,buffer1,buffer2,...] portion of the message.
ident : ident or list
A single ident or a list of idents to use in sending.
-
serialize
(msg, ident=None)¶ Serialize the message components to bytes.
This is roughly the inverse of unserialize. The serialize/unserialize methods work with full message lists, whereas pack/unpack work with the individual message parts in the message list.
Parameters: msg : dict or Message
The next message dict as returned by the self.msg method.
Returns: msg_list : list
The list of bytes objects to be sent with the format:
[ident1, ident2, ..., DELIM, HMAC, p_header, p_parent, p_metadata, p_content, buffer1, buffer2, ...]
In this list, the
p_*
entities are the packed or serialized versions, so if JSON is used, these are utf8 encoded JSON strings.
-
sign
(msg_list)¶ Sign a message with HMAC digest. If no auth, return b’‘.
Parameters: msg_list : list
The [p_header,p_parent,p_content] part of the message list.
-
unserialize
(msg_list, content=True, copy=True)¶ Unserialize a msg_list to a nested message dict.
This is roughly the inverse of serialize. The serialize/unserialize methods work with full message lists, whereas pack/unpack work with the individual message parts in the message list.
Parameters: msg_list : list of bytes or Message objects
The list of message parts of the form [HMAC,p_header,p_parent, p_metadata,p_content,buffer1,buffer2,...].
content : bool (True)
Whether to unpack the content dict (True), or leave it packed (False).
copy : bool (True)
Whether to return the bytes (True), or the non-copying Message object in each place (False).
Returns: msg : dict
The nested message dict with top-level keys [header, parent_header, content, buffers].
-
6 Functions¶
-
IPython.kernel.zmq.session.
compare_digest
(a, b) → bool¶ Return ‘a == b’. This function uses an approach designed to prevent timing analysis, making it appropriate for cryptography. a and b must both be of the same type: either str (ASCII only), or any type that supports the buffer protocol (e.g. bytes).
Note: If a and b are of different lengths, or if an error occurs, a timing attack could theoretically reveal information about the types and lengths of a and b–but not their values.
-
IPython.kernel.zmq.session.
squash_unicode
(obj)¶ coerce unicode back to bytestrings.
-
IPython.kernel.zmq.session.
default_secure
(cfg)¶ Set the default behavior for a config environment to be secure.
If Session.key/keyfile have not been set, set Session.key to a new random UUID.
-
IPython.kernel.zmq.session.
msg_header
(msg_id, msg_type, username, session)¶
-
IPython.kernel.zmq.session.
extract_header
(msg_or_header)¶ Given a message or header, return the header.
-
IPython.kernel.zmq.session.
test_msg2obj
()¶