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