##// END OF EJS Templates
Make comm manager (mostly) independent of InteractiveShell...
Thomas Kluyver -
Show More
@@ -14,18 +14,17 b' from IPython.utils.traitlets import Instance, Unicode, Bytes, Bool, Dict, Any'
14 14
15 15 class Comm(LoggingConfigurable):
16 16
17 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
18 def _shell_default(self):
19 return get_ipython()
17 # If this is instantiated by a non-IPython kernel, shell will be None
18 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC',
19 allow_none=True)
20 kernel = Instance('IPython.kernel.zmq.kernelbase.Kernel')
20 21
21 22 iopub_socket = Any()
22 23 def _iopub_socket_default(self):
23 return self.shell.kernel.iopub_socket
24 return self.kernel.iopub_socket
24 25 session = Instance('IPython.kernel.zmq.session.Session')
25 26 def _session_default(self):
26 if self.shell is None or not hasattr(self.shell, 'kernel'):
27 return
28 return self.shell.kernel.session
27 return self.kernel.session
29 28
30 29 target_name = Unicode('comm')
31 30
@@ -63,7 +62,7 b' class Comm(LoggingConfigurable):'
63 62 self.session.send(self.iopub_socket, msg_type,
64 63 content,
65 64 metadata=json_clean(metadata),
66 parent=self.shell.get_parent(),
65 parent=self.kernel._parent_header,
67 66 ident=self.topic,
68 67 )
69 68
@@ -132,9 +131,11 b' class Comm(LoggingConfigurable):'
132 131 """Handle a comm_msg message"""
133 132 self.log.debug("handle_msg[%s](%s)", self.comm_id, msg)
134 133 if self._msg_callback:
135 self.shell.events.trigger('pre_execute')
134 if self.shell:
135 self.shell.events.trigger('pre_execute')
136 136 self._msg_callback(msg)
137 self.shell.events.trigger('post_execute')
137 if self.shell:
138 self.shell.events.trigger('post_execute')
138 139
139 140
140 141 __all__ = ['Comm']
@@ -28,17 +28,17 b' def lazy_keys(dikt):'
28 28 class CommManager(LoggingConfigurable):
29 29 """Manager for Comms in the Kernel"""
30 30
31 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
32 def _shell_default(self):
33 return get_ipython()
31 # If this is instantiated by a non-IPython kernel, shell will be None
32 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC',
33 allow_none=True)
34 kernel = Instance('IPython.kernel.zmq.kernelbase.Kernel')
35
34 36 iopub_socket = Any()
35 37 def _iopub_socket_default(self):
36 return self.shell.kernel.iopub_socket
38 return self.kernel.iopub_socket
37 39 session = Instance('IPython.kernel.zmq.session.Session')
38 40 def _session_default(self):
39 if self.shell is None:
40 return
41 return self.shell.kernel.session
41 return self.kernel.session
42 42
43 43 comms = Dict()
44 44 targets = Dict()
@@ -68,6 +68,7 b' class CommManager(LoggingConfigurable):'
68 68 """Register a new comm"""
69 69 comm_id = comm.comm_id
70 70 comm.shell = self.shell
71 comm.kernel = self.kernel
71 72 comm.iopub_socket = self.iopub_socket
72 73 self.comms[comm_id] = comm
73 74 return comm_id
@@ -102,6 +103,7 b' class CommManager(LoggingConfigurable):'
102 103 f = self.targets.get(target_name, None)
103 104 comm = Comm(comm_id=comm_id,
104 105 shell=self.shell,
106 kernel=self.kernel,
105 107 iopub_socket=self.iopub_socket,
106 108 primary=False,
107 109 )
@@ -565,7 +565,8 b' class ZMQInteractiveShell(InteractiveShell):'
565 565 self.magics_manager.register_alias('ed', 'edit')
566 566
567 567 def init_comms(self):
568 self.comm_manager = CommManager(shell=self, parent=self)
568 self.comm_manager = CommManager(shell=self, parent=self,
569 kernel=self.kernel)
569 570 self.configurables.append(self.comm_manager)
570 571
571 572
General Comments 0
You need to be logged in to leave comments. Login now