##// END OF EJS Templates
New version of ipcluster and docs updates....
New version of ipcluster and docs updates. This branch has a complete rewrite of the ipcluster script. The script is now based on Twisted and has support for starting clusters using PBS, mpirun and on localhost. The developer docs have been fully updated to reflect our current dev workflow with lp and bzr. The changelog has been reformatted some to keep its style consistent. A new security document has been aded that describes the Foolscap security model in depth. Minor fixed to ipengine and ipcluster.

File last commit:

r1234:52b55407
r1797:a2c0df6b merge
Show More
display_trap.py
100 lines | 3.1 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""Manager for replacing sys.displayhook()."""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
# Copyright (C) 2008 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------
# Standard library imports.
import sys
class DisplayTrap(object):
""" Object to trap and format objects passing through sys.displayhook().
This trap maintains two lists of callables: formatters and callbacks. The
formatters take the *last* object that has gone through since the trap was
set and returns a string representation. Callbacks are executed on *every*
object that passes through the displayhook and does not return anything.
"""
def __init__(self, formatters=None, callbacks=None):
# A list of formatters to apply. Each should be an instance conforming
# to the IDisplayFormatter interface.
if formatters is None:
formatters = []
self.formatters = formatters
# A list of callables, each of which should be executed *every* time an
# object passes through sys.displayhook().
if callbacks is None:
callbacks = []
self.callbacks = callbacks
# The last object to pass through the displayhook.
self.obj = None
# The previous hook before we replace it.
self.old_hook = None
def hook(self, obj):
""" This method actually implements the hook.
"""
# Run through the list of callbacks and trigger all of them.
for callback in self.callbacks:
callback(obj)
# Store the object for formatting.
self.obj = obj
def set(self):
""" Set the hook.
"""
if sys.displayhook is not self.hook:
self.old_hook = sys.displayhook
sys.displayhook = self.hook
def unset(self):
""" Unset the hook.
"""
sys.displayhook = self.old_hook
def clear(self):
""" Reset the stored object.
"""
self.obj = None
def add_to_message(self, message):
""" Add the formatted display of the objects to the message dictionary
being returned from the interpreter to its listeners.
"""
# If there was no displayed object (or simply None), then don't add
# anything.
if self.obj is None:
return
# Go through the list of formatters and let them add their formatting.
display = {}
for formatter in self.formatters:
representation = formatter(self.obj)
if representation is not None:
display[formatter.identifier] = representation
message['display'] = display