displayhook.py
65 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2754 | import __builtin__ | ||
MinRK
|
r4792 | import sys | ||
Brian Granger
|
r2754 | |||
Thomas Kluyver
|
r4067 | from IPython.core.displayhook import DisplayHook | ||
MinRK
|
r9375 | from IPython.kernel.inprocess.socket import SocketABC | ||
MinRK
|
r7737 | from IPython.utils.jsonutil import encode_images | ||
epatters
|
r8418 | from IPython.utils.traitlets import Instance, Dict | ||
Thomas Kluyver
|
r4067 | from session import extract_header, Session | ||
Brian Granger
|
r2754 | |||
Thomas Kluyver
|
r4067 | class ZMQDisplayHook(object): | ||
"""A simple displayhook that publishes the object's repr over a ZeroMQ | ||||
socket.""" | ||||
MinRK
|
r11697 | topic=b'pyout' | ||
MinRK
|
r3602 | |||
Brian Granger
|
r2754 | 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__._ = obj | ||||
MinRK
|
r4792 | sys.stdout.flush() | ||
sys.stderr.flush() | ||||
MinRK
|
r3269 | msg = self.session.send(self.pub_socket, u'pyout', {u'data':repr(obj)}, | ||
MinRK
|
r3602 | parent=self.parent_header, ident=self.topic) | ||
Brian Granger
|
r2754 | |||
def set_parent(self, parent): | ||||
Thomas Kluyver
|
r4067 | 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.""" | ||||
MinRK
|
r6814 | topic=None | ||
Thomas Kluyver
|
r4067 | |||
session = Instance(Session) | ||||
epatters
|
r8418 | pub_socket = Instance(SocketABC) | ||
Thomas Kluyver
|
r4067 | 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.""" | ||||
MinRK
|
r6693 | self.msg['content']['execution_count'] = self.prompt_count | ||
Thomas Kluyver
|
r4067 | |||
MinRK
|
r10443 | def write_format_data(self, format_dict, md_dict=None): | ||
MinRK
|
r7737 | self.msg['content']['data'] = encode_images(format_dict) | ||
MinRK
|
r10443 | self.msg['content']['metadata'] = md_dict | ||
Thomas Kluyver
|
r4067 | |||
def finish_displayhook(self): | ||||
"""Finish up all displayhook activities.""" | ||||
MinRK
|
r4792 | sys.stdout.flush() | ||
sys.stderr.flush() | ||||
MinRK
|
r6814 | self.session.send(self.pub_socket, self.msg, ident=self.topic) | ||
Thomas Kluyver
|
r4067 | self.msg = None | ||
Brian E. Granger
|
r4528 | |||