##// END OF EJS Templates
Changed Component.__init__ so that config is not deepcopy'd....
Changed Component.__init__ so that config is not deepcopy'd. Previously, we were deepcoping the config for each component. This causes overhead and it is not clear at this point that having components share config (by reference) is a bad idea.

File last commit:

r2252:3ddcb2dc
r2274:680bd23b
Show More
display_trap.py
76 lines | 2.2 KiB | text/x-python | PythonLexer
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231 #!/usr/bin/env python
# encoding: utf-8
"""
A context manager for handling sys.displayhook.
Authors:
* Robert Kern
* Brian Granger
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2009 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
#-----------------------------------------------------------------------------
import sys
from IPython.core.component import Component
Brian Granger
More work on refactoring things into components....
r2244 from IPython.utils.autoattr import auto_attr
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231 #-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
class DisplayTrap(Component):
"""Object to manage sys.displayhook.
This came from IPython.core.kernel.display_hook, but is simplified
(no callbacks or formatters) until more of the core is refactored.
"""
def __init__(self, parent, hook):
super(DisplayTrap, self).__init__(parent, None, None)
self.hook = hook
self.old_hook = None
Brian Granger
Massive refactoring of of the core....
r2245 # We define this to track if a single BuiltinTrap is nested.
# Only turn off the trap when the outermost call to __exit__ is made.
self._nested_level = 0
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231
Brian Granger
More work on refactoring things into components....
r2244 @auto_attr
def shell(self):
Brian Granger
Work on startup related things....
r2252 return Component.get_instances(
Brian Granger
More work on refactoring things into components....
r2244 root=self.root,
Brian Granger
Work on startup related things....
r2252 klass='IPython.core.iplib.InteractiveShell')[0]
Brian Granger
More work on refactoring things into components....
r2244
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231 def __enter__(self):
Brian Granger
Massive refactoring of of the core....
r2245 if self._nested_level == 0:
self.set()
self._nested_level += 1
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231 return self
def __exit__(self, type, value, traceback):
Brian Granger
Massive refactoring of of the core....
r2245 if self._nested_level == 1:
self.unset()
self._nested_level -= 1
Brian Granger
sys.displayhook is now managed dynamically by display_trap.
r2231 return True
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