##// END OF EJS Templates
bugfix for call to structured_traceback (#14453)...
bugfix for call to structured_traceback (#14453) Calls to `structured_traceback` take the exploded 3-tuple of `*sys.exc_info()` as separate arguments, so we don't want to pass the 3-tuple as one argument. This should fix some of the symptoms people are seeing in https://github.com/ipython/ipython/issues/12831 Test plan: local editable install, seems to work OK. Haven't tried to repro the problem from the linked issue but this change probably can't hurt. From https://github.com/ipython/ipython/pull/14454, which is just an empty commit, I see the same test failures as in this PR's "Run Downstream tests" job: https://github.com/ipython/ipython/actions/runs/9375565881/job/25813901627?pr=14454 So I'm guessing it's not related to the change in this PR.

File last commit:

r27639:c55dbf99
r28790:1454013b merge
Show More
autocall.py
70 lines | 1.9 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""
Autocall capabilities for IPython.core.
Authors:
* Brian Granger
* Fernando Perez
* Thomas Kluyver
Notes
-----
"""
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class IPyAutocall(object):
""" Instances of this class are always autocalled
This happens regardless of 'autocall' variable state. Use this to
develop macro-like mechanisms.
"""
_ip = None
rewrite = True
def __init__(self, ip=None):
self._ip = ip
def set_ip(self, ip):
"""Will be used to set _ip point to current ipython instance b/f call
Override this method if you don't want this to happen.
"""
self._ip = ip
class ExitAutocall(IPyAutocall):
"""An autocallable object which will be added to the user namespace so that
exit, exit(), quit or quit() are all valid ways to close the shell."""
rewrite = False
def __call__(self):
self._ip.ask_exit()
class ZMQExitAutocall(ExitAutocall):
"""Exit IPython. Autocallable, so it needn't be explicitly called.
Parameters
----------
keep_kernel : bool
If True, leave the kernel alive. Otherwise, tell the kernel to exit too
(default).
"""
def __call__(self, keep_kernel=False):
self._ip.keepkernel_on_exit = keep_kernel
self._ip.ask_exit()