Spaces:
Runtime error
Runtime error
| # encoding: utf-8 | |
| """ | |
| A context manager for handling sys.displayhook. | |
| Authors: | |
| * Robert Kern | |
| * Brian Granger | |
| """ | |
| #----------------------------------------------------------------------------- | |
| # Copyright (C) 2008-2011 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 traitlets.config.configurable import Configurable | |
| from traitlets import Any | |
| #----------------------------------------------------------------------------- | |
| # Classes and functions | |
| #----------------------------------------------------------------------------- | |
| class DisplayTrap(Configurable): | |
| """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. | |
| """ | |
| hook = Any() | |
| def __init__(self, hook=None): | |
| super(DisplayTrap, self).__init__(hook=hook, config=None) | |
| self.old_hook = None | |
| # 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 | |
| def __enter__(self): | |
| if self._nested_level == 0: | |
| self.set() | |
| self._nested_level += 1 | |
| return self | |
| def __exit__(self, type, value, traceback): | |
| if self._nested_level == 1: | |
| self.unset() | |
| self._nested_level -= 1 | |
| # Returning False will cause exceptions to propagate | |
| return False | |
| def is_active(self) -> bool: | |
| return self._nested_level != 0 | |
| 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 | |