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