##// END OF EJS Templates
Make traitlets notify check more robust against classes redefining equality and bool...
Make traitlets notify check more robust against classes redefining equality and bool Before this change, numpy arrays caused problems since comparing two numpy arrays returns an array of truth values, rather than a single truth value. This change guards against redefining the semantics of comparison by notifying on a trait change if the equality comparison returns anything other than an explicit True value.

File last commit:

r13888:74d7ea88
r15462:e1b4ab8c
Show More
displayhook.py
67 lines | 2.2 KiB | text/x-python | PythonLexer
"""Replacements for sys.displayhook that publish over ZMQ.
"""
import sys
from IPython.core.displayhook import DisplayHook
from IPython.kernel.inprocess.socket import SocketABC
from IPython.utils.jsonutil import encode_images
from IPython.utils.py3compat import builtin_mod
from IPython.utils.traitlets import Instance, Dict
from .session import extract_header, Session
class ZMQDisplayHook(object):
"""A simple displayhook that publishes the object's repr over a ZeroMQ
socket."""
topic=b'pyout'
def __init__(self, session, pub_socket):
self.session = session
self.pub_socket = pub_socket
self.parent_header = {}
def __call__(self, obj):
if obj is None:
return
builtin_mod._ = obj
sys.stdout.flush()
sys.stderr.flush()
msg = self.session.send(self.pub_socket, u'pyout', {u'data':repr(obj)},
parent=self.parent_header, ident=self.topic)
def set_parent(self, parent):
self.parent_header = extract_header(parent)
class ZMQShellDisplayHook(DisplayHook):
"""A displayhook subclass that publishes data using ZeroMQ. This is intended
to work with an InteractiveShell instance. It sends a dict of different
representations of the object."""
topic=None
session = Instance(Session)
pub_socket = Instance(SocketABC)
parent_header = Dict({})
def set_parent(self, parent):
"""Set the parent for outbound messages."""
self.parent_header = extract_header(parent)
def start_displayhook(self):
self.msg = self.session.msg(u'pyout', {}, parent=self.parent_header)
def write_output_prompt(self):
"""Write the output prompt."""
self.msg['content']['execution_count'] = self.prompt_count
def write_format_data(self, format_dict, md_dict=None):
self.msg['content']['data'] = encode_images(format_dict)
self.msg['content']['metadata'] = md_dict
def finish_displayhook(self):
"""Finish up all displayhook activities."""
sys.stdout.flush()
sys.stderr.flush()
self.session.send(self.pub_socket, self.msg, ident=self.topic)
self.msg = None