# 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