##// END OF EJS Templates
Update copyright/author statements....
Update copyright/author statements. - Updated copyright statements to use the new form: # Copyright (C) 2008-2009 The IPython Development Team I left the old notices in place (just updating the year in some cases), because as far as I know, old copyright statements are not meant to be retroactively modified. - Also, on most files, replaced __author__ marks with an 'Authors' section in the module docstring. This reduces top-level code in the module, while ensuring that the Author(s) get properly acknowledged in auto-generated API docs (sphinx doesn't read __author__ marks, but it will include the module docstring). I only left a few in place for very old files that we ship externally, and for those by Laurent: he had his authorship mark both in the docstring and in __author__ variables, so I think out of courtesy it would be better to ask him about it on the list. All the others were I found regular __author__ variables, I moved them to the main docstring.

File last commit:

r1234:52b55407
r1875:bba7e571
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