##// END OF EJS Templates
Merge pull request #13559 from bucknerns/fix_path_loop_with_tests...
Matthias Bussonnier -
r27576:da607ae8 merge
parent child Browse files
Show More
@@ -1,3734 +1,3758 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Main IPython class."""
2 """Main IPython class."""
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13
13
14 import abc
14 import abc
15 import ast
15 import ast
16 import atexit
16 import atexit
17 import builtins as builtin_mod
17 import builtins as builtin_mod
18 import dis
18 import dis
19 import functools
19 import functools
20 import inspect
20 import inspect
21 import os
21 import os
22 import re
22 import re
23 import runpy
23 import runpy
24 import subprocess
24 import subprocess
25 import sys
25 import sys
26 import tempfile
26 import tempfile
27 import traceback
27 import traceback
28 import types
28 import types
29 import warnings
29 import warnings
30 from ast import stmt
30 from ast import stmt
31 from io import open as io_open
31 from io import open as io_open
32 from logging import error
32 from logging import error
33 from pathlib import Path
33 from pathlib import Path
34 from typing import Callable
34 from typing import Callable
35 from typing import List as ListType
35 from typing import List as ListType
36 from typing import Optional, Tuple
36 from typing import Optional, Tuple
37 from warnings import warn
37 from warnings import warn
38
38
39 from pickleshare import PickleShareDB
39 from pickleshare import PickleShareDB
40 from tempfile import TemporaryDirectory
40 from tempfile import TemporaryDirectory
41 from traitlets import (
41 from traitlets import (
42 Any,
42 Any,
43 Bool,
43 Bool,
44 CaselessStrEnum,
44 CaselessStrEnum,
45 Dict,
45 Dict,
46 Enum,
46 Enum,
47 Instance,
47 Instance,
48 Integer,
48 Integer,
49 List,
49 List,
50 Type,
50 Type,
51 Unicode,
51 Unicode,
52 default,
52 default,
53 observe,
53 observe,
54 validate,
54 validate,
55 )
55 )
56 from traitlets.config.configurable import SingletonConfigurable
56 from traitlets.config.configurable import SingletonConfigurable
57 from traitlets.utils.importstring import import_item
57 from traitlets.utils.importstring import import_item
58
58
59 import IPython.core.hooks
59 import IPython.core.hooks
60 from IPython.core import magic, oinspect, page, prefilter, ultratb
60 from IPython.core import magic, oinspect, page, prefilter, ultratb
61 from IPython.core.alias import Alias, AliasManager
61 from IPython.core.alias import Alias, AliasManager
62 from IPython.core.autocall import ExitAutocall
62 from IPython.core.autocall import ExitAutocall
63 from IPython.core.builtin_trap import BuiltinTrap
63 from IPython.core.builtin_trap import BuiltinTrap
64 from IPython.core.compilerop import CachingCompiler, check_linecache_ipython
64 from IPython.core.compilerop import CachingCompiler, check_linecache_ipython
65 from IPython.core.debugger import InterruptiblePdb
65 from IPython.core.debugger import InterruptiblePdb
66 from IPython.core.display_trap import DisplayTrap
66 from IPython.core.display_trap import DisplayTrap
67 from IPython.core.displayhook import DisplayHook
67 from IPython.core.displayhook import DisplayHook
68 from IPython.core.displaypub import DisplayPublisher
68 from IPython.core.displaypub import DisplayPublisher
69 from IPython.core.error import InputRejected, UsageError
69 from IPython.core.error import InputRejected, UsageError
70 from IPython.core.events import EventManager, available_events
70 from IPython.core.events import EventManager, available_events
71 from IPython.core.extensions import ExtensionManager
71 from IPython.core.extensions import ExtensionManager
72 from IPython.core.formatters import DisplayFormatter
72 from IPython.core.formatters import DisplayFormatter
73 from IPython.core.history import HistoryManager
73 from IPython.core.history import HistoryManager
74 from IPython.core.inputtransformer2 import ESC_MAGIC, ESC_MAGIC2
74 from IPython.core.inputtransformer2 import ESC_MAGIC, ESC_MAGIC2
75 from IPython.core.logger import Logger
75 from IPython.core.logger import Logger
76 from IPython.core.macro import Macro
76 from IPython.core.macro import Macro
77 from IPython.core.payload import PayloadManager
77 from IPython.core.payload import PayloadManager
78 from IPython.core.prefilter import PrefilterManager
78 from IPython.core.prefilter import PrefilterManager
79 from IPython.core.profiledir import ProfileDir
79 from IPython.core.profiledir import ProfileDir
80 from IPython.core.usage import default_banner
80 from IPython.core.usage import default_banner
81 from IPython.display import display
81 from IPython.display import display
82 from IPython.paths import get_ipython_dir
82 from IPython.paths import get_ipython_dir
83 from IPython.testing.skipdoctest import skip_doctest
83 from IPython.testing.skipdoctest import skip_doctest
84 from IPython.utils import PyColorize, io, openpy, py3compat
84 from IPython.utils import PyColorize, io, openpy, py3compat
85 from IPython.utils.decorators import undoc
85 from IPython.utils.decorators import undoc
86 from IPython.utils.io import ask_yes_no
86 from IPython.utils.io import ask_yes_no
87 from IPython.utils.ipstruct import Struct
87 from IPython.utils.ipstruct import Struct
88 from IPython.utils.path import ensure_dir_exists, get_home_dir, get_py_filename
88 from IPython.utils.path import ensure_dir_exists, get_home_dir, get_py_filename
89 from IPython.utils.process import getoutput, system
89 from IPython.utils.process import getoutput, system
90 from IPython.utils.strdispatch import StrDispatch
90 from IPython.utils.strdispatch import StrDispatch
91 from IPython.utils.syspathcontext import prepended_to_syspath
91 from IPython.utils.syspathcontext import prepended_to_syspath
92 from IPython.utils.text import DollarFormatter, LSString, SList, format_screen
92 from IPython.utils.text import DollarFormatter, LSString, SList, format_screen
93
93
94 sphinxify: Optional[Callable]
94 sphinxify: Optional[Callable]
95
95
96 try:
96 try:
97 import docrepr.sphinxify as sphx
97 import docrepr.sphinxify as sphx
98
98
99 def sphinxify(oinfo):
99 def sphinxify(oinfo):
100 wrapped_docstring = sphx.wrap_main_docstring(oinfo)
100 wrapped_docstring = sphx.wrap_main_docstring(oinfo)
101
101
102 def sphinxify_docstring(docstring):
102 def sphinxify_docstring(docstring):
103 with TemporaryDirectory() as dirname:
103 with TemporaryDirectory() as dirname:
104 return {
104 return {
105 "text/html": sphx.sphinxify(wrapped_docstring, dirname),
105 "text/html": sphx.sphinxify(wrapped_docstring, dirname),
106 "text/plain": docstring,
106 "text/plain": docstring,
107 }
107 }
108
108
109 return sphinxify_docstring
109 return sphinxify_docstring
110 except ImportError:
110 except ImportError:
111 sphinxify = None
111 sphinxify = None
112
112
113
113
114 class ProvisionalWarning(DeprecationWarning):
114 class ProvisionalWarning(DeprecationWarning):
115 """
115 """
116 Warning class for unstable features
116 Warning class for unstable features
117 """
117 """
118 pass
118 pass
119
119
120 from ast import Module
120 from ast import Module
121
121
122 _assign_nodes = (ast.AugAssign, ast.AnnAssign, ast.Assign)
122 _assign_nodes = (ast.AugAssign, ast.AnnAssign, ast.Assign)
123 _single_targets_nodes = (ast.AugAssign, ast.AnnAssign)
123 _single_targets_nodes = (ast.AugAssign, ast.AnnAssign)
124
124
125 #-----------------------------------------------------------------------------
125 #-----------------------------------------------------------------------------
126 # Await Helpers
126 # Await Helpers
127 #-----------------------------------------------------------------------------
127 #-----------------------------------------------------------------------------
128
128
129 # we still need to run things using the asyncio eventloop, but there is no
129 # we still need to run things using the asyncio eventloop, but there is no
130 # async integration
130 # async integration
131 from .async_helpers import (
131 from .async_helpers import (
132 _asyncio_runner,
132 _asyncio_runner,
133 _curio_runner,
133 _curio_runner,
134 _pseudo_sync_runner,
134 _pseudo_sync_runner,
135 _should_be_async,
135 _should_be_async,
136 _trio_runner,
136 _trio_runner,
137 )
137 )
138
138
139 #-----------------------------------------------------------------------------
139 #-----------------------------------------------------------------------------
140 # Globals
140 # Globals
141 #-----------------------------------------------------------------------------
141 #-----------------------------------------------------------------------------
142
142
143 # compiled regexps for autoindent management
143 # compiled regexps for autoindent management
144 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
144 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
145
145
146 #-----------------------------------------------------------------------------
146 #-----------------------------------------------------------------------------
147 # Utilities
147 # Utilities
148 #-----------------------------------------------------------------------------
148 #-----------------------------------------------------------------------------
149
149
150 @undoc
150 @undoc
151 def softspace(file, newvalue):
151 def softspace(file, newvalue):
152 """Copied from code.py, to remove the dependency"""
152 """Copied from code.py, to remove the dependency"""
153
153
154 oldvalue = 0
154 oldvalue = 0
155 try:
155 try:
156 oldvalue = file.softspace
156 oldvalue = file.softspace
157 except AttributeError:
157 except AttributeError:
158 pass
158 pass
159 try:
159 try:
160 file.softspace = newvalue
160 file.softspace = newvalue
161 except (AttributeError, TypeError):
161 except (AttributeError, TypeError):
162 # "attribute-less object" or "read-only attributes"
162 # "attribute-less object" or "read-only attributes"
163 pass
163 pass
164 return oldvalue
164 return oldvalue
165
165
166 @undoc
166 @undoc
167 def no_op(*a, **kw):
167 def no_op(*a, **kw):
168 pass
168 pass
169
169
170
170
171 class SpaceInInput(Exception): pass
171 class SpaceInInput(Exception): pass
172
172
173
173
174 class SeparateUnicode(Unicode):
174 class SeparateUnicode(Unicode):
175 r"""A Unicode subclass to validate separate_in, separate_out, etc.
175 r"""A Unicode subclass to validate separate_in, separate_out, etc.
176
176
177 This is a Unicode based trait that converts '0'->'' and ``'\\n'->'\n'``.
177 This is a Unicode based trait that converts '0'->'' and ``'\\n'->'\n'``.
178 """
178 """
179
179
180 def validate(self, obj, value):
180 def validate(self, obj, value):
181 if value == '0': value = ''
181 if value == '0': value = ''
182 value = value.replace('\\n','\n')
182 value = value.replace('\\n','\n')
183 return super(SeparateUnicode, self).validate(obj, value)
183 return super(SeparateUnicode, self).validate(obj, value)
184
184
185
185
186 @undoc
186 @undoc
187 class DummyMod(object):
187 class DummyMod(object):
188 """A dummy module used for IPython's interactive module when
188 """A dummy module used for IPython's interactive module when
189 a namespace must be assigned to the module's __dict__."""
189 a namespace must be assigned to the module's __dict__."""
190 __spec__ = None
190 __spec__ = None
191
191
192
192
193 class ExecutionInfo(object):
193 class ExecutionInfo(object):
194 """The arguments used for a call to :meth:`InteractiveShell.run_cell`
194 """The arguments used for a call to :meth:`InteractiveShell.run_cell`
195
195
196 Stores information about what is going to happen.
196 Stores information about what is going to happen.
197 """
197 """
198 raw_cell = None
198 raw_cell = None
199 store_history = False
199 store_history = False
200 silent = False
200 silent = False
201 shell_futures = True
201 shell_futures = True
202
202
203 def __init__(self, raw_cell, store_history, silent, shell_futures):
203 def __init__(self, raw_cell, store_history, silent, shell_futures):
204 self.raw_cell = raw_cell
204 self.raw_cell = raw_cell
205 self.store_history = store_history
205 self.store_history = store_history
206 self.silent = silent
206 self.silent = silent
207 self.shell_futures = shell_futures
207 self.shell_futures = shell_futures
208
208
209 def __repr__(self):
209 def __repr__(self):
210 name = self.__class__.__qualname__
210 name = self.__class__.__qualname__
211 raw_cell = ((self.raw_cell[:50] + '..')
211 raw_cell = ((self.raw_cell[:50] + '..')
212 if len(self.raw_cell) > 50 else self.raw_cell)
212 if len(self.raw_cell) > 50 else self.raw_cell)
213 return '<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s>' %\
213 return '<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s>' %\
214 (name, id(self), raw_cell, self.store_history, self.silent, self.shell_futures)
214 (name, id(self), raw_cell, self.store_history, self.silent, self.shell_futures)
215
215
216
216
217 class ExecutionResult(object):
217 class ExecutionResult(object):
218 """The result of a call to :meth:`InteractiveShell.run_cell`
218 """The result of a call to :meth:`InteractiveShell.run_cell`
219
219
220 Stores information about what took place.
220 Stores information about what took place.
221 """
221 """
222 execution_count = None
222 execution_count = None
223 error_before_exec = None
223 error_before_exec = None
224 error_in_exec: Optional[BaseException] = None
224 error_in_exec: Optional[BaseException] = None
225 info = None
225 info = None
226 result = None
226 result = None
227
227
228 def __init__(self, info):
228 def __init__(self, info):
229 self.info = info
229 self.info = info
230
230
231 @property
231 @property
232 def success(self):
232 def success(self):
233 return (self.error_before_exec is None) and (self.error_in_exec is None)
233 return (self.error_before_exec is None) and (self.error_in_exec is None)
234
234
235 def raise_error(self):
235 def raise_error(self):
236 """Reraises error if `success` is `False`, otherwise does nothing"""
236 """Reraises error if `success` is `False`, otherwise does nothing"""
237 if self.error_before_exec is not None:
237 if self.error_before_exec is not None:
238 raise self.error_before_exec
238 raise self.error_before_exec
239 if self.error_in_exec is not None:
239 if self.error_in_exec is not None:
240 raise self.error_in_exec
240 raise self.error_in_exec
241
241
242 def __repr__(self):
242 def __repr__(self):
243 name = self.__class__.__qualname__
243 name = self.__class__.__qualname__
244 return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
244 return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
245 (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
245 (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
246
246
247
247
248 class InteractiveShell(SingletonConfigurable):
248 class InteractiveShell(SingletonConfigurable):
249 """An enhanced, interactive shell for Python."""
249 """An enhanced, interactive shell for Python."""
250
250
251 _instance = None
251 _instance = None
252
252
253 ast_transformers = List([], help=
253 ast_transformers = List([], help=
254 """
254 """
255 A list of ast.NodeTransformer subclass instances, which will be applied
255 A list of ast.NodeTransformer subclass instances, which will be applied
256 to user input before code is run.
256 to user input before code is run.
257 """
257 """
258 ).tag(config=True)
258 ).tag(config=True)
259
259
260 autocall = Enum((0,1,2), default_value=0, help=
260 autocall = Enum((0,1,2), default_value=0, help=
261 """
261 """
262 Make IPython automatically call any callable object even if you didn't
262 Make IPython automatically call any callable object even if you didn't
263 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
263 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
264 automatically. The value can be '0' to disable the feature, '1' for
264 automatically. The value can be '0' to disable the feature, '1' for
265 'smart' autocall, where it is not applied if there are no more
265 'smart' autocall, where it is not applied if there are no more
266 arguments on the line, and '2' for 'full' autocall, where all callable
266 arguments on the line, and '2' for 'full' autocall, where all callable
267 objects are automatically called (even if no arguments are present).
267 objects are automatically called (even if no arguments are present).
268 """
268 """
269 ).tag(config=True)
269 ).tag(config=True)
270
270
271 autoindent = Bool(True, help=
271 autoindent = Bool(True, help=
272 """
272 """
273 Autoindent IPython code entered interactively.
273 Autoindent IPython code entered interactively.
274 """
274 """
275 ).tag(config=True)
275 ).tag(config=True)
276
276
277 autoawait = Bool(True, help=
277 autoawait = Bool(True, help=
278 """
278 """
279 Automatically run await statement in the top level repl.
279 Automatically run await statement in the top level repl.
280 """
280 """
281 ).tag(config=True)
281 ).tag(config=True)
282
282
283 loop_runner_map ={
283 loop_runner_map ={
284 'asyncio':(_asyncio_runner, True),
284 'asyncio':(_asyncio_runner, True),
285 'curio':(_curio_runner, True),
285 'curio':(_curio_runner, True),
286 'trio':(_trio_runner, True),
286 'trio':(_trio_runner, True),
287 'sync': (_pseudo_sync_runner, False)
287 'sync': (_pseudo_sync_runner, False)
288 }
288 }
289
289
290 loop_runner = Any(default_value="IPython.core.interactiveshell._asyncio_runner",
290 loop_runner = Any(default_value="IPython.core.interactiveshell._asyncio_runner",
291 allow_none=True,
291 allow_none=True,
292 help="""Select the loop runner that will be used to execute top-level asynchronous code"""
292 help="""Select the loop runner that will be used to execute top-level asynchronous code"""
293 ).tag(config=True)
293 ).tag(config=True)
294
294
295 @default('loop_runner')
295 @default('loop_runner')
296 def _default_loop_runner(self):
296 def _default_loop_runner(self):
297 return import_item("IPython.core.interactiveshell._asyncio_runner")
297 return import_item("IPython.core.interactiveshell._asyncio_runner")
298
298
299 @validate('loop_runner')
299 @validate('loop_runner')
300 def _import_runner(self, proposal):
300 def _import_runner(self, proposal):
301 if isinstance(proposal.value, str):
301 if isinstance(proposal.value, str):
302 if proposal.value in self.loop_runner_map:
302 if proposal.value in self.loop_runner_map:
303 runner, autoawait = self.loop_runner_map[proposal.value]
303 runner, autoawait = self.loop_runner_map[proposal.value]
304 self.autoawait = autoawait
304 self.autoawait = autoawait
305 return runner
305 return runner
306 runner = import_item(proposal.value)
306 runner = import_item(proposal.value)
307 if not callable(runner):
307 if not callable(runner):
308 raise ValueError('loop_runner must be callable')
308 raise ValueError('loop_runner must be callable')
309 return runner
309 return runner
310 if not callable(proposal.value):
310 if not callable(proposal.value):
311 raise ValueError('loop_runner must be callable')
311 raise ValueError('loop_runner must be callable')
312 return proposal.value
312 return proposal.value
313
313
314 automagic = Bool(True, help=
314 automagic = Bool(True, help=
315 """
315 """
316 Enable magic commands to be called without the leading %.
316 Enable magic commands to be called without the leading %.
317 """
317 """
318 ).tag(config=True)
318 ).tag(config=True)
319
319
320 banner1 = Unicode(default_banner,
320 banner1 = Unicode(default_banner,
321 help="""The part of the banner to be printed before the profile"""
321 help="""The part of the banner to be printed before the profile"""
322 ).tag(config=True)
322 ).tag(config=True)
323 banner2 = Unicode('',
323 banner2 = Unicode('',
324 help="""The part of the banner to be printed after the profile"""
324 help="""The part of the banner to be printed after the profile"""
325 ).tag(config=True)
325 ).tag(config=True)
326
326
327 cache_size = Integer(1000, help=
327 cache_size = Integer(1000, help=
328 """
328 """
329 Set the size of the output cache. The default is 1000, you can
329 Set the size of the output cache. The default is 1000, you can
330 change it permanently in your config file. Setting it to 0 completely
330 change it permanently in your config file. Setting it to 0 completely
331 disables the caching system, and the minimum value accepted is 3 (if
331 disables the caching system, and the minimum value accepted is 3 (if
332 you provide a value less than 3, it is reset to 0 and a warning is
332 you provide a value less than 3, it is reset to 0 and a warning is
333 issued). This limit is defined because otherwise you'll spend more
333 issued). This limit is defined because otherwise you'll spend more
334 time re-flushing a too small cache than working
334 time re-flushing a too small cache than working
335 """
335 """
336 ).tag(config=True)
336 ).tag(config=True)
337 color_info = Bool(True, help=
337 color_info = Bool(True, help=
338 """
338 """
339 Use colors for displaying information about objects. Because this
339 Use colors for displaying information about objects. Because this
340 information is passed through a pager (like 'less'), and some pagers
340 information is passed through a pager (like 'less'), and some pagers
341 get confused with color codes, this capability can be turned off.
341 get confused with color codes, this capability can be turned off.
342 """
342 """
343 ).tag(config=True)
343 ).tag(config=True)
344 colors = CaselessStrEnum(('Neutral', 'NoColor','LightBG','Linux'),
344 colors = CaselessStrEnum(('Neutral', 'NoColor','LightBG','Linux'),
345 default_value='Neutral',
345 default_value='Neutral',
346 help="Set the color scheme (NoColor, Neutral, Linux, or LightBG)."
346 help="Set the color scheme (NoColor, Neutral, Linux, or LightBG)."
347 ).tag(config=True)
347 ).tag(config=True)
348 debug = Bool(False).tag(config=True)
348 debug = Bool(False).tag(config=True)
349 disable_failing_post_execute = Bool(False,
349 disable_failing_post_execute = Bool(False,
350 help="Don't call post-execute functions that have failed in the past."
350 help="Don't call post-execute functions that have failed in the past."
351 ).tag(config=True)
351 ).tag(config=True)
352 display_formatter = Instance(DisplayFormatter, allow_none=True)
352 display_formatter = Instance(DisplayFormatter, allow_none=True)
353 displayhook_class = Type(DisplayHook)
353 displayhook_class = Type(DisplayHook)
354 display_pub_class = Type(DisplayPublisher)
354 display_pub_class = Type(DisplayPublisher)
355 compiler_class = Type(CachingCompiler)
355 compiler_class = Type(CachingCompiler)
356
356
357 sphinxify_docstring = Bool(False, help=
357 sphinxify_docstring = Bool(False, help=
358 """
358 """
359 Enables rich html representation of docstrings. (This requires the
359 Enables rich html representation of docstrings. (This requires the
360 docrepr module).
360 docrepr module).
361 """).tag(config=True)
361 """).tag(config=True)
362
362
363 @observe("sphinxify_docstring")
363 @observe("sphinxify_docstring")
364 def _sphinxify_docstring_changed(self, change):
364 def _sphinxify_docstring_changed(self, change):
365 if change['new']:
365 if change['new']:
366 warn("`sphinxify_docstring` is provisional since IPython 5.0 and might change in future versions." , ProvisionalWarning)
366 warn("`sphinxify_docstring` is provisional since IPython 5.0 and might change in future versions." , ProvisionalWarning)
367
367
368 enable_html_pager = Bool(False, help=
368 enable_html_pager = Bool(False, help=
369 """
369 """
370 (Provisional API) enables html representation in mime bundles sent
370 (Provisional API) enables html representation in mime bundles sent
371 to pagers.
371 to pagers.
372 """).tag(config=True)
372 """).tag(config=True)
373
373
374 @observe("enable_html_pager")
374 @observe("enable_html_pager")
375 def _enable_html_pager_changed(self, change):
375 def _enable_html_pager_changed(self, change):
376 if change['new']:
376 if change['new']:
377 warn("`enable_html_pager` is provisional since IPython 5.0 and might change in future versions.", ProvisionalWarning)
377 warn("`enable_html_pager` is provisional since IPython 5.0 and might change in future versions.", ProvisionalWarning)
378
378
379 data_pub_class = None
379 data_pub_class = None
380
380
381 exit_now = Bool(False)
381 exit_now = Bool(False)
382 exiter = Instance(ExitAutocall)
382 exiter = Instance(ExitAutocall)
383 @default('exiter')
383 @default('exiter')
384 def _exiter_default(self):
384 def _exiter_default(self):
385 return ExitAutocall(self)
385 return ExitAutocall(self)
386 # Monotonically increasing execution counter
386 # Monotonically increasing execution counter
387 execution_count = Integer(1)
387 execution_count = Integer(1)
388 filename = Unicode("<ipython console>")
388 filename = Unicode("<ipython console>")
389 ipython_dir= Unicode('').tag(config=True) # Set to get_ipython_dir() in __init__
389 ipython_dir= Unicode('').tag(config=True) # Set to get_ipython_dir() in __init__
390
390
391 # Used to transform cells before running them, and check whether code is complete
391 # Used to transform cells before running them, and check whether code is complete
392 input_transformer_manager = Instance('IPython.core.inputtransformer2.TransformerManager',
392 input_transformer_manager = Instance('IPython.core.inputtransformer2.TransformerManager',
393 ())
393 ())
394
394
395 @property
395 @property
396 def input_transformers_cleanup(self):
396 def input_transformers_cleanup(self):
397 return self.input_transformer_manager.cleanup_transforms
397 return self.input_transformer_manager.cleanup_transforms
398
398
399 input_transformers_post = List([],
399 input_transformers_post = List([],
400 help="A list of string input transformers, to be applied after IPython's "
400 help="A list of string input transformers, to be applied after IPython's "
401 "own input transformations."
401 "own input transformations."
402 )
402 )
403
403
404 @property
404 @property
405 def input_splitter(self):
405 def input_splitter(self):
406 """Make this available for backward compatibility (pre-7.0 release) with existing code.
406 """Make this available for backward compatibility (pre-7.0 release) with existing code.
407
407
408 For example, ipykernel ipykernel currently uses
408 For example, ipykernel ipykernel currently uses
409 `shell.input_splitter.check_complete`
409 `shell.input_splitter.check_complete`
410 """
410 """
411 from warnings import warn
411 from warnings import warn
412 warn("`input_splitter` is deprecated since IPython 7.0, prefer `input_transformer_manager`.",
412 warn("`input_splitter` is deprecated since IPython 7.0, prefer `input_transformer_manager`.",
413 DeprecationWarning, stacklevel=2
413 DeprecationWarning, stacklevel=2
414 )
414 )
415 return self.input_transformer_manager
415 return self.input_transformer_manager
416
416
417 logstart = Bool(False, help=
417 logstart = Bool(False, help=
418 """
418 """
419 Start logging to the default log file in overwrite mode.
419 Start logging to the default log file in overwrite mode.
420 Use `logappend` to specify a log file to **append** logs to.
420 Use `logappend` to specify a log file to **append** logs to.
421 """
421 """
422 ).tag(config=True)
422 ).tag(config=True)
423 logfile = Unicode('', help=
423 logfile = Unicode('', help=
424 """
424 """
425 The name of the logfile to use.
425 The name of the logfile to use.
426 """
426 """
427 ).tag(config=True)
427 ).tag(config=True)
428 logappend = Unicode('', help=
428 logappend = Unicode('', help=
429 """
429 """
430 Start logging to the given file in append mode.
430 Start logging to the given file in append mode.
431 Use `logfile` to specify a log file to **overwrite** logs to.
431 Use `logfile` to specify a log file to **overwrite** logs to.
432 """
432 """
433 ).tag(config=True)
433 ).tag(config=True)
434 object_info_string_level = Enum((0,1,2), default_value=0,
434 object_info_string_level = Enum((0,1,2), default_value=0,
435 ).tag(config=True)
435 ).tag(config=True)
436 pdb = Bool(False, help=
436 pdb = Bool(False, help=
437 """
437 """
438 Automatically call the pdb debugger after every exception.
438 Automatically call the pdb debugger after every exception.
439 """
439 """
440 ).tag(config=True)
440 ).tag(config=True)
441 display_page = Bool(False,
441 display_page = Bool(False,
442 help="""If True, anything that would be passed to the pager
442 help="""If True, anything that would be passed to the pager
443 will be displayed as regular output instead."""
443 will be displayed as regular output instead."""
444 ).tag(config=True)
444 ).tag(config=True)
445
445
446
446
447 show_rewritten_input = Bool(True,
447 show_rewritten_input = Bool(True,
448 help="Show rewritten input, e.g. for autocall."
448 help="Show rewritten input, e.g. for autocall."
449 ).tag(config=True)
449 ).tag(config=True)
450
450
451 quiet = Bool(False).tag(config=True)
451 quiet = Bool(False).tag(config=True)
452
452
453 history_length = Integer(10000,
453 history_length = Integer(10000,
454 help='Total length of command history'
454 help='Total length of command history'
455 ).tag(config=True)
455 ).tag(config=True)
456
456
457 history_load_length = Integer(1000, help=
457 history_load_length = Integer(1000, help=
458 """
458 """
459 The number of saved history entries to be loaded
459 The number of saved history entries to be loaded
460 into the history buffer at startup.
460 into the history buffer at startup.
461 """
461 """
462 ).tag(config=True)
462 ).tag(config=True)
463
463
464 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none', 'last_expr_or_assign'],
464 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none', 'last_expr_or_assign'],
465 default_value='last_expr',
465 default_value='last_expr',
466 help="""
466 help="""
467 'all', 'last', 'last_expr' or 'none', 'last_expr_or_assign' specifying
467 'all', 'last', 'last_expr' or 'none', 'last_expr_or_assign' specifying
468 which nodes should be run interactively (displaying output from expressions).
468 which nodes should be run interactively (displaying output from expressions).
469 """
469 """
470 ).tag(config=True)
470 ).tag(config=True)
471
471
472 # TODO: this part of prompt management should be moved to the frontends.
472 # TODO: this part of prompt management should be moved to the frontends.
473 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
473 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
474 separate_in = SeparateUnicode('\n').tag(config=True)
474 separate_in = SeparateUnicode('\n').tag(config=True)
475 separate_out = SeparateUnicode('').tag(config=True)
475 separate_out = SeparateUnicode('').tag(config=True)
476 separate_out2 = SeparateUnicode('').tag(config=True)
476 separate_out2 = SeparateUnicode('').tag(config=True)
477 wildcards_case_sensitive = Bool(True).tag(config=True)
477 wildcards_case_sensitive = Bool(True).tag(config=True)
478 xmode = CaselessStrEnum(('Context', 'Plain', 'Verbose', 'Minimal'),
478 xmode = CaselessStrEnum(('Context', 'Plain', 'Verbose', 'Minimal'),
479 default_value='Context',
479 default_value='Context',
480 help="Switch modes for the IPython exception handlers."
480 help="Switch modes for the IPython exception handlers."
481 ).tag(config=True)
481 ).tag(config=True)
482
482
483 # Subcomponents of InteractiveShell
483 # Subcomponents of InteractiveShell
484 alias_manager = Instance('IPython.core.alias.AliasManager', allow_none=True)
484 alias_manager = Instance('IPython.core.alias.AliasManager', allow_none=True)
485 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager', allow_none=True)
485 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager', allow_none=True)
486 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap', allow_none=True)
486 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap', allow_none=True)
487 display_trap = Instance('IPython.core.display_trap.DisplayTrap', allow_none=True)
487 display_trap = Instance('IPython.core.display_trap.DisplayTrap', allow_none=True)
488 extension_manager = Instance('IPython.core.extensions.ExtensionManager', allow_none=True)
488 extension_manager = Instance('IPython.core.extensions.ExtensionManager', allow_none=True)
489 payload_manager = Instance('IPython.core.payload.PayloadManager', allow_none=True)
489 payload_manager = Instance('IPython.core.payload.PayloadManager', allow_none=True)
490 history_manager = Instance('IPython.core.history.HistoryAccessorBase', allow_none=True)
490 history_manager = Instance('IPython.core.history.HistoryAccessorBase', allow_none=True)
491 magics_manager = Instance('IPython.core.magic.MagicsManager', allow_none=True)
491 magics_manager = Instance('IPython.core.magic.MagicsManager', allow_none=True)
492
492
493 profile_dir = Instance('IPython.core.application.ProfileDir', allow_none=True)
493 profile_dir = Instance('IPython.core.application.ProfileDir', allow_none=True)
494 @property
494 @property
495 def profile(self):
495 def profile(self):
496 if self.profile_dir is not None:
496 if self.profile_dir is not None:
497 name = os.path.basename(self.profile_dir.location)
497 name = os.path.basename(self.profile_dir.location)
498 return name.replace('profile_','')
498 return name.replace('profile_','')
499
499
500
500
501 # Private interface
501 # Private interface
502 _post_execute = Dict()
502 _post_execute = Dict()
503
503
504 # Tracks any GUI loop loaded for pylab
504 # Tracks any GUI loop loaded for pylab
505 pylab_gui_select = None
505 pylab_gui_select = None
506
506
507 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
507 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
508
508
509 last_execution_result = Instance('IPython.core.interactiveshell.ExecutionResult', help='Result of executing the last command', allow_none=True)
509 last_execution_result = Instance('IPython.core.interactiveshell.ExecutionResult', help='Result of executing the last command', allow_none=True)
510
510
511 def __init__(self, ipython_dir=None, profile_dir=None,
511 def __init__(self, ipython_dir=None, profile_dir=None,
512 user_module=None, user_ns=None,
512 user_module=None, user_ns=None,
513 custom_exceptions=((), None), **kwargs):
513 custom_exceptions=((), None), **kwargs):
514 # This is where traits with a config_key argument are updated
514 # This is where traits with a config_key argument are updated
515 # from the values on config.
515 # from the values on config.
516 super(InteractiveShell, self).__init__(**kwargs)
516 super(InteractiveShell, self).__init__(**kwargs)
517 if 'PromptManager' in self.config:
517 if 'PromptManager' in self.config:
518 warn('As of IPython 5.0 `PromptManager` config will have no effect'
518 warn('As of IPython 5.0 `PromptManager` config will have no effect'
519 ' and has been replaced by TerminalInteractiveShell.prompts_class')
519 ' and has been replaced by TerminalInteractiveShell.prompts_class')
520 self.configurables = [self]
520 self.configurables = [self]
521
521
522 # These are relatively independent and stateless
522 # These are relatively independent and stateless
523 self.init_ipython_dir(ipython_dir)
523 self.init_ipython_dir(ipython_dir)
524 self.init_profile_dir(profile_dir)
524 self.init_profile_dir(profile_dir)
525 self.init_instance_attrs()
525 self.init_instance_attrs()
526 self.init_environment()
526 self.init_environment()
527
527
528 # Check if we're in a virtualenv, and set up sys.path.
528 # Check if we're in a virtualenv, and set up sys.path.
529 self.init_virtualenv()
529 self.init_virtualenv()
530
530
531 # Create namespaces (user_ns, user_global_ns, etc.)
531 # Create namespaces (user_ns, user_global_ns, etc.)
532 self.init_create_namespaces(user_module, user_ns)
532 self.init_create_namespaces(user_module, user_ns)
533 # This has to be done after init_create_namespaces because it uses
533 # This has to be done after init_create_namespaces because it uses
534 # something in self.user_ns, but before init_sys_modules, which
534 # something in self.user_ns, but before init_sys_modules, which
535 # is the first thing to modify sys.
535 # is the first thing to modify sys.
536 # TODO: When we override sys.stdout and sys.stderr before this class
536 # TODO: When we override sys.stdout and sys.stderr before this class
537 # is created, we are saving the overridden ones here. Not sure if this
537 # is created, we are saving the overridden ones here. Not sure if this
538 # is what we want to do.
538 # is what we want to do.
539 self.save_sys_module_state()
539 self.save_sys_module_state()
540 self.init_sys_modules()
540 self.init_sys_modules()
541
541
542 # While we're trying to have each part of the code directly access what
542 # While we're trying to have each part of the code directly access what
543 # it needs without keeping redundant references to objects, we have too
543 # it needs without keeping redundant references to objects, we have too
544 # much legacy code that expects ip.db to exist.
544 # much legacy code that expects ip.db to exist.
545 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
545 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
546
546
547 self.init_history()
547 self.init_history()
548 self.init_encoding()
548 self.init_encoding()
549 self.init_prefilter()
549 self.init_prefilter()
550
550
551 self.init_syntax_highlighting()
551 self.init_syntax_highlighting()
552 self.init_hooks()
552 self.init_hooks()
553 self.init_events()
553 self.init_events()
554 self.init_pushd_popd_magic()
554 self.init_pushd_popd_magic()
555 self.init_user_ns()
555 self.init_user_ns()
556 self.init_logger()
556 self.init_logger()
557 self.init_builtins()
557 self.init_builtins()
558
558
559 # The following was in post_config_initialization
559 # The following was in post_config_initialization
560 self.init_inspector()
560 self.init_inspector()
561 self.raw_input_original = input
561 self.raw_input_original = input
562 self.init_completer()
562 self.init_completer()
563 # TODO: init_io() needs to happen before init_traceback handlers
563 # TODO: init_io() needs to happen before init_traceback handlers
564 # because the traceback handlers hardcode the stdout/stderr streams.
564 # because the traceback handlers hardcode the stdout/stderr streams.
565 # This logic in in debugger.Pdb and should eventually be changed.
565 # This logic in in debugger.Pdb and should eventually be changed.
566 self.init_io()
566 self.init_io()
567 self.init_traceback_handlers(custom_exceptions)
567 self.init_traceback_handlers(custom_exceptions)
568 self.init_prompts()
568 self.init_prompts()
569 self.init_display_formatter()
569 self.init_display_formatter()
570 self.init_display_pub()
570 self.init_display_pub()
571 self.init_data_pub()
571 self.init_data_pub()
572 self.init_displayhook()
572 self.init_displayhook()
573 self.init_magics()
573 self.init_magics()
574 self.init_alias()
574 self.init_alias()
575 self.init_logstart()
575 self.init_logstart()
576 self.init_pdb()
576 self.init_pdb()
577 self.init_extension_manager()
577 self.init_extension_manager()
578 self.init_payload()
578 self.init_payload()
579 self.events.trigger('shell_initialized', self)
579 self.events.trigger('shell_initialized', self)
580 atexit.register(self.atexit_operations)
580 atexit.register(self.atexit_operations)
581
581
582 # The trio runner is used for running Trio in the foreground thread. It
582 # The trio runner is used for running Trio in the foreground thread. It
583 # is different from `_trio_runner(async_fn)` in `async_helpers.py`
583 # is different from `_trio_runner(async_fn)` in `async_helpers.py`
584 # which calls `trio.run()` for every cell. This runner runs all cells
584 # which calls `trio.run()` for every cell. This runner runs all cells
585 # inside a single Trio event loop. If used, it is set from
585 # inside a single Trio event loop. If used, it is set from
586 # `ipykernel.kernelapp`.
586 # `ipykernel.kernelapp`.
587 self.trio_runner = None
587 self.trio_runner = None
588
588
589 def get_ipython(self):
589 def get_ipython(self):
590 """Return the currently running IPython instance."""
590 """Return the currently running IPython instance."""
591 return self
591 return self
592
592
593 #-------------------------------------------------------------------------
593 #-------------------------------------------------------------------------
594 # Trait changed handlers
594 # Trait changed handlers
595 #-------------------------------------------------------------------------
595 #-------------------------------------------------------------------------
596 @observe('ipython_dir')
596 @observe('ipython_dir')
597 def _ipython_dir_changed(self, change):
597 def _ipython_dir_changed(self, change):
598 ensure_dir_exists(change['new'])
598 ensure_dir_exists(change['new'])
599
599
600 def set_autoindent(self,value=None):
600 def set_autoindent(self,value=None):
601 """Set the autoindent flag.
601 """Set the autoindent flag.
602
602
603 If called with no arguments, it acts as a toggle."""
603 If called with no arguments, it acts as a toggle."""
604 if value is None:
604 if value is None:
605 self.autoindent = not self.autoindent
605 self.autoindent = not self.autoindent
606 else:
606 else:
607 self.autoindent = value
607 self.autoindent = value
608
608
609 def set_trio_runner(self, tr):
609 def set_trio_runner(self, tr):
610 self.trio_runner = tr
610 self.trio_runner = tr
611
611
612 #-------------------------------------------------------------------------
612 #-------------------------------------------------------------------------
613 # init_* methods called by __init__
613 # init_* methods called by __init__
614 #-------------------------------------------------------------------------
614 #-------------------------------------------------------------------------
615
615
616 def init_ipython_dir(self, ipython_dir):
616 def init_ipython_dir(self, ipython_dir):
617 if ipython_dir is not None:
617 if ipython_dir is not None:
618 self.ipython_dir = ipython_dir
618 self.ipython_dir = ipython_dir
619 return
619 return
620
620
621 self.ipython_dir = get_ipython_dir()
621 self.ipython_dir = get_ipython_dir()
622
622
623 def init_profile_dir(self, profile_dir):
623 def init_profile_dir(self, profile_dir):
624 if profile_dir is not None:
624 if profile_dir is not None:
625 self.profile_dir = profile_dir
625 self.profile_dir = profile_dir
626 return
626 return
627 self.profile_dir = ProfileDir.create_profile_dir_by_name(
627 self.profile_dir = ProfileDir.create_profile_dir_by_name(
628 self.ipython_dir, "default"
628 self.ipython_dir, "default"
629 )
629 )
630
630
631 def init_instance_attrs(self):
631 def init_instance_attrs(self):
632 self.more = False
632 self.more = False
633
633
634 # command compiler
634 # command compiler
635 self.compile = self.compiler_class()
635 self.compile = self.compiler_class()
636
636
637 # Make an empty namespace, which extension writers can rely on both
637 # Make an empty namespace, which extension writers can rely on both
638 # existing and NEVER being used by ipython itself. This gives them a
638 # existing and NEVER being used by ipython itself. This gives them a
639 # convenient location for storing additional information and state
639 # convenient location for storing additional information and state
640 # their extensions may require, without fear of collisions with other
640 # their extensions may require, without fear of collisions with other
641 # ipython names that may develop later.
641 # ipython names that may develop later.
642 self.meta = Struct()
642 self.meta = Struct()
643
643
644 # Temporary files used for various purposes. Deleted at exit.
644 # Temporary files used for various purposes. Deleted at exit.
645 # The files here are stored with Path from Pathlib
645 # The files here are stored with Path from Pathlib
646 self.tempfiles = []
646 self.tempfiles = []
647 self.tempdirs = []
647 self.tempdirs = []
648
648
649 # keep track of where we started running (mainly for crash post-mortem)
649 # keep track of where we started running (mainly for crash post-mortem)
650 # This is not being used anywhere currently.
650 # This is not being used anywhere currently.
651 self.starting_dir = os.getcwd()
651 self.starting_dir = os.getcwd()
652
652
653 # Indentation management
653 # Indentation management
654 self.indent_current_nsp = 0
654 self.indent_current_nsp = 0
655
655
656 # Dict to track post-execution functions that have been registered
656 # Dict to track post-execution functions that have been registered
657 self._post_execute = {}
657 self._post_execute = {}
658
658
659 def init_environment(self):
659 def init_environment(self):
660 """Any changes we need to make to the user's environment."""
660 """Any changes we need to make to the user's environment."""
661 pass
661 pass
662
662
663 def init_encoding(self):
663 def init_encoding(self):
664 # Get system encoding at startup time. Certain terminals (like Emacs
664 # Get system encoding at startup time. Certain terminals (like Emacs
665 # under Win32 have it set to None, and we need to have a known valid
665 # under Win32 have it set to None, and we need to have a known valid
666 # encoding to use in the raw_input() method
666 # encoding to use in the raw_input() method
667 try:
667 try:
668 self.stdin_encoding = sys.stdin.encoding or 'ascii'
668 self.stdin_encoding = sys.stdin.encoding or 'ascii'
669 except AttributeError:
669 except AttributeError:
670 self.stdin_encoding = 'ascii'
670 self.stdin_encoding = 'ascii'
671
671
672
672
673 @observe('colors')
673 @observe('colors')
674 def init_syntax_highlighting(self, changes=None):
674 def init_syntax_highlighting(self, changes=None):
675 # Python source parser/formatter for syntax highlighting
675 # Python source parser/formatter for syntax highlighting
676 pyformat = PyColorize.Parser(style=self.colors, parent=self).format
676 pyformat = PyColorize.Parser(style=self.colors, parent=self).format
677 self.pycolorize = lambda src: pyformat(src,'str')
677 self.pycolorize = lambda src: pyformat(src,'str')
678
678
679 def refresh_style(self):
679 def refresh_style(self):
680 # No-op here, used in subclass
680 # No-op here, used in subclass
681 pass
681 pass
682
682
683 def init_pushd_popd_magic(self):
683 def init_pushd_popd_magic(self):
684 # for pushd/popd management
684 # for pushd/popd management
685 self.home_dir = get_home_dir()
685 self.home_dir = get_home_dir()
686
686
687 self.dir_stack = []
687 self.dir_stack = []
688
688
689 def init_logger(self):
689 def init_logger(self):
690 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
690 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
691 logmode='rotate')
691 logmode='rotate')
692
692
693 def init_logstart(self):
693 def init_logstart(self):
694 """Initialize logging in case it was requested at the command line.
694 """Initialize logging in case it was requested at the command line.
695 """
695 """
696 if self.logappend:
696 if self.logappend:
697 self.magic('logstart %s append' % self.logappend)
697 self.magic('logstart %s append' % self.logappend)
698 elif self.logfile:
698 elif self.logfile:
699 self.magic('logstart %s' % self.logfile)
699 self.magic('logstart %s' % self.logfile)
700 elif self.logstart:
700 elif self.logstart:
701 self.magic('logstart')
701 self.magic('logstart')
702
702
703
703
704 def init_builtins(self):
704 def init_builtins(self):
705 # A single, static flag that we set to True. Its presence indicates
705 # A single, static flag that we set to True. Its presence indicates
706 # that an IPython shell has been created, and we make no attempts at
706 # that an IPython shell has been created, and we make no attempts at
707 # removing on exit or representing the existence of more than one
707 # removing on exit or representing the existence of more than one
708 # IPython at a time.
708 # IPython at a time.
709 builtin_mod.__dict__['__IPYTHON__'] = True
709 builtin_mod.__dict__['__IPYTHON__'] = True
710 builtin_mod.__dict__['display'] = display
710 builtin_mod.__dict__['display'] = display
711
711
712 self.builtin_trap = BuiltinTrap(shell=self)
712 self.builtin_trap = BuiltinTrap(shell=self)
713
713
714 @observe('colors')
714 @observe('colors')
715 def init_inspector(self, changes=None):
715 def init_inspector(self, changes=None):
716 # Object inspector
716 # Object inspector
717 self.inspector = oinspect.Inspector(oinspect.InspectColors,
717 self.inspector = oinspect.Inspector(oinspect.InspectColors,
718 PyColorize.ANSICodeColors,
718 PyColorize.ANSICodeColors,
719 self.colors,
719 self.colors,
720 self.object_info_string_level)
720 self.object_info_string_level)
721
721
722 def init_io(self):
722 def init_io(self):
723 # implemented in subclasses, TerminalInteractiveShell does call
723 # implemented in subclasses, TerminalInteractiveShell does call
724 # colorama.init().
724 # colorama.init().
725 pass
725 pass
726
726
727 def init_prompts(self):
727 def init_prompts(self):
728 # Set system prompts, so that scripts can decide if they are running
728 # Set system prompts, so that scripts can decide if they are running
729 # interactively.
729 # interactively.
730 sys.ps1 = 'In : '
730 sys.ps1 = 'In : '
731 sys.ps2 = '...: '
731 sys.ps2 = '...: '
732 sys.ps3 = 'Out: '
732 sys.ps3 = 'Out: '
733
733
734 def init_display_formatter(self):
734 def init_display_formatter(self):
735 self.display_formatter = DisplayFormatter(parent=self)
735 self.display_formatter = DisplayFormatter(parent=self)
736 self.configurables.append(self.display_formatter)
736 self.configurables.append(self.display_formatter)
737
737
738 def init_display_pub(self):
738 def init_display_pub(self):
739 self.display_pub = self.display_pub_class(parent=self, shell=self)
739 self.display_pub = self.display_pub_class(parent=self, shell=self)
740 self.configurables.append(self.display_pub)
740 self.configurables.append(self.display_pub)
741
741
742 def init_data_pub(self):
742 def init_data_pub(self):
743 if not self.data_pub_class:
743 if not self.data_pub_class:
744 self.data_pub = None
744 self.data_pub = None
745 return
745 return
746 self.data_pub = self.data_pub_class(parent=self)
746 self.data_pub = self.data_pub_class(parent=self)
747 self.configurables.append(self.data_pub)
747 self.configurables.append(self.data_pub)
748
748
749 def init_displayhook(self):
749 def init_displayhook(self):
750 # Initialize displayhook, set in/out prompts and printing system
750 # Initialize displayhook, set in/out prompts and printing system
751 self.displayhook = self.displayhook_class(
751 self.displayhook = self.displayhook_class(
752 parent=self,
752 parent=self,
753 shell=self,
753 shell=self,
754 cache_size=self.cache_size,
754 cache_size=self.cache_size,
755 )
755 )
756 self.configurables.append(self.displayhook)
756 self.configurables.append(self.displayhook)
757 # This is a context manager that installs/revmoes the displayhook at
757 # This is a context manager that installs/revmoes the displayhook at
758 # the appropriate time.
758 # the appropriate time.
759 self.display_trap = DisplayTrap(hook=self.displayhook)
759 self.display_trap = DisplayTrap(hook=self.displayhook)
760
760
761 @staticmethod
762 def get_path_links(p: Path):
763 """Gets path links including all symlinks
764
765 Examples
766 --------
767 In [1]: from IPython.core.interactiveshell import InteractiveShell
768
769 In [2]: import sys, pathlib
770
771 In [3]: paths = InteractiveShell.get_path_links(pathlib.Path(sys.executable))
772
773 In [4]: len(paths) == len(set(paths))
774 Out[4]: True
775
776 In [5]: bool(paths)
777 Out[5]: True
778 """
779 paths = [p]
780 while p.is_symlink():
781 new_path = Path(os.readlink(p))
782 if not new_path.is_absolute():
783 new_path = p.parent / new_path
784 p = new_path
785 paths.append(p)
786 return paths
787
761 def init_virtualenv(self):
788 def init_virtualenv(self):
762 """Add the current virtualenv to sys.path so the user can import modules from it.
789 """Add the current virtualenv to sys.path so the user can import modules from it.
763 This isn't perfect: it doesn't use the Python interpreter with which the
790 This isn't perfect: it doesn't use the Python interpreter with which the
764 virtualenv was built, and it ignores the --no-site-packages option. A
791 virtualenv was built, and it ignores the --no-site-packages option. A
765 warning will appear suggesting the user installs IPython in the
792 warning will appear suggesting the user installs IPython in the
766 virtualenv, but for many cases, it probably works well enough.
793 virtualenv, but for many cases, it probably works well enough.
767
794
768 Adapted from code snippets online.
795 Adapted from code snippets online.
769
796
770 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
797 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
771 """
798 """
772 if 'VIRTUAL_ENV' not in os.environ:
799 if 'VIRTUAL_ENV' not in os.environ:
773 # Not in a virtualenv
800 # Not in a virtualenv
774 return
801 return
775 elif os.environ["VIRTUAL_ENV"] == "":
802 elif os.environ["VIRTUAL_ENV"] == "":
776 warn("Virtual env path set to '', please check if this is intended.")
803 warn("Virtual env path set to '', please check if this is intended.")
777 return
804 return
778
805
779 p = Path(sys.executable)
806 p = Path(sys.executable)
780 p_venv = Path(os.environ["VIRTUAL_ENV"])
807 p_venv = Path(os.environ["VIRTUAL_ENV"])
781
808
782 # fallback venv detection:
809 # fallback venv detection:
783 # stdlib venv may symlink sys.executable, so we can't use realpath.
810 # stdlib venv may symlink sys.executable, so we can't use realpath.
784 # but others can symlink *to* the venv Python, so we can't just use sys.executable.
811 # but others can symlink *to* the venv Python, so we can't just use sys.executable.
785 # So we just check every item in the symlink tree (generally <= 3)
812 # So we just check every item in the symlink tree (generally <= 3)
786 paths = [p]
813 paths = self.get_path_links(p)
787 while p.is_symlink():
788 p = Path(os.readlink(p))
789 paths.append(p.resolve())
790
814
791 # In Cygwin paths like "c:\..." and '\cygdrive\c\...' are possible
815 # In Cygwin paths like "c:\..." and '\cygdrive\c\...' are possible
792 if p_venv.parts[1] == "cygdrive":
816 if p_venv.parts[1] == "cygdrive":
793 drive_name = p_venv.parts[2]
817 drive_name = p_venv.parts[2]
794 p_venv = (drive_name + ":/") / Path(*p_venv.parts[3:])
818 p_venv = (drive_name + ":/") / Path(*p_venv.parts[3:])
795
819
796 if any(p_venv == p.parents[1] for p in paths):
820 if any(p_venv == p.parents[1] for p in paths):
797 # Our exe is inside or has access to the virtualenv, don't need to do anything.
821 # Our exe is inside or has access to the virtualenv, don't need to do anything.
798 return
822 return
799
823
800 if sys.platform == "win32":
824 if sys.platform == "win32":
801 virtual_env = str(Path(os.environ["VIRTUAL_ENV"], "Lib", "site-packages"))
825 virtual_env = str(Path(os.environ["VIRTUAL_ENV"], "Lib", "site-packages"))
802 else:
826 else:
803 virtual_env_path = Path(
827 virtual_env_path = Path(
804 os.environ["VIRTUAL_ENV"], "lib", "python{}.{}", "site-packages"
828 os.environ["VIRTUAL_ENV"], "lib", "python{}.{}", "site-packages"
805 )
829 )
806 p_ver = sys.version_info[:2]
830 p_ver = sys.version_info[:2]
807
831
808 # Predict version from py[thon]-x.x in the $VIRTUAL_ENV
832 # Predict version from py[thon]-x.x in the $VIRTUAL_ENV
809 re_m = re.search(r"\bpy(?:thon)?([23])\.(\d+)\b", os.environ["VIRTUAL_ENV"])
833 re_m = re.search(r"\bpy(?:thon)?([23])\.(\d+)\b", os.environ["VIRTUAL_ENV"])
810 if re_m:
834 if re_m:
811 predicted_path = Path(str(virtual_env_path).format(*re_m.groups()))
835 predicted_path = Path(str(virtual_env_path).format(*re_m.groups()))
812 if predicted_path.exists():
836 if predicted_path.exists():
813 p_ver = re_m.groups()
837 p_ver = re_m.groups()
814
838
815 virtual_env = str(virtual_env_path).format(*p_ver)
839 virtual_env = str(virtual_env_path).format(*p_ver)
816
840
817 warn(
841 warn(
818 "Attempting to work in a virtualenv. If you encounter problems, "
842 "Attempting to work in a virtualenv. If you encounter problems, "
819 "please install IPython inside the virtualenv."
843 "please install IPython inside the virtualenv."
820 )
844 )
821 import site
845 import site
822 sys.path.insert(0, virtual_env)
846 sys.path.insert(0, virtual_env)
823 site.addsitedir(virtual_env)
847 site.addsitedir(virtual_env)
824
848
825 #-------------------------------------------------------------------------
849 #-------------------------------------------------------------------------
826 # Things related to injections into the sys module
850 # Things related to injections into the sys module
827 #-------------------------------------------------------------------------
851 #-------------------------------------------------------------------------
828
852
829 def save_sys_module_state(self):
853 def save_sys_module_state(self):
830 """Save the state of hooks in the sys module.
854 """Save the state of hooks in the sys module.
831
855
832 This has to be called after self.user_module is created.
856 This has to be called after self.user_module is created.
833 """
857 """
834 self._orig_sys_module_state = {'stdin': sys.stdin,
858 self._orig_sys_module_state = {'stdin': sys.stdin,
835 'stdout': sys.stdout,
859 'stdout': sys.stdout,
836 'stderr': sys.stderr,
860 'stderr': sys.stderr,
837 'excepthook': sys.excepthook}
861 'excepthook': sys.excepthook}
838 self._orig_sys_modules_main_name = self.user_module.__name__
862 self._orig_sys_modules_main_name = self.user_module.__name__
839 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
863 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
840
864
841 def restore_sys_module_state(self):
865 def restore_sys_module_state(self):
842 """Restore the state of the sys module."""
866 """Restore the state of the sys module."""
843 try:
867 try:
844 for k, v in self._orig_sys_module_state.items():
868 for k, v in self._orig_sys_module_state.items():
845 setattr(sys, k, v)
869 setattr(sys, k, v)
846 except AttributeError:
870 except AttributeError:
847 pass
871 pass
848 # Reset what what done in self.init_sys_modules
872 # Reset what what done in self.init_sys_modules
849 if self._orig_sys_modules_main_mod is not None:
873 if self._orig_sys_modules_main_mod is not None:
850 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
874 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
851
875
852 #-------------------------------------------------------------------------
876 #-------------------------------------------------------------------------
853 # Things related to the banner
877 # Things related to the banner
854 #-------------------------------------------------------------------------
878 #-------------------------------------------------------------------------
855
879
856 @property
880 @property
857 def banner(self):
881 def banner(self):
858 banner = self.banner1
882 banner = self.banner1
859 if self.profile and self.profile != 'default':
883 if self.profile and self.profile != 'default':
860 banner += '\nIPython profile: %s\n' % self.profile
884 banner += '\nIPython profile: %s\n' % self.profile
861 if self.banner2:
885 if self.banner2:
862 banner += '\n' + self.banner2
886 banner += '\n' + self.banner2
863 return banner
887 return banner
864
888
865 def show_banner(self, banner=None):
889 def show_banner(self, banner=None):
866 if banner is None:
890 if banner is None:
867 banner = self.banner
891 banner = self.banner
868 sys.stdout.write(banner)
892 sys.stdout.write(banner)
869
893
870 #-------------------------------------------------------------------------
894 #-------------------------------------------------------------------------
871 # Things related to hooks
895 # Things related to hooks
872 #-------------------------------------------------------------------------
896 #-------------------------------------------------------------------------
873
897
874 def init_hooks(self):
898 def init_hooks(self):
875 # hooks holds pointers used for user-side customizations
899 # hooks holds pointers used for user-side customizations
876 self.hooks = Struct()
900 self.hooks = Struct()
877
901
878 self.strdispatchers = {}
902 self.strdispatchers = {}
879
903
880 # Set all default hooks, defined in the IPython.hooks module.
904 # Set all default hooks, defined in the IPython.hooks module.
881 hooks = IPython.core.hooks
905 hooks = IPython.core.hooks
882 for hook_name in hooks.__all__:
906 for hook_name in hooks.__all__:
883 # default hooks have priority 100, i.e. low; user hooks should have
907 # default hooks have priority 100, i.e. low; user hooks should have
884 # 0-100 priority
908 # 0-100 priority
885 self.set_hook(hook_name, getattr(hooks, hook_name), 100)
909 self.set_hook(hook_name, getattr(hooks, hook_name), 100)
886
910
887 if self.display_page:
911 if self.display_page:
888 self.set_hook('show_in_pager', page.as_hook(page.display_page), 90)
912 self.set_hook('show_in_pager', page.as_hook(page.display_page), 90)
889
913
890 def set_hook(self, name, hook, priority=50, str_key=None, re_key=None):
914 def set_hook(self, name, hook, priority=50, str_key=None, re_key=None):
891 """set_hook(name,hook) -> sets an internal IPython hook.
915 """set_hook(name,hook) -> sets an internal IPython hook.
892
916
893 IPython exposes some of its internal API as user-modifiable hooks. By
917 IPython exposes some of its internal API as user-modifiable hooks. By
894 adding your function to one of these hooks, you can modify IPython's
918 adding your function to one of these hooks, you can modify IPython's
895 behavior to call at runtime your own routines."""
919 behavior to call at runtime your own routines."""
896
920
897 # At some point in the future, this should validate the hook before it
921 # At some point in the future, this should validate the hook before it
898 # accepts it. Probably at least check that the hook takes the number
922 # accepts it. Probably at least check that the hook takes the number
899 # of args it's supposed to.
923 # of args it's supposed to.
900
924
901 f = types.MethodType(hook,self)
925 f = types.MethodType(hook,self)
902
926
903 # check if the hook is for strdispatcher first
927 # check if the hook is for strdispatcher first
904 if str_key is not None:
928 if str_key is not None:
905 sdp = self.strdispatchers.get(name, StrDispatch())
929 sdp = self.strdispatchers.get(name, StrDispatch())
906 sdp.add_s(str_key, f, priority )
930 sdp.add_s(str_key, f, priority )
907 self.strdispatchers[name] = sdp
931 self.strdispatchers[name] = sdp
908 return
932 return
909 if re_key is not None:
933 if re_key is not None:
910 sdp = self.strdispatchers.get(name, StrDispatch())
934 sdp = self.strdispatchers.get(name, StrDispatch())
911 sdp.add_re(re.compile(re_key), f, priority )
935 sdp.add_re(re.compile(re_key), f, priority )
912 self.strdispatchers[name] = sdp
936 self.strdispatchers[name] = sdp
913 return
937 return
914
938
915 dp = getattr(self.hooks, name, None)
939 dp = getattr(self.hooks, name, None)
916 if name not in IPython.core.hooks.__all__:
940 if name not in IPython.core.hooks.__all__:
917 print("Warning! Hook '%s' is not one of %s" % \
941 print("Warning! Hook '%s' is not one of %s" % \
918 (name, IPython.core.hooks.__all__ ))
942 (name, IPython.core.hooks.__all__ ))
919
943
920 if name in IPython.core.hooks.deprecated:
944 if name in IPython.core.hooks.deprecated:
921 alternative = IPython.core.hooks.deprecated[name]
945 alternative = IPython.core.hooks.deprecated[name]
922 raise ValueError(
946 raise ValueError(
923 "Hook {} has been deprecated since IPython 5.0. Use {} instead.".format(
947 "Hook {} has been deprecated since IPython 5.0. Use {} instead.".format(
924 name, alternative
948 name, alternative
925 )
949 )
926 )
950 )
927
951
928 if not dp:
952 if not dp:
929 dp = IPython.core.hooks.CommandChainDispatcher()
953 dp = IPython.core.hooks.CommandChainDispatcher()
930
954
931 try:
955 try:
932 dp.add(f,priority)
956 dp.add(f,priority)
933 except AttributeError:
957 except AttributeError:
934 # it was not commandchain, plain old func - replace
958 # it was not commandchain, plain old func - replace
935 dp = f
959 dp = f
936
960
937 setattr(self.hooks,name, dp)
961 setattr(self.hooks,name, dp)
938
962
939 #-------------------------------------------------------------------------
963 #-------------------------------------------------------------------------
940 # Things related to events
964 # Things related to events
941 #-------------------------------------------------------------------------
965 #-------------------------------------------------------------------------
942
966
943 def init_events(self):
967 def init_events(self):
944 self.events = EventManager(self, available_events)
968 self.events = EventManager(self, available_events)
945
969
946 self.events.register("pre_execute", self._clear_warning_registry)
970 self.events.register("pre_execute", self._clear_warning_registry)
947
971
948 def register_post_execute(self, func):
972 def register_post_execute(self, func):
949 """DEPRECATED: Use ip.events.register('post_run_cell', func)
973 """DEPRECATED: Use ip.events.register('post_run_cell', func)
950
974
951 Register a function for calling after code execution.
975 Register a function for calling after code execution.
952 """
976 """
953 raise ValueError(
977 raise ValueError(
954 "ip.register_post_execute is deprecated since IPython 1.0, use "
978 "ip.register_post_execute is deprecated since IPython 1.0, use "
955 "ip.events.register('post_run_cell', func) instead."
979 "ip.events.register('post_run_cell', func) instead."
956 )
980 )
957
981
958 def _clear_warning_registry(self):
982 def _clear_warning_registry(self):
959 # clear the warning registry, so that different code blocks with
983 # clear the warning registry, so that different code blocks with
960 # overlapping line number ranges don't cause spurious suppression of
984 # overlapping line number ranges don't cause spurious suppression of
961 # warnings (see gh-6611 for details)
985 # warnings (see gh-6611 for details)
962 if "__warningregistry__" in self.user_global_ns:
986 if "__warningregistry__" in self.user_global_ns:
963 del self.user_global_ns["__warningregistry__"]
987 del self.user_global_ns["__warningregistry__"]
964
988
965 #-------------------------------------------------------------------------
989 #-------------------------------------------------------------------------
966 # Things related to the "main" module
990 # Things related to the "main" module
967 #-------------------------------------------------------------------------
991 #-------------------------------------------------------------------------
968
992
969 def new_main_mod(self, filename, modname):
993 def new_main_mod(self, filename, modname):
970 """Return a new 'main' module object for user code execution.
994 """Return a new 'main' module object for user code execution.
971
995
972 ``filename`` should be the path of the script which will be run in the
996 ``filename`` should be the path of the script which will be run in the
973 module. Requests with the same filename will get the same module, with
997 module. Requests with the same filename will get the same module, with
974 its namespace cleared.
998 its namespace cleared.
975
999
976 ``modname`` should be the module name - normally either '__main__' or
1000 ``modname`` should be the module name - normally either '__main__' or
977 the basename of the file without the extension.
1001 the basename of the file without the extension.
978
1002
979 When scripts are executed via %run, we must keep a reference to their
1003 When scripts are executed via %run, we must keep a reference to their
980 __main__ module around so that Python doesn't
1004 __main__ module around so that Python doesn't
981 clear it, rendering references to module globals useless.
1005 clear it, rendering references to module globals useless.
982
1006
983 This method keeps said reference in a private dict, keyed by the
1007 This method keeps said reference in a private dict, keyed by the
984 absolute path of the script. This way, for multiple executions of the
1008 absolute path of the script. This way, for multiple executions of the
985 same script we only keep one copy of the namespace (the last one),
1009 same script we only keep one copy of the namespace (the last one),
986 thus preventing memory leaks from old references while allowing the
1010 thus preventing memory leaks from old references while allowing the
987 objects from the last execution to be accessible.
1011 objects from the last execution to be accessible.
988 """
1012 """
989 filename = os.path.abspath(filename)
1013 filename = os.path.abspath(filename)
990 try:
1014 try:
991 main_mod = self._main_mod_cache[filename]
1015 main_mod = self._main_mod_cache[filename]
992 except KeyError:
1016 except KeyError:
993 main_mod = self._main_mod_cache[filename] = types.ModuleType(
1017 main_mod = self._main_mod_cache[filename] = types.ModuleType(
994 modname,
1018 modname,
995 doc="Module created for script run in IPython")
1019 doc="Module created for script run in IPython")
996 else:
1020 else:
997 main_mod.__dict__.clear()
1021 main_mod.__dict__.clear()
998 main_mod.__name__ = modname
1022 main_mod.__name__ = modname
999
1023
1000 main_mod.__file__ = filename
1024 main_mod.__file__ = filename
1001 # It seems pydoc (and perhaps others) needs any module instance to
1025 # It seems pydoc (and perhaps others) needs any module instance to
1002 # implement a __nonzero__ method
1026 # implement a __nonzero__ method
1003 main_mod.__nonzero__ = lambda : True
1027 main_mod.__nonzero__ = lambda : True
1004
1028
1005 return main_mod
1029 return main_mod
1006
1030
1007 def clear_main_mod_cache(self):
1031 def clear_main_mod_cache(self):
1008 """Clear the cache of main modules.
1032 """Clear the cache of main modules.
1009
1033
1010 Mainly for use by utilities like %reset.
1034 Mainly for use by utilities like %reset.
1011
1035
1012 Examples
1036 Examples
1013 --------
1037 --------
1014 In [15]: import IPython
1038 In [15]: import IPython
1015
1039
1016 In [16]: m = _ip.new_main_mod(IPython.__file__, 'IPython')
1040 In [16]: m = _ip.new_main_mod(IPython.__file__, 'IPython')
1017
1041
1018 In [17]: len(_ip._main_mod_cache) > 0
1042 In [17]: len(_ip._main_mod_cache) > 0
1019 Out[17]: True
1043 Out[17]: True
1020
1044
1021 In [18]: _ip.clear_main_mod_cache()
1045 In [18]: _ip.clear_main_mod_cache()
1022
1046
1023 In [19]: len(_ip._main_mod_cache) == 0
1047 In [19]: len(_ip._main_mod_cache) == 0
1024 Out[19]: True
1048 Out[19]: True
1025 """
1049 """
1026 self._main_mod_cache.clear()
1050 self._main_mod_cache.clear()
1027
1051
1028 #-------------------------------------------------------------------------
1052 #-------------------------------------------------------------------------
1029 # Things related to debugging
1053 # Things related to debugging
1030 #-------------------------------------------------------------------------
1054 #-------------------------------------------------------------------------
1031
1055
1032 def init_pdb(self):
1056 def init_pdb(self):
1033 # Set calling of pdb on exceptions
1057 # Set calling of pdb on exceptions
1034 # self.call_pdb is a property
1058 # self.call_pdb is a property
1035 self.call_pdb = self.pdb
1059 self.call_pdb = self.pdb
1036
1060
1037 def _get_call_pdb(self):
1061 def _get_call_pdb(self):
1038 return self._call_pdb
1062 return self._call_pdb
1039
1063
1040 def _set_call_pdb(self,val):
1064 def _set_call_pdb(self,val):
1041
1065
1042 if val not in (0,1,False,True):
1066 if val not in (0,1,False,True):
1043 raise ValueError('new call_pdb value must be boolean')
1067 raise ValueError('new call_pdb value must be boolean')
1044
1068
1045 # store value in instance
1069 # store value in instance
1046 self._call_pdb = val
1070 self._call_pdb = val
1047
1071
1048 # notify the actual exception handlers
1072 # notify the actual exception handlers
1049 self.InteractiveTB.call_pdb = val
1073 self.InteractiveTB.call_pdb = val
1050
1074
1051 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1075 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1052 'Control auto-activation of pdb at exceptions')
1076 'Control auto-activation of pdb at exceptions')
1053
1077
1054 def debugger(self,force=False):
1078 def debugger(self,force=False):
1055 """Call the pdb debugger.
1079 """Call the pdb debugger.
1056
1080
1057 Keywords:
1081 Keywords:
1058
1082
1059 - force(False): by default, this routine checks the instance call_pdb
1083 - force(False): by default, this routine checks the instance call_pdb
1060 flag and does not actually invoke the debugger if the flag is false.
1084 flag and does not actually invoke the debugger if the flag is false.
1061 The 'force' option forces the debugger to activate even if the flag
1085 The 'force' option forces the debugger to activate even if the flag
1062 is false.
1086 is false.
1063 """
1087 """
1064
1088
1065 if not (force or self.call_pdb):
1089 if not (force or self.call_pdb):
1066 return
1090 return
1067
1091
1068 if not hasattr(sys,'last_traceback'):
1092 if not hasattr(sys,'last_traceback'):
1069 error('No traceback has been produced, nothing to debug.')
1093 error('No traceback has been produced, nothing to debug.')
1070 return
1094 return
1071
1095
1072 self.InteractiveTB.debugger(force=True)
1096 self.InteractiveTB.debugger(force=True)
1073
1097
1074 #-------------------------------------------------------------------------
1098 #-------------------------------------------------------------------------
1075 # Things related to IPython's various namespaces
1099 # Things related to IPython's various namespaces
1076 #-------------------------------------------------------------------------
1100 #-------------------------------------------------------------------------
1077 default_user_namespaces = True
1101 default_user_namespaces = True
1078
1102
1079 def init_create_namespaces(self, user_module=None, user_ns=None):
1103 def init_create_namespaces(self, user_module=None, user_ns=None):
1080 # Create the namespace where the user will operate. user_ns is
1104 # Create the namespace where the user will operate. user_ns is
1081 # normally the only one used, and it is passed to the exec calls as
1105 # normally the only one used, and it is passed to the exec calls as
1082 # the locals argument. But we do carry a user_global_ns namespace
1106 # the locals argument. But we do carry a user_global_ns namespace
1083 # given as the exec 'globals' argument, This is useful in embedding
1107 # given as the exec 'globals' argument, This is useful in embedding
1084 # situations where the ipython shell opens in a context where the
1108 # situations where the ipython shell opens in a context where the
1085 # distinction between locals and globals is meaningful. For
1109 # distinction between locals and globals is meaningful. For
1086 # non-embedded contexts, it is just the same object as the user_ns dict.
1110 # non-embedded contexts, it is just the same object as the user_ns dict.
1087
1111
1088 # FIXME. For some strange reason, __builtins__ is showing up at user
1112 # FIXME. For some strange reason, __builtins__ is showing up at user
1089 # level as a dict instead of a module. This is a manual fix, but I
1113 # level as a dict instead of a module. This is a manual fix, but I
1090 # should really track down where the problem is coming from. Alex
1114 # should really track down where the problem is coming from. Alex
1091 # Schmolck reported this problem first.
1115 # Schmolck reported this problem first.
1092
1116
1093 # A useful post by Alex Martelli on this topic:
1117 # A useful post by Alex Martelli on this topic:
1094 # Re: inconsistent value from __builtins__
1118 # Re: inconsistent value from __builtins__
1095 # Von: Alex Martelli <aleaxit@yahoo.com>
1119 # Von: Alex Martelli <aleaxit@yahoo.com>
1096 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
1120 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
1097 # Gruppen: comp.lang.python
1121 # Gruppen: comp.lang.python
1098
1122
1099 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
1123 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
1100 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
1124 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
1101 # > <type 'dict'>
1125 # > <type 'dict'>
1102 # > >>> print type(__builtins__)
1126 # > >>> print type(__builtins__)
1103 # > <type 'module'>
1127 # > <type 'module'>
1104 # > Is this difference in return value intentional?
1128 # > Is this difference in return value intentional?
1105
1129
1106 # Well, it's documented that '__builtins__' can be either a dictionary
1130 # Well, it's documented that '__builtins__' can be either a dictionary
1107 # or a module, and it's been that way for a long time. Whether it's
1131 # or a module, and it's been that way for a long time. Whether it's
1108 # intentional (or sensible), I don't know. In any case, the idea is
1132 # intentional (or sensible), I don't know. In any case, the idea is
1109 # that if you need to access the built-in namespace directly, you
1133 # that if you need to access the built-in namespace directly, you
1110 # should start with "import __builtin__" (note, no 's') which will
1134 # should start with "import __builtin__" (note, no 's') which will
1111 # definitely give you a module. Yeah, it's somewhat confusing:-(.
1135 # definitely give you a module. Yeah, it's somewhat confusing:-(.
1112
1136
1113 # These routines return a properly built module and dict as needed by
1137 # These routines return a properly built module and dict as needed by
1114 # the rest of the code, and can also be used by extension writers to
1138 # the rest of the code, and can also be used by extension writers to
1115 # generate properly initialized namespaces.
1139 # generate properly initialized namespaces.
1116 if (user_ns is not None) or (user_module is not None):
1140 if (user_ns is not None) or (user_module is not None):
1117 self.default_user_namespaces = False
1141 self.default_user_namespaces = False
1118 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
1142 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
1119
1143
1120 # A record of hidden variables we have added to the user namespace, so
1144 # A record of hidden variables we have added to the user namespace, so
1121 # we can list later only variables defined in actual interactive use.
1145 # we can list later only variables defined in actual interactive use.
1122 self.user_ns_hidden = {}
1146 self.user_ns_hidden = {}
1123
1147
1124 # Now that FakeModule produces a real module, we've run into a nasty
1148 # Now that FakeModule produces a real module, we've run into a nasty
1125 # problem: after script execution (via %run), the module where the user
1149 # problem: after script execution (via %run), the module where the user
1126 # code ran is deleted. Now that this object is a true module (needed
1150 # code ran is deleted. Now that this object is a true module (needed
1127 # so doctest and other tools work correctly), the Python module
1151 # so doctest and other tools work correctly), the Python module
1128 # teardown mechanism runs over it, and sets to None every variable
1152 # teardown mechanism runs over it, and sets to None every variable
1129 # present in that module. Top-level references to objects from the
1153 # present in that module. Top-level references to objects from the
1130 # script survive, because the user_ns is updated with them. However,
1154 # script survive, because the user_ns is updated with them. However,
1131 # calling functions defined in the script that use other things from
1155 # calling functions defined in the script that use other things from
1132 # the script will fail, because the function's closure had references
1156 # the script will fail, because the function's closure had references
1133 # to the original objects, which are now all None. So we must protect
1157 # to the original objects, which are now all None. So we must protect
1134 # these modules from deletion by keeping a cache.
1158 # these modules from deletion by keeping a cache.
1135 #
1159 #
1136 # To avoid keeping stale modules around (we only need the one from the
1160 # To avoid keeping stale modules around (we only need the one from the
1137 # last run), we use a dict keyed with the full path to the script, so
1161 # last run), we use a dict keyed with the full path to the script, so
1138 # only the last version of the module is held in the cache. Note,
1162 # only the last version of the module is held in the cache. Note,
1139 # however, that we must cache the module *namespace contents* (their
1163 # however, that we must cache the module *namespace contents* (their
1140 # __dict__). Because if we try to cache the actual modules, old ones
1164 # __dict__). Because if we try to cache the actual modules, old ones
1141 # (uncached) could be destroyed while still holding references (such as
1165 # (uncached) could be destroyed while still holding references (such as
1142 # those held by GUI objects that tend to be long-lived)>
1166 # those held by GUI objects that tend to be long-lived)>
1143 #
1167 #
1144 # The %reset command will flush this cache. See the cache_main_mod()
1168 # The %reset command will flush this cache. See the cache_main_mod()
1145 # and clear_main_mod_cache() methods for details on use.
1169 # and clear_main_mod_cache() methods for details on use.
1146
1170
1147 # This is the cache used for 'main' namespaces
1171 # This is the cache used for 'main' namespaces
1148 self._main_mod_cache = {}
1172 self._main_mod_cache = {}
1149
1173
1150 # A table holding all the namespaces IPython deals with, so that
1174 # A table holding all the namespaces IPython deals with, so that
1151 # introspection facilities can search easily.
1175 # introspection facilities can search easily.
1152 self.ns_table = {'user_global':self.user_module.__dict__,
1176 self.ns_table = {'user_global':self.user_module.__dict__,
1153 'user_local':self.user_ns,
1177 'user_local':self.user_ns,
1154 'builtin':builtin_mod.__dict__
1178 'builtin':builtin_mod.__dict__
1155 }
1179 }
1156
1180
1157 @property
1181 @property
1158 def user_global_ns(self):
1182 def user_global_ns(self):
1159 return self.user_module.__dict__
1183 return self.user_module.__dict__
1160
1184
1161 def prepare_user_module(self, user_module=None, user_ns=None):
1185 def prepare_user_module(self, user_module=None, user_ns=None):
1162 """Prepare the module and namespace in which user code will be run.
1186 """Prepare the module and namespace in which user code will be run.
1163
1187
1164 When IPython is started normally, both parameters are None: a new module
1188 When IPython is started normally, both parameters are None: a new module
1165 is created automatically, and its __dict__ used as the namespace.
1189 is created automatically, and its __dict__ used as the namespace.
1166
1190
1167 If only user_module is provided, its __dict__ is used as the namespace.
1191 If only user_module is provided, its __dict__ is used as the namespace.
1168 If only user_ns is provided, a dummy module is created, and user_ns
1192 If only user_ns is provided, a dummy module is created, and user_ns
1169 becomes the global namespace. If both are provided (as they may be
1193 becomes the global namespace. If both are provided (as they may be
1170 when embedding), user_ns is the local namespace, and user_module
1194 when embedding), user_ns is the local namespace, and user_module
1171 provides the global namespace.
1195 provides the global namespace.
1172
1196
1173 Parameters
1197 Parameters
1174 ----------
1198 ----------
1175 user_module : module, optional
1199 user_module : module, optional
1176 The current user module in which IPython is being run. If None,
1200 The current user module in which IPython is being run. If None,
1177 a clean module will be created.
1201 a clean module will be created.
1178 user_ns : dict, optional
1202 user_ns : dict, optional
1179 A namespace in which to run interactive commands.
1203 A namespace in which to run interactive commands.
1180
1204
1181 Returns
1205 Returns
1182 -------
1206 -------
1183 A tuple of user_module and user_ns, each properly initialised.
1207 A tuple of user_module and user_ns, each properly initialised.
1184 """
1208 """
1185 if user_module is None and user_ns is not None:
1209 if user_module is None and user_ns is not None:
1186 user_ns.setdefault("__name__", "__main__")
1210 user_ns.setdefault("__name__", "__main__")
1187 user_module = DummyMod()
1211 user_module = DummyMod()
1188 user_module.__dict__ = user_ns
1212 user_module.__dict__ = user_ns
1189
1213
1190 if user_module is None:
1214 if user_module is None:
1191 user_module = types.ModuleType("__main__",
1215 user_module = types.ModuleType("__main__",
1192 doc="Automatically created module for IPython interactive environment")
1216 doc="Automatically created module for IPython interactive environment")
1193
1217
1194 # We must ensure that __builtin__ (without the final 's') is always
1218 # We must ensure that __builtin__ (without the final 's') is always
1195 # available and pointing to the __builtin__ *module*. For more details:
1219 # available and pointing to the __builtin__ *module*. For more details:
1196 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1220 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1197 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1221 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1198 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1222 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1199
1223
1200 if user_ns is None:
1224 if user_ns is None:
1201 user_ns = user_module.__dict__
1225 user_ns = user_module.__dict__
1202
1226
1203 return user_module, user_ns
1227 return user_module, user_ns
1204
1228
1205 def init_sys_modules(self):
1229 def init_sys_modules(self):
1206 # We need to insert into sys.modules something that looks like a
1230 # We need to insert into sys.modules something that looks like a
1207 # module but which accesses the IPython namespace, for shelve and
1231 # module but which accesses the IPython namespace, for shelve and
1208 # pickle to work interactively. Normally they rely on getting
1232 # pickle to work interactively. Normally they rely on getting
1209 # everything out of __main__, but for embedding purposes each IPython
1233 # everything out of __main__, but for embedding purposes each IPython
1210 # instance has its own private namespace, so we can't go shoving
1234 # instance has its own private namespace, so we can't go shoving
1211 # everything into __main__.
1235 # everything into __main__.
1212
1236
1213 # note, however, that we should only do this for non-embedded
1237 # note, however, that we should only do this for non-embedded
1214 # ipythons, which really mimic the __main__.__dict__ with their own
1238 # ipythons, which really mimic the __main__.__dict__ with their own
1215 # namespace. Embedded instances, on the other hand, should not do
1239 # namespace. Embedded instances, on the other hand, should not do
1216 # this because they need to manage the user local/global namespaces
1240 # this because they need to manage the user local/global namespaces
1217 # only, but they live within a 'normal' __main__ (meaning, they
1241 # only, but they live within a 'normal' __main__ (meaning, they
1218 # shouldn't overtake the execution environment of the script they're
1242 # shouldn't overtake the execution environment of the script they're
1219 # embedded in).
1243 # embedded in).
1220
1244
1221 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1245 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1222 main_name = self.user_module.__name__
1246 main_name = self.user_module.__name__
1223 sys.modules[main_name] = self.user_module
1247 sys.modules[main_name] = self.user_module
1224
1248
1225 def init_user_ns(self):
1249 def init_user_ns(self):
1226 """Initialize all user-visible namespaces to their minimum defaults.
1250 """Initialize all user-visible namespaces to their minimum defaults.
1227
1251
1228 Certain history lists are also initialized here, as they effectively
1252 Certain history lists are also initialized here, as they effectively
1229 act as user namespaces.
1253 act as user namespaces.
1230
1254
1231 Notes
1255 Notes
1232 -----
1256 -----
1233 All data structures here are only filled in, they are NOT reset by this
1257 All data structures here are only filled in, they are NOT reset by this
1234 method. If they were not empty before, data will simply be added to
1258 method. If they were not empty before, data will simply be added to
1235 them.
1259 them.
1236 """
1260 """
1237 # This function works in two parts: first we put a few things in
1261 # This function works in two parts: first we put a few things in
1238 # user_ns, and we sync that contents into user_ns_hidden so that these
1262 # user_ns, and we sync that contents into user_ns_hidden so that these
1239 # initial variables aren't shown by %who. After the sync, we add the
1263 # initial variables aren't shown by %who. After the sync, we add the
1240 # rest of what we *do* want the user to see with %who even on a new
1264 # rest of what we *do* want the user to see with %who even on a new
1241 # session (probably nothing, so they really only see their own stuff)
1265 # session (probably nothing, so they really only see their own stuff)
1242
1266
1243 # The user dict must *always* have a __builtin__ reference to the
1267 # The user dict must *always* have a __builtin__ reference to the
1244 # Python standard __builtin__ namespace, which must be imported.
1268 # Python standard __builtin__ namespace, which must be imported.
1245 # This is so that certain operations in prompt evaluation can be
1269 # This is so that certain operations in prompt evaluation can be
1246 # reliably executed with builtins. Note that we can NOT use
1270 # reliably executed with builtins. Note that we can NOT use
1247 # __builtins__ (note the 's'), because that can either be a dict or a
1271 # __builtins__ (note the 's'), because that can either be a dict or a
1248 # module, and can even mutate at runtime, depending on the context
1272 # module, and can even mutate at runtime, depending on the context
1249 # (Python makes no guarantees on it). In contrast, __builtin__ is
1273 # (Python makes no guarantees on it). In contrast, __builtin__ is
1250 # always a module object, though it must be explicitly imported.
1274 # always a module object, though it must be explicitly imported.
1251
1275
1252 # For more details:
1276 # For more details:
1253 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1277 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1254 ns = {}
1278 ns = {}
1255
1279
1256 # make global variables for user access to the histories
1280 # make global variables for user access to the histories
1257 ns['_ih'] = self.history_manager.input_hist_parsed
1281 ns['_ih'] = self.history_manager.input_hist_parsed
1258 ns['_oh'] = self.history_manager.output_hist
1282 ns['_oh'] = self.history_manager.output_hist
1259 ns['_dh'] = self.history_manager.dir_hist
1283 ns['_dh'] = self.history_manager.dir_hist
1260
1284
1261 # user aliases to input and output histories. These shouldn't show up
1285 # user aliases to input and output histories. These shouldn't show up
1262 # in %who, as they can have very large reprs.
1286 # in %who, as they can have very large reprs.
1263 ns['In'] = self.history_manager.input_hist_parsed
1287 ns['In'] = self.history_manager.input_hist_parsed
1264 ns['Out'] = self.history_manager.output_hist
1288 ns['Out'] = self.history_manager.output_hist
1265
1289
1266 # Store myself as the public api!!!
1290 # Store myself as the public api!!!
1267 ns['get_ipython'] = self.get_ipython
1291 ns['get_ipython'] = self.get_ipython
1268
1292
1269 ns['exit'] = self.exiter
1293 ns['exit'] = self.exiter
1270 ns['quit'] = self.exiter
1294 ns['quit'] = self.exiter
1271
1295
1272 # Sync what we've added so far to user_ns_hidden so these aren't seen
1296 # Sync what we've added so far to user_ns_hidden so these aren't seen
1273 # by %who
1297 # by %who
1274 self.user_ns_hidden.update(ns)
1298 self.user_ns_hidden.update(ns)
1275
1299
1276 # Anything put into ns now would show up in %who. Think twice before
1300 # Anything put into ns now would show up in %who. Think twice before
1277 # putting anything here, as we really want %who to show the user their
1301 # putting anything here, as we really want %who to show the user their
1278 # stuff, not our variables.
1302 # stuff, not our variables.
1279
1303
1280 # Finally, update the real user's namespace
1304 # Finally, update the real user's namespace
1281 self.user_ns.update(ns)
1305 self.user_ns.update(ns)
1282
1306
1283 @property
1307 @property
1284 def all_ns_refs(self):
1308 def all_ns_refs(self):
1285 """Get a list of references to all the namespace dictionaries in which
1309 """Get a list of references to all the namespace dictionaries in which
1286 IPython might store a user-created object.
1310 IPython might store a user-created object.
1287
1311
1288 Note that this does not include the displayhook, which also caches
1312 Note that this does not include the displayhook, which also caches
1289 objects from the output."""
1313 objects from the output."""
1290 return [self.user_ns, self.user_global_ns, self.user_ns_hidden] + \
1314 return [self.user_ns, self.user_global_ns, self.user_ns_hidden] + \
1291 [m.__dict__ for m in self._main_mod_cache.values()]
1315 [m.__dict__ for m in self._main_mod_cache.values()]
1292
1316
1293 def reset(self, new_session=True, aggressive=False):
1317 def reset(self, new_session=True, aggressive=False):
1294 """Clear all internal namespaces, and attempt to release references to
1318 """Clear all internal namespaces, and attempt to release references to
1295 user objects.
1319 user objects.
1296
1320
1297 If new_session is True, a new history session will be opened.
1321 If new_session is True, a new history session will be opened.
1298 """
1322 """
1299 # Clear histories
1323 # Clear histories
1300 self.history_manager.reset(new_session)
1324 self.history_manager.reset(new_session)
1301 # Reset counter used to index all histories
1325 # Reset counter used to index all histories
1302 if new_session:
1326 if new_session:
1303 self.execution_count = 1
1327 self.execution_count = 1
1304
1328
1305 # Reset last execution result
1329 # Reset last execution result
1306 self.last_execution_succeeded = True
1330 self.last_execution_succeeded = True
1307 self.last_execution_result = None
1331 self.last_execution_result = None
1308
1332
1309 # Flush cached output items
1333 # Flush cached output items
1310 if self.displayhook.do_full_cache:
1334 if self.displayhook.do_full_cache:
1311 self.displayhook.flush()
1335 self.displayhook.flush()
1312
1336
1313 # The main execution namespaces must be cleared very carefully,
1337 # The main execution namespaces must be cleared very carefully,
1314 # skipping the deletion of the builtin-related keys, because doing so
1338 # skipping the deletion of the builtin-related keys, because doing so
1315 # would cause errors in many object's __del__ methods.
1339 # would cause errors in many object's __del__ methods.
1316 if self.user_ns is not self.user_global_ns:
1340 if self.user_ns is not self.user_global_ns:
1317 self.user_ns.clear()
1341 self.user_ns.clear()
1318 ns = self.user_global_ns
1342 ns = self.user_global_ns
1319 drop_keys = set(ns.keys())
1343 drop_keys = set(ns.keys())
1320 drop_keys.discard('__builtin__')
1344 drop_keys.discard('__builtin__')
1321 drop_keys.discard('__builtins__')
1345 drop_keys.discard('__builtins__')
1322 drop_keys.discard('__name__')
1346 drop_keys.discard('__name__')
1323 for k in drop_keys:
1347 for k in drop_keys:
1324 del ns[k]
1348 del ns[k]
1325
1349
1326 self.user_ns_hidden.clear()
1350 self.user_ns_hidden.clear()
1327
1351
1328 # Restore the user namespaces to minimal usability
1352 # Restore the user namespaces to minimal usability
1329 self.init_user_ns()
1353 self.init_user_ns()
1330 if aggressive and not hasattr(self, "_sys_modules_keys"):
1354 if aggressive and not hasattr(self, "_sys_modules_keys"):
1331 print("Cannot restore sys.module, no snapshot")
1355 print("Cannot restore sys.module, no snapshot")
1332 elif aggressive:
1356 elif aggressive:
1333 print("culling sys module...")
1357 print("culling sys module...")
1334 current_keys = set(sys.modules.keys())
1358 current_keys = set(sys.modules.keys())
1335 for k in current_keys - self._sys_modules_keys:
1359 for k in current_keys - self._sys_modules_keys:
1336 if k.startswith("multiprocessing"):
1360 if k.startswith("multiprocessing"):
1337 continue
1361 continue
1338 del sys.modules[k]
1362 del sys.modules[k]
1339
1363
1340 # Restore the default and user aliases
1364 # Restore the default and user aliases
1341 self.alias_manager.clear_aliases()
1365 self.alias_manager.clear_aliases()
1342 self.alias_manager.init_aliases()
1366 self.alias_manager.init_aliases()
1343
1367
1344 # Now define aliases that only make sense on the terminal, because they
1368 # Now define aliases that only make sense on the terminal, because they
1345 # need direct access to the console in a way that we can't emulate in
1369 # need direct access to the console in a way that we can't emulate in
1346 # GUI or web frontend
1370 # GUI or web frontend
1347 if os.name == 'posix':
1371 if os.name == 'posix':
1348 for cmd in ('clear', 'more', 'less', 'man'):
1372 for cmd in ('clear', 'more', 'less', 'man'):
1349 if cmd not in self.magics_manager.magics['line']:
1373 if cmd not in self.magics_manager.magics['line']:
1350 self.alias_manager.soft_define_alias(cmd, cmd)
1374 self.alias_manager.soft_define_alias(cmd, cmd)
1351
1375
1352 # Flush the private list of module references kept for script
1376 # Flush the private list of module references kept for script
1353 # execution protection
1377 # execution protection
1354 self.clear_main_mod_cache()
1378 self.clear_main_mod_cache()
1355
1379
1356 def del_var(self, varname, by_name=False):
1380 def del_var(self, varname, by_name=False):
1357 """Delete a variable from the various namespaces, so that, as
1381 """Delete a variable from the various namespaces, so that, as
1358 far as possible, we're not keeping any hidden references to it.
1382 far as possible, we're not keeping any hidden references to it.
1359
1383
1360 Parameters
1384 Parameters
1361 ----------
1385 ----------
1362 varname : str
1386 varname : str
1363 The name of the variable to delete.
1387 The name of the variable to delete.
1364 by_name : bool
1388 by_name : bool
1365 If True, delete variables with the given name in each
1389 If True, delete variables with the given name in each
1366 namespace. If False (default), find the variable in the user
1390 namespace. If False (default), find the variable in the user
1367 namespace, and delete references to it.
1391 namespace, and delete references to it.
1368 """
1392 """
1369 if varname in ('__builtin__', '__builtins__'):
1393 if varname in ('__builtin__', '__builtins__'):
1370 raise ValueError("Refusing to delete %s" % varname)
1394 raise ValueError("Refusing to delete %s" % varname)
1371
1395
1372 ns_refs = self.all_ns_refs
1396 ns_refs = self.all_ns_refs
1373
1397
1374 if by_name: # Delete by name
1398 if by_name: # Delete by name
1375 for ns in ns_refs:
1399 for ns in ns_refs:
1376 try:
1400 try:
1377 del ns[varname]
1401 del ns[varname]
1378 except KeyError:
1402 except KeyError:
1379 pass
1403 pass
1380 else: # Delete by object
1404 else: # Delete by object
1381 try:
1405 try:
1382 obj = self.user_ns[varname]
1406 obj = self.user_ns[varname]
1383 except KeyError as e:
1407 except KeyError as e:
1384 raise NameError("name '%s' is not defined" % varname) from e
1408 raise NameError("name '%s' is not defined" % varname) from e
1385 # Also check in output history
1409 # Also check in output history
1386 ns_refs.append(self.history_manager.output_hist)
1410 ns_refs.append(self.history_manager.output_hist)
1387 for ns in ns_refs:
1411 for ns in ns_refs:
1388 to_delete = [n for n, o in ns.items() if o is obj]
1412 to_delete = [n for n, o in ns.items() if o is obj]
1389 for name in to_delete:
1413 for name in to_delete:
1390 del ns[name]
1414 del ns[name]
1391
1415
1392 # Ensure it is removed from the last execution result
1416 # Ensure it is removed from the last execution result
1393 if self.last_execution_result.result is obj:
1417 if self.last_execution_result.result is obj:
1394 self.last_execution_result = None
1418 self.last_execution_result = None
1395
1419
1396 # displayhook keeps extra references, but not in a dictionary
1420 # displayhook keeps extra references, but not in a dictionary
1397 for name in ('_', '__', '___'):
1421 for name in ('_', '__', '___'):
1398 if getattr(self.displayhook, name) is obj:
1422 if getattr(self.displayhook, name) is obj:
1399 setattr(self.displayhook, name, None)
1423 setattr(self.displayhook, name, None)
1400
1424
1401 def reset_selective(self, regex=None):
1425 def reset_selective(self, regex=None):
1402 """Clear selective variables from internal namespaces based on a
1426 """Clear selective variables from internal namespaces based on a
1403 specified regular expression.
1427 specified regular expression.
1404
1428
1405 Parameters
1429 Parameters
1406 ----------
1430 ----------
1407 regex : string or compiled pattern, optional
1431 regex : string or compiled pattern, optional
1408 A regular expression pattern that will be used in searching
1432 A regular expression pattern that will be used in searching
1409 variable names in the users namespaces.
1433 variable names in the users namespaces.
1410 """
1434 """
1411 if regex is not None:
1435 if regex is not None:
1412 try:
1436 try:
1413 m = re.compile(regex)
1437 m = re.compile(regex)
1414 except TypeError as e:
1438 except TypeError as e:
1415 raise TypeError('regex must be a string or compiled pattern') from e
1439 raise TypeError('regex must be a string or compiled pattern') from e
1416 # Search for keys in each namespace that match the given regex
1440 # Search for keys in each namespace that match the given regex
1417 # If a match is found, delete the key/value pair.
1441 # If a match is found, delete the key/value pair.
1418 for ns in self.all_ns_refs:
1442 for ns in self.all_ns_refs:
1419 for var in ns:
1443 for var in ns:
1420 if m.search(var):
1444 if m.search(var):
1421 del ns[var]
1445 del ns[var]
1422
1446
1423 def push(self, variables, interactive=True):
1447 def push(self, variables, interactive=True):
1424 """Inject a group of variables into the IPython user namespace.
1448 """Inject a group of variables into the IPython user namespace.
1425
1449
1426 Parameters
1450 Parameters
1427 ----------
1451 ----------
1428 variables : dict, str or list/tuple of str
1452 variables : dict, str or list/tuple of str
1429 The variables to inject into the user's namespace. If a dict, a
1453 The variables to inject into the user's namespace. If a dict, a
1430 simple update is done. If a str, the string is assumed to have
1454 simple update is done. If a str, the string is assumed to have
1431 variable names separated by spaces. A list/tuple of str can also
1455 variable names separated by spaces. A list/tuple of str can also
1432 be used to give the variable names. If just the variable names are
1456 be used to give the variable names. If just the variable names are
1433 give (list/tuple/str) then the variable values looked up in the
1457 give (list/tuple/str) then the variable values looked up in the
1434 callers frame.
1458 callers frame.
1435 interactive : bool
1459 interactive : bool
1436 If True (default), the variables will be listed with the ``who``
1460 If True (default), the variables will be listed with the ``who``
1437 magic.
1461 magic.
1438 """
1462 """
1439 vdict = None
1463 vdict = None
1440
1464
1441 # We need a dict of name/value pairs to do namespace updates.
1465 # We need a dict of name/value pairs to do namespace updates.
1442 if isinstance(variables, dict):
1466 if isinstance(variables, dict):
1443 vdict = variables
1467 vdict = variables
1444 elif isinstance(variables, (str, list, tuple)):
1468 elif isinstance(variables, (str, list, tuple)):
1445 if isinstance(variables, str):
1469 if isinstance(variables, str):
1446 vlist = variables.split()
1470 vlist = variables.split()
1447 else:
1471 else:
1448 vlist = variables
1472 vlist = variables
1449 vdict = {}
1473 vdict = {}
1450 cf = sys._getframe(1)
1474 cf = sys._getframe(1)
1451 for name in vlist:
1475 for name in vlist:
1452 try:
1476 try:
1453 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1477 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1454 except:
1478 except:
1455 print('Could not get variable %s from %s' %
1479 print('Could not get variable %s from %s' %
1456 (name,cf.f_code.co_name))
1480 (name,cf.f_code.co_name))
1457 else:
1481 else:
1458 raise ValueError('variables must be a dict/str/list/tuple')
1482 raise ValueError('variables must be a dict/str/list/tuple')
1459
1483
1460 # Propagate variables to user namespace
1484 # Propagate variables to user namespace
1461 self.user_ns.update(vdict)
1485 self.user_ns.update(vdict)
1462
1486
1463 # And configure interactive visibility
1487 # And configure interactive visibility
1464 user_ns_hidden = self.user_ns_hidden
1488 user_ns_hidden = self.user_ns_hidden
1465 if interactive:
1489 if interactive:
1466 for name in vdict:
1490 for name in vdict:
1467 user_ns_hidden.pop(name, None)
1491 user_ns_hidden.pop(name, None)
1468 else:
1492 else:
1469 user_ns_hidden.update(vdict)
1493 user_ns_hidden.update(vdict)
1470
1494
1471 def drop_by_id(self, variables):
1495 def drop_by_id(self, variables):
1472 """Remove a dict of variables from the user namespace, if they are the
1496 """Remove a dict of variables from the user namespace, if they are the
1473 same as the values in the dictionary.
1497 same as the values in the dictionary.
1474
1498
1475 This is intended for use by extensions: variables that they've added can
1499 This is intended for use by extensions: variables that they've added can
1476 be taken back out if they are unloaded, without removing any that the
1500 be taken back out if they are unloaded, without removing any that the
1477 user has overwritten.
1501 user has overwritten.
1478
1502
1479 Parameters
1503 Parameters
1480 ----------
1504 ----------
1481 variables : dict
1505 variables : dict
1482 A dictionary mapping object names (as strings) to the objects.
1506 A dictionary mapping object names (as strings) to the objects.
1483 """
1507 """
1484 for name, obj in variables.items():
1508 for name, obj in variables.items():
1485 if name in self.user_ns and self.user_ns[name] is obj:
1509 if name in self.user_ns and self.user_ns[name] is obj:
1486 del self.user_ns[name]
1510 del self.user_ns[name]
1487 self.user_ns_hidden.pop(name, None)
1511 self.user_ns_hidden.pop(name, None)
1488
1512
1489 #-------------------------------------------------------------------------
1513 #-------------------------------------------------------------------------
1490 # Things related to object introspection
1514 # Things related to object introspection
1491 #-------------------------------------------------------------------------
1515 #-------------------------------------------------------------------------
1492
1516
1493 def _ofind(self, oname, namespaces=None):
1517 def _ofind(self, oname, namespaces=None):
1494 """Find an object in the available namespaces.
1518 """Find an object in the available namespaces.
1495
1519
1496 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1520 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1497
1521
1498 Has special code to detect magic functions.
1522 Has special code to detect magic functions.
1499 """
1523 """
1500 oname = oname.strip()
1524 oname = oname.strip()
1501 if not oname.startswith(ESC_MAGIC) and \
1525 if not oname.startswith(ESC_MAGIC) and \
1502 not oname.startswith(ESC_MAGIC2) and \
1526 not oname.startswith(ESC_MAGIC2) and \
1503 not all(a.isidentifier() for a in oname.split(".")):
1527 not all(a.isidentifier() for a in oname.split(".")):
1504 return {'found': False}
1528 return {'found': False}
1505
1529
1506 if namespaces is None:
1530 if namespaces is None:
1507 # Namespaces to search in:
1531 # Namespaces to search in:
1508 # Put them in a list. The order is important so that we
1532 # Put them in a list. The order is important so that we
1509 # find things in the same order that Python finds them.
1533 # find things in the same order that Python finds them.
1510 namespaces = [ ('Interactive', self.user_ns),
1534 namespaces = [ ('Interactive', self.user_ns),
1511 ('Interactive (global)', self.user_global_ns),
1535 ('Interactive (global)', self.user_global_ns),
1512 ('Python builtin', builtin_mod.__dict__),
1536 ('Python builtin', builtin_mod.__dict__),
1513 ]
1537 ]
1514
1538
1515 ismagic = False
1539 ismagic = False
1516 isalias = False
1540 isalias = False
1517 found = False
1541 found = False
1518 ospace = None
1542 ospace = None
1519 parent = None
1543 parent = None
1520 obj = None
1544 obj = None
1521
1545
1522
1546
1523 # Look for the given name by splitting it in parts. If the head is
1547 # Look for the given name by splitting it in parts. If the head is
1524 # found, then we look for all the remaining parts as members, and only
1548 # found, then we look for all the remaining parts as members, and only
1525 # declare success if we can find them all.
1549 # declare success if we can find them all.
1526 oname_parts = oname.split('.')
1550 oname_parts = oname.split('.')
1527 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1551 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1528 for nsname,ns in namespaces:
1552 for nsname,ns in namespaces:
1529 try:
1553 try:
1530 obj = ns[oname_head]
1554 obj = ns[oname_head]
1531 except KeyError:
1555 except KeyError:
1532 continue
1556 continue
1533 else:
1557 else:
1534 for idx, part in enumerate(oname_rest):
1558 for idx, part in enumerate(oname_rest):
1535 try:
1559 try:
1536 parent = obj
1560 parent = obj
1537 # The last part is looked up in a special way to avoid
1561 # The last part is looked up in a special way to avoid
1538 # descriptor invocation as it may raise or have side
1562 # descriptor invocation as it may raise or have side
1539 # effects.
1563 # effects.
1540 if idx == len(oname_rest) - 1:
1564 if idx == len(oname_rest) - 1:
1541 obj = self._getattr_property(obj, part)
1565 obj = self._getattr_property(obj, part)
1542 else:
1566 else:
1543 obj = getattr(obj, part)
1567 obj = getattr(obj, part)
1544 except:
1568 except:
1545 # Blanket except b/c some badly implemented objects
1569 # Blanket except b/c some badly implemented objects
1546 # allow __getattr__ to raise exceptions other than
1570 # allow __getattr__ to raise exceptions other than
1547 # AttributeError, which then crashes IPython.
1571 # AttributeError, which then crashes IPython.
1548 break
1572 break
1549 else:
1573 else:
1550 # If we finish the for loop (no break), we got all members
1574 # If we finish the for loop (no break), we got all members
1551 found = True
1575 found = True
1552 ospace = nsname
1576 ospace = nsname
1553 break # namespace loop
1577 break # namespace loop
1554
1578
1555 # Try to see if it's magic
1579 # Try to see if it's magic
1556 if not found:
1580 if not found:
1557 obj = None
1581 obj = None
1558 if oname.startswith(ESC_MAGIC2):
1582 if oname.startswith(ESC_MAGIC2):
1559 oname = oname.lstrip(ESC_MAGIC2)
1583 oname = oname.lstrip(ESC_MAGIC2)
1560 obj = self.find_cell_magic(oname)
1584 obj = self.find_cell_magic(oname)
1561 elif oname.startswith(ESC_MAGIC):
1585 elif oname.startswith(ESC_MAGIC):
1562 oname = oname.lstrip(ESC_MAGIC)
1586 oname = oname.lstrip(ESC_MAGIC)
1563 obj = self.find_line_magic(oname)
1587 obj = self.find_line_magic(oname)
1564 else:
1588 else:
1565 # search without prefix, so run? will find %run?
1589 # search without prefix, so run? will find %run?
1566 obj = self.find_line_magic(oname)
1590 obj = self.find_line_magic(oname)
1567 if obj is None:
1591 if obj is None:
1568 obj = self.find_cell_magic(oname)
1592 obj = self.find_cell_magic(oname)
1569 if obj is not None:
1593 if obj is not None:
1570 found = True
1594 found = True
1571 ospace = 'IPython internal'
1595 ospace = 'IPython internal'
1572 ismagic = True
1596 ismagic = True
1573 isalias = isinstance(obj, Alias)
1597 isalias = isinstance(obj, Alias)
1574
1598
1575 # Last try: special-case some literals like '', [], {}, etc:
1599 # Last try: special-case some literals like '', [], {}, etc:
1576 if not found and oname_head in ["''",'""','[]','{}','()']:
1600 if not found and oname_head in ["''",'""','[]','{}','()']:
1577 obj = eval(oname_head)
1601 obj = eval(oname_head)
1578 found = True
1602 found = True
1579 ospace = 'Interactive'
1603 ospace = 'Interactive'
1580
1604
1581 return {
1605 return {
1582 'obj':obj,
1606 'obj':obj,
1583 'found':found,
1607 'found':found,
1584 'parent':parent,
1608 'parent':parent,
1585 'ismagic':ismagic,
1609 'ismagic':ismagic,
1586 'isalias':isalias,
1610 'isalias':isalias,
1587 'namespace':ospace
1611 'namespace':ospace
1588 }
1612 }
1589
1613
1590 @staticmethod
1614 @staticmethod
1591 def _getattr_property(obj, attrname):
1615 def _getattr_property(obj, attrname):
1592 """Property-aware getattr to use in object finding.
1616 """Property-aware getattr to use in object finding.
1593
1617
1594 If attrname represents a property, return it unevaluated (in case it has
1618 If attrname represents a property, return it unevaluated (in case it has
1595 side effects or raises an error.
1619 side effects or raises an error.
1596
1620
1597 """
1621 """
1598 if not isinstance(obj, type):
1622 if not isinstance(obj, type):
1599 try:
1623 try:
1600 # `getattr(type(obj), attrname)` is not guaranteed to return
1624 # `getattr(type(obj), attrname)` is not guaranteed to return
1601 # `obj`, but does so for property:
1625 # `obj`, but does so for property:
1602 #
1626 #
1603 # property.__get__(self, None, cls) -> self
1627 # property.__get__(self, None, cls) -> self
1604 #
1628 #
1605 # The universal alternative is to traverse the mro manually
1629 # The universal alternative is to traverse the mro manually
1606 # searching for attrname in class dicts.
1630 # searching for attrname in class dicts.
1607 attr = getattr(type(obj), attrname)
1631 attr = getattr(type(obj), attrname)
1608 except AttributeError:
1632 except AttributeError:
1609 pass
1633 pass
1610 else:
1634 else:
1611 # This relies on the fact that data descriptors (with both
1635 # This relies on the fact that data descriptors (with both
1612 # __get__ & __set__ magic methods) take precedence over
1636 # __get__ & __set__ magic methods) take precedence over
1613 # instance-level attributes:
1637 # instance-level attributes:
1614 #
1638 #
1615 # class A(object):
1639 # class A(object):
1616 # @property
1640 # @property
1617 # def foobar(self): return 123
1641 # def foobar(self): return 123
1618 # a = A()
1642 # a = A()
1619 # a.__dict__['foobar'] = 345
1643 # a.__dict__['foobar'] = 345
1620 # a.foobar # == 123
1644 # a.foobar # == 123
1621 #
1645 #
1622 # So, a property may be returned right away.
1646 # So, a property may be returned right away.
1623 if isinstance(attr, property):
1647 if isinstance(attr, property):
1624 return attr
1648 return attr
1625
1649
1626 # Nothing helped, fall back.
1650 # Nothing helped, fall back.
1627 return getattr(obj, attrname)
1651 return getattr(obj, attrname)
1628
1652
1629 def _object_find(self, oname, namespaces=None):
1653 def _object_find(self, oname, namespaces=None):
1630 """Find an object and return a struct with info about it."""
1654 """Find an object and return a struct with info about it."""
1631 return Struct(self._ofind(oname, namespaces))
1655 return Struct(self._ofind(oname, namespaces))
1632
1656
1633 def _inspect(self, meth, oname, namespaces=None, **kw):
1657 def _inspect(self, meth, oname, namespaces=None, **kw):
1634 """Generic interface to the inspector system.
1658 """Generic interface to the inspector system.
1635
1659
1636 This function is meant to be called by pdef, pdoc & friends.
1660 This function is meant to be called by pdef, pdoc & friends.
1637 """
1661 """
1638 info = self._object_find(oname, namespaces)
1662 info = self._object_find(oname, namespaces)
1639 docformat = (
1663 docformat = (
1640 sphinxify(self.object_inspect(oname)) if self.sphinxify_docstring else None
1664 sphinxify(self.object_inspect(oname)) if self.sphinxify_docstring else None
1641 )
1665 )
1642 if info.found:
1666 if info.found:
1643 pmethod = getattr(self.inspector, meth)
1667 pmethod = getattr(self.inspector, meth)
1644 # TODO: only apply format_screen to the plain/text repr of the mime
1668 # TODO: only apply format_screen to the plain/text repr of the mime
1645 # bundle.
1669 # bundle.
1646 formatter = format_screen if info.ismagic else docformat
1670 formatter = format_screen if info.ismagic else docformat
1647 if meth == 'pdoc':
1671 if meth == 'pdoc':
1648 pmethod(info.obj, oname, formatter)
1672 pmethod(info.obj, oname, formatter)
1649 elif meth == 'pinfo':
1673 elif meth == 'pinfo':
1650 pmethod(
1674 pmethod(
1651 info.obj,
1675 info.obj,
1652 oname,
1676 oname,
1653 formatter,
1677 formatter,
1654 info,
1678 info,
1655 enable_html_pager=self.enable_html_pager,
1679 enable_html_pager=self.enable_html_pager,
1656 **kw,
1680 **kw,
1657 )
1681 )
1658 else:
1682 else:
1659 pmethod(info.obj, oname)
1683 pmethod(info.obj, oname)
1660 else:
1684 else:
1661 print('Object `%s` not found.' % oname)
1685 print('Object `%s` not found.' % oname)
1662 return 'not found' # so callers can take other action
1686 return 'not found' # so callers can take other action
1663
1687
1664 def object_inspect(self, oname, detail_level=0):
1688 def object_inspect(self, oname, detail_level=0):
1665 """Get object info about oname"""
1689 """Get object info about oname"""
1666 with self.builtin_trap:
1690 with self.builtin_trap:
1667 info = self._object_find(oname)
1691 info = self._object_find(oname)
1668 if info.found:
1692 if info.found:
1669 return self.inspector.info(info.obj, oname, info=info,
1693 return self.inspector.info(info.obj, oname, info=info,
1670 detail_level=detail_level
1694 detail_level=detail_level
1671 )
1695 )
1672 else:
1696 else:
1673 return oinspect.object_info(name=oname, found=False)
1697 return oinspect.object_info(name=oname, found=False)
1674
1698
1675 def object_inspect_text(self, oname, detail_level=0):
1699 def object_inspect_text(self, oname, detail_level=0):
1676 """Get object info as formatted text"""
1700 """Get object info as formatted text"""
1677 return self.object_inspect_mime(oname, detail_level)['text/plain']
1701 return self.object_inspect_mime(oname, detail_level)['text/plain']
1678
1702
1679 def object_inspect_mime(self, oname, detail_level=0, omit_sections=()):
1703 def object_inspect_mime(self, oname, detail_level=0, omit_sections=()):
1680 """Get object info as a mimebundle of formatted representations.
1704 """Get object info as a mimebundle of formatted representations.
1681
1705
1682 A mimebundle is a dictionary, keyed by mime-type.
1706 A mimebundle is a dictionary, keyed by mime-type.
1683 It must always have the key `'text/plain'`.
1707 It must always have the key `'text/plain'`.
1684 """
1708 """
1685 with self.builtin_trap:
1709 with self.builtin_trap:
1686 info = self._object_find(oname)
1710 info = self._object_find(oname)
1687 if info.found:
1711 if info.found:
1688 docformat = (
1712 docformat = (
1689 sphinxify(self.object_inspect(oname))
1713 sphinxify(self.object_inspect(oname))
1690 if self.sphinxify_docstring
1714 if self.sphinxify_docstring
1691 else None
1715 else None
1692 )
1716 )
1693 return self.inspector._get_info(
1717 return self.inspector._get_info(
1694 info.obj,
1718 info.obj,
1695 oname,
1719 oname,
1696 info=info,
1720 info=info,
1697 detail_level=detail_level,
1721 detail_level=detail_level,
1698 formatter=docformat,
1722 formatter=docformat,
1699 omit_sections=omit_sections,
1723 omit_sections=omit_sections,
1700 )
1724 )
1701 else:
1725 else:
1702 raise KeyError(oname)
1726 raise KeyError(oname)
1703
1727
1704 #-------------------------------------------------------------------------
1728 #-------------------------------------------------------------------------
1705 # Things related to history management
1729 # Things related to history management
1706 #-------------------------------------------------------------------------
1730 #-------------------------------------------------------------------------
1707
1731
1708 def init_history(self):
1732 def init_history(self):
1709 """Sets up the command history, and starts regular autosaves."""
1733 """Sets up the command history, and starts regular autosaves."""
1710 self.history_manager = HistoryManager(shell=self, parent=self)
1734 self.history_manager = HistoryManager(shell=self, parent=self)
1711 self.configurables.append(self.history_manager)
1735 self.configurables.append(self.history_manager)
1712
1736
1713 #-------------------------------------------------------------------------
1737 #-------------------------------------------------------------------------
1714 # Things related to exception handling and tracebacks (not debugging)
1738 # Things related to exception handling and tracebacks (not debugging)
1715 #-------------------------------------------------------------------------
1739 #-------------------------------------------------------------------------
1716
1740
1717 debugger_cls = InterruptiblePdb
1741 debugger_cls = InterruptiblePdb
1718
1742
1719 def init_traceback_handlers(self, custom_exceptions):
1743 def init_traceback_handlers(self, custom_exceptions):
1720 # Syntax error handler.
1744 # Syntax error handler.
1721 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor', parent=self)
1745 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor', parent=self)
1722
1746
1723 # The interactive one is initialized with an offset, meaning we always
1747 # The interactive one is initialized with an offset, meaning we always
1724 # want to remove the topmost item in the traceback, which is our own
1748 # want to remove the topmost item in the traceback, which is our own
1725 # internal code. Valid modes: ['Plain','Context','Verbose','Minimal']
1749 # internal code. Valid modes: ['Plain','Context','Verbose','Minimal']
1726 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1750 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1727 color_scheme='NoColor',
1751 color_scheme='NoColor',
1728 tb_offset = 1,
1752 tb_offset = 1,
1729 check_cache=check_linecache_ipython,
1753 check_cache=check_linecache_ipython,
1730 debugger_cls=self.debugger_cls, parent=self)
1754 debugger_cls=self.debugger_cls, parent=self)
1731
1755
1732 # The instance will store a pointer to the system-wide exception hook,
1756 # The instance will store a pointer to the system-wide exception hook,
1733 # so that runtime code (such as magics) can access it. This is because
1757 # so that runtime code (such as magics) can access it. This is because
1734 # during the read-eval loop, it may get temporarily overwritten.
1758 # during the read-eval loop, it may get temporarily overwritten.
1735 self.sys_excepthook = sys.excepthook
1759 self.sys_excepthook = sys.excepthook
1736
1760
1737 # and add any custom exception handlers the user may have specified
1761 # and add any custom exception handlers the user may have specified
1738 self.set_custom_exc(*custom_exceptions)
1762 self.set_custom_exc(*custom_exceptions)
1739
1763
1740 # Set the exception mode
1764 # Set the exception mode
1741 self.InteractiveTB.set_mode(mode=self.xmode)
1765 self.InteractiveTB.set_mode(mode=self.xmode)
1742
1766
1743 def set_custom_exc(self, exc_tuple, handler):
1767 def set_custom_exc(self, exc_tuple, handler):
1744 """set_custom_exc(exc_tuple, handler)
1768 """set_custom_exc(exc_tuple, handler)
1745
1769
1746 Set a custom exception handler, which will be called if any of the
1770 Set a custom exception handler, which will be called if any of the
1747 exceptions in exc_tuple occur in the mainloop (specifically, in the
1771 exceptions in exc_tuple occur in the mainloop (specifically, in the
1748 run_code() method).
1772 run_code() method).
1749
1773
1750 Parameters
1774 Parameters
1751 ----------
1775 ----------
1752 exc_tuple : tuple of exception classes
1776 exc_tuple : tuple of exception classes
1753 A *tuple* of exception classes, for which to call the defined
1777 A *tuple* of exception classes, for which to call the defined
1754 handler. It is very important that you use a tuple, and NOT A
1778 handler. It is very important that you use a tuple, and NOT A
1755 LIST here, because of the way Python's except statement works. If
1779 LIST here, because of the way Python's except statement works. If
1756 you only want to trap a single exception, use a singleton tuple::
1780 you only want to trap a single exception, use a singleton tuple::
1757
1781
1758 exc_tuple == (MyCustomException,)
1782 exc_tuple == (MyCustomException,)
1759
1783
1760 handler : callable
1784 handler : callable
1761 handler must have the following signature::
1785 handler must have the following signature::
1762
1786
1763 def my_handler(self, etype, value, tb, tb_offset=None):
1787 def my_handler(self, etype, value, tb, tb_offset=None):
1764 ...
1788 ...
1765 return structured_traceback
1789 return structured_traceback
1766
1790
1767 Your handler must return a structured traceback (a list of strings),
1791 Your handler must return a structured traceback (a list of strings),
1768 or None.
1792 or None.
1769
1793
1770 This will be made into an instance method (via types.MethodType)
1794 This will be made into an instance method (via types.MethodType)
1771 of IPython itself, and it will be called if any of the exceptions
1795 of IPython itself, and it will be called if any of the exceptions
1772 listed in the exc_tuple are caught. If the handler is None, an
1796 listed in the exc_tuple are caught. If the handler is None, an
1773 internal basic one is used, which just prints basic info.
1797 internal basic one is used, which just prints basic info.
1774
1798
1775 To protect IPython from crashes, if your handler ever raises an
1799 To protect IPython from crashes, if your handler ever raises an
1776 exception or returns an invalid result, it will be immediately
1800 exception or returns an invalid result, it will be immediately
1777 disabled.
1801 disabled.
1778
1802
1779 Notes
1803 Notes
1780 -----
1804 -----
1781 WARNING: by putting in your own exception handler into IPython's main
1805 WARNING: by putting in your own exception handler into IPython's main
1782 execution loop, you run a very good chance of nasty crashes. This
1806 execution loop, you run a very good chance of nasty crashes. This
1783 facility should only be used if you really know what you are doing.
1807 facility should only be used if you really know what you are doing.
1784 """
1808 """
1785
1809
1786 if not isinstance(exc_tuple, tuple):
1810 if not isinstance(exc_tuple, tuple):
1787 raise TypeError("The custom exceptions must be given as a tuple.")
1811 raise TypeError("The custom exceptions must be given as a tuple.")
1788
1812
1789 def dummy_handler(self, etype, value, tb, tb_offset=None):
1813 def dummy_handler(self, etype, value, tb, tb_offset=None):
1790 print('*** Simple custom exception handler ***')
1814 print('*** Simple custom exception handler ***')
1791 print('Exception type :', etype)
1815 print('Exception type :', etype)
1792 print('Exception value:', value)
1816 print('Exception value:', value)
1793 print('Traceback :', tb)
1817 print('Traceback :', tb)
1794
1818
1795 def validate_stb(stb):
1819 def validate_stb(stb):
1796 """validate structured traceback return type
1820 """validate structured traceback return type
1797
1821
1798 return type of CustomTB *should* be a list of strings, but allow
1822 return type of CustomTB *should* be a list of strings, but allow
1799 single strings or None, which are harmless.
1823 single strings or None, which are harmless.
1800
1824
1801 This function will *always* return a list of strings,
1825 This function will *always* return a list of strings,
1802 and will raise a TypeError if stb is inappropriate.
1826 and will raise a TypeError if stb is inappropriate.
1803 """
1827 """
1804 msg = "CustomTB must return list of strings, not %r" % stb
1828 msg = "CustomTB must return list of strings, not %r" % stb
1805 if stb is None:
1829 if stb is None:
1806 return []
1830 return []
1807 elif isinstance(stb, str):
1831 elif isinstance(stb, str):
1808 return [stb]
1832 return [stb]
1809 elif not isinstance(stb, list):
1833 elif not isinstance(stb, list):
1810 raise TypeError(msg)
1834 raise TypeError(msg)
1811 # it's a list
1835 # it's a list
1812 for line in stb:
1836 for line in stb:
1813 # check every element
1837 # check every element
1814 if not isinstance(line, str):
1838 if not isinstance(line, str):
1815 raise TypeError(msg)
1839 raise TypeError(msg)
1816 return stb
1840 return stb
1817
1841
1818 if handler is None:
1842 if handler is None:
1819 wrapped = dummy_handler
1843 wrapped = dummy_handler
1820 else:
1844 else:
1821 def wrapped(self,etype,value,tb,tb_offset=None):
1845 def wrapped(self,etype,value,tb,tb_offset=None):
1822 """wrap CustomTB handler, to protect IPython from user code
1846 """wrap CustomTB handler, to protect IPython from user code
1823
1847
1824 This makes it harder (but not impossible) for custom exception
1848 This makes it harder (but not impossible) for custom exception
1825 handlers to crash IPython.
1849 handlers to crash IPython.
1826 """
1850 """
1827 try:
1851 try:
1828 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1852 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1829 return validate_stb(stb)
1853 return validate_stb(stb)
1830 except:
1854 except:
1831 # clear custom handler immediately
1855 # clear custom handler immediately
1832 self.set_custom_exc((), None)
1856 self.set_custom_exc((), None)
1833 print("Custom TB Handler failed, unregistering", file=sys.stderr)
1857 print("Custom TB Handler failed, unregistering", file=sys.stderr)
1834 # show the exception in handler first
1858 # show the exception in handler first
1835 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1859 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1836 print(self.InteractiveTB.stb2text(stb))
1860 print(self.InteractiveTB.stb2text(stb))
1837 print("The original exception:")
1861 print("The original exception:")
1838 stb = self.InteractiveTB.structured_traceback(
1862 stb = self.InteractiveTB.structured_traceback(
1839 (etype,value,tb), tb_offset=tb_offset
1863 (etype,value,tb), tb_offset=tb_offset
1840 )
1864 )
1841 return stb
1865 return stb
1842
1866
1843 self.CustomTB = types.MethodType(wrapped,self)
1867 self.CustomTB = types.MethodType(wrapped,self)
1844 self.custom_exceptions = exc_tuple
1868 self.custom_exceptions = exc_tuple
1845
1869
1846 def excepthook(self, etype, value, tb):
1870 def excepthook(self, etype, value, tb):
1847 """One more defense for GUI apps that call sys.excepthook.
1871 """One more defense for GUI apps that call sys.excepthook.
1848
1872
1849 GUI frameworks like wxPython trap exceptions and call
1873 GUI frameworks like wxPython trap exceptions and call
1850 sys.excepthook themselves. I guess this is a feature that
1874 sys.excepthook themselves. I guess this is a feature that
1851 enables them to keep running after exceptions that would
1875 enables them to keep running after exceptions that would
1852 otherwise kill their mainloop. This is a bother for IPython
1876 otherwise kill their mainloop. This is a bother for IPython
1853 which expects to catch all of the program exceptions with a try:
1877 which expects to catch all of the program exceptions with a try:
1854 except: statement.
1878 except: statement.
1855
1879
1856 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1880 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1857 any app directly invokes sys.excepthook, it will look to the user like
1881 any app directly invokes sys.excepthook, it will look to the user like
1858 IPython crashed. In order to work around this, we can disable the
1882 IPython crashed. In order to work around this, we can disable the
1859 CrashHandler and replace it with this excepthook instead, which prints a
1883 CrashHandler and replace it with this excepthook instead, which prints a
1860 regular traceback using our InteractiveTB. In this fashion, apps which
1884 regular traceback using our InteractiveTB. In this fashion, apps which
1861 call sys.excepthook will generate a regular-looking exception from
1885 call sys.excepthook will generate a regular-looking exception from
1862 IPython, and the CrashHandler will only be triggered by real IPython
1886 IPython, and the CrashHandler will only be triggered by real IPython
1863 crashes.
1887 crashes.
1864
1888
1865 This hook should be used sparingly, only in places which are not likely
1889 This hook should be used sparingly, only in places which are not likely
1866 to be true IPython errors.
1890 to be true IPython errors.
1867 """
1891 """
1868 self.showtraceback((etype, value, tb), tb_offset=0)
1892 self.showtraceback((etype, value, tb), tb_offset=0)
1869
1893
1870 def _get_exc_info(self, exc_tuple=None):
1894 def _get_exc_info(self, exc_tuple=None):
1871 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1895 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1872
1896
1873 Ensures sys.last_type,value,traceback hold the exc_info we found,
1897 Ensures sys.last_type,value,traceback hold the exc_info we found,
1874 from whichever source.
1898 from whichever source.
1875
1899
1876 raises ValueError if none of these contain any information
1900 raises ValueError if none of these contain any information
1877 """
1901 """
1878 if exc_tuple is None:
1902 if exc_tuple is None:
1879 etype, value, tb = sys.exc_info()
1903 etype, value, tb = sys.exc_info()
1880 else:
1904 else:
1881 etype, value, tb = exc_tuple
1905 etype, value, tb = exc_tuple
1882
1906
1883 if etype is None:
1907 if etype is None:
1884 if hasattr(sys, 'last_type'):
1908 if hasattr(sys, 'last_type'):
1885 etype, value, tb = sys.last_type, sys.last_value, \
1909 etype, value, tb = sys.last_type, sys.last_value, \
1886 sys.last_traceback
1910 sys.last_traceback
1887
1911
1888 if etype is None:
1912 if etype is None:
1889 raise ValueError("No exception to find")
1913 raise ValueError("No exception to find")
1890
1914
1891 # Now store the exception info in sys.last_type etc.
1915 # Now store the exception info in sys.last_type etc.
1892 # WARNING: these variables are somewhat deprecated and not
1916 # WARNING: these variables are somewhat deprecated and not
1893 # necessarily safe to use in a threaded environment, but tools
1917 # necessarily safe to use in a threaded environment, but tools
1894 # like pdb depend on their existence, so let's set them. If we
1918 # like pdb depend on their existence, so let's set them. If we
1895 # find problems in the field, we'll need to revisit their use.
1919 # find problems in the field, we'll need to revisit their use.
1896 sys.last_type = etype
1920 sys.last_type = etype
1897 sys.last_value = value
1921 sys.last_value = value
1898 sys.last_traceback = tb
1922 sys.last_traceback = tb
1899
1923
1900 return etype, value, tb
1924 return etype, value, tb
1901
1925
1902 def show_usage_error(self, exc):
1926 def show_usage_error(self, exc):
1903 """Show a short message for UsageErrors
1927 """Show a short message for UsageErrors
1904
1928
1905 These are special exceptions that shouldn't show a traceback.
1929 These are special exceptions that shouldn't show a traceback.
1906 """
1930 """
1907 print("UsageError: %s" % exc, file=sys.stderr)
1931 print("UsageError: %s" % exc, file=sys.stderr)
1908
1932
1909 def get_exception_only(self, exc_tuple=None):
1933 def get_exception_only(self, exc_tuple=None):
1910 """
1934 """
1911 Return as a string (ending with a newline) the exception that
1935 Return as a string (ending with a newline) the exception that
1912 just occurred, without any traceback.
1936 just occurred, without any traceback.
1913 """
1937 """
1914 etype, value, tb = self._get_exc_info(exc_tuple)
1938 etype, value, tb = self._get_exc_info(exc_tuple)
1915 msg = traceback.format_exception_only(etype, value)
1939 msg = traceback.format_exception_only(etype, value)
1916 return ''.join(msg)
1940 return ''.join(msg)
1917
1941
1918 def showtraceback(self, exc_tuple=None, filename=None, tb_offset=None,
1942 def showtraceback(self, exc_tuple=None, filename=None, tb_offset=None,
1919 exception_only=False, running_compiled_code=False):
1943 exception_only=False, running_compiled_code=False):
1920 """Display the exception that just occurred.
1944 """Display the exception that just occurred.
1921
1945
1922 If nothing is known about the exception, this is the method which
1946 If nothing is known about the exception, this is the method which
1923 should be used throughout the code for presenting user tracebacks,
1947 should be used throughout the code for presenting user tracebacks,
1924 rather than directly invoking the InteractiveTB object.
1948 rather than directly invoking the InteractiveTB object.
1925
1949
1926 A specific showsyntaxerror() also exists, but this method can take
1950 A specific showsyntaxerror() also exists, but this method can take
1927 care of calling it if needed, so unless you are explicitly catching a
1951 care of calling it if needed, so unless you are explicitly catching a
1928 SyntaxError exception, don't try to analyze the stack manually and
1952 SyntaxError exception, don't try to analyze the stack manually and
1929 simply call this method."""
1953 simply call this method."""
1930
1954
1931 try:
1955 try:
1932 try:
1956 try:
1933 etype, value, tb = self._get_exc_info(exc_tuple)
1957 etype, value, tb = self._get_exc_info(exc_tuple)
1934 except ValueError:
1958 except ValueError:
1935 print('No traceback available to show.', file=sys.stderr)
1959 print('No traceback available to show.', file=sys.stderr)
1936 return
1960 return
1937
1961
1938 if issubclass(etype, SyntaxError):
1962 if issubclass(etype, SyntaxError):
1939 # Though this won't be called by syntax errors in the input
1963 # Though this won't be called by syntax errors in the input
1940 # line, there may be SyntaxError cases with imported code.
1964 # line, there may be SyntaxError cases with imported code.
1941 self.showsyntaxerror(filename, running_compiled_code)
1965 self.showsyntaxerror(filename, running_compiled_code)
1942 elif etype is UsageError:
1966 elif etype is UsageError:
1943 self.show_usage_error(value)
1967 self.show_usage_error(value)
1944 else:
1968 else:
1945 if exception_only:
1969 if exception_only:
1946 stb = ['An exception has occurred, use %tb to see '
1970 stb = ['An exception has occurred, use %tb to see '
1947 'the full traceback.\n']
1971 'the full traceback.\n']
1948 stb.extend(self.InteractiveTB.get_exception_only(etype,
1972 stb.extend(self.InteractiveTB.get_exception_only(etype,
1949 value))
1973 value))
1950 else:
1974 else:
1951 try:
1975 try:
1952 # Exception classes can customise their traceback - we
1976 # Exception classes can customise their traceback - we
1953 # use this in IPython.parallel for exceptions occurring
1977 # use this in IPython.parallel for exceptions occurring
1954 # in the engines. This should return a list of strings.
1978 # in the engines. This should return a list of strings.
1955 stb = value._render_traceback_()
1979 stb = value._render_traceback_()
1956 except Exception:
1980 except Exception:
1957 stb = self.InteractiveTB.structured_traceback(etype,
1981 stb = self.InteractiveTB.structured_traceback(etype,
1958 value, tb, tb_offset=tb_offset)
1982 value, tb, tb_offset=tb_offset)
1959
1983
1960 self._showtraceback(etype, value, stb)
1984 self._showtraceback(etype, value, stb)
1961 if self.call_pdb:
1985 if self.call_pdb:
1962 # drop into debugger
1986 # drop into debugger
1963 self.debugger(force=True)
1987 self.debugger(force=True)
1964 return
1988 return
1965
1989
1966 # Actually show the traceback
1990 # Actually show the traceback
1967 self._showtraceback(etype, value, stb)
1991 self._showtraceback(etype, value, stb)
1968
1992
1969 except KeyboardInterrupt:
1993 except KeyboardInterrupt:
1970 print('\n' + self.get_exception_only(), file=sys.stderr)
1994 print('\n' + self.get_exception_only(), file=sys.stderr)
1971
1995
1972 def _showtraceback(self, etype, evalue, stb: str):
1996 def _showtraceback(self, etype, evalue, stb: str):
1973 """Actually show a traceback.
1997 """Actually show a traceback.
1974
1998
1975 Subclasses may override this method to put the traceback on a different
1999 Subclasses may override this method to put the traceback on a different
1976 place, like a side channel.
2000 place, like a side channel.
1977 """
2001 """
1978 val = self.InteractiveTB.stb2text(stb)
2002 val = self.InteractiveTB.stb2text(stb)
1979 try:
2003 try:
1980 print(val)
2004 print(val)
1981 except UnicodeEncodeError:
2005 except UnicodeEncodeError:
1982 print(val.encode("utf-8", "backslashreplace").decode())
2006 print(val.encode("utf-8", "backslashreplace").decode())
1983
2007
1984 def showsyntaxerror(self, filename=None, running_compiled_code=False):
2008 def showsyntaxerror(self, filename=None, running_compiled_code=False):
1985 """Display the syntax error that just occurred.
2009 """Display the syntax error that just occurred.
1986
2010
1987 This doesn't display a stack trace because there isn't one.
2011 This doesn't display a stack trace because there isn't one.
1988
2012
1989 If a filename is given, it is stuffed in the exception instead
2013 If a filename is given, it is stuffed in the exception instead
1990 of what was there before (because Python's parser always uses
2014 of what was there before (because Python's parser always uses
1991 "<string>" when reading from a string).
2015 "<string>" when reading from a string).
1992
2016
1993 If the syntax error occurred when running a compiled code (i.e. running_compile_code=True),
2017 If the syntax error occurred when running a compiled code (i.e. running_compile_code=True),
1994 longer stack trace will be displayed.
2018 longer stack trace will be displayed.
1995 """
2019 """
1996 etype, value, last_traceback = self._get_exc_info()
2020 etype, value, last_traceback = self._get_exc_info()
1997
2021
1998 if filename and issubclass(etype, SyntaxError):
2022 if filename and issubclass(etype, SyntaxError):
1999 try:
2023 try:
2000 value.filename = filename
2024 value.filename = filename
2001 except:
2025 except:
2002 # Not the format we expect; leave it alone
2026 # Not the format we expect; leave it alone
2003 pass
2027 pass
2004
2028
2005 # If the error occurred when executing compiled code, we should provide full stacktrace.
2029 # If the error occurred when executing compiled code, we should provide full stacktrace.
2006 elist = traceback.extract_tb(last_traceback) if running_compiled_code else []
2030 elist = traceback.extract_tb(last_traceback) if running_compiled_code else []
2007 stb = self.SyntaxTB.structured_traceback(etype, value, elist)
2031 stb = self.SyntaxTB.structured_traceback(etype, value, elist)
2008 self._showtraceback(etype, value, stb)
2032 self._showtraceback(etype, value, stb)
2009
2033
2010 # This is overridden in TerminalInteractiveShell to show a message about
2034 # This is overridden in TerminalInteractiveShell to show a message about
2011 # the %paste magic.
2035 # the %paste magic.
2012 def showindentationerror(self):
2036 def showindentationerror(self):
2013 """Called by _run_cell when there's an IndentationError in code entered
2037 """Called by _run_cell when there's an IndentationError in code entered
2014 at the prompt.
2038 at the prompt.
2015
2039
2016 This is overridden in TerminalInteractiveShell to show a message about
2040 This is overridden in TerminalInteractiveShell to show a message about
2017 the %paste magic."""
2041 the %paste magic."""
2018 self.showsyntaxerror()
2042 self.showsyntaxerror()
2019
2043
2020 @skip_doctest
2044 @skip_doctest
2021 def set_next_input(self, s, replace=False):
2045 def set_next_input(self, s, replace=False):
2022 """ Sets the 'default' input string for the next command line.
2046 """ Sets the 'default' input string for the next command line.
2023
2047
2024 Example::
2048 Example::
2025
2049
2026 In [1]: _ip.set_next_input("Hello Word")
2050 In [1]: _ip.set_next_input("Hello Word")
2027 In [2]: Hello Word_ # cursor is here
2051 In [2]: Hello Word_ # cursor is here
2028 """
2052 """
2029 self.rl_next_input = s
2053 self.rl_next_input = s
2030
2054
2031 def _indent_current_str(self):
2055 def _indent_current_str(self):
2032 """return the current level of indentation as a string"""
2056 """return the current level of indentation as a string"""
2033 return self.input_splitter.get_indent_spaces() * ' '
2057 return self.input_splitter.get_indent_spaces() * ' '
2034
2058
2035 #-------------------------------------------------------------------------
2059 #-------------------------------------------------------------------------
2036 # Things related to text completion
2060 # Things related to text completion
2037 #-------------------------------------------------------------------------
2061 #-------------------------------------------------------------------------
2038
2062
2039 def init_completer(self):
2063 def init_completer(self):
2040 """Initialize the completion machinery.
2064 """Initialize the completion machinery.
2041
2065
2042 This creates completion machinery that can be used by client code,
2066 This creates completion machinery that can be used by client code,
2043 either interactively in-process (typically triggered by the readline
2067 either interactively in-process (typically triggered by the readline
2044 library), programmatically (such as in test suites) or out-of-process
2068 library), programmatically (such as in test suites) or out-of-process
2045 (typically over the network by remote frontends).
2069 (typically over the network by remote frontends).
2046 """
2070 """
2047 from IPython.core.completer import IPCompleter
2071 from IPython.core.completer import IPCompleter
2048 from IPython.core.completerlib import (
2072 from IPython.core.completerlib import (
2049 cd_completer,
2073 cd_completer,
2050 magic_run_completer,
2074 magic_run_completer,
2051 module_completer,
2075 module_completer,
2052 reset_completer,
2076 reset_completer,
2053 )
2077 )
2054
2078
2055 self.Completer = IPCompleter(shell=self,
2079 self.Completer = IPCompleter(shell=self,
2056 namespace=self.user_ns,
2080 namespace=self.user_ns,
2057 global_namespace=self.user_global_ns,
2081 global_namespace=self.user_global_ns,
2058 parent=self,
2082 parent=self,
2059 )
2083 )
2060 self.configurables.append(self.Completer)
2084 self.configurables.append(self.Completer)
2061
2085
2062 # Add custom completers to the basic ones built into IPCompleter
2086 # Add custom completers to the basic ones built into IPCompleter
2063 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
2087 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
2064 self.strdispatchers['complete_command'] = sdisp
2088 self.strdispatchers['complete_command'] = sdisp
2065 self.Completer.custom_completers = sdisp
2089 self.Completer.custom_completers = sdisp
2066
2090
2067 self.set_hook('complete_command', module_completer, str_key = 'import')
2091 self.set_hook('complete_command', module_completer, str_key = 'import')
2068 self.set_hook('complete_command', module_completer, str_key = 'from')
2092 self.set_hook('complete_command', module_completer, str_key = 'from')
2069 self.set_hook('complete_command', module_completer, str_key = '%aimport')
2093 self.set_hook('complete_command', module_completer, str_key = '%aimport')
2070 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
2094 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
2071 self.set_hook('complete_command', cd_completer, str_key = '%cd')
2095 self.set_hook('complete_command', cd_completer, str_key = '%cd')
2072 self.set_hook('complete_command', reset_completer, str_key = '%reset')
2096 self.set_hook('complete_command', reset_completer, str_key = '%reset')
2073
2097
2074 @skip_doctest
2098 @skip_doctest
2075 def complete(self, text, line=None, cursor_pos=None):
2099 def complete(self, text, line=None, cursor_pos=None):
2076 """Return the completed text and a list of completions.
2100 """Return the completed text and a list of completions.
2077
2101
2078 Parameters
2102 Parameters
2079 ----------
2103 ----------
2080 text : string
2104 text : string
2081 A string of text to be completed on. It can be given as empty and
2105 A string of text to be completed on. It can be given as empty and
2082 instead a line/position pair are given. In this case, the
2106 instead a line/position pair are given. In this case, the
2083 completer itself will split the line like readline does.
2107 completer itself will split the line like readline does.
2084 line : string, optional
2108 line : string, optional
2085 The complete line that text is part of.
2109 The complete line that text is part of.
2086 cursor_pos : int, optional
2110 cursor_pos : int, optional
2087 The position of the cursor on the input line.
2111 The position of the cursor on the input line.
2088
2112
2089 Returns
2113 Returns
2090 -------
2114 -------
2091 text : string
2115 text : string
2092 The actual text that was completed.
2116 The actual text that was completed.
2093 matches : list
2117 matches : list
2094 A sorted list with all possible completions.
2118 A sorted list with all possible completions.
2095
2119
2096 Notes
2120 Notes
2097 -----
2121 -----
2098 The optional arguments allow the completion to take more context into
2122 The optional arguments allow the completion to take more context into
2099 account, and are part of the low-level completion API.
2123 account, and are part of the low-level completion API.
2100
2124
2101 This is a wrapper around the completion mechanism, similar to what
2125 This is a wrapper around the completion mechanism, similar to what
2102 readline does at the command line when the TAB key is hit. By
2126 readline does at the command line when the TAB key is hit. By
2103 exposing it as a method, it can be used by other non-readline
2127 exposing it as a method, it can be used by other non-readline
2104 environments (such as GUIs) for text completion.
2128 environments (such as GUIs) for text completion.
2105
2129
2106 Examples
2130 Examples
2107 --------
2131 --------
2108 In [1]: x = 'hello'
2132 In [1]: x = 'hello'
2109
2133
2110 In [2]: _ip.complete('x.l')
2134 In [2]: _ip.complete('x.l')
2111 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2135 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2112 """
2136 """
2113
2137
2114 # Inject names into __builtin__ so we can complete on the added names.
2138 # Inject names into __builtin__ so we can complete on the added names.
2115 with self.builtin_trap:
2139 with self.builtin_trap:
2116 return self.Completer.complete(text, line, cursor_pos)
2140 return self.Completer.complete(text, line, cursor_pos)
2117
2141
2118 def set_custom_completer(self, completer, pos=0) -> None:
2142 def set_custom_completer(self, completer, pos=0) -> None:
2119 """Adds a new custom completer function.
2143 """Adds a new custom completer function.
2120
2144
2121 The position argument (defaults to 0) is the index in the completers
2145 The position argument (defaults to 0) is the index in the completers
2122 list where you want the completer to be inserted.
2146 list where you want the completer to be inserted.
2123
2147
2124 `completer` should have the following signature::
2148 `completer` should have the following signature::
2125
2149
2126 def completion(self: Completer, text: string) -> List[str]:
2150 def completion(self: Completer, text: string) -> List[str]:
2127 raise NotImplementedError
2151 raise NotImplementedError
2128
2152
2129 It will be bound to the current Completer instance and pass some text
2153 It will be bound to the current Completer instance and pass some text
2130 and return a list with current completions to suggest to the user.
2154 and return a list with current completions to suggest to the user.
2131 """
2155 """
2132
2156
2133 newcomp = types.MethodType(completer, self.Completer)
2157 newcomp = types.MethodType(completer, self.Completer)
2134 self.Completer.custom_matchers.insert(pos,newcomp)
2158 self.Completer.custom_matchers.insert(pos,newcomp)
2135
2159
2136 def set_completer_frame(self, frame=None):
2160 def set_completer_frame(self, frame=None):
2137 """Set the frame of the completer."""
2161 """Set the frame of the completer."""
2138 if frame:
2162 if frame:
2139 self.Completer.namespace = frame.f_locals
2163 self.Completer.namespace = frame.f_locals
2140 self.Completer.global_namespace = frame.f_globals
2164 self.Completer.global_namespace = frame.f_globals
2141 else:
2165 else:
2142 self.Completer.namespace = self.user_ns
2166 self.Completer.namespace = self.user_ns
2143 self.Completer.global_namespace = self.user_global_ns
2167 self.Completer.global_namespace = self.user_global_ns
2144
2168
2145 #-------------------------------------------------------------------------
2169 #-------------------------------------------------------------------------
2146 # Things related to magics
2170 # Things related to magics
2147 #-------------------------------------------------------------------------
2171 #-------------------------------------------------------------------------
2148
2172
2149 def init_magics(self):
2173 def init_magics(self):
2150 from IPython.core import magics as m
2174 from IPython.core import magics as m
2151 self.magics_manager = magic.MagicsManager(shell=self,
2175 self.magics_manager = magic.MagicsManager(shell=self,
2152 parent=self,
2176 parent=self,
2153 user_magics=m.UserMagics(self))
2177 user_magics=m.UserMagics(self))
2154 self.configurables.append(self.magics_manager)
2178 self.configurables.append(self.magics_manager)
2155
2179
2156 # Expose as public API from the magics manager
2180 # Expose as public API from the magics manager
2157 self.register_magics = self.magics_manager.register
2181 self.register_magics = self.magics_manager.register
2158
2182
2159 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2183 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2160 m.ConfigMagics, m.DisplayMagics, m.ExecutionMagics,
2184 m.ConfigMagics, m.DisplayMagics, m.ExecutionMagics,
2161 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2185 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2162 m.NamespaceMagics, m.OSMagics, m.PackagingMagics,
2186 m.NamespaceMagics, m.OSMagics, m.PackagingMagics,
2163 m.PylabMagics, m.ScriptMagics,
2187 m.PylabMagics, m.ScriptMagics,
2164 )
2188 )
2165 self.register_magics(m.AsyncMagics)
2189 self.register_magics(m.AsyncMagics)
2166
2190
2167 # Register Magic Aliases
2191 # Register Magic Aliases
2168 mman = self.magics_manager
2192 mman = self.magics_manager
2169 # FIXME: magic aliases should be defined by the Magics classes
2193 # FIXME: magic aliases should be defined by the Magics classes
2170 # or in MagicsManager, not here
2194 # or in MagicsManager, not here
2171 mman.register_alias('ed', 'edit')
2195 mman.register_alias('ed', 'edit')
2172 mman.register_alias('hist', 'history')
2196 mman.register_alias('hist', 'history')
2173 mman.register_alias('rep', 'recall')
2197 mman.register_alias('rep', 'recall')
2174 mman.register_alias('SVG', 'svg', 'cell')
2198 mman.register_alias('SVG', 'svg', 'cell')
2175 mman.register_alias('HTML', 'html', 'cell')
2199 mman.register_alias('HTML', 'html', 'cell')
2176 mman.register_alias('file', 'writefile', 'cell')
2200 mman.register_alias('file', 'writefile', 'cell')
2177
2201
2178 # FIXME: Move the color initialization to the DisplayHook, which
2202 # FIXME: Move the color initialization to the DisplayHook, which
2179 # should be split into a prompt manager and displayhook. We probably
2203 # should be split into a prompt manager and displayhook. We probably
2180 # even need a centralize colors management object.
2204 # even need a centralize colors management object.
2181 self.run_line_magic('colors', self.colors)
2205 self.run_line_magic('colors', self.colors)
2182
2206
2183 # Defined here so that it's included in the documentation
2207 # Defined here so that it's included in the documentation
2184 @functools.wraps(magic.MagicsManager.register_function)
2208 @functools.wraps(magic.MagicsManager.register_function)
2185 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2209 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2186 self.magics_manager.register_function(
2210 self.magics_manager.register_function(
2187 func, magic_kind=magic_kind, magic_name=magic_name
2211 func, magic_kind=magic_kind, magic_name=magic_name
2188 )
2212 )
2189
2213
2190 def _find_with_lazy_load(self, /, type_, magic_name: str):
2214 def _find_with_lazy_load(self, /, type_, magic_name: str):
2191 """
2215 """
2192 Try to find a magic potentially lazy-loading it.
2216 Try to find a magic potentially lazy-loading it.
2193
2217
2194 Parameters
2218 Parameters
2195 ----------
2219 ----------
2196
2220
2197 type_: "line"|"cell"
2221 type_: "line"|"cell"
2198 the type of magics we are trying to find/lazy load.
2222 the type of magics we are trying to find/lazy load.
2199 magic_name: str
2223 magic_name: str
2200 The name of the magic we are trying to find/lazy load
2224 The name of the magic we are trying to find/lazy load
2201
2225
2202
2226
2203 Note that this may have any side effects
2227 Note that this may have any side effects
2204 """
2228 """
2205 finder = {"line": self.find_line_magic, "cell": self.find_cell_magic}[type_]
2229 finder = {"line": self.find_line_magic, "cell": self.find_cell_magic}[type_]
2206 fn = finder(magic_name)
2230 fn = finder(magic_name)
2207 if fn is not None:
2231 if fn is not None:
2208 return fn
2232 return fn
2209 lazy = self.magics_manager.lazy_magics.get(magic_name)
2233 lazy = self.magics_manager.lazy_magics.get(magic_name)
2210 if lazy is None:
2234 if lazy is None:
2211 return None
2235 return None
2212
2236
2213 self.run_line_magic("load_ext", lazy)
2237 self.run_line_magic("load_ext", lazy)
2214 res = finder(magic_name)
2238 res = finder(magic_name)
2215 return res
2239 return res
2216
2240
2217 def run_line_magic(self, magic_name: str, line, _stack_depth=1):
2241 def run_line_magic(self, magic_name: str, line, _stack_depth=1):
2218 """Execute the given line magic.
2242 """Execute the given line magic.
2219
2243
2220 Parameters
2244 Parameters
2221 ----------
2245 ----------
2222 magic_name : str
2246 magic_name : str
2223 Name of the desired magic function, without '%' prefix.
2247 Name of the desired magic function, without '%' prefix.
2224 line : str
2248 line : str
2225 The rest of the input line as a single string.
2249 The rest of the input line as a single string.
2226 _stack_depth : int
2250 _stack_depth : int
2227 If run_line_magic() is called from magic() then _stack_depth=2.
2251 If run_line_magic() is called from magic() then _stack_depth=2.
2228 This is added to ensure backward compatibility for use of 'get_ipython().magic()'
2252 This is added to ensure backward compatibility for use of 'get_ipython().magic()'
2229 """
2253 """
2230 fn = self._find_with_lazy_load("line", magic_name)
2254 fn = self._find_with_lazy_load("line", magic_name)
2231 if fn is None:
2255 if fn is None:
2232 lazy = self.magics_manager.lazy_magics.get(magic_name)
2256 lazy = self.magics_manager.lazy_magics.get(magic_name)
2233 if lazy:
2257 if lazy:
2234 self.run_line_magic("load_ext", lazy)
2258 self.run_line_magic("load_ext", lazy)
2235 fn = self.find_line_magic(magic_name)
2259 fn = self.find_line_magic(magic_name)
2236 if fn is None:
2260 if fn is None:
2237 cm = self.find_cell_magic(magic_name)
2261 cm = self.find_cell_magic(magic_name)
2238 etpl = "Line magic function `%%%s` not found%s."
2262 etpl = "Line magic function `%%%s` not found%s."
2239 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2263 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2240 'did you mean that instead?)' % magic_name )
2264 'did you mean that instead?)' % magic_name )
2241 raise UsageError(etpl % (magic_name, extra))
2265 raise UsageError(etpl % (magic_name, extra))
2242 else:
2266 else:
2243 # Note: this is the distance in the stack to the user's frame.
2267 # Note: this is the distance in the stack to the user's frame.
2244 # This will need to be updated if the internal calling logic gets
2268 # This will need to be updated if the internal calling logic gets
2245 # refactored, or else we'll be expanding the wrong variables.
2269 # refactored, or else we'll be expanding the wrong variables.
2246
2270
2247 # Determine stack_depth depending on where run_line_magic() has been called
2271 # Determine stack_depth depending on where run_line_magic() has been called
2248 stack_depth = _stack_depth
2272 stack_depth = _stack_depth
2249 if getattr(fn, magic.MAGIC_NO_VAR_EXPAND_ATTR, False):
2273 if getattr(fn, magic.MAGIC_NO_VAR_EXPAND_ATTR, False):
2250 # magic has opted out of var_expand
2274 # magic has opted out of var_expand
2251 magic_arg_s = line
2275 magic_arg_s = line
2252 else:
2276 else:
2253 magic_arg_s = self.var_expand(line, stack_depth)
2277 magic_arg_s = self.var_expand(line, stack_depth)
2254 # Put magic args in a list so we can call with f(*a) syntax
2278 # Put magic args in a list so we can call with f(*a) syntax
2255 args = [magic_arg_s]
2279 args = [magic_arg_s]
2256 kwargs = {}
2280 kwargs = {}
2257 # Grab local namespace if we need it:
2281 # Grab local namespace if we need it:
2258 if getattr(fn, "needs_local_scope", False):
2282 if getattr(fn, "needs_local_scope", False):
2259 kwargs['local_ns'] = self.get_local_scope(stack_depth)
2283 kwargs['local_ns'] = self.get_local_scope(stack_depth)
2260 with self.builtin_trap:
2284 with self.builtin_trap:
2261 result = fn(*args, **kwargs)
2285 result = fn(*args, **kwargs)
2262 return result
2286 return result
2263
2287
2264 def get_local_scope(self, stack_depth):
2288 def get_local_scope(self, stack_depth):
2265 """Get local scope at given stack depth.
2289 """Get local scope at given stack depth.
2266
2290
2267 Parameters
2291 Parameters
2268 ----------
2292 ----------
2269 stack_depth : int
2293 stack_depth : int
2270 Depth relative to calling frame
2294 Depth relative to calling frame
2271 """
2295 """
2272 return sys._getframe(stack_depth + 1).f_locals
2296 return sys._getframe(stack_depth + 1).f_locals
2273
2297
2274 def run_cell_magic(self, magic_name, line, cell):
2298 def run_cell_magic(self, magic_name, line, cell):
2275 """Execute the given cell magic.
2299 """Execute the given cell magic.
2276
2300
2277 Parameters
2301 Parameters
2278 ----------
2302 ----------
2279 magic_name : str
2303 magic_name : str
2280 Name of the desired magic function, without '%' prefix.
2304 Name of the desired magic function, without '%' prefix.
2281 line : str
2305 line : str
2282 The rest of the first input line as a single string.
2306 The rest of the first input line as a single string.
2283 cell : str
2307 cell : str
2284 The body of the cell as a (possibly multiline) string.
2308 The body of the cell as a (possibly multiline) string.
2285 """
2309 """
2286 fn = self._find_with_lazy_load("cell", magic_name)
2310 fn = self._find_with_lazy_load("cell", magic_name)
2287 if fn is None:
2311 if fn is None:
2288 lm = self.find_line_magic(magic_name)
2312 lm = self.find_line_magic(magic_name)
2289 etpl = "Cell magic `%%{0}` not found{1}."
2313 etpl = "Cell magic `%%{0}` not found{1}."
2290 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2314 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2291 'did you mean that instead?)'.format(magic_name))
2315 'did you mean that instead?)'.format(magic_name))
2292 raise UsageError(etpl.format(magic_name, extra))
2316 raise UsageError(etpl.format(magic_name, extra))
2293 elif cell == '':
2317 elif cell == '':
2294 message = '%%{0} is a cell magic, but the cell body is empty.'.format(magic_name)
2318 message = '%%{0} is a cell magic, but the cell body is empty.'.format(magic_name)
2295 if self.find_line_magic(magic_name) is not None:
2319 if self.find_line_magic(magic_name) is not None:
2296 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2320 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2297 raise UsageError(message)
2321 raise UsageError(message)
2298 else:
2322 else:
2299 # Note: this is the distance in the stack to the user's frame.
2323 # Note: this is the distance in the stack to the user's frame.
2300 # This will need to be updated if the internal calling logic gets
2324 # This will need to be updated if the internal calling logic gets
2301 # refactored, or else we'll be expanding the wrong variables.
2325 # refactored, or else we'll be expanding the wrong variables.
2302 stack_depth = 2
2326 stack_depth = 2
2303 if getattr(fn, magic.MAGIC_NO_VAR_EXPAND_ATTR, False):
2327 if getattr(fn, magic.MAGIC_NO_VAR_EXPAND_ATTR, False):
2304 # magic has opted out of var_expand
2328 # magic has opted out of var_expand
2305 magic_arg_s = line
2329 magic_arg_s = line
2306 else:
2330 else:
2307 magic_arg_s = self.var_expand(line, stack_depth)
2331 magic_arg_s = self.var_expand(line, stack_depth)
2308 kwargs = {}
2332 kwargs = {}
2309 if getattr(fn, "needs_local_scope", False):
2333 if getattr(fn, "needs_local_scope", False):
2310 kwargs['local_ns'] = self.user_ns
2334 kwargs['local_ns'] = self.user_ns
2311
2335
2312 with self.builtin_trap:
2336 with self.builtin_trap:
2313 args = (magic_arg_s, cell)
2337 args = (magic_arg_s, cell)
2314 result = fn(*args, **kwargs)
2338 result = fn(*args, **kwargs)
2315 return result
2339 return result
2316
2340
2317 def find_line_magic(self, magic_name):
2341 def find_line_magic(self, magic_name):
2318 """Find and return a line magic by name.
2342 """Find and return a line magic by name.
2319
2343
2320 Returns None if the magic isn't found."""
2344 Returns None if the magic isn't found."""
2321 return self.magics_manager.magics['line'].get(magic_name)
2345 return self.magics_manager.magics['line'].get(magic_name)
2322
2346
2323 def find_cell_magic(self, magic_name):
2347 def find_cell_magic(self, magic_name):
2324 """Find and return a cell magic by name.
2348 """Find and return a cell magic by name.
2325
2349
2326 Returns None if the magic isn't found."""
2350 Returns None if the magic isn't found."""
2327 return self.magics_manager.magics['cell'].get(magic_name)
2351 return self.magics_manager.magics['cell'].get(magic_name)
2328
2352
2329 def find_magic(self, magic_name, magic_kind='line'):
2353 def find_magic(self, magic_name, magic_kind='line'):
2330 """Find and return a magic of the given type by name.
2354 """Find and return a magic of the given type by name.
2331
2355
2332 Returns None if the magic isn't found."""
2356 Returns None if the magic isn't found."""
2333 return self.magics_manager.magics[magic_kind].get(magic_name)
2357 return self.magics_manager.magics[magic_kind].get(magic_name)
2334
2358
2335 def magic(self, arg_s):
2359 def magic(self, arg_s):
2336 """
2360 """
2337 DEPRECATED
2361 DEPRECATED
2338
2362
2339 Deprecated since IPython 0.13 (warning added in
2363 Deprecated since IPython 0.13 (warning added in
2340 8.1), use run_line_magic(magic_name, parameter_s).
2364 8.1), use run_line_magic(magic_name, parameter_s).
2341
2365
2342 Call a magic function by name.
2366 Call a magic function by name.
2343
2367
2344 Input: a string containing the name of the magic function to call and
2368 Input: a string containing the name of the magic function to call and
2345 any additional arguments to be passed to the magic.
2369 any additional arguments to be passed to the magic.
2346
2370
2347 magic('name -opt foo bar') is equivalent to typing at the ipython
2371 magic('name -opt foo bar') is equivalent to typing at the ipython
2348 prompt:
2372 prompt:
2349
2373
2350 In[1]: %name -opt foo bar
2374 In[1]: %name -opt foo bar
2351
2375
2352 To call a magic without arguments, simply use magic('name').
2376 To call a magic without arguments, simply use magic('name').
2353
2377
2354 This provides a proper Python function to call IPython's magics in any
2378 This provides a proper Python function to call IPython's magics in any
2355 valid Python code you can type at the interpreter, including loops and
2379 valid Python code you can type at the interpreter, including loops and
2356 compound statements.
2380 compound statements.
2357 """
2381 """
2358 warnings.warn(
2382 warnings.warn(
2359 "`magic(...)` is deprecated since IPython 0.13 (warning added in "
2383 "`magic(...)` is deprecated since IPython 0.13 (warning added in "
2360 "8.1), use run_line_magic(magic_name, parameter_s).",
2384 "8.1), use run_line_magic(magic_name, parameter_s).",
2361 DeprecationWarning,
2385 DeprecationWarning,
2362 stacklevel=2,
2386 stacklevel=2,
2363 )
2387 )
2364 # TODO: should we issue a loud deprecation warning here?
2388 # TODO: should we issue a loud deprecation warning here?
2365 magic_name, _, magic_arg_s = arg_s.partition(' ')
2389 magic_name, _, magic_arg_s = arg_s.partition(' ')
2366 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2390 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2367 return self.run_line_magic(magic_name, magic_arg_s, _stack_depth=2)
2391 return self.run_line_magic(magic_name, magic_arg_s, _stack_depth=2)
2368
2392
2369 #-------------------------------------------------------------------------
2393 #-------------------------------------------------------------------------
2370 # Things related to macros
2394 # Things related to macros
2371 #-------------------------------------------------------------------------
2395 #-------------------------------------------------------------------------
2372
2396
2373 def define_macro(self, name, themacro):
2397 def define_macro(self, name, themacro):
2374 """Define a new macro
2398 """Define a new macro
2375
2399
2376 Parameters
2400 Parameters
2377 ----------
2401 ----------
2378 name : str
2402 name : str
2379 The name of the macro.
2403 The name of the macro.
2380 themacro : str or Macro
2404 themacro : str or Macro
2381 The action to do upon invoking the macro. If a string, a new
2405 The action to do upon invoking the macro. If a string, a new
2382 Macro object is created by passing the string to it.
2406 Macro object is created by passing the string to it.
2383 """
2407 """
2384
2408
2385 from IPython.core import macro
2409 from IPython.core import macro
2386
2410
2387 if isinstance(themacro, str):
2411 if isinstance(themacro, str):
2388 themacro = macro.Macro(themacro)
2412 themacro = macro.Macro(themacro)
2389 if not isinstance(themacro, macro.Macro):
2413 if not isinstance(themacro, macro.Macro):
2390 raise ValueError('A macro must be a string or a Macro instance.')
2414 raise ValueError('A macro must be a string or a Macro instance.')
2391 self.user_ns[name] = themacro
2415 self.user_ns[name] = themacro
2392
2416
2393 #-------------------------------------------------------------------------
2417 #-------------------------------------------------------------------------
2394 # Things related to the running of system commands
2418 # Things related to the running of system commands
2395 #-------------------------------------------------------------------------
2419 #-------------------------------------------------------------------------
2396
2420
2397 def system_piped(self, cmd):
2421 def system_piped(self, cmd):
2398 """Call the given cmd in a subprocess, piping stdout/err
2422 """Call the given cmd in a subprocess, piping stdout/err
2399
2423
2400 Parameters
2424 Parameters
2401 ----------
2425 ----------
2402 cmd : str
2426 cmd : str
2403 Command to execute (can not end in '&', as background processes are
2427 Command to execute (can not end in '&', as background processes are
2404 not supported. Should not be a command that expects input
2428 not supported. Should not be a command that expects input
2405 other than simple text.
2429 other than simple text.
2406 """
2430 """
2407 if cmd.rstrip().endswith('&'):
2431 if cmd.rstrip().endswith('&'):
2408 # this is *far* from a rigorous test
2432 # this is *far* from a rigorous test
2409 # We do not support backgrounding processes because we either use
2433 # We do not support backgrounding processes because we either use
2410 # pexpect or pipes to read from. Users can always just call
2434 # pexpect or pipes to read from. Users can always just call
2411 # os.system() or use ip.system=ip.system_raw
2435 # os.system() or use ip.system=ip.system_raw
2412 # if they really want a background process.
2436 # if they really want a background process.
2413 raise OSError("Background processes not supported.")
2437 raise OSError("Background processes not supported.")
2414
2438
2415 # we explicitly do NOT return the subprocess status code, because
2439 # we explicitly do NOT return the subprocess status code, because
2416 # a non-None value would trigger :func:`sys.displayhook` calls.
2440 # a non-None value would trigger :func:`sys.displayhook` calls.
2417 # Instead, we store the exit_code in user_ns.
2441 # Instead, we store the exit_code in user_ns.
2418 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2442 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2419
2443
2420 def system_raw(self, cmd):
2444 def system_raw(self, cmd):
2421 """Call the given cmd in a subprocess using os.system on Windows or
2445 """Call the given cmd in a subprocess using os.system on Windows or
2422 subprocess.call using the system shell on other platforms.
2446 subprocess.call using the system shell on other platforms.
2423
2447
2424 Parameters
2448 Parameters
2425 ----------
2449 ----------
2426 cmd : str
2450 cmd : str
2427 Command to execute.
2451 Command to execute.
2428 """
2452 """
2429 cmd = self.var_expand(cmd, depth=1)
2453 cmd = self.var_expand(cmd, depth=1)
2430 # warn if there is an IPython magic alternative.
2454 # warn if there is an IPython magic alternative.
2431 main_cmd = cmd.split()[0]
2455 main_cmd = cmd.split()[0]
2432 has_magic_alternatives = ("pip", "conda", "cd")
2456 has_magic_alternatives = ("pip", "conda", "cd")
2433
2457
2434 if main_cmd in has_magic_alternatives:
2458 if main_cmd in has_magic_alternatives:
2435 warnings.warn(
2459 warnings.warn(
2436 (
2460 (
2437 "You executed the system command !{0} which may not work "
2461 "You executed the system command !{0} which may not work "
2438 "as expected. Try the IPython magic %{0} instead."
2462 "as expected. Try the IPython magic %{0} instead."
2439 ).format(main_cmd)
2463 ).format(main_cmd)
2440 )
2464 )
2441
2465
2442 # protect os.system from UNC paths on Windows, which it can't handle:
2466 # protect os.system from UNC paths on Windows, which it can't handle:
2443 if sys.platform == 'win32':
2467 if sys.platform == 'win32':
2444 from IPython.utils._process_win32 import AvoidUNCPath
2468 from IPython.utils._process_win32 import AvoidUNCPath
2445 with AvoidUNCPath() as path:
2469 with AvoidUNCPath() as path:
2446 if path is not None:
2470 if path is not None:
2447 cmd = '"pushd %s &&"%s' % (path, cmd)
2471 cmd = '"pushd %s &&"%s' % (path, cmd)
2448 try:
2472 try:
2449 ec = os.system(cmd)
2473 ec = os.system(cmd)
2450 except KeyboardInterrupt:
2474 except KeyboardInterrupt:
2451 print('\n' + self.get_exception_only(), file=sys.stderr)
2475 print('\n' + self.get_exception_only(), file=sys.stderr)
2452 ec = -2
2476 ec = -2
2453 else:
2477 else:
2454 # For posix the result of the subprocess.call() below is an exit
2478 # For posix the result of the subprocess.call() below is an exit
2455 # code, which by convention is zero for success, positive for
2479 # code, which by convention is zero for success, positive for
2456 # program failure. Exit codes above 128 are reserved for signals,
2480 # program failure. Exit codes above 128 are reserved for signals,
2457 # and the formula for converting a signal to an exit code is usually
2481 # and the formula for converting a signal to an exit code is usually
2458 # signal_number+128. To more easily differentiate between exit
2482 # signal_number+128. To more easily differentiate between exit
2459 # codes and signals, ipython uses negative numbers. For instance
2483 # codes and signals, ipython uses negative numbers. For instance
2460 # since control-c is signal 2 but exit code 130, ipython's
2484 # since control-c is signal 2 but exit code 130, ipython's
2461 # _exit_code variable will read -2. Note that some shells like
2485 # _exit_code variable will read -2. Note that some shells like
2462 # csh and fish don't follow sh/bash conventions for exit codes.
2486 # csh and fish don't follow sh/bash conventions for exit codes.
2463 executable = os.environ.get('SHELL', None)
2487 executable = os.environ.get('SHELL', None)
2464 try:
2488 try:
2465 # Use env shell instead of default /bin/sh
2489 # Use env shell instead of default /bin/sh
2466 ec = subprocess.call(cmd, shell=True, executable=executable)
2490 ec = subprocess.call(cmd, shell=True, executable=executable)
2467 except KeyboardInterrupt:
2491 except KeyboardInterrupt:
2468 # intercept control-C; a long traceback is not useful here
2492 # intercept control-C; a long traceback is not useful here
2469 print('\n' + self.get_exception_only(), file=sys.stderr)
2493 print('\n' + self.get_exception_only(), file=sys.stderr)
2470 ec = 130
2494 ec = 130
2471 if ec > 128:
2495 if ec > 128:
2472 ec = -(ec - 128)
2496 ec = -(ec - 128)
2473
2497
2474 # We explicitly do NOT return the subprocess status code, because
2498 # We explicitly do NOT return the subprocess status code, because
2475 # a non-None value would trigger :func:`sys.displayhook` calls.
2499 # a non-None value would trigger :func:`sys.displayhook` calls.
2476 # Instead, we store the exit_code in user_ns. Note the semantics
2500 # Instead, we store the exit_code in user_ns. Note the semantics
2477 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2501 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2478 # but raising SystemExit(_exit_code) will give status 254!
2502 # but raising SystemExit(_exit_code) will give status 254!
2479 self.user_ns['_exit_code'] = ec
2503 self.user_ns['_exit_code'] = ec
2480
2504
2481 # use piped system by default, because it is better behaved
2505 # use piped system by default, because it is better behaved
2482 system = system_piped
2506 system = system_piped
2483
2507
2484 def getoutput(self, cmd, split=True, depth=0):
2508 def getoutput(self, cmd, split=True, depth=0):
2485 """Get output (possibly including stderr) from a subprocess.
2509 """Get output (possibly including stderr) from a subprocess.
2486
2510
2487 Parameters
2511 Parameters
2488 ----------
2512 ----------
2489 cmd : str
2513 cmd : str
2490 Command to execute (can not end in '&', as background processes are
2514 Command to execute (can not end in '&', as background processes are
2491 not supported.
2515 not supported.
2492 split : bool, optional
2516 split : bool, optional
2493 If True, split the output into an IPython SList. Otherwise, an
2517 If True, split the output into an IPython SList. Otherwise, an
2494 IPython LSString is returned. These are objects similar to normal
2518 IPython LSString is returned. These are objects similar to normal
2495 lists and strings, with a few convenience attributes for easier
2519 lists and strings, with a few convenience attributes for easier
2496 manipulation of line-based output. You can use '?' on them for
2520 manipulation of line-based output. You can use '?' on them for
2497 details.
2521 details.
2498 depth : int, optional
2522 depth : int, optional
2499 How many frames above the caller are the local variables which should
2523 How many frames above the caller are the local variables which should
2500 be expanded in the command string? The default (0) assumes that the
2524 be expanded in the command string? The default (0) assumes that the
2501 expansion variables are in the stack frame calling this function.
2525 expansion variables are in the stack frame calling this function.
2502 """
2526 """
2503 if cmd.rstrip().endswith('&'):
2527 if cmd.rstrip().endswith('&'):
2504 # this is *far* from a rigorous test
2528 # this is *far* from a rigorous test
2505 raise OSError("Background processes not supported.")
2529 raise OSError("Background processes not supported.")
2506 out = getoutput(self.var_expand(cmd, depth=depth+1))
2530 out = getoutput(self.var_expand(cmd, depth=depth+1))
2507 if split:
2531 if split:
2508 out = SList(out.splitlines())
2532 out = SList(out.splitlines())
2509 else:
2533 else:
2510 out = LSString(out)
2534 out = LSString(out)
2511 return out
2535 return out
2512
2536
2513 #-------------------------------------------------------------------------
2537 #-------------------------------------------------------------------------
2514 # Things related to aliases
2538 # Things related to aliases
2515 #-------------------------------------------------------------------------
2539 #-------------------------------------------------------------------------
2516
2540
2517 def init_alias(self):
2541 def init_alias(self):
2518 self.alias_manager = AliasManager(shell=self, parent=self)
2542 self.alias_manager = AliasManager(shell=self, parent=self)
2519 self.configurables.append(self.alias_manager)
2543 self.configurables.append(self.alias_manager)
2520
2544
2521 #-------------------------------------------------------------------------
2545 #-------------------------------------------------------------------------
2522 # Things related to extensions
2546 # Things related to extensions
2523 #-------------------------------------------------------------------------
2547 #-------------------------------------------------------------------------
2524
2548
2525 def init_extension_manager(self):
2549 def init_extension_manager(self):
2526 self.extension_manager = ExtensionManager(shell=self, parent=self)
2550 self.extension_manager = ExtensionManager(shell=self, parent=self)
2527 self.configurables.append(self.extension_manager)
2551 self.configurables.append(self.extension_manager)
2528
2552
2529 #-------------------------------------------------------------------------
2553 #-------------------------------------------------------------------------
2530 # Things related to payloads
2554 # Things related to payloads
2531 #-------------------------------------------------------------------------
2555 #-------------------------------------------------------------------------
2532
2556
2533 def init_payload(self):
2557 def init_payload(self):
2534 self.payload_manager = PayloadManager(parent=self)
2558 self.payload_manager = PayloadManager(parent=self)
2535 self.configurables.append(self.payload_manager)
2559 self.configurables.append(self.payload_manager)
2536
2560
2537 #-------------------------------------------------------------------------
2561 #-------------------------------------------------------------------------
2538 # Things related to the prefilter
2562 # Things related to the prefilter
2539 #-------------------------------------------------------------------------
2563 #-------------------------------------------------------------------------
2540
2564
2541 def init_prefilter(self):
2565 def init_prefilter(self):
2542 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2566 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2543 self.configurables.append(self.prefilter_manager)
2567 self.configurables.append(self.prefilter_manager)
2544 # Ultimately this will be refactored in the new interpreter code, but
2568 # Ultimately this will be refactored in the new interpreter code, but
2545 # for now, we should expose the main prefilter method (there's legacy
2569 # for now, we should expose the main prefilter method (there's legacy
2546 # code out there that may rely on this).
2570 # code out there that may rely on this).
2547 self.prefilter = self.prefilter_manager.prefilter_lines
2571 self.prefilter = self.prefilter_manager.prefilter_lines
2548
2572
2549 def auto_rewrite_input(self, cmd):
2573 def auto_rewrite_input(self, cmd):
2550 """Print to the screen the rewritten form of the user's command.
2574 """Print to the screen the rewritten form of the user's command.
2551
2575
2552 This shows visual feedback by rewriting input lines that cause
2576 This shows visual feedback by rewriting input lines that cause
2553 automatic calling to kick in, like::
2577 automatic calling to kick in, like::
2554
2578
2555 /f x
2579 /f x
2556
2580
2557 into::
2581 into::
2558
2582
2559 ------> f(x)
2583 ------> f(x)
2560
2584
2561 after the user's input prompt. This helps the user understand that the
2585 after the user's input prompt. This helps the user understand that the
2562 input line was transformed automatically by IPython.
2586 input line was transformed automatically by IPython.
2563 """
2587 """
2564 if not self.show_rewritten_input:
2588 if not self.show_rewritten_input:
2565 return
2589 return
2566
2590
2567 # This is overridden in TerminalInteractiveShell to use fancy prompts
2591 # This is overridden in TerminalInteractiveShell to use fancy prompts
2568 print("------> " + cmd)
2592 print("------> " + cmd)
2569
2593
2570 #-------------------------------------------------------------------------
2594 #-------------------------------------------------------------------------
2571 # Things related to extracting values/expressions from kernel and user_ns
2595 # Things related to extracting values/expressions from kernel and user_ns
2572 #-------------------------------------------------------------------------
2596 #-------------------------------------------------------------------------
2573
2597
2574 def _user_obj_error(self):
2598 def _user_obj_error(self):
2575 """return simple exception dict
2599 """return simple exception dict
2576
2600
2577 for use in user_expressions
2601 for use in user_expressions
2578 """
2602 """
2579
2603
2580 etype, evalue, tb = self._get_exc_info()
2604 etype, evalue, tb = self._get_exc_info()
2581 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2605 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2582
2606
2583 exc_info = {
2607 exc_info = {
2584 "status": "error",
2608 "status": "error",
2585 "traceback": stb,
2609 "traceback": stb,
2586 "ename": etype.__name__,
2610 "ename": etype.__name__,
2587 "evalue": py3compat.safe_unicode(evalue),
2611 "evalue": py3compat.safe_unicode(evalue),
2588 }
2612 }
2589
2613
2590 return exc_info
2614 return exc_info
2591
2615
2592 def _format_user_obj(self, obj):
2616 def _format_user_obj(self, obj):
2593 """format a user object to display dict
2617 """format a user object to display dict
2594
2618
2595 for use in user_expressions
2619 for use in user_expressions
2596 """
2620 """
2597
2621
2598 data, md = self.display_formatter.format(obj)
2622 data, md = self.display_formatter.format(obj)
2599 value = {
2623 value = {
2600 'status' : 'ok',
2624 'status' : 'ok',
2601 'data' : data,
2625 'data' : data,
2602 'metadata' : md,
2626 'metadata' : md,
2603 }
2627 }
2604 return value
2628 return value
2605
2629
2606 def user_expressions(self, expressions):
2630 def user_expressions(self, expressions):
2607 """Evaluate a dict of expressions in the user's namespace.
2631 """Evaluate a dict of expressions in the user's namespace.
2608
2632
2609 Parameters
2633 Parameters
2610 ----------
2634 ----------
2611 expressions : dict
2635 expressions : dict
2612 A dict with string keys and string values. The expression values
2636 A dict with string keys and string values. The expression values
2613 should be valid Python expressions, each of which will be evaluated
2637 should be valid Python expressions, each of which will be evaluated
2614 in the user namespace.
2638 in the user namespace.
2615
2639
2616 Returns
2640 Returns
2617 -------
2641 -------
2618 A dict, keyed like the input expressions dict, with the rich mime-typed
2642 A dict, keyed like the input expressions dict, with the rich mime-typed
2619 display_data of each value.
2643 display_data of each value.
2620 """
2644 """
2621 out = {}
2645 out = {}
2622 user_ns = self.user_ns
2646 user_ns = self.user_ns
2623 global_ns = self.user_global_ns
2647 global_ns = self.user_global_ns
2624
2648
2625 for key, expr in expressions.items():
2649 for key, expr in expressions.items():
2626 try:
2650 try:
2627 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2651 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2628 except:
2652 except:
2629 value = self._user_obj_error()
2653 value = self._user_obj_error()
2630 out[key] = value
2654 out[key] = value
2631 return out
2655 return out
2632
2656
2633 #-------------------------------------------------------------------------
2657 #-------------------------------------------------------------------------
2634 # Things related to the running of code
2658 # Things related to the running of code
2635 #-------------------------------------------------------------------------
2659 #-------------------------------------------------------------------------
2636
2660
2637 def ex(self, cmd):
2661 def ex(self, cmd):
2638 """Execute a normal python statement in user namespace."""
2662 """Execute a normal python statement in user namespace."""
2639 with self.builtin_trap:
2663 with self.builtin_trap:
2640 exec(cmd, self.user_global_ns, self.user_ns)
2664 exec(cmd, self.user_global_ns, self.user_ns)
2641
2665
2642 def ev(self, expr):
2666 def ev(self, expr):
2643 """Evaluate python expression expr in user namespace.
2667 """Evaluate python expression expr in user namespace.
2644
2668
2645 Returns the result of evaluation
2669 Returns the result of evaluation
2646 """
2670 """
2647 with self.builtin_trap:
2671 with self.builtin_trap:
2648 return eval(expr, self.user_global_ns, self.user_ns)
2672 return eval(expr, self.user_global_ns, self.user_ns)
2649
2673
2650 def safe_execfile(self, fname, *where, exit_ignore=False, raise_exceptions=False, shell_futures=False):
2674 def safe_execfile(self, fname, *where, exit_ignore=False, raise_exceptions=False, shell_futures=False):
2651 """A safe version of the builtin execfile().
2675 """A safe version of the builtin execfile().
2652
2676
2653 This version will never throw an exception, but instead print
2677 This version will never throw an exception, but instead print
2654 helpful error messages to the screen. This only works on pure
2678 helpful error messages to the screen. This only works on pure
2655 Python files with the .py extension.
2679 Python files with the .py extension.
2656
2680
2657 Parameters
2681 Parameters
2658 ----------
2682 ----------
2659 fname : string
2683 fname : string
2660 The name of the file to be executed.
2684 The name of the file to be executed.
2661 *where : tuple
2685 *where : tuple
2662 One or two namespaces, passed to execfile() as (globals,locals).
2686 One or two namespaces, passed to execfile() as (globals,locals).
2663 If only one is given, it is passed as both.
2687 If only one is given, it is passed as both.
2664 exit_ignore : bool (False)
2688 exit_ignore : bool (False)
2665 If True, then silence SystemExit for non-zero status (it is always
2689 If True, then silence SystemExit for non-zero status (it is always
2666 silenced for zero status, as it is so common).
2690 silenced for zero status, as it is so common).
2667 raise_exceptions : bool (False)
2691 raise_exceptions : bool (False)
2668 If True raise exceptions everywhere. Meant for testing.
2692 If True raise exceptions everywhere. Meant for testing.
2669 shell_futures : bool (False)
2693 shell_futures : bool (False)
2670 If True, the code will share future statements with the interactive
2694 If True, the code will share future statements with the interactive
2671 shell. It will both be affected by previous __future__ imports, and
2695 shell. It will both be affected by previous __future__ imports, and
2672 any __future__ imports in the code will affect the shell. If False,
2696 any __future__ imports in the code will affect the shell. If False,
2673 __future__ imports are not shared in either direction.
2697 __future__ imports are not shared in either direction.
2674
2698
2675 """
2699 """
2676 fname = Path(fname).expanduser().resolve()
2700 fname = Path(fname).expanduser().resolve()
2677
2701
2678 # Make sure we can open the file
2702 # Make sure we can open the file
2679 try:
2703 try:
2680 with fname.open("rb"):
2704 with fname.open("rb"):
2681 pass
2705 pass
2682 except:
2706 except:
2683 warn('Could not open file <%s> for safe execution.' % fname)
2707 warn('Could not open file <%s> for safe execution.' % fname)
2684 return
2708 return
2685
2709
2686 # Find things also in current directory. This is needed to mimic the
2710 # Find things also in current directory. This is needed to mimic the
2687 # behavior of running a script from the system command line, where
2711 # behavior of running a script from the system command line, where
2688 # Python inserts the script's directory into sys.path
2712 # Python inserts the script's directory into sys.path
2689 dname = str(fname.parent)
2713 dname = str(fname.parent)
2690
2714
2691 with prepended_to_syspath(dname), self.builtin_trap:
2715 with prepended_to_syspath(dname), self.builtin_trap:
2692 try:
2716 try:
2693 glob, loc = (where + (None, ))[:2]
2717 glob, loc = (where + (None, ))[:2]
2694 py3compat.execfile(
2718 py3compat.execfile(
2695 fname, glob, loc,
2719 fname, glob, loc,
2696 self.compile if shell_futures else None)
2720 self.compile if shell_futures else None)
2697 except SystemExit as status:
2721 except SystemExit as status:
2698 # If the call was made with 0 or None exit status (sys.exit(0)
2722 # If the call was made with 0 or None exit status (sys.exit(0)
2699 # or sys.exit() ), don't bother showing a traceback, as both of
2723 # or sys.exit() ), don't bother showing a traceback, as both of
2700 # these are considered normal by the OS:
2724 # these are considered normal by the OS:
2701 # > python -c'import sys;sys.exit(0)'; echo $?
2725 # > python -c'import sys;sys.exit(0)'; echo $?
2702 # 0
2726 # 0
2703 # > python -c'import sys;sys.exit()'; echo $?
2727 # > python -c'import sys;sys.exit()'; echo $?
2704 # 0
2728 # 0
2705 # For other exit status, we show the exception unless
2729 # For other exit status, we show the exception unless
2706 # explicitly silenced, but only in short form.
2730 # explicitly silenced, but only in short form.
2707 if status.code:
2731 if status.code:
2708 if raise_exceptions:
2732 if raise_exceptions:
2709 raise
2733 raise
2710 if not exit_ignore:
2734 if not exit_ignore:
2711 self.showtraceback(exception_only=True)
2735 self.showtraceback(exception_only=True)
2712 except:
2736 except:
2713 if raise_exceptions:
2737 if raise_exceptions:
2714 raise
2738 raise
2715 # tb offset is 2 because we wrap execfile
2739 # tb offset is 2 because we wrap execfile
2716 self.showtraceback(tb_offset=2)
2740 self.showtraceback(tb_offset=2)
2717
2741
2718 def safe_execfile_ipy(self, fname, shell_futures=False, raise_exceptions=False):
2742 def safe_execfile_ipy(self, fname, shell_futures=False, raise_exceptions=False):
2719 """Like safe_execfile, but for .ipy or .ipynb files with IPython syntax.
2743 """Like safe_execfile, but for .ipy or .ipynb files with IPython syntax.
2720
2744
2721 Parameters
2745 Parameters
2722 ----------
2746 ----------
2723 fname : str
2747 fname : str
2724 The name of the file to execute. The filename must have a
2748 The name of the file to execute. The filename must have a
2725 .ipy or .ipynb extension.
2749 .ipy or .ipynb extension.
2726 shell_futures : bool (False)
2750 shell_futures : bool (False)
2727 If True, the code will share future statements with the interactive
2751 If True, the code will share future statements with the interactive
2728 shell. It will both be affected by previous __future__ imports, and
2752 shell. It will both be affected by previous __future__ imports, and
2729 any __future__ imports in the code will affect the shell. If False,
2753 any __future__ imports in the code will affect the shell. If False,
2730 __future__ imports are not shared in either direction.
2754 __future__ imports are not shared in either direction.
2731 raise_exceptions : bool (False)
2755 raise_exceptions : bool (False)
2732 If True raise exceptions everywhere. Meant for testing.
2756 If True raise exceptions everywhere. Meant for testing.
2733 """
2757 """
2734 fname = Path(fname).expanduser().resolve()
2758 fname = Path(fname).expanduser().resolve()
2735
2759
2736 # Make sure we can open the file
2760 # Make sure we can open the file
2737 try:
2761 try:
2738 with fname.open("rb"):
2762 with fname.open("rb"):
2739 pass
2763 pass
2740 except:
2764 except:
2741 warn('Could not open file <%s> for safe execution.' % fname)
2765 warn('Could not open file <%s> for safe execution.' % fname)
2742 return
2766 return
2743
2767
2744 # Find things also in current directory. This is needed to mimic the
2768 # Find things also in current directory. This is needed to mimic the
2745 # behavior of running a script from the system command line, where
2769 # behavior of running a script from the system command line, where
2746 # Python inserts the script's directory into sys.path
2770 # Python inserts the script's directory into sys.path
2747 dname = str(fname.parent)
2771 dname = str(fname.parent)
2748
2772
2749 def get_cells():
2773 def get_cells():
2750 """generator for sequence of code blocks to run"""
2774 """generator for sequence of code blocks to run"""
2751 if fname.suffix == ".ipynb":
2775 if fname.suffix == ".ipynb":
2752 from nbformat import read
2776 from nbformat import read
2753 nb = read(fname, as_version=4)
2777 nb = read(fname, as_version=4)
2754 if not nb.cells:
2778 if not nb.cells:
2755 return
2779 return
2756 for cell in nb.cells:
2780 for cell in nb.cells:
2757 if cell.cell_type == 'code':
2781 if cell.cell_type == 'code':
2758 yield cell.source
2782 yield cell.source
2759 else:
2783 else:
2760 yield fname.read_text(encoding="utf-8")
2784 yield fname.read_text(encoding="utf-8")
2761
2785
2762 with prepended_to_syspath(dname):
2786 with prepended_to_syspath(dname):
2763 try:
2787 try:
2764 for cell in get_cells():
2788 for cell in get_cells():
2765 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2789 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2766 if raise_exceptions:
2790 if raise_exceptions:
2767 result.raise_error()
2791 result.raise_error()
2768 elif not result.success:
2792 elif not result.success:
2769 break
2793 break
2770 except:
2794 except:
2771 if raise_exceptions:
2795 if raise_exceptions:
2772 raise
2796 raise
2773 self.showtraceback()
2797 self.showtraceback()
2774 warn('Unknown failure executing file: <%s>' % fname)
2798 warn('Unknown failure executing file: <%s>' % fname)
2775
2799
2776 def safe_run_module(self, mod_name, where):
2800 def safe_run_module(self, mod_name, where):
2777 """A safe version of runpy.run_module().
2801 """A safe version of runpy.run_module().
2778
2802
2779 This version will never throw an exception, but instead print
2803 This version will never throw an exception, but instead print
2780 helpful error messages to the screen.
2804 helpful error messages to the screen.
2781
2805
2782 `SystemExit` exceptions with status code 0 or None are ignored.
2806 `SystemExit` exceptions with status code 0 or None are ignored.
2783
2807
2784 Parameters
2808 Parameters
2785 ----------
2809 ----------
2786 mod_name : string
2810 mod_name : string
2787 The name of the module to be executed.
2811 The name of the module to be executed.
2788 where : dict
2812 where : dict
2789 The globals namespace.
2813 The globals namespace.
2790 """
2814 """
2791 try:
2815 try:
2792 try:
2816 try:
2793 where.update(
2817 where.update(
2794 runpy.run_module(str(mod_name), run_name="__main__",
2818 runpy.run_module(str(mod_name), run_name="__main__",
2795 alter_sys=True)
2819 alter_sys=True)
2796 )
2820 )
2797 except SystemExit as status:
2821 except SystemExit as status:
2798 if status.code:
2822 if status.code:
2799 raise
2823 raise
2800 except:
2824 except:
2801 self.showtraceback()
2825 self.showtraceback()
2802 warn('Unknown failure executing module: <%s>' % mod_name)
2826 warn('Unknown failure executing module: <%s>' % mod_name)
2803
2827
2804 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2828 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2805 """Run a complete IPython cell.
2829 """Run a complete IPython cell.
2806
2830
2807 Parameters
2831 Parameters
2808 ----------
2832 ----------
2809 raw_cell : str
2833 raw_cell : str
2810 The code (including IPython code such as %magic functions) to run.
2834 The code (including IPython code such as %magic functions) to run.
2811 store_history : bool
2835 store_history : bool
2812 If True, the raw and translated cell will be stored in IPython's
2836 If True, the raw and translated cell will be stored in IPython's
2813 history. For user code calling back into IPython's machinery, this
2837 history. For user code calling back into IPython's machinery, this
2814 should be set to False.
2838 should be set to False.
2815 silent : bool
2839 silent : bool
2816 If True, avoid side-effects, such as implicit displayhooks and
2840 If True, avoid side-effects, such as implicit displayhooks and
2817 and logging. silent=True forces store_history=False.
2841 and logging. silent=True forces store_history=False.
2818 shell_futures : bool
2842 shell_futures : bool
2819 If True, the code will share future statements with the interactive
2843 If True, the code will share future statements with the interactive
2820 shell. It will both be affected by previous __future__ imports, and
2844 shell. It will both be affected by previous __future__ imports, and
2821 any __future__ imports in the code will affect the shell. If False,
2845 any __future__ imports in the code will affect the shell. If False,
2822 __future__ imports are not shared in either direction.
2846 __future__ imports are not shared in either direction.
2823
2847
2824 Returns
2848 Returns
2825 -------
2849 -------
2826 result : :class:`ExecutionResult`
2850 result : :class:`ExecutionResult`
2827 """
2851 """
2828 result = None
2852 result = None
2829 try:
2853 try:
2830 result = self._run_cell(
2854 result = self._run_cell(
2831 raw_cell, store_history, silent, shell_futures)
2855 raw_cell, store_history, silent, shell_futures)
2832 finally:
2856 finally:
2833 self.events.trigger('post_execute')
2857 self.events.trigger('post_execute')
2834 if not silent:
2858 if not silent:
2835 self.events.trigger('post_run_cell', result)
2859 self.events.trigger('post_run_cell', result)
2836 return result
2860 return result
2837
2861
2838 def _run_cell(self, raw_cell:str, store_history:bool, silent:bool, shell_futures:bool) -> ExecutionResult:
2862 def _run_cell(self, raw_cell:str, store_history:bool, silent:bool, shell_futures:bool) -> ExecutionResult:
2839 """Internal method to run a complete IPython cell."""
2863 """Internal method to run a complete IPython cell."""
2840
2864
2841 # we need to avoid calling self.transform_cell multiple time on the same thing
2865 # we need to avoid calling self.transform_cell multiple time on the same thing
2842 # so we need to store some results:
2866 # so we need to store some results:
2843 preprocessing_exc_tuple = None
2867 preprocessing_exc_tuple = None
2844 try:
2868 try:
2845 transformed_cell = self.transform_cell(raw_cell)
2869 transformed_cell = self.transform_cell(raw_cell)
2846 except Exception:
2870 except Exception:
2847 transformed_cell = raw_cell
2871 transformed_cell = raw_cell
2848 preprocessing_exc_tuple = sys.exc_info()
2872 preprocessing_exc_tuple = sys.exc_info()
2849
2873
2850 assert transformed_cell is not None
2874 assert transformed_cell is not None
2851 coro = self.run_cell_async(
2875 coro = self.run_cell_async(
2852 raw_cell,
2876 raw_cell,
2853 store_history=store_history,
2877 store_history=store_history,
2854 silent=silent,
2878 silent=silent,
2855 shell_futures=shell_futures,
2879 shell_futures=shell_futures,
2856 transformed_cell=transformed_cell,
2880 transformed_cell=transformed_cell,
2857 preprocessing_exc_tuple=preprocessing_exc_tuple,
2881 preprocessing_exc_tuple=preprocessing_exc_tuple,
2858 )
2882 )
2859
2883
2860 # run_cell_async is async, but may not actually need an eventloop.
2884 # run_cell_async is async, but may not actually need an eventloop.
2861 # when this is the case, we want to run it using the pseudo_sync_runner
2885 # when this is the case, we want to run it using the pseudo_sync_runner
2862 # so that code can invoke eventloops (for example via the %run , and
2886 # so that code can invoke eventloops (for example via the %run , and
2863 # `%paste` magic.
2887 # `%paste` magic.
2864 if self.trio_runner:
2888 if self.trio_runner:
2865 runner = self.trio_runner
2889 runner = self.trio_runner
2866 elif self.should_run_async(
2890 elif self.should_run_async(
2867 raw_cell,
2891 raw_cell,
2868 transformed_cell=transformed_cell,
2892 transformed_cell=transformed_cell,
2869 preprocessing_exc_tuple=preprocessing_exc_tuple,
2893 preprocessing_exc_tuple=preprocessing_exc_tuple,
2870 ):
2894 ):
2871 runner = self.loop_runner
2895 runner = self.loop_runner
2872 else:
2896 else:
2873 runner = _pseudo_sync_runner
2897 runner = _pseudo_sync_runner
2874
2898
2875 try:
2899 try:
2876 return runner(coro)
2900 return runner(coro)
2877 except BaseException as e:
2901 except BaseException as e:
2878 info = ExecutionInfo(raw_cell, store_history, silent, shell_futures)
2902 info = ExecutionInfo(raw_cell, store_history, silent, shell_futures)
2879 result = ExecutionResult(info)
2903 result = ExecutionResult(info)
2880 result.error_in_exec = e
2904 result.error_in_exec = e
2881 self.showtraceback(running_compiled_code=True)
2905 self.showtraceback(running_compiled_code=True)
2882 return result
2906 return result
2883
2907
2884 def should_run_async(
2908 def should_run_async(
2885 self, raw_cell: str, *, transformed_cell=None, preprocessing_exc_tuple=None
2909 self, raw_cell: str, *, transformed_cell=None, preprocessing_exc_tuple=None
2886 ) -> bool:
2910 ) -> bool:
2887 """Return whether a cell should be run asynchronously via a coroutine runner
2911 """Return whether a cell should be run asynchronously via a coroutine runner
2888
2912
2889 Parameters
2913 Parameters
2890 ----------
2914 ----------
2891 raw_cell : str
2915 raw_cell : str
2892 The code to be executed
2916 The code to be executed
2893
2917
2894 Returns
2918 Returns
2895 -------
2919 -------
2896 result: bool
2920 result: bool
2897 Whether the code needs to be run with a coroutine runner or not
2921 Whether the code needs to be run with a coroutine runner or not
2898 .. versionadded:: 7.0
2922 .. versionadded:: 7.0
2899 """
2923 """
2900 if not self.autoawait:
2924 if not self.autoawait:
2901 return False
2925 return False
2902 if preprocessing_exc_tuple is not None:
2926 if preprocessing_exc_tuple is not None:
2903 return False
2927 return False
2904 assert preprocessing_exc_tuple is None
2928 assert preprocessing_exc_tuple is None
2905 if transformed_cell is None:
2929 if transformed_cell is None:
2906 warnings.warn(
2930 warnings.warn(
2907 "`should_run_async` will not call `transform_cell`"
2931 "`should_run_async` will not call `transform_cell`"
2908 " automatically in the future. Please pass the result to"
2932 " automatically in the future. Please pass the result to"
2909 " `transformed_cell` argument and any exception that happen"
2933 " `transformed_cell` argument and any exception that happen"
2910 " during the"
2934 " during the"
2911 "transform in `preprocessing_exc_tuple` in"
2935 "transform in `preprocessing_exc_tuple` in"
2912 " IPython 7.17 and above.",
2936 " IPython 7.17 and above.",
2913 DeprecationWarning,
2937 DeprecationWarning,
2914 stacklevel=2,
2938 stacklevel=2,
2915 )
2939 )
2916 try:
2940 try:
2917 cell = self.transform_cell(raw_cell)
2941 cell = self.transform_cell(raw_cell)
2918 except Exception:
2942 except Exception:
2919 # any exception during transform will be raised
2943 # any exception during transform will be raised
2920 # prior to execution
2944 # prior to execution
2921 return False
2945 return False
2922 else:
2946 else:
2923 cell = transformed_cell
2947 cell = transformed_cell
2924 return _should_be_async(cell)
2948 return _should_be_async(cell)
2925
2949
2926 async def run_cell_async(
2950 async def run_cell_async(
2927 self,
2951 self,
2928 raw_cell: str,
2952 raw_cell: str,
2929 store_history=False,
2953 store_history=False,
2930 silent=False,
2954 silent=False,
2931 shell_futures=True,
2955 shell_futures=True,
2932 *,
2956 *,
2933 transformed_cell: Optional[str] = None,
2957 transformed_cell: Optional[str] = None,
2934 preprocessing_exc_tuple: Optional[Any] = None
2958 preprocessing_exc_tuple: Optional[Any] = None
2935 ) -> ExecutionResult:
2959 ) -> ExecutionResult:
2936 """Run a complete IPython cell asynchronously.
2960 """Run a complete IPython cell asynchronously.
2937
2961
2938 Parameters
2962 Parameters
2939 ----------
2963 ----------
2940 raw_cell : str
2964 raw_cell : str
2941 The code (including IPython code such as %magic functions) to run.
2965 The code (including IPython code such as %magic functions) to run.
2942 store_history : bool
2966 store_history : bool
2943 If True, the raw and translated cell will be stored in IPython's
2967 If True, the raw and translated cell will be stored in IPython's
2944 history. For user code calling back into IPython's machinery, this
2968 history. For user code calling back into IPython's machinery, this
2945 should be set to False.
2969 should be set to False.
2946 silent : bool
2970 silent : bool
2947 If True, avoid side-effects, such as implicit displayhooks and
2971 If True, avoid side-effects, such as implicit displayhooks and
2948 and logging. silent=True forces store_history=False.
2972 and logging. silent=True forces store_history=False.
2949 shell_futures : bool
2973 shell_futures : bool
2950 If True, the code will share future statements with the interactive
2974 If True, the code will share future statements with the interactive
2951 shell. It will both be affected by previous __future__ imports, and
2975 shell. It will both be affected by previous __future__ imports, and
2952 any __future__ imports in the code will affect the shell. If False,
2976 any __future__ imports in the code will affect the shell. If False,
2953 __future__ imports are not shared in either direction.
2977 __future__ imports are not shared in either direction.
2954 transformed_cell: str
2978 transformed_cell: str
2955 cell that was passed through transformers
2979 cell that was passed through transformers
2956 preprocessing_exc_tuple:
2980 preprocessing_exc_tuple:
2957 trace if the transformation failed.
2981 trace if the transformation failed.
2958
2982
2959 Returns
2983 Returns
2960 -------
2984 -------
2961 result : :class:`ExecutionResult`
2985 result : :class:`ExecutionResult`
2962
2986
2963 .. versionadded:: 7.0
2987 .. versionadded:: 7.0
2964 """
2988 """
2965 info = ExecutionInfo(
2989 info = ExecutionInfo(
2966 raw_cell, store_history, silent, shell_futures)
2990 raw_cell, store_history, silent, shell_futures)
2967 result = ExecutionResult(info)
2991 result = ExecutionResult(info)
2968
2992
2969 if (not raw_cell) or raw_cell.isspace():
2993 if (not raw_cell) or raw_cell.isspace():
2970 self.last_execution_succeeded = True
2994 self.last_execution_succeeded = True
2971 self.last_execution_result = result
2995 self.last_execution_result = result
2972 return result
2996 return result
2973
2997
2974 if silent:
2998 if silent:
2975 store_history = False
2999 store_history = False
2976
3000
2977 if store_history:
3001 if store_history:
2978 result.execution_count = self.execution_count
3002 result.execution_count = self.execution_count
2979
3003
2980 def error_before_exec(value):
3004 def error_before_exec(value):
2981 if store_history:
3005 if store_history:
2982 self.execution_count += 1
3006 self.execution_count += 1
2983 result.error_before_exec = value
3007 result.error_before_exec = value
2984 self.last_execution_succeeded = False
3008 self.last_execution_succeeded = False
2985 self.last_execution_result = result
3009 self.last_execution_result = result
2986 return result
3010 return result
2987
3011
2988 self.events.trigger('pre_execute')
3012 self.events.trigger('pre_execute')
2989 if not silent:
3013 if not silent:
2990 self.events.trigger('pre_run_cell', info)
3014 self.events.trigger('pre_run_cell', info)
2991
3015
2992 if transformed_cell is None:
3016 if transformed_cell is None:
2993 warnings.warn(
3017 warnings.warn(
2994 "`run_cell_async` will not call `transform_cell`"
3018 "`run_cell_async` will not call `transform_cell`"
2995 " automatically in the future. Please pass the result to"
3019 " automatically in the future. Please pass the result to"
2996 " `transformed_cell` argument and any exception that happen"
3020 " `transformed_cell` argument and any exception that happen"
2997 " during the"
3021 " during the"
2998 "transform in `preprocessing_exc_tuple` in"
3022 "transform in `preprocessing_exc_tuple` in"
2999 " IPython 7.17 and above.",
3023 " IPython 7.17 and above.",
3000 DeprecationWarning,
3024 DeprecationWarning,
3001 stacklevel=2,
3025 stacklevel=2,
3002 )
3026 )
3003 # If any of our input transformation (input_transformer_manager or
3027 # If any of our input transformation (input_transformer_manager or
3004 # prefilter_manager) raises an exception, we store it in this variable
3028 # prefilter_manager) raises an exception, we store it in this variable
3005 # so that we can display the error after logging the input and storing
3029 # so that we can display the error after logging the input and storing
3006 # it in the history.
3030 # it in the history.
3007 try:
3031 try:
3008 cell = self.transform_cell(raw_cell)
3032 cell = self.transform_cell(raw_cell)
3009 except Exception:
3033 except Exception:
3010 preprocessing_exc_tuple = sys.exc_info()
3034 preprocessing_exc_tuple = sys.exc_info()
3011 cell = raw_cell # cell has to exist so it can be stored/logged
3035 cell = raw_cell # cell has to exist so it can be stored/logged
3012 else:
3036 else:
3013 preprocessing_exc_tuple = None
3037 preprocessing_exc_tuple = None
3014 else:
3038 else:
3015 if preprocessing_exc_tuple is None:
3039 if preprocessing_exc_tuple is None:
3016 cell = transformed_cell
3040 cell = transformed_cell
3017 else:
3041 else:
3018 cell = raw_cell
3042 cell = raw_cell
3019
3043
3020 # Store raw and processed history
3044 # Store raw and processed history
3021 if store_history:
3045 if store_history:
3022 self.history_manager.store_inputs(self.execution_count,
3046 self.history_manager.store_inputs(self.execution_count,
3023 cell, raw_cell)
3047 cell, raw_cell)
3024 if not silent:
3048 if not silent:
3025 self.logger.log(cell, raw_cell)
3049 self.logger.log(cell, raw_cell)
3026
3050
3027 # Display the exception if input processing failed.
3051 # Display the exception if input processing failed.
3028 if preprocessing_exc_tuple is not None:
3052 if preprocessing_exc_tuple is not None:
3029 self.showtraceback(preprocessing_exc_tuple)
3053 self.showtraceback(preprocessing_exc_tuple)
3030 if store_history:
3054 if store_history:
3031 self.execution_count += 1
3055 self.execution_count += 1
3032 return error_before_exec(preprocessing_exc_tuple[1])
3056 return error_before_exec(preprocessing_exc_tuple[1])
3033
3057
3034 # Our own compiler remembers the __future__ environment. If we want to
3058 # Our own compiler remembers the __future__ environment. If we want to
3035 # run code with a separate __future__ environment, use the default
3059 # run code with a separate __future__ environment, use the default
3036 # compiler
3060 # compiler
3037 compiler = self.compile if shell_futures else self.compiler_class()
3061 compiler = self.compile if shell_futures else self.compiler_class()
3038
3062
3039 _run_async = False
3063 _run_async = False
3040
3064
3041 with self.builtin_trap:
3065 with self.builtin_trap:
3042 cell_name = compiler.cache(cell, self.execution_count, raw_code=raw_cell)
3066 cell_name = compiler.cache(cell, self.execution_count, raw_code=raw_cell)
3043
3067
3044 with self.display_trap:
3068 with self.display_trap:
3045 # Compile to bytecode
3069 # Compile to bytecode
3046 try:
3070 try:
3047 code_ast = compiler.ast_parse(cell, filename=cell_name)
3071 code_ast = compiler.ast_parse(cell, filename=cell_name)
3048 except self.custom_exceptions as e:
3072 except self.custom_exceptions as e:
3049 etype, value, tb = sys.exc_info()
3073 etype, value, tb = sys.exc_info()
3050 self.CustomTB(etype, value, tb)
3074 self.CustomTB(etype, value, tb)
3051 return error_before_exec(e)
3075 return error_before_exec(e)
3052 except IndentationError as e:
3076 except IndentationError as e:
3053 self.showindentationerror()
3077 self.showindentationerror()
3054 return error_before_exec(e)
3078 return error_before_exec(e)
3055 except (OverflowError, SyntaxError, ValueError, TypeError,
3079 except (OverflowError, SyntaxError, ValueError, TypeError,
3056 MemoryError) as e:
3080 MemoryError) as e:
3057 self.showsyntaxerror()
3081 self.showsyntaxerror()
3058 return error_before_exec(e)
3082 return error_before_exec(e)
3059
3083
3060 # Apply AST transformations
3084 # Apply AST transformations
3061 try:
3085 try:
3062 code_ast = self.transform_ast(code_ast)
3086 code_ast = self.transform_ast(code_ast)
3063 except InputRejected as e:
3087 except InputRejected as e:
3064 self.showtraceback()
3088 self.showtraceback()
3065 return error_before_exec(e)
3089 return error_before_exec(e)
3066
3090
3067 # Give the displayhook a reference to our ExecutionResult so it
3091 # Give the displayhook a reference to our ExecutionResult so it
3068 # can fill in the output value.
3092 # can fill in the output value.
3069 self.displayhook.exec_result = result
3093 self.displayhook.exec_result = result
3070
3094
3071 # Execute the user code
3095 # Execute the user code
3072 interactivity = "none" if silent else self.ast_node_interactivity
3096 interactivity = "none" if silent else self.ast_node_interactivity
3073
3097
3074 has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
3098 has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
3075 interactivity=interactivity, compiler=compiler, result=result)
3099 interactivity=interactivity, compiler=compiler, result=result)
3076
3100
3077 self.last_execution_succeeded = not has_raised
3101 self.last_execution_succeeded = not has_raised
3078 self.last_execution_result = result
3102 self.last_execution_result = result
3079
3103
3080 # Reset this so later displayed values do not modify the
3104 # Reset this so later displayed values do not modify the
3081 # ExecutionResult
3105 # ExecutionResult
3082 self.displayhook.exec_result = None
3106 self.displayhook.exec_result = None
3083
3107
3084 if store_history:
3108 if store_history:
3085 # Write output to the database. Does nothing unless
3109 # Write output to the database. Does nothing unless
3086 # history output logging is enabled.
3110 # history output logging is enabled.
3087 self.history_manager.store_output(self.execution_count)
3111 self.history_manager.store_output(self.execution_count)
3088 # Each cell is a *single* input, regardless of how many lines it has
3112 # Each cell is a *single* input, regardless of how many lines it has
3089 self.execution_count += 1
3113 self.execution_count += 1
3090
3114
3091 return result
3115 return result
3092
3116
3093 def transform_cell(self, raw_cell):
3117 def transform_cell(self, raw_cell):
3094 """Transform an input cell before parsing it.
3118 """Transform an input cell before parsing it.
3095
3119
3096 Static transformations, implemented in IPython.core.inputtransformer2,
3120 Static transformations, implemented in IPython.core.inputtransformer2,
3097 deal with things like ``%magic`` and ``!system`` commands.
3121 deal with things like ``%magic`` and ``!system`` commands.
3098 These run on all input.
3122 These run on all input.
3099 Dynamic transformations, for things like unescaped magics and the exit
3123 Dynamic transformations, for things like unescaped magics and the exit
3100 autocall, depend on the state of the interpreter.
3124 autocall, depend on the state of the interpreter.
3101 These only apply to single line inputs.
3125 These only apply to single line inputs.
3102
3126
3103 These string-based transformations are followed by AST transformations;
3127 These string-based transformations are followed by AST transformations;
3104 see :meth:`transform_ast`.
3128 see :meth:`transform_ast`.
3105 """
3129 """
3106 # Static input transformations
3130 # Static input transformations
3107 cell = self.input_transformer_manager.transform_cell(raw_cell)
3131 cell = self.input_transformer_manager.transform_cell(raw_cell)
3108
3132
3109 if len(cell.splitlines()) == 1:
3133 if len(cell.splitlines()) == 1:
3110 # Dynamic transformations - only applied for single line commands
3134 # Dynamic transformations - only applied for single line commands
3111 with self.builtin_trap:
3135 with self.builtin_trap:
3112 # use prefilter_lines to handle trailing newlines
3136 # use prefilter_lines to handle trailing newlines
3113 # restore trailing newline for ast.parse
3137 # restore trailing newline for ast.parse
3114 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
3138 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
3115
3139
3116 lines = cell.splitlines(keepends=True)
3140 lines = cell.splitlines(keepends=True)
3117 for transform in self.input_transformers_post:
3141 for transform in self.input_transformers_post:
3118 lines = transform(lines)
3142 lines = transform(lines)
3119 cell = ''.join(lines)
3143 cell = ''.join(lines)
3120
3144
3121 return cell
3145 return cell
3122
3146
3123 def transform_ast(self, node):
3147 def transform_ast(self, node):
3124 """Apply the AST transformations from self.ast_transformers
3148 """Apply the AST transformations from self.ast_transformers
3125
3149
3126 Parameters
3150 Parameters
3127 ----------
3151 ----------
3128 node : ast.Node
3152 node : ast.Node
3129 The root node to be transformed. Typically called with the ast.Module
3153 The root node to be transformed. Typically called with the ast.Module
3130 produced by parsing user input.
3154 produced by parsing user input.
3131
3155
3132 Returns
3156 Returns
3133 -------
3157 -------
3134 An ast.Node corresponding to the node it was called with. Note that it
3158 An ast.Node corresponding to the node it was called with. Note that it
3135 may also modify the passed object, so don't rely on references to the
3159 may also modify the passed object, so don't rely on references to the
3136 original AST.
3160 original AST.
3137 """
3161 """
3138 for transformer in self.ast_transformers:
3162 for transformer in self.ast_transformers:
3139 try:
3163 try:
3140 node = transformer.visit(node)
3164 node = transformer.visit(node)
3141 except InputRejected:
3165 except InputRejected:
3142 # User-supplied AST transformers can reject an input by raising
3166 # User-supplied AST transformers can reject an input by raising
3143 # an InputRejected. Short-circuit in this case so that we
3167 # an InputRejected. Short-circuit in this case so that we
3144 # don't unregister the transform.
3168 # don't unregister the transform.
3145 raise
3169 raise
3146 except Exception:
3170 except Exception:
3147 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
3171 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
3148 self.ast_transformers.remove(transformer)
3172 self.ast_transformers.remove(transformer)
3149
3173
3150 if self.ast_transformers:
3174 if self.ast_transformers:
3151 ast.fix_missing_locations(node)
3175 ast.fix_missing_locations(node)
3152 return node
3176 return node
3153
3177
3154 def _update_code_co_name(self, code):
3178 def _update_code_co_name(self, code):
3155 """Python 3.10 changed the behaviour so that whenever a code object
3179 """Python 3.10 changed the behaviour so that whenever a code object
3156 is assembled in the compile(ast) the co_firstlineno would be == 1.
3180 is assembled in the compile(ast) the co_firstlineno would be == 1.
3157
3181
3158 This makes pydevd/debugpy think that all cells invoked are the same
3182 This makes pydevd/debugpy think that all cells invoked are the same
3159 since it caches information based on (co_firstlineno, co_name, co_filename).
3183 since it caches information based on (co_firstlineno, co_name, co_filename).
3160
3184
3161 Given that, this function changes the code 'co_name' to be unique
3185 Given that, this function changes the code 'co_name' to be unique
3162 based on the first real lineno of the code (which also has a nice
3186 based on the first real lineno of the code (which also has a nice
3163 side effect of customizing the name so that it's not always <module>).
3187 side effect of customizing the name so that it's not always <module>).
3164
3188
3165 See: https://github.com/ipython/ipykernel/issues/841
3189 See: https://github.com/ipython/ipykernel/issues/841
3166 """
3190 """
3167 if not hasattr(code, "replace"):
3191 if not hasattr(code, "replace"):
3168 # It may not be available on older versions of Python (only
3192 # It may not be available on older versions of Python (only
3169 # available for 3.8 onwards).
3193 # available for 3.8 onwards).
3170 return code
3194 return code
3171 try:
3195 try:
3172 first_real_line = next(dis.findlinestarts(code))[1]
3196 first_real_line = next(dis.findlinestarts(code))[1]
3173 except StopIteration:
3197 except StopIteration:
3174 return code
3198 return code
3175 return code.replace(co_name="<cell line: %s>" % (first_real_line,))
3199 return code.replace(co_name="<cell line: %s>" % (first_real_line,))
3176
3200
3177 async def run_ast_nodes(
3201 async def run_ast_nodes(
3178 self,
3202 self,
3179 nodelist: ListType[stmt],
3203 nodelist: ListType[stmt],
3180 cell_name: str,
3204 cell_name: str,
3181 interactivity="last_expr",
3205 interactivity="last_expr",
3182 compiler=compile,
3206 compiler=compile,
3183 result=None,
3207 result=None,
3184 ):
3208 ):
3185 """Run a sequence of AST nodes. The execution mode depends on the
3209 """Run a sequence of AST nodes. The execution mode depends on the
3186 interactivity parameter.
3210 interactivity parameter.
3187
3211
3188 Parameters
3212 Parameters
3189 ----------
3213 ----------
3190 nodelist : list
3214 nodelist : list
3191 A sequence of AST nodes to run.
3215 A sequence of AST nodes to run.
3192 cell_name : str
3216 cell_name : str
3193 Will be passed to the compiler as the filename of the cell. Typically
3217 Will be passed to the compiler as the filename of the cell. Typically
3194 the value returned by ip.compile.cache(cell).
3218 the value returned by ip.compile.cache(cell).
3195 interactivity : str
3219 interactivity : str
3196 'all', 'last', 'last_expr' , 'last_expr_or_assign' or 'none',
3220 'all', 'last', 'last_expr' , 'last_expr_or_assign' or 'none',
3197 specifying which nodes should be run interactively (displaying output
3221 specifying which nodes should be run interactively (displaying output
3198 from expressions). 'last_expr' will run the last node interactively
3222 from expressions). 'last_expr' will run the last node interactively
3199 only if it is an expression (i.e. expressions in loops or other blocks
3223 only if it is an expression (i.e. expressions in loops or other blocks
3200 are not displayed) 'last_expr_or_assign' will run the last expression
3224 are not displayed) 'last_expr_or_assign' will run the last expression
3201 or the last assignment. Other values for this parameter will raise a
3225 or the last assignment. Other values for this parameter will raise a
3202 ValueError.
3226 ValueError.
3203
3227
3204 compiler : callable
3228 compiler : callable
3205 A function with the same interface as the built-in compile(), to turn
3229 A function with the same interface as the built-in compile(), to turn
3206 the AST nodes into code objects. Default is the built-in compile().
3230 the AST nodes into code objects. Default is the built-in compile().
3207 result : ExecutionResult, optional
3231 result : ExecutionResult, optional
3208 An object to store exceptions that occur during execution.
3232 An object to store exceptions that occur during execution.
3209
3233
3210 Returns
3234 Returns
3211 -------
3235 -------
3212 True if an exception occurred while running code, False if it finished
3236 True if an exception occurred while running code, False if it finished
3213 running.
3237 running.
3214 """
3238 """
3215 if not nodelist:
3239 if not nodelist:
3216 return
3240 return
3217
3241
3218
3242
3219 if interactivity == 'last_expr_or_assign':
3243 if interactivity == 'last_expr_or_assign':
3220 if isinstance(nodelist[-1], _assign_nodes):
3244 if isinstance(nodelist[-1], _assign_nodes):
3221 asg = nodelist[-1]
3245 asg = nodelist[-1]
3222 if isinstance(asg, ast.Assign) and len(asg.targets) == 1:
3246 if isinstance(asg, ast.Assign) and len(asg.targets) == 1:
3223 target = asg.targets[0]
3247 target = asg.targets[0]
3224 elif isinstance(asg, _single_targets_nodes):
3248 elif isinstance(asg, _single_targets_nodes):
3225 target = asg.target
3249 target = asg.target
3226 else:
3250 else:
3227 target = None
3251 target = None
3228 if isinstance(target, ast.Name):
3252 if isinstance(target, ast.Name):
3229 nnode = ast.Expr(ast.Name(target.id, ast.Load()))
3253 nnode = ast.Expr(ast.Name(target.id, ast.Load()))
3230 ast.fix_missing_locations(nnode)
3254 ast.fix_missing_locations(nnode)
3231 nodelist.append(nnode)
3255 nodelist.append(nnode)
3232 interactivity = 'last_expr'
3256 interactivity = 'last_expr'
3233
3257
3234 _async = False
3258 _async = False
3235 if interactivity == 'last_expr':
3259 if interactivity == 'last_expr':
3236 if isinstance(nodelist[-1], ast.Expr):
3260 if isinstance(nodelist[-1], ast.Expr):
3237 interactivity = "last"
3261 interactivity = "last"
3238 else:
3262 else:
3239 interactivity = "none"
3263 interactivity = "none"
3240
3264
3241 if interactivity == 'none':
3265 if interactivity == 'none':
3242 to_run_exec, to_run_interactive = nodelist, []
3266 to_run_exec, to_run_interactive = nodelist, []
3243 elif interactivity == 'last':
3267 elif interactivity == 'last':
3244 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
3268 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
3245 elif interactivity == 'all':
3269 elif interactivity == 'all':
3246 to_run_exec, to_run_interactive = [], nodelist
3270 to_run_exec, to_run_interactive = [], nodelist
3247 else:
3271 else:
3248 raise ValueError("Interactivity was %r" % interactivity)
3272 raise ValueError("Interactivity was %r" % interactivity)
3249
3273
3250 try:
3274 try:
3251
3275
3252 def compare(code):
3276 def compare(code):
3253 is_async = inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE
3277 is_async = inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE
3254 return is_async
3278 return is_async
3255
3279
3256 # refactor that to just change the mod constructor.
3280 # refactor that to just change the mod constructor.
3257 to_run = []
3281 to_run = []
3258 for node in to_run_exec:
3282 for node in to_run_exec:
3259 to_run.append((node, "exec"))
3283 to_run.append((node, "exec"))
3260
3284
3261 for node in to_run_interactive:
3285 for node in to_run_interactive:
3262 to_run.append((node, "single"))
3286 to_run.append((node, "single"))
3263
3287
3264 for node, mode in to_run:
3288 for node, mode in to_run:
3265 if mode == "exec":
3289 if mode == "exec":
3266 mod = Module([node], [])
3290 mod = Module([node], [])
3267 elif mode == "single":
3291 elif mode == "single":
3268 mod = ast.Interactive([node])
3292 mod = ast.Interactive([node])
3269 with compiler.extra_flags(
3293 with compiler.extra_flags(
3270 getattr(ast, "PyCF_ALLOW_TOP_LEVEL_AWAIT", 0x0)
3294 getattr(ast, "PyCF_ALLOW_TOP_LEVEL_AWAIT", 0x0)
3271 if self.autoawait
3295 if self.autoawait
3272 else 0x0
3296 else 0x0
3273 ):
3297 ):
3274 code = compiler(mod, cell_name, mode)
3298 code = compiler(mod, cell_name, mode)
3275 code = self._update_code_co_name(code)
3299 code = self._update_code_co_name(code)
3276 asy = compare(code)
3300 asy = compare(code)
3277 if await self.run_code(code, result, async_=asy):
3301 if await self.run_code(code, result, async_=asy):
3278 return True
3302 return True
3279
3303
3280 # Flush softspace
3304 # Flush softspace
3281 if softspace(sys.stdout, 0):
3305 if softspace(sys.stdout, 0):
3282 print()
3306 print()
3283
3307
3284 except:
3308 except:
3285 # It's possible to have exceptions raised here, typically by
3309 # It's possible to have exceptions raised here, typically by
3286 # compilation of odd code (such as a naked 'return' outside a
3310 # compilation of odd code (such as a naked 'return' outside a
3287 # function) that did parse but isn't valid. Typically the exception
3311 # function) that did parse but isn't valid. Typically the exception
3288 # is a SyntaxError, but it's safest just to catch anything and show
3312 # is a SyntaxError, but it's safest just to catch anything and show
3289 # the user a traceback.
3313 # the user a traceback.
3290
3314
3291 # We do only one try/except outside the loop to minimize the impact
3315 # We do only one try/except outside the loop to minimize the impact
3292 # on runtime, and also because if any node in the node list is
3316 # on runtime, and also because if any node in the node list is
3293 # broken, we should stop execution completely.
3317 # broken, we should stop execution completely.
3294 if result:
3318 if result:
3295 result.error_before_exec = sys.exc_info()[1]
3319 result.error_before_exec = sys.exc_info()[1]
3296 self.showtraceback()
3320 self.showtraceback()
3297 return True
3321 return True
3298
3322
3299 return False
3323 return False
3300
3324
3301 async def run_code(self, code_obj, result=None, *, async_=False):
3325 async def run_code(self, code_obj, result=None, *, async_=False):
3302 """Execute a code object.
3326 """Execute a code object.
3303
3327
3304 When an exception occurs, self.showtraceback() is called to display a
3328 When an exception occurs, self.showtraceback() is called to display a
3305 traceback.
3329 traceback.
3306
3330
3307 Parameters
3331 Parameters
3308 ----------
3332 ----------
3309 code_obj : code object
3333 code_obj : code object
3310 A compiled code object, to be executed
3334 A compiled code object, to be executed
3311 result : ExecutionResult, optional
3335 result : ExecutionResult, optional
3312 An object to store exceptions that occur during execution.
3336 An object to store exceptions that occur during execution.
3313 async_ : Bool (Experimental)
3337 async_ : Bool (Experimental)
3314 Attempt to run top-level asynchronous code in a default loop.
3338 Attempt to run top-level asynchronous code in a default loop.
3315
3339
3316 Returns
3340 Returns
3317 -------
3341 -------
3318 False : successful execution.
3342 False : successful execution.
3319 True : an error occurred.
3343 True : an error occurred.
3320 """
3344 """
3321 # special value to say that anything above is IPython and should be
3345 # special value to say that anything above is IPython and should be
3322 # hidden.
3346 # hidden.
3323 __tracebackhide__ = "__ipython_bottom__"
3347 __tracebackhide__ = "__ipython_bottom__"
3324 # Set our own excepthook in case the user code tries to call it
3348 # Set our own excepthook in case the user code tries to call it
3325 # directly, so that the IPython crash handler doesn't get triggered
3349 # directly, so that the IPython crash handler doesn't get triggered
3326 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
3350 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
3327
3351
3328 # we save the original sys.excepthook in the instance, in case config
3352 # we save the original sys.excepthook in the instance, in case config
3329 # code (such as magics) needs access to it.
3353 # code (such as magics) needs access to it.
3330 self.sys_excepthook = old_excepthook
3354 self.sys_excepthook = old_excepthook
3331 outflag = True # happens in more places, so it's easier as default
3355 outflag = True # happens in more places, so it's easier as default
3332 try:
3356 try:
3333 try:
3357 try:
3334 if async_:
3358 if async_:
3335 await eval(code_obj, self.user_global_ns, self.user_ns)
3359 await eval(code_obj, self.user_global_ns, self.user_ns)
3336 else:
3360 else:
3337 exec(code_obj, self.user_global_ns, self.user_ns)
3361 exec(code_obj, self.user_global_ns, self.user_ns)
3338 finally:
3362 finally:
3339 # Reset our crash handler in place
3363 # Reset our crash handler in place
3340 sys.excepthook = old_excepthook
3364 sys.excepthook = old_excepthook
3341 except SystemExit as e:
3365 except SystemExit as e:
3342 if result is not None:
3366 if result is not None:
3343 result.error_in_exec = e
3367 result.error_in_exec = e
3344 self.showtraceback(exception_only=True)
3368 self.showtraceback(exception_only=True)
3345 warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
3369 warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
3346 except self.custom_exceptions:
3370 except self.custom_exceptions:
3347 etype, value, tb = sys.exc_info()
3371 etype, value, tb = sys.exc_info()
3348 if result is not None:
3372 if result is not None:
3349 result.error_in_exec = value
3373 result.error_in_exec = value
3350 self.CustomTB(etype, value, tb)
3374 self.CustomTB(etype, value, tb)
3351 except:
3375 except:
3352 if result is not None:
3376 if result is not None:
3353 result.error_in_exec = sys.exc_info()[1]
3377 result.error_in_exec = sys.exc_info()[1]
3354 self.showtraceback(running_compiled_code=True)
3378 self.showtraceback(running_compiled_code=True)
3355 else:
3379 else:
3356 outflag = False
3380 outflag = False
3357 return outflag
3381 return outflag
3358
3382
3359 # For backwards compatibility
3383 # For backwards compatibility
3360 runcode = run_code
3384 runcode = run_code
3361
3385
3362 def check_complete(self, code: str) -> Tuple[str, str]:
3386 def check_complete(self, code: str) -> Tuple[str, str]:
3363 """Return whether a block of code is ready to execute, or should be continued
3387 """Return whether a block of code is ready to execute, or should be continued
3364
3388
3365 Parameters
3389 Parameters
3366 ----------
3390 ----------
3367 code : string
3391 code : string
3368 Python input code, which can be multiline.
3392 Python input code, which can be multiline.
3369
3393
3370 Returns
3394 Returns
3371 -------
3395 -------
3372 status : str
3396 status : str
3373 One of 'complete', 'incomplete', or 'invalid' if source is not a
3397 One of 'complete', 'incomplete', or 'invalid' if source is not a
3374 prefix of valid code.
3398 prefix of valid code.
3375 indent : str
3399 indent : str
3376 When status is 'incomplete', this is some whitespace to insert on
3400 When status is 'incomplete', this is some whitespace to insert on
3377 the next line of the prompt.
3401 the next line of the prompt.
3378 """
3402 """
3379 status, nspaces = self.input_transformer_manager.check_complete(code)
3403 status, nspaces = self.input_transformer_manager.check_complete(code)
3380 return status, ' ' * (nspaces or 0)
3404 return status, ' ' * (nspaces or 0)
3381
3405
3382 #-------------------------------------------------------------------------
3406 #-------------------------------------------------------------------------
3383 # Things related to GUI support and pylab
3407 # Things related to GUI support and pylab
3384 #-------------------------------------------------------------------------
3408 #-------------------------------------------------------------------------
3385
3409
3386 active_eventloop = None
3410 active_eventloop = None
3387
3411
3388 def enable_gui(self, gui=None):
3412 def enable_gui(self, gui=None):
3389 raise NotImplementedError('Implement enable_gui in a subclass')
3413 raise NotImplementedError('Implement enable_gui in a subclass')
3390
3414
3391 def enable_matplotlib(self, gui=None):
3415 def enable_matplotlib(self, gui=None):
3392 """Enable interactive matplotlib and inline figure support.
3416 """Enable interactive matplotlib and inline figure support.
3393
3417
3394 This takes the following steps:
3418 This takes the following steps:
3395
3419
3396 1. select the appropriate eventloop and matplotlib backend
3420 1. select the appropriate eventloop and matplotlib backend
3397 2. set up matplotlib for interactive use with that backend
3421 2. set up matplotlib for interactive use with that backend
3398 3. configure formatters for inline figure display
3422 3. configure formatters for inline figure display
3399 4. enable the selected gui eventloop
3423 4. enable the selected gui eventloop
3400
3424
3401 Parameters
3425 Parameters
3402 ----------
3426 ----------
3403 gui : optional, string
3427 gui : optional, string
3404 If given, dictates the choice of matplotlib GUI backend to use
3428 If given, dictates the choice of matplotlib GUI backend to use
3405 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3429 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3406 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3430 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3407 matplotlib (as dictated by the matplotlib build-time options plus the
3431 matplotlib (as dictated by the matplotlib build-time options plus the
3408 user's matplotlibrc configuration file). Note that not all backends
3432 user's matplotlibrc configuration file). Note that not all backends
3409 make sense in all contexts, for example a terminal ipython can't
3433 make sense in all contexts, for example a terminal ipython can't
3410 display figures inline.
3434 display figures inline.
3411 """
3435 """
3412 from matplotlib_inline.backend_inline import configure_inline_support
3436 from matplotlib_inline.backend_inline import configure_inline_support
3413
3437
3414 from IPython.core import pylabtools as pt
3438 from IPython.core import pylabtools as pt
3415 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
3439 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
3416
3440
3417 if gui != 'inline':
3441 if gui != 'inline':
3418 # If we have our first gui selection, store it
3442 # If we have our first gui selection, store it
3419 if self.pylab_gui_select is None:
3443 if self.pylab_gui_select is None:
3420 self.pylab_gui_select = gui
3444 self.pylab_gui_select = gui
3421 # Otherwise if they are different
3445 # Otherwise if they are different
3422 elif gui != self.pylab_gui_select:
3446 elif gui != self.pylab_gui_select:
3423 print('Warning: Cannot change to a different GUI toolkit: %s.'
3447 print('Warning: Cannot change to a different GUI toolkit: %s.'
3424 ' Using %s instead.' % (gui, self.pylab_gui_select))
3448 ' Using %s instead.' % (gui, self.pylab_gui_select))
3425 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
3449 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
3426
3450
3427 pt.activate_matplotlib(backend)
3451 pt.activate_matplotlib(backend)
3428 configure_inline_support(self, backend)
3452 configure_inline_support(self, backend)
3429
3453
3430 # Now we must activate the gui pylab wants to use, and fix %run to take
3454 # Now we must activate the gui pylab wants to use, and fix %run to take
3431 # plot updates into account
3455 # plot updates into account
3432 self.enable_gui(gui)
3456 self.enable_gui(gui)
3433 self.magics_manager.registry['ExecutionMagics'].default_runner = \
3457 self.magics_manager.registry['ExecutionMagics'].default_runner = \
3434 pt.mpl_runner(self.safe_execfile)
3458 pt.mpl_runner(self.safe_execfile)
3435
3459
3436 return gui, backend
3460 return gui, backend
3437
3461
3438 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
3462 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
3439 """Activate pylab support at runtime.
3463 """Activate pylab support at runtime.
3440
3464
3441 This turns on support for matplotlib, preloads into the interactive
3465 This turns on support for matplotlib, preloads into the interactive
3442 namespace all of numpy and pylab, and configures IPython to correctly
3466 namespace all of numpy and pylab, and configures IPython to correctly
3443 interact with the GUI event loop. The GUI backend to be used can be
3467 interact with the GUI event loop. The GUI backend to be used can be
3444 optionally selected with the optional ``gui`` argument.
3468 optionally selected with the optional ``gui`` argument.
3445
3469
3446 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
3470 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
3447
3471
3448 Parameters
3472 Parameters
3449 ----------
3473 ----------
3450 gui : optional, string
3474 gui : optional, string
3451 If given, dictates the choice of matplotlib GUI backend to use
3475 If given, dictates the choice of matplotlib GUI backend to use
3452 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3476 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3453 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3477 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3454 matplotlib (as dictated by the matplotlib build-time options plus the
3478 matplotlib (as dictated by the matplotlib build-time options plus the
3455 user's matplotlibrc configuration file). Note that not all backends
3479 user's matplotlibrc configuration file). Note that not all backends
3456 make sense in all contexts, for example a terminal ipython can't
3480 make sense in all contexts, for example a terminal ipython can't
3457 display figures inline.
3481 display figures inline.
3458 import_all : optional, bool, default: True
3482 import_all : optional, bool, default: True
3459 Whether to do `from numpy import *` and `from pylab import *`
3483 Whether to do `from numpy import *` and `from pylab import *`
3460 in addition to module imports.
3484 in addition to module imports.
3461 welcome_message : deprecated
3485 welcome_message : deprecated
3462 This argument is ignored, no welcome message will be displayed.
3486 This argument is ignored, no welcome message will be displayed.
3463 """
3487 """
3464 from IPython.core.pylabtools import import_pylab
3488 from IPython.core.pylabtools import import_pylab
3465
3489
3466 gui, backend = self.enable_matplotlib(gui)
3490 gui, backend = self.enable_matplotlib(gui)
3467
3491
3468 # We want to prevent the loading of pylab to pollute the user's
3492 # We want to prevent the loading of pylab to pollute the user's
3469 # namespace as shown by the %who* magics, so we execute the activation
3493 # namespace as shown by the %who* magics, so we execute the activation
3470 # code in an empty namespace, and we update *both* user_ns and
3494 # code in an empty namespace, and we update *both* user_ns and
3471 # user_ns_hidden with this information.
3495 # user_ns_hidden with this information.
3472 ns = {}
3496 ns = {}
3473 import_pylab(ns, import_all)
3497 import_pylab(ns, import_all)
3474 # warn about clobbered names
3498 # warn about clobbered names
3475 ignored = {"__builtins__"}
3499 ignored = {"__builtins__"}
3476 both = set(ns).intersection(self.user_ns).difference(ignored)
3500 both = set(ns).intersection(self.user_ns).difference(ignored)
3477 clobbered = [ name for name in both if self.user_ns[name] is not ns[name] ]
3501 clobbered = [ name for name in both if self.user_ns[name] is not ns[name] ]
3478 self.user_ns.update(ns)
3502 self.user_ns.update(ns)
3479 self.user_ns_hidden.update(ns)
3503 self.user_ns_hidden.update(ns)
3480 return gui, backend, clobbered
3504 return gui, backend, clobbered
3481
3505
3482 #-------------------------------------------------------------------------
3506 #-------------------------------------------------------------------------
3483 # Utilities
3507 # Utilities
3484 #-------------------------------------------------------------------------
3508 #-------------------------------------------------------------------------
3485
3509
3486 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3510 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3487 """Expand python variables in a string.
3511 """Expand python variables in a string.
3488
3512
3489 The depth argument indicates how many frames above the caller should
3513 The depth argument indicates how many frames above the caller should
3490 be walked to look for the local namespace where to expand variables.
3514 be walked to look for the local namespace where to expand variables.
3491
3515
3492 The global namespace for expansion is always the user's interactive
3516 The global namespace for expansion is always the user's interactive
3493 namespace.
3517 namespace.
3494 """
3518 """
3495 ns = self.user_ns.copy()
3519 ns = self.user_ns.copy()
3496 try:
3520 try:
3497 frame = sys._getframe(depth+1)
3521 frame = sys._getframe(depth+1)
3498 except ValueError:
3522 except ValueError:
3499 # This is thrown if there aren't that many frames on the stack,
3523 # This is thrown if there aren't that many frames on the stack,
3500 # e.g. if a script called run_line_magic() directly.
3524 # e.g. if a script called run_line_magic() directly.
3501 pass
3525 pass
3502 else:
3526 else:
3503 ns.update(frame.f_locals)
3527 ns.update(frame.f_locals)
3504
3528
3505 try:
3529 try:
3506 # We have to use .vformat() here, because 'self' is a valid and common
3530 # We have to use .vformat() here, because 'self' is a valid and common
3507 # name, and expanding **ns for .format() would make it collide with
3531 # name, and expanding **ns for .format() would make it collide with
3508 # the 'self' argument of the method.
3532 # the 'self' argument of the method.
3509 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3533 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3510 except Exception:
3534 except Exception:
3511 # if formatter couldn't format, just let it go untransformed
3535 # if formatter couldn't format, just let it go untransformed
3512 pass
3536 pass
3513 return cmd
3537 return cmd
3514
3538
3515 def mktempfile(self, data=None, prefix='ipython_edit_'):
3539 def mktempfile(self, data=None, prefix='ipython_edit_'):
3516 """Make a new tempfile and return its filename.
3540 """Make a new tempfile and return its filename.
3517
3541
3518 This makes a call to tempfile.mkstemp (created in a tempfile.mkdtemp),
3542 This makes a call to tempfile.mkstemp (created in a tempfile.mkdtemp),
3519 but it registers the created filename internally so ipython cleans it up
3543 but it registers the created filename internally so ipython cleans it up
3520 at exit time.
3544 at exit time.
3521
3545
3522 Optional inputs:
3546 Optional inputs:
3523
3547
3524 - data(None): if data is given, it gets written out to the temp file
3548 - data(None): if data is given, it gets written out to the temp file
3525 immediately, and the file is closed again."""
3549 immediately, and the file is closed again."""
3526
3550
3527 dir_path = Path(tempfile.mkdtemp(prefix=prefix))
3551 dir_path = Path(tempfile.mkdtemp(prefix=prefix))
3528 self.tempdirs.append(dir_path)
3552 self.tempdirs.append(dir_path)
3529
3553
3530 handle, filename = tempfile.mkstemp(".py", prefix, dir=str(dir_path))
3554 handle, filename = tempfile.mkstemp(".py", prefix, dir=str(dir_path))
3531 os.close(handle) # On Windows, there can only be one open handle on a file
3555 os.close(handle) # On Windows, there can only be one open handle on a file
3532
3556
3533 file_path = Path(filename)
3557 file_path = Path(filename)
3534 self.tempfiles.append(file_path)
3558 self.tempfiles.append(file_path)
3535
3559
3536 if data:
3560 if data:
3537 file_path.write_text(data, encoding="utf-8")
3561 file_path.write_text(data, encoding="utf-8")
3538 return filename
3562 return filename
3539
3563
3540 def ask_yes_no(self, prompt, default=None, interrupt=None):
3564 def ask_yes_no(self, prompt, default=None, interrupt=None):
3541 if self.quiet:
3565 if self.quiet:
3542 return True
3566 return True
3543 return ask_yes_no(prompt,default,interrupt)
3567 return ask_yes_no(prompt,default,interrupt)
3544
3568
3545 def show_usage(self):
3569 def show_usage(self):
3546 """Show a usage message"""
3570 """Show a usage message"""
3547 page.page(IPython.core.usage.interactive_usage)
3571 page.page(IPython.core.usage.interactive_usage)
3548
3572
3549 def extract_input_lines(self, range_str, raw=False):
3573 def extract_input_lines(self, range_str, raw=False):
3550 """Return as a string a set of input history slices.
3574 """Return as a string a set of input history slices.
3551
3575
3552 Parameters
3576 Parameters
3553 ----------
3577 ----------
3554 range_str : str
3578 range_str : str
3555 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3579 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3556 since this function is for use by magic functions which get their
3580 since this function is for use by magic functions which get their
3557 arguments as strings. The number before the / is the session
3581 arguments as strings. The number before the / is the session
3558 number: ~n goes n back from the current session.
3582 number: ~n goes n back from the current session.
3559
3583
3560 If empty string is given, returns history of current session
3584 If empty string is given, returns history of current session
3561 without the last input.
3585 without the last input.
3562
3586
3563 raw : bool, optional
3587 raw : bool, optional
3564 By default, the processed input is used. If this is true, the raw
3588 By default, the processed input is used. If this is true, the raw
3565 input history is used instead.
3589 input history is used instead.
3566
3590
3567 Notes
3591 Notes
3568 -----
3592 -----
3569 Slices can be described with two notations:
3593 Slices can be described with two notations:
3570
3594
3571 * ``N:M`` -> standard python form, means including items N...(M-1).
3595 * ``N:M`` -> standard python form, means including items N...(M-1).
3572 * ``N-M`` -> include items N..M (closed endpoint).
3596 * ``N-M`` -> include items N..M (closed endpoint).
3573 """
3597 """
3574 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3598 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3575 text = "\n".join(x for _, _, x in lines)
3599 text = "\n".join(x for _, _, x in lines)
3576
3600
3577 # Skip the last line, as it's probably the magic that called this
3601 # Skip the last line, as it's probably the magic that called this
3578 if not range_str:
3602 if not range_str:
3579 if "\n" not in text:
3603 if "\n" not in text:
3580 text = ""
3604 text = ""
3581 else:
3605 else:
3582 text = text[: text.rfind("\n")]
3606 text = text[: text.rfind("\n")]
3583
3607
3584 return text
3608 return text
3585
3609
3586 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3610 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3587 """Get a code string from history, file, url, or a string or macro.
3611 """Get a code string from history, file, url, or a string or macro.
3588
3612
3589 This is mainly used by magic functions.
3613 This is mainly used by magic functions.
3590
3614
3591 Parameters
3615 Parameters
3592 ----------
3616 ----------
3593 target : str
3617 target : str
3594 A string specifying code to retrieve. This will be tried respectively
3618 A string specifying code to retrieve. This will be tried respectively
3595 as: ranges of input history (see %history for syntax), url,
3619 as: ranges of input history (see %history for syntax), url,
3596 corresponding .py file, filename, or an expression evaluating to a
3620 corresponding .py file, filename, or an expression evaluating to a
3597 string or Macro in the user namespace.
3621 string or Macro in the user namespace.
3598
3622
3599 If empty string is given, returns complete history of current
3623 If empty string is given, returns complete history of current
3600 session, without the last line.
3624 session, without the last line.
3601
3625
3602 raw : bool
3626 raw : bool
3603 If true (default), retrieve raw history. Has no effect on the other
3627 If true (default), retrieve raw history. Has no effect on the other
3604 retrieval mechanisms.
3628 retrieval mechanisms.
3605
3629
3606 py_only : bool (default False)
3630 py_only : bool (default False)
3607 Only try to fetch python code, do not try alternative methods to decode file
3631 Only try to fetch python code, do not try alternative methods to decode file
3608 if unicode fails.
3632 if unicode fails.
3609
3633
3610 Returns
3634 Returns
3611 -------
3635 -------
3612 A string of code.
3636 A string of code.
3613 ValueError is raised if nothing is found, and TypeError if it evaluates
3637 ValueError is raised if nothing is found, and TypeError if it evaluates
3614 to an object of another type. In each case, .args[0] is a printable
3638 to an object of another type. In each case, .args[0] is a printable
3615 message.
3639 message.
3616 """
3640 """
3617 code = self.extract_input_lines(target, raw=raw) # Grab history
3641 code = self.extract_input_lines(target, raw=raw) # Grab history
3618 if code:
3642 if code:
3619 return code
3643 return code
3620 try:
3644 try:
3621 if target.startswith(('http://', 'https://')):
3645 if target.startswith(('http://', 'https://')):
3622 return openpy.read_py_url(target, skip_encoding_cookie=skip_encoding_cookie)
3646 return openpy.read_py_url(target, skip_encoding_cookie=skip_encoding_cookie)
3623 except UnicodeDecodeError as e:
3647 except UnicodeDecodeError as e:
3624 if not py_only :
3648 if not py_only :
3625 # Deferred import
3649 # Deferred import
3626 from urllib.request import urlopen
3650 from urllib.request import urlopen
3627 response = urlopen(target)
3651 response = urlopen(target)
3628 return response.read().decode('latin1')
3652 return response.read().decode('latin1')
3629 raise ValueError(("'%s' seem to be unreadable.") % target) from e
3653 raise ValueError(("'%s' seem to be unreadable.") % target) from e
3630
3654
3631 potential_target = [target]
3655 potential_target = [target]
3632 try :
3656 try :
3633 potential_target.insert(0,get_py_filename(target))
3657 potential_target.insert(0,get_py_filename(target))
3634 except IOError:
3658 except IOError:
3635 pass
3659 pass
3636
3660
3637 for tgt in potential_target :
3661 for tgt in potential_target :
3638 if os.path.isfile(tgt): # Read file
3662 if os.path.isfile(tgt): # Read file
3639 try :
3663 try :
3640 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3664 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3641 except UnicodeDecodeError as e:
3665 except UnicodeDecodeError as e:
3642 if not py_only :
3666 if not py_only :
3643 with io_open(tgt,'r', encoding='latin1') as f :
3667 with io_open(tgt,'r', encoding='latin1') as f :
3644 return f.read()
3668 return f.read()
3645 raise ValueError(("'%s' seem to be unreadable.") % target) from e
3669 raise ValueError(("'%s' seem to be unreadable.") % target) from e
3646 elif os.path.isdir(os.path.expanduser(tgt)):
3670 elif os.path.isdir(os.path.expanduser(tgt)):
3647 raise ValueError("'%s' is a directory, not a regular file." % target)
3671 raise ValueError("'%s' is a directory, not a regular file." % target)
3648
3672
3649 if search_ns:
3673 if search_ns:
3650 # Inspect namespace to load object source
3674 # Inspect namespace to load object source
3651 object_info = self.object_inspect(target, detail_level=1)
3675 object_info = self.object_inspect(target, detail_level=1)
3652 if object_info['found'] and object_info['source']:
3676 if object_info['found'] and object_info['source']:
3653 return object_info['source']
3677 return object_info['source']
3654
3678
3655 try: # User namespace
3679 try: # User namespace
3656 codeobj = eval(target, self.user_ns)
3680 codeobj = eval(target, self.user_ns)
3657 except Exception as e:
3681 except Exception as e:
3658 raise ValueError(("'%s' was not found in history, as a file, url, "
3682 raise ValueError(("'%s' was not found in history, as a file, url, "
3659 "nor in the user namespace.") % target) from e
3683 "nor in the user namespace.") % target) from e
3660
3684
3661 if isinstance(codeobj, str):
3685 if isinstance(codeobj, str):
3662 return codeobj
3686 return codeobj
3663 elif isinstance(codeobj, Macro):
3687 elif isinstance(codeobj, Macro):
3664 return codeobj.value
3688 return codeobj.value
3665
3689
3666 raise TypeError("%s is neither a string nor a macro." % target,
3690 raise TypeError("%s is neither a string nor a macro." % target,
3667 codeobj)
3691 codeobj)
3668
3692
3669 def _atexit_once(self):
3693 def _atexit_once(self):
3670 """
3694 """
3671 At exist operation that need to be called at most once.
3695 At exist operation that need to be called at most once.
3672 Second call to this function per instance will do nothing.
3696 Second call to this function per instance will do nothing.
3673 """
3697 """
3674
3698
3675 if not getattr(self, "_atexit_once_called", False):
3699 if not getattr(self, "_atexit_once_called", False):
3676 self._atexit_once_called = True
3700 self._atexit_once_called = True
3677 # Clear all user namespaces to release all references cleanly.
3701 # Clear all user namespaces to release all references cleanly.
3678 self.reset(new_session=False)
3702 self.reset(new_session=False)
3679 # Close the history session (this stores the end time and line count)
3703 # Close the history session (this stores the end time and line count)
3680 # this must be *before* the tempfile cleanup, in case of temporary
3704 # this must be *before* the tempfile cleanup, in case of temporary
3681 # history db
3705 # history db
3682 self.history_manager.end_session()
3706 self.history_manager.end_session()
3683 self.history_manager = None
3707 self.history_manager = None
3684
3708
3685 #-------------------------------------------------------------------------
3709 #-------------------------------------------------------------------------
3686 # Things related to IPython exiting
3710 # Things related to IPython exiting
3687 #-------------------------------------------------------------------------
3711 #-------------------------------------------------------------------------
3688 def atexit_operations(self):
3712 def atexit_operations(self):
3689 """This will be executed at the time of exit.
3713 """This will be executed at the time of exit.
3690
3714
3691 Cleanup operations and saving of persistent data that is done
3715 Cleanup operations and saving of persistent data that is done
3692 unconditionally by IPython should be performed here.
3716 unconditionally by IPython should be performed here.
3693
3717
3694 For things that may depend on startup flags or platform specifics (such
3718 For things that may depend on startup flags or platform specifics (such
3695 as having readline or not), register a separate atexit function in the
3719 as having readline or not), register a separate atexit function in the
3696 code that has the appropriate information, rather than trying to
3720 code that has the appropriate information, rather than trying to
3697 clutter
3721 clutter
3698 """
3722 """
3699 self._atexit_once()
3723 self._atexit_once()
3700
3724
3701 # Cleanup all tempfiles and folders left around
3725 # Cleanup all tempfiles and folders left around
3702 for tfile in self.tempfiles:
3726 for tfile in self.tempfiles:
3703 try:
3727 try:
3704 tfile.unlink()
3728 tfile.unlink()
3705 self.tempfiles.remove(tfile)
3729 self.tempfiles.remove(tfile)
3706 except FileNotFoundError:
3730 except FileNotFoundError:
3707 pass
3731 pass
3708 del self.tempfiles
3732 del self.tempfiles
3709 for tdir in self.tempdirs:
3733 for tdir in self.tempdirs:
3710 try:
3734 try:
3711 tdir.rmdir()
3735 tdir.rmdir()
3712 self.tempdirs.remove(tdir)
3736 self.tempdirs.remove(tdir)
3713 except FileNotFoundError:
3737 except FileNotFoundError:
3714 pass
3738 pass
3715 del self.tempdirs
3739 del self.tempdirs
3716
3740
3717 # Restore user's cursor
3741 # Restore user's cursor
3718 if hasattr(self, "editing_mode") and self.editing_mode == "vi":
3742 if hasattr(self, "editing_mode") and self.editing_mode == "vi":
3719 sys.stdout.write("\x1b[0 q")
3743 sys.stdout.write("\x1b[0 q")
3720 sys.stdout.flush()
3744 sys.stdout.flush()
3721
3745
3722 def cleanup(self):
3746 def cleanup(self):
3723 self.restore_sys_module_state()
3747 self.restore_sys_module_state()
3724
3748
3725
3749
3726 # Overridden in terminal subclass to change prompts
3750 # Overridden in terminal subclass to change prompts
3727 def switch_doctest_mode(self, mode):
3751 def switch_doctest_mode(self, mode):
3728 pass
3752 pass
3729
3753
3730
3754
3731 class InteractiveShellABC(metaclass=abc.ABCMeta):
3755 class InteractiveShellABC(metaclass=abc.ABCMeta):
3732 """An abstract base class for InteractiveShell."""
3756 """An abstract base class for InteractiveShell."""
3733
3757
3734 InteractiveShellABC.register(InteractiveShell)
3758 InteractiveShellABC.register(InteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now