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