##// END OF EJS Templates
Simplified output stream management in ultratb....
Simplified output stream management in ultratb. This lets us have one less hack in the testing globalipapp code, as well as rationalizing the ultratb code a little more. There is now an ostream property for all output that can be used consistently.

File last commit:

r2693:a6cdb64c
r2852:6c926026
Show More
blockingkernelmanager.py
43 lines | 1.2 KiB | text/x-python | PythonLexer
/ IPython / zmq / blockingkernelmanager.py
from kernelmanager import SubSocketChannel
from Queue import Queue, Empty
class MsgNotReady(Exception):
pass
class BlockingSubSocketChannel(SubSocketChannel):
def __init__(self, context, session, address=None):
super(BlockingSubSocketChannel, self).__init__(context, session, address)
self._in_queue = Queue()
def call_handlers(self, msg):
self._in_queue.put(msg)
def msg_ready(self):
"""Is there a message that has been received?"""
if self._in_queue.qsize() == 0:
return False
else:
return True
def get_msg(self, block=True, timeout=None):
"""Get a message if there is one that is ready."""
try:
msg = self.in_queue.get(block, timeout)
except Empty:
raise MsgNotReady('No message has been received.')
else:
return msg
def get_msgs(self):
"""Get all messages that are currently ready."""
msgs = []
while True:
try:
msg = self.get_msg(block=False)
except MsgNotReady:
break
else:
msgs.append(msg)
return msgs