##// END OF EJS Templates
fix test
Matthias Bussonnier -
Show More
@@ -1,3240 +1,3241 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_py2, 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=sys.stderr)
1700 print("Custom TB Handler failed, unregistering", file=sys.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))
1703 print(self.InteractiveTB.stb2text(stb))
1704 print("The original exception:")
1704 print("The original exception:")
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 print("UsageError: %s" % exc, file=sys.stderr)
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 print('No traceback available to show.', file=sys.stderr)
1802 print('No traceback available to show.', file=sys.stderr)
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 print('\n' + self.get_exception_only(), file=sys.stderr)
1837 print('\n' + self.get_exception_only(), file=sys.stderr)
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))
1845 print(self.InteractiveTB.stb2text(stb))
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 @skip_doctest_py2
1942 def complete(self, text, line=None, cursor_pos=None):
1943 def complete(self, text, line=None, cursor_pos=None):
1943 """Return the completed text and a list of completions.
1944 """Return the completed text and a list of completions.
1944
1945
1945 Parameters
1946 Parameters
1946 ----------
1947 ----------
1947
1948
1948 text : string
1949 text : string
1949 A string of text to be completed on. It can be given as empty and
1950 A string of text to be completed on. It can be given as empty and
1950 instead a line/position pair are given. In this case, the
1951 instead a line/position pair are given. In this case, the
1951 completer itself will split the line like readline does.
1952 completer itself will split the line like readline does.
1952
1953
1953 line : string, optional
1954 line : string, optional
1954 The complete line that text is part of.
1955 The complete line that text is part of.
1955
1956
1956 cursor_pos : int, optional
1957 cursor_pos : int, optional
1957 The position of the cursor on the input line.
1958 The position of the cursor on the input line.
1958
1959
1959 Returns
1960 Returns
1960 -------
1961 -------
1961 text : string
1962 text : string
1962 The actual text that was completed.
1963 The actual text that was completed.
1963
1964
1964 matches : list
1965 matches : list
1965 A sorted list with all possible completions.
1966 A sorted list with all possible completions.
1966
1967
1967 The optional arguments allow the completion to take more context into
1968 The optional arguments allow the completion to take more context into
1968 account, and are part of the low-level completion API.
1969 account, and are part of the low-level completion API.
1969
1970
1970 This is a wrapper around the completion mechanism, similar to what
1971 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
1972 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
1973 exposing it as a method, it can be used by other non-readline
1973 environments (such as GUIs) for text completion.
1974 environments (such as GUIs) for text completion.
1974
1975
1975 Simple usage example:
1976 Simple usage example:
1976
1977
1977 In [1]: x = 'hello'
1978 In [1]: x = 'hello'
1978
1979
1979 In [2]: _ip.complete('x.l')
1980 In [2]: _ip.complete('x.l')
1980 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1981 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1981 """
1982 """
1982
1983
1983 # Inject names into __builtin__ so we can complete on the added names.
1984 # Inject names into __builtin__ so we can complete on the added names.
1984 with self.builtin_trap:
1985 with self.builtin_trap:
1985 return self.Completer.complete(text, line, cursor_pos)
1986 return self.Completer.complete(text, line, cursor_pos)
1986
1987
1987 def set_custom_completer(self, completer, pos=0):
1988 def set_custom_completer(self, completer, pos=0):
1988 """Adds a new custom completer function.
1989 """Adds a new custom completer function.
1989
1990
1990 The position argument (defaults to 0) is the index in the completers
1991 The position argument (defaults to 0) is the index in the completers
1991 list where you want the completer to be inserted."""
1992 list where you want the completer to be inserted."""
1992
1993
1993 newcomp = types.MethodType(completer,self.Completer)
1994 newcomp = types.MethodType(completer,self.Completer)
1994 self.Completer.matchers.insert(pos,newcomp)
1995 self.Completer.matchers.insert(pos,newcomp)
1995
1996
1996 def set_completer_frame(self, frame=None):
1997 def set_completer_frame(self, frame=None):
1997 """Set the frame of the completer."""
1998 """Set the frame of the completer."""
1998 if frame:
1999 if frame:
1999 self.Completer.namespace = frame.f_locals
2000 self.Completer.namespace = frame.f_locals
2000 self.Completer.global_namespace = frame.f_globals
2001 self.Completer.global_namespace = frame.f_globals
2001 else:
2002 else:
2002 self.Completer.namespace = self.user_ns
2003 self.Completer.namespace = self.user_ns
2003 self.Completer.global_namespace = self.user_global_ns
2004 self.Completer.global_namespace = self.user_global_ns
2004
2005
2005 #-------------------------------------------------------------------------
2006 #-------------------------------------------------------------------------
2006 # Things related to magics
2007 # Things related to magics
2007 #-------------------------------------------------------------------------
2008 #-------------------------------------------------------------------------
2008
2009
2009 def init_magics(self):
2010 def init_magics(self):
2010 from IPython.core import magics as m
2011 from IPython.core import magics as m
2011 self.magics_manager = magic.MagicsManager(shell=self,
2012 self.magics_manager = magic.MagicsManager(shell=self,
2012 parent=self,
2013 parent=self,
2013 user_magics=m.UserMagics(self))
2014 user_magics=m.UserMagics(self))
2014 self.configurables.append(self.magics_manager)
2015 self.configurables.append(self.magics_manager)
2015
2016
2016 # Expose as public API from the magics manager
2017 # Expose as public API from the magics manager
2017 self.register_magics = self.magics_manager.register
2018 self.register_magics = self.magics_manager.register
2018 self.define_magic = self.magics_manager.define_magic
2019 self.define_magic = self.magics_manager.define_magic
2019
2020
2020 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2021 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2021 m.ConfigMagics, m.DeprecatedMagics, m.DisplayMagics, m.ExecutionMagics,
2022 m.ConfigMagics, m.DeprecatedMagics, m.DisplayMagics, m.ExecutionMagics,
2022 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2023 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2023 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2024 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2024 )
2025 )
2025
2026
2026 # Register Magic Aliases
2027 # Register Magic Aliases
2027 mman = self.magics_manager
2028 mman = self.magics_manager
2028 # FIXME: magic aliases should be defined by the Magics classes
2029 # FIXME: magic aliases should be defined by the Magics classes
2029 # or in MagicsManager, not here
2030 # or in MagicsManager, not here
2030 mman.register_alias('ed', 'edit')
2031 mman.register_alias('ed', 'edit')
2031 mman.register_alias('hist', 'history')
2032 mman.register_alias('hist', 'history')
2032 mman.register_alias('rep', 'recall')
2033 mman.register_alias('rep', 'recall')
2033 mman.register_alias('SVG', 'svg', 'cell')
2034 mman.register_alias('SVG', 'svg', 'cell')
2034 mman.register_alias('HTML', 'html', 'cell')
2035 mman.register_alias('HTML', 'html', 'cell')
2035 mman.register_alias('file', 'writefile', 'cell')
2036 mman.register_alias('file', 'writefile', 'cell')
2036
2037
2037 # FIXME: Move the color initialization to the DisplayHook, which
2038 # FIXME: Move the color initialization to the DisplayHook, which
2038 # should be split into a prompt manager and displayhook. We probably
2039 # should be split into a prompt manager and displayhook. We probably
2039 # even need a centralize colors management object.
2040 # even need a centralize colors management object.
2040 self.magic('colors %s' % self.colors)
2041 self.magic('colors %s' % self.colors)
2041
2042
2042 # Defined here so that it's included in the documentation
2043 # Defined here so that it's included in the documentation
2043 @functools.wraps(magic.MagicsManager.register_function)
2044 @functools.wraps(magic.MagicsManager.register_function)
2044 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2045 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2045 self.magics_manager.register_function(func,
2046 self.magics_manager.register_function(func,
2046 magic_kind=magic_kind, magic_name=magic_name)
2047 magic_kind=magic_kind, magic_name=magic_name)
2047
2048
2048 def run_line_magic(self, magic_name, line):
2049 def run_line_magic(self, magic_name, line):
2049 """Execute the given line magic.
2050 """Execute the given line magic.
2050
2051
2051 Parameters
2052 Parameters
2052 ----------
2053 ----------
2053 magic_name : str
2054 magic_name : str
2054 Name of the desired magic function, without '%' prefix.
2055 Name of the desired magic function, without '%' prefix.
2055
2056
2056 line : str
2057 line : str
2057 The rest of the input line as a single string.
2058 The rest of the input line as a single string.
2058 """
2059 """
2059 fn = self.find_line_magic(magic_name)
2060 fn = self.find_line_magic(magic_name)
2060 if fn is None:
2061 if fn is None:
2061 cm = self.find_cell_magic(magic_name)
2062 cm = self.find_cell_magic(magic_name)
2062 etpl = "Line magic function `%%%s` not found%s."
2063 etpl = "Line magic function `%%%s` not found%s."
2063 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2064 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2064 'did you mean that instead?)' % magic_name )
2065 'did you mean that instead?)' % magic_name )
2065 error(etpl % (magic_name, extra))
2066 error(etpl % (magic_name, extra))
2066 else:
2067 else:
2067 # Note: this is the distance in the stack to the user's frame.
2068 # 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
2069 # This will need to be updated if the internal calling logic gets
2069 # refactored, or else we'll be expanding the wrong variables.
2070 # refactored, or else we'll be expanding the wrong variables.
2070 stack_depth = 2
2071 stack_depth = 2
2071 magic_arg_s = self.var_expand(line, stack_depth)
2072 magic_arg_s = self.var_expand(line, stack_depth)
2072 # Put magic args in a list so we can call with f(*a) syntax
2073 # Put magic args in a list so we can call with f(*a) syntax
2073 args = [magic_arg_s]
2074 args = [magic_arg_s]
2074 kwargs = {}
2075 kwargs = {}
2075 # Grab local namespace if we need it:
2076 # Grab local namespace if we need it:
2076 if getattr(fn, "needs_local_scope", False):
2077 if getattr(fn, "needs_local_scope", False):
2077 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2078 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2078 with self.builtin_trap:
2079 with self.builtin_trap:
2079 result = fn(*args,**kwargs)
2080 result = fn(*args,**kwargs)
2080 return result
2081 return result
2081
2082
2082 def run_cell_magic(self, magic_name, line, cell):
2083 def run_cell_magic(self, magic_name, line, cell):
2083 """Execute the given cell magic.
2084 """Execute the given cell magic.
2084
2085
2085 Parameters
2086 Parameters
2086 ----------
2087 ----------
2087 magic_name : str
2088 magic_name : str
2088 Name of the desired magic function, without '%' prefix.
2089 Name of the desired magic function, without '%' prefix.
2089
2090
2090 line : str
2091 line : str
2091 The rest of the first input line as a single string.
2092 The rest of the first input line as a single string.
2092
2093
2093 cell : str
2094 cell : str
2094 The body of the cell as a (possibly multiline) string.
2095 The body of the cell as a (possibly multiline) string.
2095 """
2096 """
2096 fn = self.find_cell_magic(magic_name)
2097 fn = self.find_cell_magic(magic_name)
2097 if fn is None:
2098 if fn is None:
2098 lm = self.find_line_magic(magic_name)
2099 lm = self.find_line_magic(magic_name)
2099 etpl = "Cell magic `%%{0}` not found{1}."
2100 etpl = "Cell magic `%%{0}` not found{1}."
2100 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2101 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2101 'did you mean that instead?)'.format(magic_name))
2102 'did you mean that instead?)'.format(magic_name))
2102 error(etpl.format(magic_name, extra))
2103 error(etpl.format(magic_name, extra))
2103 elif cell == '':
2104 elif cell == '':
2104 message = '%%{0} is a cell magic, but the cell body is empty.'.format(magic_name)
2105 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:
2106 if self.find_line_magic(magic_name) is not None:
2106 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2107 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2107 raise UsageError(message)
2108 raise UsageError(message)
2108 else:
2109 else:
2109 # Note: this is the distance in the stack to the user's frame.
2110 # 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
2111 # This will need to be updated if the internal calling logic gets
2111 # refactored, or else we'll be expanding the wrong variables.
2112 # refactored, or else we'll be expanding the wrong variables.
2112 stack_depth = 2
2113 stack_depth = 2
2113 magic_arg_s = self.var_expand(line, stack_depth)
2114 magic_arg_s = self.var_expand(line, stack_depth)
2114 with self.builtin_trap:
2115 with self.builtin_trap:
2115 result = fn(magic_arg_s, cell)
2116 result = fn(magic_arg_s, cell)
2116 return result
2117 return result
2117
2118
2118 def find_line_magic(self, magic_name):
2119 def find_line_magic(self, magic_name):
2119 """Find and return a line magic by name.
2120 """Find and return a line magic by name.
2120
2121
2121 Returns None if the magic isn't found."""
2122 Returns None if the magic isn't found."""
2122 return self.magics_manager.magics['line'].get(magic_name)
2123 return self.magics_manager.magics['line'].get(magic_name)
2123
2124
2124 def find_cell_magic(self, magic_name):
2125 def find_cell_magic(self, magic_name):
2125 """Find and return a cell magic by name.
2126 """Find and return a cell magic by name.
2126
2127
2127 Returns None if the magic isn't found."""
2128 Returns None if the magic isn't found."""
2128 return self.magics_manager.magics['cell'].get(magic_name)
2129 return self.magics_manager.magics['cell'].get(magic_name)
2129
2130
2130 def find_magic(self, magic_name, magic_kind='line'):
2131 def find_magic(self, magic_name, magic_kind='line'):
2131 """Find and return a magic of the given type by name.
2132 """Find and return a magic of the given type by name.
2132
2133
2133 Returns None if the magic isn't found."""
2134 Returns None if the magic isn't found."""
2134 return self.magics_manager.magics[magic_kind].get(magic_name)
2135 return self.magics_manager.magics[magic_kind].get(magic_name)
2135
2136
2136 def magic(self, arg_s):
2137 def magic(self, arg_s):
2137 """DEPRECATED. Use run_line_magic() instead.
2138 """DEPRECATED. Use run_line_magic() instead.
2138
2139
2139 Call a magic function by name.
2140 Call a magic function by name.
2140
2141
2141 Input: a string containing the name of the magic function to call and
2142 Input: a string containing the name of the magic function to call and
2142 any additional arguments to be passed to the magic.
2143 any additional arguments to be passed to the magic.
2143
2144
2144 magic('name -opt foo bar') is equivalent to typing at the ipython
2145 magic('name -opt foo bar') is equivalent to typing at the ipython
2145 prompt:
2146 prompt:
2146
2147
2147 In[1]: %name -opt foo bar
2148 In[1]: %name -opt foo bar
2148
2149
2149 To call a magic without arguments, simply use magic('name').
2150 To call a magic without arguments, simply use magic('name').
2150
2151
2151 This provides a proper Python function to call IPython's magics in any
2152 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
2153 valid Python code you can type at the interpreter, including loops and
2153 compound statements.
2154 compound statements.
2154 """
2155 """
2155 # TODO: should we issue a loud deprecation warning here?
2156 # TODO: should we issue a loud deprecation warning here?
2156 magic_name, _, magic_arg_s = arg_s.partition(' ')
2157 magic_name, _, magic_arg_s = arg_s.partition(' ')
2157 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2158 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2158 return self.run_line_magic(magic_name, magic_arg_s)
2159 return self.run_line_magic(magic_name, magic_arg_s)
2159
2160
2160 #-------------------------------------------------------------------------
2161 #-------------------------------------------------------------------------
2161 # Things related to macros
2162 # Things related to macros
2162 #-------------------------------------------------------------------------
2163 #-------------------------------------------------------------------------
2163
2164
2164 def define_macro(self, name, themacro):
2165 def define_macro(self, name, themacro):
2165 """Define a new macro
2166 """Define a new macro
2166
2167
2167 Parameters
2168 Parameters
2168 ----------
2169 ----------
2169 name : str
2170 name : str
2170 The name of the macro.
2171 The name of the macro.
2171 themacro : str or Macro
2172 themacro : str or Macro
2172 The action to do upon invoking the macro. If a string, a new
2173 The action to do upon invoking the macro. If a string, a new
2173 Macro object is created by passing the string to it.
2174 Macro object is created by passing the string to it.
2174 """
2175 """
2175
2176
2176 from IPython.core import macro
2177 from IPython.core import macro
2177
2178
2178 if isinstance(themacro, string_types):
2179 if isinstance(themacro, string_types):
2179 themacro = macro.Macro(themacro)
2180 themacro = macro.Macro(themacro)
2180 if not isinstance(themacro, macro.Macro):
2181 if not isinstance(themacro, macro.Macro):
2181 raise ValueError('A macro must be a string or a Macro instance.')
2182 raise ValueError('A macro must be a string or a Macro instance.')
2182 self.user_ns[name] = themacro
2183 self.user_ns[name] = themacro
2183
2184
2184 #-------------------------------------------------------------------------
2185 #-------------------------------------------------------------------------
2185 # Things related to the running of system commands
2186 # Things related to the running of system commands
2186 #-------------------------------------------------------------------------
2187 #-------------------------------------------------------------------------
2187
2188
2188 def system_piped(self, cmd):
2189 def system_piped(self, cmd):
2189 """Call the given cmd in a subprocess, piping stdout/err
2190 """Call the given cmd in a subprocess, piping stdout/err
2190
2191
2191 Parameters
2192 Parameters
2192 ----------
2193 ----------
2193 cmd : str
2194 cmd : str
2194 Command to execute (can not end in '&', as background processes are
2195 Command to execute (can not end in '&', as background processes are
2195 not supported. Should not be a command that expects input
2196 not supported. Should not be a command that expects input
2196 other than simple text.
2197 other than simple text.
2197 """
2198 """
2198 if cmd.rstrip().endswith('&'):
2199 if cmd.rstrip().endswith('&'):
2199 # this is *far* from a rigorous test
2200 # this is *far* from a rigorous test
2200 # We do not support backgrounding processes because we either use
2201 # We do not support backgrounding processes because we either use
2201 # pexpect or pipes to read from. Users can always just call
2202 # pexpect or pipes to read from. Users can always just call
2202 # os.system() or use ip.system=ip.system_raw
2203 # os.system() or use ip.system=ip.system_raw
2203 # if they really want a background process.
2204 # if they really want a background process.
2204 raise OSError("Background processes not supported.")
2205 raise OSError("Background processes not supported.")
2205
2206
2206 # we explicitly do NOT return the subprocess status code, because
2207 # we explicitly do NOT return the subprocess status code, because
2207 # a non-None value would trigger :func:`sys.displayhook` calls.
2208 # a non-None value would trigger :func:`sys.displayhook` calls.
2208 # Instead, we store the exit_code in user_ns.
2209 # Instead, we store the exit_code in user_ns.
2209 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2210 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2210
2211
2211 def system_raw(self, cmd):
2212 def system_raw(self, cmd):
2212 """Call the given cmd in a subprocess using os.system on Windows or
2213 """Call the given cmd in a subprocess using os.system on Windows or
2213 subprocess.call using the system shell on other platforms.
2214 subprocess.call using the system shell on other platforms.
2214
2215
2215 Parameters
2216 Parameters
2216 ----------
2217 ----------
2217 cmd : str
2218 cmd : str
2218 Command to execute.
2219 Command to execute.
2219 """
2220 """
2220 cmd = self.var_expand(cmd, depth=1)
2221 cmd = self.var_expand(cmd, depth=1)
2221 # protect os.system from UNC paths on Windows, which it can't handle:
2222 # protect os.system from UNC paths on Windows, which it can't handle:
2222 if sys.platform == 'win32':
2223 if sys.platform == 'win32':
2223 from IPython.utils._process_win32 import AvoidUNCPath
2224 from IPython.utils._process_win32 import AvoidUNCPath
2224 with AvoidUNCPath() as path:
2225 with AvoidUNCPath() as path:
2225 if path is not None:
2226 if path is not None:
2226 cmd = '"pushd %s &&"%s' % (path, cmd)
2227 cmd = '"pushd %s &&"%s' % (path, cmd)
2227 cmd = py3compat.unicode_to_str(cmd)
2228 cmd = py3compat.unicode_to_str(cmd)
2228 try:
2229 try:
2229 ec = os.system(cmd)
2230 ec = os.system(cmd)
2230 except KeyboardInterrupt:
2231 except KeyboardInterrupt:
2231 print('\n' + self.get_exception_only(), file=sys.stderr)
2232 print('\n' + self.get_exception_only(), file=sys.stderr)
2232 ec = -2
2233 ec = -2
2233 else:
2234 else:
2234 cmd = py3compat.unicode_to_str(cmd)
2235 cmd = py3compat.unicode_to_str(cmd)
2235 # For posix the result of the subprocess.call() below is an exit
2236 # For posix the result of the subprocess.call() below is an exit
2236 # code, which by convention is zero for success, positive for
2237 # code, which by convention is zero for success, positive for
2237 # program failure. Exit codes above 128 are reserved for signals,
2238 # program failure. Exit codes above 128 are reserved for signals,
2238 # and the formula for converting a signal to an exit code is usually
2239 # and the formula for converting a signal to an exit code is usually
2239 # signal_number+128. To more easily differentiate between exit
2240 # signal_number+128. To more easily differentiate between exit
2240 # codes and signals, ipython uses negative numbers. For instance
2241 # codes and signals, ipython uses negative numbers. For instance
2241 # since control-c is signal 2 but exit code 130, ipython's
2242 # since control-c is signal 2 but exit code 130, ipython's
2242 # _exit_code variable will read -2. Note that some shells like
2243 # _exit_code variable will read -2. Note that some shells like
2243 # csh and fish don't follow sh/bash conventions for exit codes.
2244 # csh and fish don't follow sh/bash conventions for exit codes.
2244 executable = os.environ.get('SHELL', None)
2245 executable = os.environ.get('SHELL', None)
2245 try:
2246 try:
2246 # Use env shell instead of default /bin/sh
2247 # Use env shell instead of default /bin/sh
2247 ec = subprocess.call(cmd, shell=True, executable=executable)
2248 ec = subprocess.call(cmd, shell=True, executable=executable)
2248 except KeyboardInterrupt:
2249 except KeyboardInterrupt:
2249 # intercept control-C; a long traceback is not useful here
2250 # intercept control-C; a long traceback is not useful here
2250 print('\n' + self.get_exception_only(), file=sys.stderr)
2251 print('\n' + self.get_exception_only(), file=sys.stderr)
2251 ec = 130
2252 ec = 130
2252 if ec > 128:
2253 if ec > 128:
2253 ec = -(ec - 128)
2254 ec = -(ec - 128)
2254
2255
2255 # We explicitly do NOT return the subprocess status code, because
2256 # We explicitly do NOT return the subprocess status code, because
2256 # a non-None value would trigger :func:`sys.displayhook` calls.
2257 # a non-None value would trigger :func:`sys.displayhook` calls.
2257 # Instead, we store the exit_code in user_ns. Note the semantics
2258 # Instead, we store the exit_code in user_ns. Note the semantics
2258 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2259 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2259 # but raising SystemExit(_exit_code) will give status 254!
2260 # but raising SystemExit(_exit_code) will give status 254!
2260 self.user_ns['_exit_code'] = ec
2261 self.user_ns['_exit_code'] = ec
2261
2262
2262 # use piped system by default, because it is better behaved
2263 # use piped system by default, because it is better behaved
2263 system = system_piped
2264 system = system_piped
2264
2265
2265 def getoutput(self, cmd, split=True, depth=0):
2266 def getoutput(self, cmd, split=True, depth=0):
2266 """Get output (possibly including stderr) from a subprocess.
2267 """Get output (possibly including stderr) from a subprocess.
2267
2268
2268 Parameters
2269 Parameters
2269 ----------
2270 ----------
2270 cmd : str
2271 cmd : str
2271 Command to execute (can not end in '&', as background processes are
2272 Command to execute (can not end in '&', as background processes are
2272 not supported.
2273 not supported.
2273 split : bool, optional
2274 split : bool, optional
2274 If True, split the output into an IPython SList. Otherwise, an
2275 If True, split the output into an IPython SList. Otherwise, an
2275 IPython LSString is returned. These are objects similar to normal
2276 IPython LSString is returned. These are objects similar to normal
2276 lists and strings, with a few convenience attributes for easier
2277 lists and strings, with a few convenience attributes for easier
2277 manipulation of line-based output. You can use '?' on them for
2278 manipulation of line-based output. You can use '?' on them for
2278 details.
2279 details.
2279 depth : int, optional
2280 depth : int, optional
2280 How many frames above the caller are the local variables which should
2281 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
2282 be expanded in the command string? The default (0) assumes that the
2282 expansion variables are in the stack frame calling this function.
2283 expansion variables are in the stack frame calling this function.
2283 """
2284 """
2284 if cmd.rstrip().endswith('&'):
2285 if cmd.rstrip().endswith('&'):
2285 # this is *far* from a rigorous test
2286 # this is *far* from a rigorous test
2286 raise OSError("Background processes not supported.")
2287 raise OSError("Background processes not supported.")
2287 out = getoutput(self.var_expand(cmd, depth=depth+1))
2288 out = getoutput(self.var_expand(cmd, depth=depth+1))
2288 if split:
2289 if split:
2289 out = SList(out.splitlines())
2290 out = SList(out.splitlines())
2290 else:
2291 else:
2291 out = LSString(out)
2292 out = LSString(out)
2292 return out
2293 return out
2293
2294
2294 #-------------------------------------------------------------------------
2295 #-------------------------------------------------------------------------
2295 # Things related to aliases
2296 # Things related to aliases
2296 #-------------------------------------------------------------------------
2297 #-------------------------------------------------------------------------
2297
2298
2298 def init_alias(self):
2299 def init_alias(self):
2299 self.alias_manager = AliasManager(shell=self, parent=self)
2300 self.alias_manager = AliasManager(shell=self, parent=self)
2300 self.configurables.append(self.alias_manager)
2301 self.configurables.append(self.alias_manager)
2301
2302
2302 #-------------------------------------------------------------------------
2303 #-------------------------------------------------------------------------
2303 # Things related to extensions
2304 # Things related to extensions
2304 #-------------------------------------------------------------------------
2305 #-------------------------------------------------------------------------
2305
2306
2306 def init_extension_manager(self):
2307 def init_extension_manager(self):
2307 self.extension_manager = ExtensionManager(shell=self, parent=self)
2308 self.extension_manager = ExtensionManager(shell=self, parent=self)
2308 self.configurables.append(self.extension_manager)
2309 self.configurables.append(self.extension_manager)
2309
2310
2310 #-------------------------------------------------------------------------
2311 #-------------------------------------------------------------------------
2311 # Things related to payloads
2312 # Things related to payloads
2312 #-------------------------------------------------------------------------
2313 #-------------------------------------------------------------------------
2313
2314
2314 def init_payload(self):
2315 def init_payload(self):
2315 self.payload_manager = PayloadManager(parent=self)
2316 self.payload_manager = PayloadManager(parent=self)
2316 self.configurables.append(self.payload_manager)
2317 self.configurables.append(self.payload_manager)
2317
2318
2318 #-------------------------------------------------------------------------
2319 #-------------------------------------------------------------------------
2319 # Things related to the prefilter
2320 # Things related to the prefilter
2320 #-------------------------------------------------------------------------
2321 #-------------------------------------------------------------------------
2321
2322
2322 def init_prefilter(self):
2323 def init_prefilter(self):
2323 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2324 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2324 self.configurables.append(self.prefilter_manager)
2325 self.configurables.append(self.prefilter_manager)
2325 # Ultimately this will be refactored in the new interpreter code, but
2326 # Ultimately this will be refactored in the new interpreter code, but
2326 # for now, we should expose the main prefilter method (there's legacy
2327 # for now, we should expose the main prefilter method (there's legacy
2327 # code out there that may rely on this).
2328 # code out there that may rely on this).
2328 self.prefilter = self.prefilter_manager.prefilter_lines
2329 self.prefilter = self.prefilter_manager.prefilter_lines
2329
2330
2330 def auto_rewrite_input(self, cmd):
2331 def auto_rewrite_input(self, cmd):
2331 """Print to the screen the rewritten form of the user's command.
2332 """Print to the screen the rewritten form of the user's command.
2332
2333
2333 This shows visual feedback by rewriting input lines that cause
2334 This shows visual feedback by rewriting input lines that cause
2334 automatic calling to kick in, like::
2335 automatic calling to kick in, like::
2335
2336
2336 /f x
2337 /f x
2337
2338
2338 into::
2339 into::
2339
2340
2340 ------> f(x)
2341 ------> f(x)
2341
2342
2342 after the user's input prompt. This helps the user understand that the
2343 after the user's input prompt. This helps the user understand that the
2343 input line was transformed automatically by IPython.
2344 input line was transformed automatically by IPython.
2344 """
2345 """
2345 if not self.show_rewritten_input:
2346 if not self.show_rewritten_input:
2346 return
2347 return
2347
2348
2348 rw = self.prompt_manager.render('rewrite') + cmd
2349 rw = self.prompt_manager.render('rewrite') + cmd
2349
2350
2350 try:
2351 try:
2351 # plain ascii works better w/ pyreadline, on some machines, so
2352 # plain ascii works better w/ pyreadline, on some machines, so
2352 # we use it and only print uncolored rewrite if we have unicode
2353 # we use it and only print uncolored rewrite if we have unicode
2353 rw = str(rw)
2354 rw = str(rw)
2354 print(rw)
2355 print(rw)
2355 except UnicodeEncodeError:
2356 except UnicodeEncodeError:
2356 print("------> " + cmd)
2357 print("------> " + cmd)
2357
2358
2358 #-------------------------------------------------------------------------
2359 #-------------------------------------------------------------------------
2359 # Things related to extracting values/expressions from kernel and user_ns
2360 # Things related to extracting values/expressions from kernel and user_ns
2360 #-------------------------------------------------------------------------
2361 #-------------------------------------------------------------------------
2361
2362
2362 def _user_obj_error(self):
2363 def _user_obj_error(self):
2363 """return simple exception dict
2364 """return simple exception dict
2364
2365
2365 for use in user_expressions
2366 for use in user_expressions
2366 """
2367 """
2367
2368
2368 etype, evalue, tb = self._get_exc_info()
2369 etype, evalue, tb = self._get_exc_info()
2369 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2370 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2370
2371
2371 exc_info = {
2372 exc_info = {
2372 u'status' : 'error',
2373 u'status' : 'error',
2373 u'traceback' : stb,
2374 u'traceback' : stb,
2374 u'ename' : unicode_type(etype.__name__),
2375 u'ename' : unicode_type(etype.__name__),
2375 u'evalue' : py3compat.safe_unicode(evalue),
2376 u'evalue' : py3compat.safe_unicode(evalue),
2376 }
2377 }
2377
2378
2378 return exc_info
2379 return exc_info
2379
2380
2380 def _format_user_obj(self, obj):
2381 def _format_user_obj(self, obj):
2381 """format a user object to display dict
2382 """format a user object to display dict
2382
2383
2383 for use in user_expressions
2384 for use in user_expressions
2384 """
2385 """
2385
2386
2386 data, md = self.display_formatter.format(obj)
2387 data, md = self.display_formatter.format(obj)
2387 value = {
2388 value = {
2388 'status' : 'ok',
2389 'status' : 'ok',
2389 'data' : data,
2390 'data' : data,
2390 'metadata' : md,
2391 'metadata' : md,
2391 }
2392 }
2392 return value
2393 return value
2393
2394
2394 def user_expressions(self, expressions):
2395 def user_expressions(self, expressions):
2395 """Evaluate a dict of expressions in the user's namespace.
2396 """Evaluate a dict of expressions in the user's namespace.
2396
2397
2397 Parameters
2398 Parameters
2398 ----------
2399 ----------
2399 expressions : dict
2400 expressions : dict
2400 A dict with string keys and string values. The expression values
2401 A dict with string keys and string values. The expression values
2401 should be valid Python expressions, each of which will be evaluated
2402 should be valid Python expressions, each of which will be evaluated
2402 in the user namespace.
2403 in the user namespace.
2403
2404
2404 Returns
2405 Returns
2405 -------
2406 -------
2406 A dict, keyed like the input expressions dict, with the rich mime-typed
2407 A dict, keyed like the input expressions dict, with the rich mime-typed
2407 display_data of each value.
2408 display_data of each value.
2408 """
2409 """
2409 out = {}
2410 out = {}
2410 user_ns = self.user_ns
2411 user_ns = self.user_ns
2411 global_ns = self.user_global_ns
2412 global_ns = self.user_global_ns
2412
2413
2413 for key, expr in iteritems(expressions):
2414 for key, expr in iteritems(expressions):
2414 try:
2415 try:
2415 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2416 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2416 except:
2417 except:
2417 value = self._user_obj_error()
2418 value = self._user_obj_error()
2418 out[key] = value
2419 out[key] = value
2419 return out
2420 return out
2420
2421
2421 #-------------------------------------------------------------------------
2422 #-------------------------------------------------------------------------
2422 # Things related to the running of code
2423 # Things related to the running of code
2423 #-------------------------------------------------------------------------
2424 #-------------------------------------------------------------------------
2424
2425
2425 def ex(self, cmd):
2426 def ex(self, cmd):
2426 """Execute a normal python statement in user namespace."""
2427 """Execute a normal python statement in user namespace."""
2427 with self.builtin_trap:
2428 with self.builtin_trap:
2428 exec(cmd, self.user_global_ns, self.user_ns)
2429 exec(cmd, self.user_global_ns, self.user_ns)
2429
2430
2430 def ev(self, expr):
2431 def ev(self, expr):
2431 """Evaluate python expression expr in user namespace.
2432 """Evaluate python expression expr in user namespace.
2432
2433
2433 Returns the result of evaluation
2434 Returns the result of evaluation
2434 """
2435 """
2435 with self.builtin_trap:
2436 with self.builtin_trap:
2436 return eval(expr, self.user_global_ns, self.user_ns)
2437 return eval(expr, self.user_global_ns, self.user_ns)
2437
2438
2438 def safe_execfile(self, fname, *where, **kw):
2439 def safe_execfile(self, fname, *where, **kw):
2439 """A safe version of the builtin execfile().
2440 """A safe version of the builtin execfile().
2440
2441
2441 This version will never throw an exception, but instead print
2442 This version will never throw an exception, but instead print
2442 helpful error messages to the screen. This only works on pure
2443 helpful error messages to the screen. This only works on pure
2443 Python files with the .py extension.
2444 Python files with the .py extension.
2444
2445
2445 Parameters
2446 Parameters
2446 ----------
2447 ----------
2447 fname : string
2448 fname : string
2448 The name of the file to be executed.
2449 The name of the file to be executed.
2449 where : tuple
2450 where : tuple
2450 One or two namespaces, passed to execfile() as (globals,locals).
2451 One or two namespaces, passed to execfile() as (globals,locals).
2451 If only one is given, it is passed as both.
2452 If only one is given, it is passed as both.
2452 exit_ignore : bool (False)
2453 exit_ignore : bool (False)
2453 If True, then silence SystemExit for non-zero status (it is always
2454 If True, then silence SystemExit for non-zero status (it is always
2454 silenced for zero status, as it is so common).
2455 silenced for zero status, as it is so common).
2455 raise_exceptions : bool (False)
2456 raise_exceptions : bool (False)
2456 If True raise exceptions everywhere. Meant for testing.
2457 If True raise exceptions everywhere. Meant for testing.
2457 shell_futures : bool (False)
2458 shell_futures : bool (False)
2458 If True, the code will share future statements with the interactive
2459 If True, the code will share future statements with the interactive
2459 shell. It will both be affected by previous __future__ imports, and
2460 shell. It will both be affected by previous __future__ imports, and
2460 any __future__ imports in the code will affect the shell. If False,
2461 any __future__ imports in the code will affect the shell. If False,
2461 __future__ imports are not shared in either direction.
2462 __future__ imports are not shared in either direction.
2462
2463
2463 """
2464 """
2464 kw.setdefault('exit_ignore', False)
2465 kw.setdefault('exit_ignore', False)
2465 kw.setdefault('raise_exceptions', False)
2466 kw.setdefault('raise_exceptions', False)
2466 kw.setdefault('shell_futures', False)
2467 kw.setdefault('shell_futures', False)
2467
2468
2468 fname = os.path.abspath(os.path.expanduser(fname))
2469 fname = os.path.abspath(os.path.expanduser(fname))
2469
2470
2470 # Make sure we can open the file
2471 # Make sure we can open the file
2471 try:
2472 try:
2472 with open(fname):
2473 with open(fname):
2473 pass
2474 pass
2474 except:
2475 except:
2475 warn('Could not open file <%s> for safe execution.' % fname)
2476 warn('Could not open file <%s> for safe execution.' % fname)
2476 return
2477 return
2477
2478
2478 # Find things also in current directory. This is needed to mimic the
2479 # Find things also in current directory. This is needed to mimic the
2479 # behavior of running a script from the system command line, where
2480 # behavior of running a script from the system command line, where
2480 # Python inserts the script's directory into sys.path
2481 # Python inserts the script's directory into sys.path
2481 dname = os.path.dirname(fname)
2482 dname = os.path.dirname(fname)
2482
2483
2483 with prepended_to_syspath(dname):
2484 with prepended_to_syspath(dname):
2484 try:
2485 try:
2485 glob, loc = (where + (None, ))[:2]
2486 glob, loc = (where + (None, ))[:2]
2486 py3compat.execfile(
2487 py3compat.execfile(
2487 fname, glob, loc,
2488 fname, glob, loc,
2488 self.compile if kw['shell_futures'] else None)
2489 self.compile if kw['shell_futures'] else None)
2489 except SystemExit as status:
2490 except SystemExit as status:
2490 # If the call was made with 0 or None exit status (sys.exit(0)
2491 # 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
2492 # or sys.exit() ), don't bother showing a traceback, as both of
2492 # these are considered normal by the OS:
2493 # these are considered normal by the OS:
2493 # > python -c'import sys;sys.exit(0)'; echo $?
2494 # > python -c'import sys;sys.exit(0)'; echo $?
2494 # 0
2495 # 0
2495 # > python -c'import sys;sys.exit()'; echo $?
2496 # > python -c'import sys;sys.exit()'; echo $?
2496 # 0
2497 # 0
2497 # For other exit status, we show the exception unless
2498 # For other exit status, we show the exception unless
2498 # explicitly silenced, but only in short form.
2499 # explicitly silenced, but only in short form.
2499 if status.code:
2500 if status.code:
2500 if kw['raise_exceptions']:
2501 if kw['raise_exceptions']:
2501 raise
2502 raise
2502 if not kw['exit_ignore']:
2503 if not kw['exit_ignore']:
2503 self.showtraceback(exception_only=True)
2504 self.showtraceback(exception_only=True)
2504 except:
2505 except:
2505 if kw['raise_exceptions']:
2506 if kw['raise_exceptions']:
2506 raise
2507 raise
2507 # tb offset is 2 because we wrap execfile
2508 # tb offset is 2 because we wrap execfile
2508 self.showtraceback(tb_offset=2)
2509 self.showtraceback(tb_offset=2)
2509
2510
2510 def safe_execfile_ipy(self, fname, shell_futures=False, raise_exceptions=False):
2511 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.
2512 """Like safe_execfile, but for .ipy or .ipynb files with IPython syntax.
2512
2513
2513 Parameters
2514 Parameters
2514 ----------
2515 ----------
2515 fname : str
2516 fname : str
2516 The name of the file to execute. The filename must have a
2517 The name of the file to execute. The filename must have a
2517 .ipy or .ipynb extension.
2518 .ipy or .ipynb extension.
2518 shell_futures : bool (False)
2519 shell_futures : bool (False)
2519 If True, the code will share future statements with the interactive
2520 If True, the code will share future statements with the interactive
2520 shell. It will both be affected by previous __future__ imports, and
2521 shell. It will both be affected by previous __future__ imports, and
2521 any __future__ imports in the code will affect the shell. If False,
2522 any __future__ imports in the code will affect the shell. If False,
2522 __future__ imports are not shared in either direction.
2523 __future__ imports are not shared in either direction.
2523 raise_exceptions : bool (False)
2524 raise_exceptions : bool (False)
2524 If True raise exceptions everywhere. Meant for testing.
2525 If True raise exceptions everywhere. Meant for testing.
2525 """
2526 """
2526 fname = os.path.abspath(os.path.expanduser(fname))
2527 fname = os.path.abspath(os.path.expanduser(fname))
2527
2528
2528 # Make sure we can open the file
2529 # Make sure we can open the file
2529 try:
2530 try:
2530 with open(fname):
2531 with open(fname):
2531 pass
2532 pass
2532 except:
2533 except:
2533 warn('Could not open file <%s> for safe execution.' % fname)
2534 warn('Could not open file <%s> for safe execution.' % fname)
2534 return
2535 return
2535
2536
2536 # Find things also in current directory. This is needed to mimic the
2537 # Find things also in current directory. This is needed to mimic the
2537 # behavior of running a script from the system command line, where
2538 # behavior of running a script from the system command line, where
2538 # Python inserts the script's directory into sys.path
2539 # Python inserts the script's directory into sys.path
2539 dname = os.path.dirname(fname)
2540 dname = os.path.dirname(fname)
2540
2541
2541 def get_cells():
2542 def get_cells():
2542 """generator for sequence of code blocks to run"""
2543 """generator for sequence of code blocks to run"""
2543 if fname.endswith('.ipynb'):
2544 if fname.endswith('.ipynb'):
2544 from nbformat import read
2545 from nbformat import read
2545 with io_open(fname) as f:
2546 with io_open(fname) as f:
2546 nb = read(f, as_version=4)
2547 nb = read(f, as_version=4)
2547 if not nb.cells:
2548 if not nb.cells:
2548 return
2549 return
2549 for cell in nb.cells:
2550 for cell in nb.cells:
2550 if cell.cell_type == 'code':
2551 if cell.cell_type == 'code':
2551 yield cell.source
2552 yield cell.source
2552 else:
2553 else:
2553 with open(fname) as f:
2554 with open(fname) as f:
2554 yield f.read()
2555 yield f.read()
2555
2556
2556 with prepended_to_syspath(dname):
2557 with prepended_to_syspath(dname):
2557 try:
2558 try:
2558 for cell in get_cells():
2559 for cell in get_cells():
2559 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2560 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2560 if raise_exceptions:
2561 if raise_exceptions:
2561 result.raise_error()
2562 result.raise_error()
2562 elif not result.success:
2563 elif not result.success:
2563 break
2564 break
2564 except:
2565 except:
2565 if raise_exceptions:
2566 if raise_exceptions:
2566 raise
2567 raise
2567 self.showtraceback()
2568 self.showtraceback()
2568 warn('Unknown failure executing file: <%s>' % fname)
2569 warn('Unknown failure executing file: <%s>' % fname)
2569
2570
2570 def safe_run_module(self, mod_name, where):
2571 def safe_run_module(self, mod_name, where):
2571 """A safe version of runpy.run_module().
2572 """A safe version of runpy.run_module().
2572
2573
2573 This version will never throw an exception, but instead print
2574 This version will never throw an exception, but instead print
2574 helpful error messages to the screen.
2575 helpful error messages to the screen.
2575
2576
2576 `SystemExit` exceptions with status code 0 or None are ignored.
2577 `SystemExit` exceptions with status code 0 or None are ignored.
2577
2578
2578 Parameters
2579 Parameters
2579 ----------
2580 ----------
2580 mod_name : string
2581 mod_name : string
2581 The name of the module to be executed.
2582 The name of the module to be executed.
2582 where : dict
2583 where : dict
2583 The globals namespace.
2584 The globals namespace.
2584 """
2585 """
2585 try:
2586 try:
2586 try:
2587 try:
2587 where.update(
2588 where.update(
2588 runpy.run_module(str(mod_name), run_name="__main__",
2589 runpy.run_module(str(mod_name), run_name="__main__",
2589 alter_sys=True)
2590 alter_sys=True)
2590 )
2591 )
2591 except SystemExit as status:
2592 except SystemExit as status:
2592 if status.code:
2593 if status.code:
2593 raise
2594 raise
2594 except:
2595 except:
2595 self.showtraceback()
2596 self.showtraceback()
2596 warn('Unknown failure executing module: <%s>' % mod_name)
2597 warn('Unknown failure executing module: <%s>' % mod_name)
2597
2598
2598 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2599 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2599 """Run a complete IPython cell.
2600 """Run a complete IPython cell.
2600
2601
2601 Parameters
2602 Parameters
2602 ----------
2603 ----------
2603 raw_cell : str
2604 raw_cell : str
2604 The code (including IPython code such as %magic functions) to run.
2605 The code (including IPython code such as %magic functions) to run.
2605 store_history : bool
2606 store_history : bool
2606 If True, the raw and translated cell will be stored in IPython's
2607 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
2608 history. For user code calling back into IPython's machinery, this
2608 should be set to False.
2609 should be set to False.
2609 silent : bool
2610 silent : bool
2610 If True, avoid side-effects, such as implicit displayhooks and
2611 If True, avoid side-effects, such as implicit displayhooks and
2611 and logging. silent=True forces store_history=False.
2612 and logging. silent=True forces store_history=False.
2612 shell_futures : bool
2613 shell_futures : bool
2613 If True, the code will share future statements with the interactive
2614 If True, the code will share future statements with the interactive
2614 shell. It will both be affected by previous __future__ imports, and
2615 shell. It will both be affected by previous __future__ imports, and
2615 any __future__ imports in the code will affect the shell. If False,
2616 any __future__ imports in the code will affect the shell. If False,
2616 __future__ imports are not shared in either direction.
2617 __future__ imports are not shared in either direction.
2617
2618
2618 Returns
2619 Returns
2619 -------
2620 -------
2620 result : :class:`ExecutionResult`
2621 result : :class:`ExecutionResult`
2621 """
2622 """
2622 result = ExecutionResult()
2623 result = ExecutionResult()
2623
2624
2624 if (not raw_cell) or raw_cell.isspace():
2625 if (not raw_cell) or raw_cell.isspace():
2625 return result
2626 return result
2626
2627
2627 if silent:
2628 if silent:
2628 store_history = False
2629 store_history = False
2629
2630
2630 if store_history:
2631 if store_history:
2631 result.execution_count = self.execution_count
2632 result.execution_count = self.execution_count
2632
2633
2633 def error_before_exec(value):
2634 def error_before_exec(value):
2634 result.error_before_exec = value
2635 result.error_before_exec = value
2635 return result
2636 return result
2636
2637
2637 self.events.trigger('pre_execute')
2638 self.events.trigger('pre_execute')
2638 if not silent:
2639 if not silent:
2639 self.events.trigger('pre_run_cell')
2640 self.events.trigger('pre_run_cell')
2640
2641
2641 # If any of our input transformation (input_transformer_manager or
2642 # If any of our input transformation (input_transformer_manager or
2642 # prefilter_manager) raises an exception, we store it in this variable
2643 # 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
2644 # so that we can display the error after logging the input and storing
2644 # it in the history.
2645 # it in the history.
2645 preprocessing_exc_tuple = None
2646 preprocessing_exc_tuple = None
2646 try:
2647 try:
2647 # Static input transformations
2648 # Static input transformations
2648 cell = self.input_transformer_manager.transform_cell(raw_cell)
2649 cell = self.input_transformer_manager.transform_cell(raw_cell)
2649 except SyntaxError:
2650 except SyntaxError:
2650 preprocessing_exc_tuple = sys.exc_info()
2651 preprocessing_exc_tuple = sys.exc_info()
2651 cell = raw_cell # cell has to exist so it can be stored/logged
2652 cell = raw_cell # cell has to exist so it can be stored/logged
2652 else:
2653 else:
2653 if len(cell.splitlines()) == 1:
2654 if len(cell.splitlines()) == 1:
2654 # Dynamic transformations - only applied for single line commands
2655 # Dynamic transformations - only applied for single line commands
2655 with self.builtin_trap:
2656 with self.builtin_trap:
2656 try:
2657 try:
2657 # use prefilter_lines to handle trailing newlines
2658 # use prefilter_lines to handle trailing newlines
2658 # restore trailing newline for ast.parse
2659 # restore trailing newline for ast.parse
2659 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2660 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2660 except Exception:
2661 except Exception:
2661 # don't allow prefilter errors to crash IPython
2662 # don't allow prefilter errors to crash IPython
2662 preprocessing_exc_tuple = sys.exc_info()
2663 preprocessing_exc_tuple = sys.exc_info()
2663
2664
2664 # Store raw and processed history
2665 # Store raw and processed history
2665 if store_history:
2666 if store_history:
2666 self.history_manager.store_inputs(self.execution_count,
2667 self.history_manager.store_inputs(self.execution_count,
2667 cell, raw_cell)
2668 cell, raw_cell)
2668 if not silent:
2669 if not silent:
2669 self.logger.log(cell, raw_cell)
2670 self.logger.log(cell, raw_cell)
2670
2671
2671 # Display the exception if input processing failed.
2672 # Display the exception if input processing failed.
2672 if preprocessing_exc_tuple is not None:
2673 if preprocessing_exc_tuple is not None:
2673 self.showtraceback(preprocessing_exc_tuple)
2674 self.showtraceback(preprocessing_exc_tuple)
2674 if store_history:
2675 if store_history:
2675 self.execution_count += 1
2676 self.execution_count += 1
2676 return error_before_exec(preprocessing_exc_tuple[2])
2677 return error_before_exec(preprocessing_exc_tuple[2])
2677
2678
2678 # Our own compiler remembers the __future__ environment. If we want to
2679 # Our own compiler remembers the __future__ environment. If we want to
2679 # run code with a separate __future__ environment, use the default
2680 # run code with a separate __future__ environment, use the default
2680 # compiler
2681 # compiler
2681 compiler = self.compile if shell_futures else CachingCompiler()
2682 compiler = self.compile if shell_futures else CachingCompiler()
2682
2683
2683 with self.builtin_trap:
2684 with self.builtin_trap:
2684 cell_name = self.compile.cache(cell, self.execution_count)
2685 cell_name = self.compile.cache(cell, self.execution_count)
2685
2686
2686 with self.display_trap:
2687 with self.display_trap:
2687 # Compile to bytecode
2688 # Compile to bytecode
2688 try:
2689 try:
2689 code_ast = compiler.ast_parse(cell, filename=cell_name)
2690 code_ast = compiler.ast_parse(cell, filename=cell_name)
2690 except IndentationError as e:
2691 except IndentationError as e:
2691 self.showindentationerror()
2692 self.showindentationerror()
2692 if store_history:
2693 if store_history:
2693 self.execution_count += 1
2694 self.execution_count += 1
2694 return error_before_exec(e)
2695 return error_before_exec(e)
2695 except (OverflowError, SyntaxError, ValueError, TypeError,
2696 except (OverflowError, SyntaxError, ValueError, TypeError,
2696 MemoryError) as e:
2697 MemoryError) as e:
2697 self.showsyntaxerror()
2698 self.showsyntaxerror()
2698 if store_history:
2699 if store_history:
2699 self.execution_count += 1
2700 self.execution_count += 1
2700 return error_before_exec(e)
2701 return error_before_exec(e)
2701
2702
2702 # Apply AST transformations
2703 # Apply AST transformations
2703 try:
2704 try:
2704 code_ast = self.transform_ast(code_ast)
2705 code_ast = self.transform_ast(code_ast)
2705 except InputRejected as e:
2706 except InputRejected as e:
2706 self.showtraceback()
2707 self.showtraceback()
2707 if store_history:
2708 if store_history:
2708 self.execution_count += 1
2709 self.execution_count += 1
2709 return error_before_exec(e)
2710 return error_before_exec(e)
2710
2711
2711 # Give the displayhook a reference to our ExecutionResult so it
2712 # Give the displayhook a reference to our ExecutionResult so it
2712 # can fill in the output value.
2713 # can fill in the output value.
2713 self.displayhook.exec_result = result
2714 self.displayhook.exec_result = result
2714
2715
2715 # Execute the user code
2716 # Execute the user code
2716 interactivity = "none" if silent else self.ast_node_interactivity
2717 interactivity = "none" if silent else self.ast_node_interactivity
2717 self.run_ast_nodes(code_ast.body, cell_name,
2718 self.run_ast_nodes(code_ast.body, cell_name,
2718 interactivity=interactivity, compiler=compiler, result=result)
2719 interactivity=interactivity, compiler=compiler, result=result)
2719
2720
2720 # Reset this so later displayed values do not modify the
2721 # Reset this so later displayed values do not modify the
2721 # ExecutionResult
2722 # ExecutionResult
2722 self.displayhook.exec_result = None
2723 self.displayhook.exec_result = None
2723
2724
2724 self.events.trigger('post_execute')
2725 self.events.trigger('post_execute')
2725 if not silent:
2726 if not silent:
2726 self.events.trigger('post_run_cell')
2727 self.events.trigger('post_run_cell')
2727
2728
2728 if store_history:
2729 if store_history:
2729 # Write output to the database. Does nothing unless
2730 # Write output to the database. Does nothing unless
2730 # history output logging is enabled.
2731 # history output logging is enabled.
2731 self.history_manager.store_output(self.execution_count)
2732 self.history_manager.store_output(self.execution_count)
2732 # Each cell is a *single* input, regardless of how many lines it has
2733 # Each cell is a *single* input, regardless of how many lines it has
2733 self.execution_count += 1
2734 self.execution_count += 1
2734
2735
2735 return result
2736 return result
2736
2737
2737 def transform_ast(self, node):
2738 def transform_ast(self, node):
2738 """Apply the AST transformations from self.ast_transformers
2739 """Apply the AST transformations from self.ast_transformers
2739
2740
2740 Parameters
2741 Parameters
2741 ----------
2742 ----------
2742 node : ast.Node
2743 node : ast.Node
2743 The root node to be transformed. Typically called with the ast.Module
2744 The root node to be transformed. Typically called with the ast.Module
2744 produced by parsing user input.
2745 produced by parsing user input.
2745
2746
2746 Returns
2747 Returns
2747 -------
2748 -------
2748 An ast.Node corresponding to the node it was called with. Note that it
2749 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
2750 may also modify the passed object, so don't rely on references to the
2750 original AST.
2751 original AST.
2751 """
2752 """
2752 for transformer in self.ast_transformers:
2753 for transformer in self.ast_transformers:
2753 try:
2754 try:
2754 node = transformer.visit(node)
2755 node = transformer.visit(node)
2755 except InputRejected:
2756 except InputRejected:
2756 # User-supplied AST transformers can reject an input by raising
2757 # User-supplied AST transformers can reject an input by raising
2757 # an InputRejected. Short-circuit in this case so that we
2758 # an InputRejected. Short-circuit in this case so that we
2758 # don't unregister the transform.
2759 # don't unregister the transform.
2759 raise
2760 raise
2760 except Exception:
2761 except Exception:
2761 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
2762 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
2762 self.ast_transformers.remove(transformer)
2763 self.ast_transformers.remove(transformer)
2763
2764
2764 if self.ast_transformers:
2765 if self.ast_transformers:
2765 ast.fix_missing_locations(node)
2766 ast.fix_missing_locations(node)
2766 return node
2767 return node
2767
2768
2768
2769
2769 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr',
2770 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr',
2770 compiler=compile, result=None):
2771 compiler=compile, result=None):
2771 """Run a sequence of AST nodes. The execution mode depends on the
2772 """Run a sequence of AST nodes. The execution mode depends on the
2772 interactivity parameter.
2773 interactivity parameter.
2773
2774
2774 Parameters
2775 Parameters
2775 ----------
2776 ----------
2776 nodelist : list
2777 nodelist : list
2777 A sequence of AST nodes to run.
2778 A sequence of AST nodes to run.
2778 cell_name : str
2779 cell_name : str
2779 Will be passed to the compiler as the filename of the cell. Typically
2780 Will be passed to the compiler as the filename of the cell. Typically
2780 the value returned by ip.compile.cache(cell).
2781 the value returned by ip.compile.cache(cell).
2781 interactivity : str
2782 interactivity : str
2782 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2783 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2783 run interactively (displaying output from expressions). 'last_expr'
2784 run interactively (displaying output from expressions). 'last_expr'
2784 will run the last node interactively only if it is an expression (i.e.
2785 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
2786 expressions in loops or other blocks are not displayed. Other values
2786 for this parameter will raise a ValueError.
2787 for this parameter will raise a ValueError.
2787 compiler : callable
2788 compiler : callable
2788 A function with the same interface as the built-in compile(), to turn
2789 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().
2790 the AST nodes into code objects. Default is the built-in compile().
2790 result : ExecutionResult, optional
2791 result : ExecutionResult, optional
2791 An object to store exceptions that occur during execution.
2792 An object to store exceptions that occur during execution.
2792
2793
2793 Returns
2794 Returns
2794 -------
2795 -------
2795 True if an exception occurred while running code, False if it finished
2796 True if an exception occurred while running code, False if it finished
2796 running.
2797 running.
2797 """
2798 """
2798 if not nodelist:
2799 if not nodelist:
2799 return
2800 return
2800
2801
2801 if interactivity == 'last_expr':
2802 if interactivity == 'last_expr':
2802 if isinstance(nodelist[-1], ast.Expr):
2803 if isinstance(nodelist[-1], ast.Expr):
2803 interactivity = "last"
2804 interactivity = "last"
2804 else:
2805 else:
2805 interactivity = "none"
2806 interactivity = "none"
2806
2807
2807 if interactivity == 'none':
2808 if interactivity == 'none':
2808 to_run_exec, to_run_interactive = nodelist, []
2809 to_run_exec, to_run_interactive = nodelist, []
2809 elif interactivity == 'last':
2810 elif interactivity == 'last':
2810 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2811 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2811 elif interactivity == 'all':
2812 elif interactivity == 'all':
2812 to_run_exec, to_run_interactive = [], nodelist
2813 to_run_exec, to_run_interactive = [], nodelist
2813 else:
2814 else:
2814 raise ValueError("Interactivity was %r" % interactivity)
2815 raise ValueError("Interactivity was %r" % interactivity)
2815
2816
2816 try:
2817 try:
2817 for i, node in enumerate(to_run_exec):
2818 for i, node in enumerate(to_run_exec):
2818 mod = ast.Module([node])
2819 mod = ast.Module([node])
2819 code = compiler(mod, cell_name, "exec")
2820 code = compiler(mod, cell_name, "exec")
2820 if self.run_code(code, result):
2821 if self.run_code(code, result):
2821 return True
2822 return True
2822
2823
2823 for i, node in enumerate(to_run_interactive):
2824 for i, node in enumerate(to_run_interactive):
2824 mod = ast.Interactive([node])
2825 mod = ast.Interactive([node])
2825 code = compiler(mod, cell_name, "single")
2826 code = compiler(mod, cell_name, "single")
2826 if self.run_code(code, result):
2827 if self.run_code(code, result):
2827 return True
2828 return True
2828
2829
2829 # Flush softspace
2830 # Flush softspace
2830 if softspace(sys.stdout, 0):
2831 if softspace(sys.stdout, 0):
2831 print()
2832 print()
2832
2833
2833 except:
2834 except:
2834 # It's possible to have exceptions raised here, typically by
2835 # It's possible to have exceptions raised here, typically by
2835 # compilation of odd code (such as a naked 'return' outside a
2836 # compilation of odd code (such as a naked 'return' outside a
2836 # function) that did parse but isn't valid. Typically the exception
2837 # 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
2838 # is a SyntaxError, but it's safest just to catch anything and show
2838 # the user a traceback.
2839 # the user a traceback.
2839
2840
2840 # We do only one try/except outside the loop to minimize the impact
2841 # 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
2842 # on runtime, and also because if any node in the node list is
2842 # broken, we should stop execution completely.
2843 # broken, we should stop execution completely.
2843 if result:
2844 if result:
2844 result.error_before_exec = sys.exc_info()[1]
2845 result.error_before_exec = sys.exc_info()[1]
2845 self.showtraceback()
2846 self.showtraceback()
2846 return True
2847 return True
2847
2848
2848 return False
2849 return False
2849
2850
2850 def run_code(self, code_obj, result=None):
2851 def run_code(self, code_obj, result=None):
2851 """Execute a code object.
2852 """Execute a code object.
2852
2853
2853 When an exception occurs, self.showtraceback() is called to display a
2854 When an exception occurs, self.showtraceback() is called to display a
2854 traceback.
2855 traceback.
2855
2856
2856 Parameters
2857 Parameters
2857 ----------
2858 ----------
2858 code_obj : code object
2859 code_obj : code object
2859 A compiled code object, to be executed
2860 A compiled code object, to be executed
2860 result : ExecutionResult, optional
2861 result : ExecutionResult, optional
2861 An object to store exceptions that occur during execution.
2862 An object to store exceptions that occur during execution.
2862
2863
2863 Returns
2864 Returns
2864 -------
2865 -------
2865 False : successful execution.
2866 False : successful execution.
2866 True : an error occurred.
2867 True : an error occurred.
2867 """
2868 """
2868 # Set our own excepthook in case the user code tries to call it
2869 # 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
2870 # directly, so that the IPython crash handler doesn't get triggered
2870 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
2871 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
2871
2872
2872 # we save the original sys.excepthook in the instance, in case config
2873 # we save the original sys.excepthook in the instance, in case config
2873 # code (such as magics) needs access to it.
2874 # code (such as magics) needs access to it.
2874 self.sys_excepthook = old_excepthook
2875 self.sys_excepthook = old_excepthook
2875 outflag = 1 # happens in more places, so it's easier as default
2876 outflag = 1 # happens in more places, so it's easier as default
2876 try:
2877 try:
2877 try:
2878 try:
2878 self.hooks.pre_run_code_hook()
2879 self.hooks.pre_run_code_hook()
2879 #rprint('Running code', repr(code_obj)) # dbg
2880 #rprint('Running code', repr(code_obj)) # dbg
2880 exec(code_obj, self.user_global_ns, self.user_ns)
2881 exec(code_obj, self.user_global_ns, self.user_ns)
2881 finally:
2882 finally:
2882 # Reset our crash handler in place
2883 # Reset our crash handler in place
2883 sys.excepthook = old_excepthook
2884 sys.excepthook = old_excepthook
2884 except SystemExit as e:
2885 except SystemExit as e:
2885 if result is not None:
2886 if result is not None:
2886 result.error_in_exec = e
2887 result.error_in_exec = e
2887 self.showtraceback(exception_only=True)
2888 self.showtraceback(exception_only=True)
2888 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2889 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2889 except self.custom_exceptions:
2890 except self.custom_exceptions:
2890 etype, value, tb = sys.exc_info()
2891 etype, value, tb = sys.exc_info()
2891 if result is not None:
2892 if result is not None:
2892 result.error_in_exec = value
2893 result.error_in_exec = value
2893 self.CustomTB(etype, value, tb)
2894 self.CustomTB(etype, value, tb)
2894 except:
2895 except:
2895 if result is not None:
2896 if result is not None:
2896 result.error_in_exec = sys.exc_info()[1]
2897 result.error_in_exec = sys.exc_info()[1]
2897 self.showtraceback()
2898 self.showtraceback()
2898 else:
2899 else:
2899 outflag = 0
2900 outflag = 0
2900 return outflag
2901 return outflag
2901
2902
2902 # For backwards compatibility
2903 # For backwards compatibility
2903 runcode = run_code
2904 runcode = run_code
2904
2905
2905 #-------------------------------------------------------------------------
2906 #-------------------------------------------------------------------------
2906 # Things related to GUI support and pylab
2907 # Things related to GUI support and pylab
2907 #-------------------------------------------------------------------------
2908 #-------------------------------------------------------------------------
2908
2909
2909 def enable_gui(self, gui=None):
2910 def enable_gui(self, gui=None):
2910 raise NotImplementedError('Implement enable_gui in a subclass')
2911 raise NotImplementedError('Implement enable_gui in a subclass')
2911
2912
2912 def enable_matplotlib(self, gui=None):
2913 def enable_matplotlib(self, gui=None):
2913 """Enable interactive matplotlib and inline figure support.
2914 """Enable interactive matplotlib and inline figure support.
2914
2915
2915 This takes the following steps:
2916 This takes the following steps:
2916
2917
2917 1. select the appropriate eventloop and matplotlib backend
2918 1. select the appropriate eventloop and matplotlib backend
2918 2. set up matplotlib for interactive use with that backend
2919 2. set up matplotlib for interactive use with that backend
2919 3. configure formatters for inline figure display
2920 3. configure formatters for inline figure display
2920 4. enable the selected gui eventloop
2921 4. enable the selected gui eventloop
2921
2922
2922 Parameters
2923 Parameters
2923 ----------
2924 ----------
2924 gui : optional, string
2925 gui : optional, string
2925 If given, dictates the choice of matplotlib GUI backend to use
2926 If given, dictates the choice of matplotlib GUI backend to use
2926 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2927 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2927 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2928 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2928 matplotlib (as dictated by the matplotlib build-time options plus the
2929 matplotlib (as dictated by the matplotlib build-time options plus the
2929 user's matplotlibrc configuration file). Note that not all backends
2930 user's matplotlibrc configuration file). Note that not all backends
2930 make sense in all contexts, for example a terminal ipython can't
2931 make sense in all contexts, for example a terminal ipython can't
2931 display figures inline.
2932 display figures inline.
2932 """
2933 """
2933 from IPython.core import pylabtools as pt
2934 from IPython.core import pylabtools as pt
2934 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
2935 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
2935
2936
2936 if gui != 'inline':
2937 if gui != 'inline':
2937 # If we have our first gui selection, store it
2938 # If we have our first gui selection, store it
2938 if self.pylab_gui_select is None:
2939 if self.pylab_gui_select is None:
2939 self.pylab_gui_select = gui
2940 self.pylab_gui_select = gui
2940 # Otherwise if they are different
2941 # Otherwise if they are different
2941 elif gui != self.pylab_gui_select:
2942 elif gui != self.pylab_gui_select:
2942 print ('Warning: Cannot change to a different GUI toolkit: %s.'
2943 print ('Warning: Cannot change to a different GUI toolkit: %s.'
2943 ' Using %s instead.' % (gui, self.pylab_gui_select))
2944 ' Using %s instead.' % (gui, self.pylab_gui_select))
2944 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
2945 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
2945
2946
2946 pt.activate_matplotlib(backend)
2947 pt.activate_matplotlib(backend)
2947 pt.configure_inline_support(self, backend)
2948 pt.configure_inline_support(self, backend)
2948
2949
2949 # Now we must activate the gui pylab wants to use, and fix %run to take
2950 # Now we must activate the gui pylab wants to use, and fix %run to take
2950 # plot updates into account
2951 # plot updates into account
2951 self.enable_gui(gui)
2952 self.enable_gui(gui)
2952 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2953 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2953 pt.mpl_runner(self.safe_execfile)
2954 pt.mpl_runner(self.safe_execfile)
2954
2955
2955 return gui, backend
2956 return gui, backend
2956
2957
2957 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
2958 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
2958 """Activate pylab support at runtime.
2959 """Activate pylab support at runtime.
2959
2960
2960 This turns on support for matplotlib, preloads into the interactive
2961 This turns on support for matplotlib, preloads into the interactive
2961 namespace all of numpy and pylab, and configures IPython to correctly
2962 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
2963 interact with the GUI event loop. The GUI backend to be used can be
2963 optionally selected with the optional ``gui`` argument.
2964 optionally selected with the optional ``gui`` argument.
2964
2965
2965 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
2966 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
2966
2967
2967 Parameters
2968 Parameters
2968 ----------
2969 ----------
2969 gui : optional, string
2970 gui : optional, string
2970 If given, dictates the choice of matplotlib GUI backend to use
2971 If given, dictates the choice of matplotlib GUI backend to use
2971 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2972 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2972 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2973 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2973 matplotlib (as dictated by the matplotlib build-time options plus the
2974 matplotlib (as dictated by the matplotlib build-time options plus the
2974 user's matplotlibrc configuration file). Note that not all backends
2975 user's matplotlibrc configuration file). Note that not all backends
2975 make sense in all contexts, for example a terminal ipython can't
2976 make sense in all contexts, for example a terminal ipython can't
2976 display figures inline.
2977 display figures inline.
2977 import_all : optional, bool, default: True
2978 import_all : optional, bool, default: True
2978 Whether to do `from numpy import *` and `from pylab import *`
2979 Whether to do `from numpy import *` and `from pylab import *`
2979 in addition to module imports.
2980 in addition to module imports.
2980 welcome_message : deprecated
2981 welcome_message : deprecated
2981 This argument is ignored, no welcome message will be displayed.
2982 This argument is ignored, no welcome message will be displayed.
2982 """
2983 """
2983 from IPython.core.pylabtools import import_pylab
2984 from IPython.core.pylabtools import import_pylab
2984
2985
2985 gui, backend = self.enable_matplotlib(gui)
2986 gui, backend = self.enable_matplotlib(gui)
2986
2987
2987 # We want to prevent the loading of pylab to pollute the user's
2988 # 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
2989 # 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
2990 # code in an empty namespace, and we update *both* user_ns and
2990 # user_ns_hidden with this information.
2991 # user_ns_hidden with this information.
2991 ns = {}
2992 ns = {}
2992 import_pylab(ns, import_all)
2993 import_pylab(ns, import_all)
2993 # warn about clobbered names
2994 # warn about clobbered names
2994 ignored = {"__builtins__"}
2995 ignored = {"__builtins__"}
2995 both = set(ns).intersection(self.user_ns).difference(ignored)
2996 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] ]
2997 clobbered = [ name for name in both if self.user_ns[name] is not ns[name] ]
2997 self.user_ns.update(ns)
2998 self.user_ns.update(ns)
2998 self.user_ns_hidden.update(ns)
2999 self.user_ns_hidden.update(ns)
2999 return gui, backend, clobbered
3000 return gui, backend, clobbered
3000
3001
3001 #-------------------------------------------------------------------------
3002 #-------------------------------------------------------------------------
3002 # Utilities
3003 # Utilities
3003 #-------------------------------------------------------------------------
3004 #-------------------------------------------------------------------------
3004
3005
3005 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3006 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3006 """Expand python variables in a string.
3007 """Expand python variables in a string.
3007
3008
3008 The depth argument indicates how many frames above the caller should
3009 The depth argument indicates how many frames above the caller should
3009 be walked to look for the local namespace where to expand variables.
3010 be walked to look for the local namespace where to expand variables.
3010
3011
3011 The global namespace for expansion is always the user's interactive
3012 The global namespace for expansion is always the user's interactive
3012 namespace.
3013 namespace.
3013 """
3014 """
3014 ns = self.user_ns.copy()
3015 ns = self.user_ns.copy()
3015 try:
3016 try:
3016 frame = sys._getframe(depth+1)
3017 frame = sys._getframe(depth+1)
3017 except ValueError:
3018 except ValueError:
3018 # This is thrown if there aren't that many frames on the stack,
3019 # This is thrown if there aren't that many frames on the stack,
3019 # e.g. if a script called run_line_magic() directly.
3020 # e.g. if a script called run_line_magic() directly.
3020 pass
3021 pass
3021 else:
3022 else:
3022 ns.update(frame.f_locals)
3023 ns.update(frame.f_locals)
3023
3024
3024 try:
3025 try:
3025 # We have to use .vformat() here, because 'self' is a valid and common
3026 # 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
3027 # name, and expanding **ns for .format() would make it collide with
3027 # the 'self' argument of the method.
3028 # the 'self' argument of the method.
3028 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3029 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3029 except Exception:
3030 except Exception:
3030 # if formatter couldn't format, just let it go untransformed
3031 # if formatter couldn't format, just let it go untransformed
3031 pass
3032 pass
3032 return cmd
3033 return cmd
3033
3034
3034 def mktempfile(self, data=None, prefix='ipython_edit_'):
3035 def mktempfile(self, data=None, prefix='ipython_edit_'):
3035 """Make a new tempfile and return its filename.
3036 """Make a new tempfile and return its filename.
3036
3037
3037 This makes a call to tempfile.mkstemp (created in a tempfile.mkdtemp),
3038 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
3039 but it registers the created filename internally so ipython cleans it up
3039 at exit time.
3040 at exit time.
3040
3041
3041 Optional inputs:
3042 Optional inputs:
3042
3043
3043 - data(None): if data is given, it gets written out to the temp file
3044 - data(None): if data is given, it gets written out to the temp file
3044 immediately, and the file is closed again."""
3045 immediately, and the file is closed again."""
3045
3046
3046 dirname = tempfile.mkdtemp(prefix=prefix)
3047 dirname = tempfile.mkdtemp(prefix=prefix)
3047 self.tempdirs.append(dirname)
3048 self.tempdirs.append(dirname)
3048
3049
3049 handle, filename = tempfile.mkstemp('.py', prefix, dir=dirname)
3050 handle, filename = tempfile.mkstemp('.py', prefix, dir=dirname)
3050 os.close(handle) # On Windows, there can only be one open handle on a file
3051 os.close(handle) # On Windows, there can only be one open handle on a file
3051 self.tempfiles.append(filename)
3052 self.tempfiles.append(filename)
3052
3053
3053 if data:
3054 if data:
3054 tmp_file = open(filename,'w')
3055 tmp_file = open(filename,'w')
3055 tmp_file.write(data)
3056 tmp_file.write(data)
3056 tmp_file.close()
3057 tmp_file.close()
3057 return filename
3058 return filename
3058
3059
3059 @undoc
3060 @undoc
3060 def write(self,data):
3061 def write(self,data):
3061 """DEPRECATED: Write a string to the default output"""
3062 """DEPRECATED: Write a string to the default output"""
3062 warn('InteractiveShell.write() is deprecated, use sys.stdout instead',
3063 warn('InteractiveShell.write() is deprecated, use sys.stdout instead',
3063 DeprecationWarning, stacklevel=2)
3064 DeprecationWarning, stacklevel=2)
3064 sys.stdout.write(data)
3065 sys.stdout.write(data)
3065
3066
3066 @undoc
3067 @undoc
3067 def write_err(self,data):
3068 def write_err(self,data):
3068 """DEPRECATED: Write a string to the default error output"""
3069 """DEPRECATED: Write a string to the default error output"""
3069 warn('InteractiveShell.write_err() is deprecated, use sys.stderr instead',
3070 warn('InteractiveShell.write_err() is deprecated, use sys.stderr instead',
3070 DeprecationWarning, stacklevel=2)
3071 DeprecationWarning, stacklevel=2)
3071 sys.stderr.write(data)
3072 sys.stderr.write(data)
3072
3073
3073 def ask_yes_no(self, prompt, default=None, interrupt=None):
3074 def ask_yes_no(self, prompt, default=None, interrupt=None):
3074 if self.quiet:
3075 if self.quiet:
3075 return True
3076 return True
3076 return ask_yes_no(prompt,default,interrupt)
3077 return ask_yes_no(prompt,default,interrupt)
3077
3078
3078 def show_usage(self):
3079 def show_usage(self):
3079 """Show a usage message"""
3080 """Show a usage message"""
3080 page.page(IPython.core.usage.interactive_usage)
3081 page.page(IPython.core.usage.interactive_usage)
3081
3082
3082 def extract_input_lines(self, range_str, raw=False):
3083 def extract_input_lines(self, range_str, raw=False):
3083 """Return as a string a set of input history slices.
3084 """Return as a string a set of input history slices.
3084
3085
3085 Parameters
3086 Parameters
3086 ----------
3087 ----------
3087 range_str : string
3088 range_str : string
3088 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3089 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3089 since this function is for use by magic functions which get their
3090 since this function is for use by magic functions which get their
3090 arguments as strings. The number before the / is the session
3091 arguments as strings. The number before the / is the session
3091 number: ~n goes n back from the current session.
3092 number: ~n goes n back from the current session.
3092
3093
3093 raw : bool, optional
3094 raw : bool, optional
3094 By default, the processed input is used. If this is true, the raw
3095 By default, the processed input is used. If this is true, the raw
3095 input history is used instead.
3096 input history is used instead.
3096
3097
3097 Notes
3098 Notes
3098 -----
3099 -----
3099
3100
3100 Slices can be described with two notations:
3101 Slices can be described with two notations:
3101
3102
3102 * ``N:M`` -> standard python form, means including items N...(M-1).
3103 * ``N:M`` -> standard python form, means including items N...(M-1).
3103 * ``N-M`` -> include items N..M (closed endpoint).
3104 * ``N-M`` -> include items N..M (closed endpoint).
3104 """
3105 """
3105 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3106 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3106 return "\n".join(x for _, _, x in lines)
3107 return "\n".join(x for _, _, x in lines)
3107
3108
3108 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3109 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3109 """Get a code string from history, file, url, or a string or macro.
3110 """Get a code string from history, file, url, or a string or macro.
3110
3111
3111 This is mainly used by magic functions.
3112 This is mainly used by magic functions.
3112
3113
3113 Parameters
3114 Parameters
3114 ----------
3115 ----------
3115
3116
3116 target : str
3117 target : str
3117
3118
3118 A string specifying code to retrieve. This will be tried respectively
3119 A string specifying code to retrieve. This will be tried respectively
3119 as: ranges of input history (see %history for syntax), url,
3120 as: ranges of input history (see %history for syntax), url,
3120 corresponding .py file, filename, or an expression evaluating to a
3121 corresponding .py file, filename, or an expression evaluating to a
3121 string or Macro in the user namespace.
3122 string or Macro in the user namespace.
3122
3123
3123 raw : bool
3124 raw : bool
3124 If true (default), retrieve raw history. Has no effect on the other
3125 If true (default), retrieve raw history. Has no effect on the other
3125 retrieval mechanisms.
3126 retrieval mechanisms.
3126
3127
3127 py_only : bool (default False)
3128 py_only : bool (default False)
3128 Only try to fetch python code, do not try alternative methods to decode file
3129 Only try to fetch python code, do not try alternative methods to decode file
3129 if unicode fails.
3130 if unicode fails.
3130
3131
3131 Returns
3132 Returns
3132 -------
3133 -------
3133 A string of code.
3134 A string of code.
3134
3135
3135 ValueError is raised if nothing is found, and TypeError if it evaluates
3136 ValueError is raised if nothing is found, and TypeError if it evaluates
3136 to an object of another type. In each case, .args[0] is a printable
3137 to an object of another type. In each case, .args[0] is a printable
3137 message.
3138 message.
3138 """
3139 """
3139 code = self.extract_input_lines(target, raw=raw) # Grab history
3140 code = self.extract_input_lines(target, raw=raw) # Grab history
3140 if code:
3141 if code:
3141 return code
3142 return code
3142 utarget = unquote_filename(target)
3143 utarget = unquote_filename(target)
3143 try:
3144 try:
3144 if utarget.startswith(('http://', 'https://')):
3145 if utarget.startswith(('http://', 'https://')):
3145 return openpy.read_py_url(utarget, skip_encoding_cookie=skip_encoding_cookie)
3146 return openpy.read_py_url(utarget, skip_encoding_cookie=skip_encoding_cookie)
3146 except UnicodeDecodeError:
3147 except UnicodeDecodeError:
3147 if not py_only :
3148 if not py_only :
3148 # Deferred import
3149 # Deferred import
3149 try:
3150 try:
3150 from urllib.request import urlopen # Py3
3151 from urllib.request import urlopen # Py3
3151 except ImportError:
3152 except ImportError:
3152 from urllib import urlopen
3153 from urllib import urlopen
3153 response = urlopen(target)
3154 response = urlopen(target)
3154 return response.read().decode('latin1')
3155 return response.read().decode('latin1')
3155 raise ValueError(("'%s' seem to be unreadable.") % utarget)
3156 raise ValueError(("'%s' seem to be unreadable.") % utarget)
3156
3157
3157 potential_target = [target]
3158 potential_target = [target]
3158 try :
3159 try :
3159 potential_target.insert(0,get_py_filename(target))
3160 potential_target.insert(0,get_py_filename(target))
3160 except IOError:
3161 except IOError:
3161 pass
3162 pass
3162
3163
3163 for tgt in potential_target :
3164 for tgt in potential_target :
3164 if os.path.isfile(tgt): # Read file
3165 if os.path.isfile(tgt): # Read file
3165 try :
3166 try :
3166 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3167 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3167 except UnicodeDecodeError :
3168 except UnicodeDecodeError :
3168 if not py_only :
3169 if not py_only :
3169 with io_open(tgt,'r', encoding='latin1') as f :
3170 with io_open(tgt,'r', encoding='latin1') as f :
3170 return f.read()
3171 return f.read()
3171 raise ValueError(("'%s' seem to be unreadable.") % target)
3172 raise ValueError(("'%s' seem to be unreadable.") % target)
3172 elif os.path.isdir(os.path.expanduser(tgt)):
3173 elif os.path.isdir(os.path.expanduser(tgt)):
3173 raise ValueError("'%s' is a directory, not a regular file." % target)
3174 raise ValueError("'%s' is a directory, not a regular file." % target)
3174
3175
3175 if search_ns:
3176 if search_ns:
3176 # Inspect namespace to load object source
3177 # Inspect namespace to load object source
3177 object_info = self.object_inspect(target, detail_level=1)
3178 object_info = self.object_inspect(target, detail_level=1)
3178 if object_info['found'] and object_info['source']:
3179 if object_info['found'] and object_info['source']:
3179 return object_info['source']
3180 return object_info['source']
3180
3181
3181 try: # User namespace
3182 try: # User namespace
3182 codeobj = eval(target, self.user_ns)
3183 codeobj = eval(target, self.user_ns)
3183 except Exception:
3184 except Exception:
3184 raise ValueError(("'%s' was not found in history, as a file, url, "
3185 raise ValueError(("'%s' was not found in history, as a file, url, "
3185 "nor in the user namespace.") % target)
3186 "nor in the user namespace.") % target)
3186
3187
3187 if isinstance(codeobj, string_types):
3188 if isinstance(codeobj, string_types):
3188 return codeobj
3189 return codeobj
3189 elif isinstance(codeobj, Macro):
3190 elif isinstance(codeobj, Macro):
3190 return codeobj.value
3191 return codeobj.value
3191
3192
3192 raise TypeError("%s is neither a string nor a macro." % target,
3193 raise TypeError("%s is neither a string nor a macro." % target,
3193 codeobj)
3194 codeobj)
3194
3195
3195 #-------------------------------------------------------------------------
3196 #-------------------------------------------------------------------------
3196 # Things related to IPython exiting
3197 # Things related to IPython exiting
3197 #-------------------------------------------------------------------------
3198 #-------------------------------------------------------------------------
3198 def atexit_operations(self):
3199 def atexit_operations(self):
3199 """This will be executed at the time of exit.
3200 """This will be executed at the time of exit.
3200
3201
3201 Cleanup operations and saving of persistent data that is done
3202 Cleanup operations and saving of persistent data that is done
3202 unconditionally by IPython should be performed here.
3203 unconditionally by IPython should be performed here.
3203
3204
3204 For things that may depend on startup flags or platform specifics (such
3205 For things that may depend on startup flags or platform specifics (such
3205 as having readline or not), register a separate atexit function in the
3206 as having readline or not), register a separate atexit function in the
3206 code that has the appropriate information, rather than trying to
3207 code that has the appropriate information, rather than trying to
3207 clutter
3208 clutter
3208 """
3209 """
3209 # Close the history session (this stores the end time and line count)
3210 # Close the history session (this stores the end time and line count)
3210 # this must be *before* the tempfile cleanup, in case of temporary
3211 # this must be *before* the tempfile cleanup, in case of temporary
3211 # history db
3212 # history db
3212 self.history_manager.end_session()
3213 self.history_manager.end_session()
3213
3214
3214 # Cleanup all tempfiles and folders left around
3215 # Cleanup all tempfiles and folders left around
3215 for tfile in self.tempfiles:
3216 for tfile in self.tempfiles:
3216 try:
3217 try:
3217 os.unlink(tfile)
3218 os.unlink(tfile)
3218 except OSError:
3219 except OSError:
3219 pass
3220 pass
3220
3221
3221 for tdir in self.tempdirs:
3222 for tdir in self.tempdirs:
3222 try:
3223 try:
3223 os.rmdir(tdir)
3224 os.rmdir(tdir)
3224 except OSError:
3225 except OSError:
3225 pass
3226 pass
3226
3227
3227 # Clear all user namespaces to release all references cleanly.
3228 # Clear all user namespaces to release all references cleanly.
3228 self.reset(new_session=False)
3229 self.reset(new_session=False)
3229
3230
3230 # Run user hooks
3231 # Run user hooks
3231 self.hooks.shutdown_hook()
3232 self.hooks.shutdown_hook()
3232
3233
3233 def cleanup(self):
3234 def cleanup(self):
3234 self.restore_sys_module_state()
3235 self.restore_sys_module_state()
3235
3236
3236
3237
3237 class InteractiveShellABC(with_metaclass(abc.ABCMeta, object)):
3238 class InteractiveShellABC(with_metaclass(abc.ABCMeta, object)):
3238 """An abstract base class for InteractiveShell."""
3239 """An abstract base class for InteractiveShell."""
3239
3240
3240 InteractiveShellABC.register(InteractiveShell)
3241 InteractiveShellABC.register(InteractiveShell)
@@ -1,38 +1,43 b''
1 """Decorators marks that a doctest should be skipped, for both python 2 and 3.
1 """Decorators marks that a doctest should be skipped, for both python 2 and 3.
2
2
3 The IPython.testing.decorators module triggers various extra imports, including
3 The IPython.testing.decorators module triggers various extra imports, including
4 numpy and sympy if they're present. Since this decorator is used in core parts
4 numpy and sympy if they're present. Since this decorator is used in core parts
5 of IPython, it's in a separate module so that running IPython doesn't trigger
5 of IPython, it's in a separate module so that running IPython doesn't trigger
6 those imports."""
6 those imports."""
7
7
8 #-----------------------------------------------------------------------------
8 #-----------------------------------------------------------------------------
9 # Copyright (C) 2009-2011 The IPython Development Team
9 # Copyright (C) 2009-2011 The IPython Development Team
10 #
10 #
11 # Distributed under the terms of the BSD License. The full license is in
11 # Distributed under the terms of the BSD License. The full license is in
12 # the file COPYING, distributed as part of this software.
12 # the file COPYING, distributed as part of this software.
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14
14
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16 # Imports
16 # Imports
17 #-----------------------------------------------------------------------------
17 #-----------------------------------------------------------------------------
18
18
19 import sys
19 import sys
20
20
21 #-----------------------------------------------------------------------------
21 #-----------------------------------------------------------------------------
22 # Decorators
22 # Decorators
23 #-----------------------------------------------------------------------------
23 #-----------------------------------------------------------------------------
24
24
25 def skip_doctest(f):
25 def skip_doctest(f):
26 """Decorator - mark a function or method for skipping its doctest.
26 """Decorator - mark a function or method for skipping its doctest.
27
27
28 This decorator allows you to mark a function whose docstring you wish to
28 This decorator allows you to mark a function whose docstring you wish to
29 omit from testing, while preserving the docstring for introspection, help,
29 omit from testing, while preserving the docstring for introspection, help,
30 etc."""
30 etc."""
31 f.skip_doctest = True
31 f.skip_doctest = True
32 return f
32 return f
33
33
34
34
35 def skip_doctest_py3(f):
35 def skip_doctest_py3(f):
36 """Decorator - skip the doctest under Python 3."""
36 """Decorator - skip the doctest under Python 3."""
37 f.skip_doctest = (sys.version_info[0] >= 3)
37 f.skip_doctest = (sys.version_info[0] >= 3)
38 return f
38 return f
39
40 def skip_doctest_py2(f):
41 """Decorator - skip the doctest under Python 3."""
42 f.skip_doctest = (sys.version_info[0] < 3)
43 return f
General Comments 0
You need to be logged in to leave comments. Login now