diff --git a/IPython/frontend/html/notebook/handlers.py b/IPython/frontend/html/notebook/handlers.py index 6c0530d66..4d3c854fa 100644 --- a/IPython/frontend/html/notebook/handlers.py +++ b/IPython/frontend/html/notebook/handlers.py @@ -101,10 +101,25 @@ class ZMQStreamHandler(websocket.WebSocketHandler): """ idents, msg_list = self.session.feed_identities(msg_list) msg = self.session.unserialize(msg_list) - msg['header'].pop('date') + try: + msg['header'].pop('date') + except KeyError: + pass + try: + msg['parent_header'].pop('date') + except KeyError: + pass msg.pop('buffers') return jsonapi.dumps(msg) + def _on_zmq_reply(self, msg_list): + try: + msg = self._reserialize_reply(msg_list) + except: + self.application.kernel_manager.log.critical("Malformed message: %r" % msg_list) + else: + self.write_message(msg) + class IOPubHandler(ZMQStreamHandler): @@ -122,10 +137,6 @@ class IOPubHandler(ZMQStreamHandler): self.iopub_stream.on_recv(self._on_zmq_reply) self.start_hb(self.kernel_died) - def _on_zmq_reply(self, msg_list): - msg = self._reserialize_reply(msg_list) - self.write_message(msg) - def on_close(self): self.stop_hb() self.iopub_stream.close() @@ -186,10 +197,6 @@ class ShellHandler(ZMQStreamHandler): self.shell_stream = self.application.kernel_manager.create_shell_stream(kernel_id) self.shell_stream.on_recv(self._on_zmq_reply) - def _on_zmq_reply(self, msg_list): - msg = self._reserialize_reply(msg_list) - self.write_message(msg) - def on_message(self, msg): if len(msg) < self.max_msg_size: msg = jsonapi.loads(msg)