Work to adapt routers to new Session message protocol.

pull/37/head
Brian E. Granger 15 years ago
parent a66bf72d2b
commit 60a21ecc14

@ -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<kernel_id>\w+-\w+-\w+-\w+-\w+)"
_kernel_action_regex = r"(?P<action>restart|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):

@ -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

@ -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
#-----------------------------------------------------------------------------

Loading…
Cancel
Save