##// END OF EJS Templates
Simplify completer handling by isolating readline-specific logic more....
Simplify completer handling by isolating readline-specific logic more. Also, I removed a hack we were using of storing the completer globally inside sys. This was used for the rare case of embedding ipython-inside-ipython, something which is more of a party trick. If we ever want to support that well, we can write a cleaner solution than polluting sys with 'ipcompleter'. But for now, I'm trying to simplify our completer machinery and remove buggy and/or error-prone hacks. Note that the normal use of embedded ipython inside of user's programs isn't affected by this.

File last commit:

r2058:7e8fc59a
r2952:bad8f4f8
Show More
sync_traceback_trap.py
53 lines | 1.7 KiB | text/x-python | PythonLexer
/ IPython / kernel / core / sync_traceback_trap.py
# 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