##// END OF EJS Templates
Move displayhook for ZMQ shell to zmq.displayhook, and rename to make the difference clearer.
Thomas Kluyver -
Show More
@@ -41,9 +41,9 b' class EngineFactory(RegistrationFactory):'
41 out_stream_factory=Type('IPython.zmq.iostream.OutStream', config=True,
41 out_stream_factory=Type('IPython.zmq.iostream.OutStream', config=True,
42 help="""The OutStream for handling stdout/err.
42 help="""The OutStream for handling stdout/err.
43 Typically 'IPython.zmq.iostream.OutStream'""")
43 Typically 'IPython.zmq.iostream.OutStream'""")
44 display_hook_factory=Type('IPython.zmq.displayhook.DisplayHook', config=True,
44 display_hook_factory=Type('IPython.zmq.displayhook.ZMQDisplayHook', config=True,
45 help="""The class for handling displayhook.
45 help="""The class for handling displayhook.
46 Typically 'IPython.zmq.displayhook.DisplayHook'""")
46 Typically 'IPython.zmq.displayhook.ZMQDisplayHook'""")
47 location=Unicode(config=True,
47 location=Unicode(config=True,
48 help="""The location (an IP address) of the controller. This is
48 help="""The location (an IP address) of the controller. This is
49 used for disambiguating URLs, to determine whether
49 used for disambiguating URLs, to determine whether
@@ -1,9 +1,13 b''
1 import __builtin__
1 import __builtin__
2 from base64 import encodestring
2
3
3 from session import extract_header
4 from IPython.core.displayhook import DisplayHook
4
5 from IPython.utils.traitlets import Instance, Dict
5 class DisplayHook(object):
6 from session import extract_header, Session
6
7
8 class ZMQDisplayHook(object):
9 """A simple displayhook that publishes the object's repr over a ZeroMQ
10 socket."""
7 topic=None
11 topic=None
8
12
9 def __init__(self, session, pub_socket):
13 def __init__(self, session, pub_socket):
@@ -20,4 +24,41 b' class DisplayHook(object):'
20 parent=self.parent_header, ident=self.topic)
24 parent=self.parent_header, ident=self.topic)
21
25
22 def set_parent(self, parent):
26 def set_parent(self, parent):
23 self.parent_header = extract_header(parent) No newline at end of file
27 self.parent_header = extract_header(parent)
28
29
30 def _encode_png(data):
31 pngdata = data.get('image/png')
32 if pngdata is not None:
33 data['image/png'] = encodestring(pngdata)
34
35 class ZMQShellDisplayHook(DisplayHook):
36 """A displayhook subclass that publishes data using ZeroMQ. This is intended
37 to work with an InteractiveShell instance. It sends a dict of different
38 representations of the object."""
39
40 session = Instance(Session)
41 pub_socket = Instance('zmq.Socket')
42 parent_header = Dict({})
43
44 def set_parent(self, parent):
45 """Set the parent for outbound messages."""
46 self.parent_header = extract_header(parent)
47
48 def start_displayhook(self):
49 self.msg = self.session.msg(u'pyout', {}, parent=self.parent_header)
50
51 def write_output_prompt(self):
52 """Write the output prompt."""
53 if self.do_full_cache:
54 self.msg['content']['execution_count'] = self.prompt_count
55
56 def write_format_data(self, format_dict):
57 pngdata = format_dict.get('image/png')
58 _encode_png(format_dict)
59 self.msg['content']['data'] = format_dict
60
61 def finish_displayhook(self):
62 """Finish up all displayhook activities."""
63 self.session.send(self.pub_socket, self.msg)
64 self.msg = None
@@ -13,7 +13,6 b' import sys'
13 from parentpoller import ParentPollerWindows
13 from parentpoller import ParentPollerWindows
14
14
15
15
16
17 def base_launch_kernel(code, shell_port=0, iopub_port=0, stdin_port=0, hb_port=0,
16 def base_launch_kernel(code, shell_port=0, iopub_port=0, stdin_port=0, hb_port=0,
18 ip=None, stdin=None, stdout=None, stderr=None,
17 ip=None, stdin=None, stdout=None, stderr=None,
19 executable=None, independent=False, extra_arguments=[]):
18 executable=None, independent=False, extra_arguments=[]):
@@ -16,7 +16,6 b' machinery. This should thus be thought of as scaffolding.'
16 from __future__ import print_function
16 from __future__ import print_function
17
17
18 # Stdlib
18 # Stdlib
19 from base64 import encodestring
20 import inspect
19 import inspect
21 import os
20 import os
22
21
@@ -26,7 +25,6 b' from IPython.core.interactiveshell import ('
26 )
25 )
27 from IPython.core import page
26 from IPython.core import page
28 from IPython.core.autocall import ZMQExitAutocall
27 from IPython.core.autocall import ZMQExitAutocall
29 from IPython.core.displayhook import DisplayHook
30 from IPython.core.displaypub import DisplayPublisher
28 from IPython.core.displaypub import DisplayPublisher
31 from IPython.core.macro import Macro
29 from IPython.core.macro import Macro
32 from IPython.core.magic import MacroToEdit
30 from IPython.core.magic import MacroToEdit
@@ -35,6 +33,7 b' from IPython.utils import io'
35 from IPython.utils.path import get_py_filename
33 from IPython.utils.path import get_py_filename
36 from IPython.utils.traitlets import Instance, Type, Dict
34 from IPython.utils.traitlets import Instance, Type, Dict
37 from IPython.utils.warn import warn
35 from IPython.utils.warn import warn
36 from IPython.zmq.displayhook import ZMQShellDisplayHook
38 from IPython.zmq.session import extract_header
37 from IPython.zmq.session import extract_header
39 from session import Session
38 from session import Session
40
39
@@ -49,42 +48,6 b' install_payload_page()'
49 # Functions and classes
48 # Functions and classes
50 #-----------------------------------------------------------------------------
49 #-----------------------------------------------------------------------------
51
50
52 def _encode_png(data):
53 pngdata = data.get('image/png')
54 if pngdata is not None:
55 data['image/png'] = encodestring(pngdata)
56
57
58 class ZMQDisplayHook(DisplayHook):
59 """A displayhook subclass that publishes data using ZeroMQ."""
60
61 session = Instance(Session)
62 pub_socket = Instance('zmq.Socket')
63 parent_header = Dict({})
64
65 def set_parent(self, parent):
66 """Set the parent for outbound messages."""
67 self.parent_header = extract_header(parent)
68
69 def start_displayhook(self):
70 self.msg = self.session.msg(u'pyout', {}, parent=self.parent_header)
71
72 def write_output_prompt(self):
73 """Write the output prompt."""
74 if self.do_full_cache:
75 self.msg['content']['execution_count'] = self.prompt_count
76
77 def write_format_data(self, format_dict):
78 pngdata = format_dict.get('image/png')
79 _encode_png(format_dict)
80 self.msg['content']['data'] = format_dict
81
82 def finish_displayhook(self):
83 """Finish up all displayhook activities."""
84 self.session.send(self.pub_socket, self.msg)
85 self.msg = None
86
87
88 class ZMQDisplayPublisher(DisplayPublisher):
51 class ZMQDisplayPublisher(DisplayPublisher):
89 """A display publisher that publishes data using a ZeroMQ PUB socket."""
52 """A display publisher that publishes data using a ZeroMQ PUB socket."""
90
53
@@ -114,7 +77,7 b' class ZMQDisplayPublisher(DisplayPublisher):'
114 class ZMQInteractiveShell(InteractiveShell):
77 class ZMQInteractiveShell(InteractiveShell):
115 """A subclass of InteractiveShell for ZMQ."""
78 """A subclass of InteractiveShell for ZMQ."""
116
79
117 displayhook_class = Type(ZMQDisplayHook)
80 displayhook_class = Type(ZMQShellDisplayHook)
118 display_pub_class = Type(ZMQDisplayPublisher)
81 display_pub_class = Type(ZMQDisplayPublisher)
119
82
120 exiter = Instance(ZMQExitAutocall)
83 exiter = Instance(ZMQExitAutocall)
General Comments 0
You need to be logged in to leave comments. Login now