|
|
# encoding: utf-8
|
|
|
|
|
|
"""Object to manage sys.excepthook().
|
|
|
|
|
|
Synchronous version: prints errors when called.
|
|
|
"""
|
|
|
|
|
|
__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
|
|
|
#-------------------------------------------------------------------------------
|
|
|
from traceback_trap import TracebackTrap
|
|
|
from IPython.core.ultratb import ColorTB
|
|
|
|
|
|
class SyncTracebackTrap(TracebackTrap):
|
|
|
""" TracebackTrap that displays immediatly the traceback in addition
|
|
|
to capturing it. Useful in frontends, as without this traceback trap,
|
|
|
some tracebacks never get displayed.
|
|
|
"""
|
|
|
|
|
|
def __init__(self, sync_formatter=None, formatters=None,
|
|
|
raiseException=True):
|
|
|
"""
|
|
|
sync_formatter: Callable to display the traceback.
|
|
|
formatters: A list of formatters to apply.
|
|
|
"""
|
|
|
TracebackTrap.__init__(self, formatters=formatters)
|
|
|
if sync_formatter is None:
|
|
|
sync_formatter = ColorTB(color_scheme='LightBG')
|
|
|
self.sync_formatter = sync_formatter
|
|
|
self.raiseException = raiseException
|
|
|
|
|
|
|
|
|
def hook(self, *args):
|
|
|
""" This method actually implements the hook.
|
|
|
"""
|
|
|
self.args = args
|
|
|
if not self.raiseException:
|
|
|
print self.sync_formatter(*self.args)
|
|
|
else:
|
|
|
raise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|