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