From 60a21ecc14093aa73dd64456c1663d01789453c4 Mon Sep 17 00:00:00 2001 From: "Brian E. Granger" Date: Wed, 13 Jul 2011 11:33:50 -0700 Subject: [PATCH] Work to adapt routers to new Session message protocol. --- IPython/frontend/html/notebook/handlers.py | 65 +++---------------- .../frontend/html/notebook/kernelmanager.py | 3 +- IPython/frontend/html/notebook/notebookapp.py | 6 +- 3 files changed, 14 insertions(+), 60 deletions(-) diff --git a/IPython/frontend/html/notebook/handlers.py b/IPython/frontend/html/notebook/handlers.py index 2d722fdb8..f47219770 100644 --- a/IPython/frontend/html/notebook/handlers.py +++ b/IPython/frontend/html/notebook/handlers.py @@ -1,17 +1,22 @@ +"""Tornado handlers for the notebook.""" + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + import datetime import json import logging import os import urllib -import uuid -from Queue import Queue from tornado import web from tornado import websocket +#----------------------------------------------------------------------------- +# Handlers +#----------------------------------------------------------------------------- -_kernel_id_regex = r"(?P\w+-\w+-\w+-\w+-\w+)" -_kernel_action_regex = r"(?Prestart|interrupt)" class MainHandler(web.RequestHandler): def get(self): @@ -39,58 +44,6 @@ class KernelActionHandler(web.RequestHandler): self.write(json.dumps(new_kernel_id)) -class ZMQStreamRouter(object): - - def __init__(self, zmq_stream): - self.zmq_stream = zmq_stream - self._clients = {} - self.zmq_stream.on_recv(self._on_zmq_reply) - - def register_client(self, client): - client_id = uuid.uuid4() - self._clients[client_id] = client - return client_id - - def unregister_client(self, client_id): - del self._clients[client_id] - - def copy_clients(self, router): - # Copy the clients of another router. - for client_id, client in router._clients.items(): - client.router = self - self._clients[client_id] = client - - -class IOPubStreamRouter(ZMQStreamRouter): - - def _on_zmq_reply(self, msg_list): - for client_id, client in self._clients.items(): - for msg in msg_list: - client.write_message(msg) - - def forward_unicode(self, client_id, msg): - # This is a SUB stream that we should never write to. - pass - - -class ShellStreamRouter(ZMQStreamRouter): - - def __init__(self, zmq_stream): - ZMQStreamRouter.__init__(self, zmq_stream) - self._request_queue = Queue() - - def _on_zmq_reply(self, msg_list): - client_id = self._request_queue.get(block=False) - client = self._clients.get(client_id) - if client is not None: - for msg in msg_list: - client.write_message(msg) - - def forward_unicode(self, client_id, msg): - self._request_queue.put(client_id) - self.zmq_stream.send_unicode(msg) - - class ZMQStreamHandler(websocket.WebSocketHandler): def initialize(self, stream_name): diff --git a/IPython/frontend/html/notebook/kernelmanager.py b/IPython/frontend/html/notebook/kernelmanager.py index 58b29e17f..6afc6bd2d 100644 --- a/IPython/frontend/html/notebook/kernelmanager.py +++ b/IPython/frontend/html/notebook/kernelmanager.py @@ -4,7 +4,6 @@ # Imports #----------------------------------------------------------------------------- -import logging import signal import sys import uuid @@ -13,7 +12,7 @@ import zmq from IPython.config.configurable import LoggingConfigurable from IPython.zmq.ipkernel import launch_kernel -from IPython.utils.traitlets import Instance, Dict, Unicode +from IPython.utils.traitlets import Instance, Dict #----------------------------------------------------------------------------- # Classes diff --git a/IPython/frontend/html/notebook/notebookapp.py b/IPython/frontend/html/notebook/notebookapp.py index cf419fc40..7bc7ed60a 100644 --- a/IPython/frontend/html/notebook/notebookapp.py +++ b/IPython/frontend/html/notebook/notebookapp.py @@ -99,8 +99,8 @@ class NotebookWebApplication(web.Application): self._session_dict[kernel_id] = sm iopub_stream = sm.get_iopub_stream() shell_stream = sm.get_shell_stream() - iopub_router = IOPubStreamRouter(iopub_stream) - shell_router = ShellStreamRouter(shell_stream) + iopub_router = IOPubStreamRouter(iopub_stream, sm.session) + shell_router = ShellStreamRouter(shell_stream, sm.session) self._routers[(kernel_id, 'iopub')] = iopub_router self._routers[(kernel_id, 'shell')] = shell_router @@ -139,6 +139,8 @@ class NotebookWebApplication(web.Application): router = self._routers[(kernel_id, stream_name)] return router + + #----------------------------------------------------------------------------- # Aliases and Flags #-----------------------------------------------------------------------------