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