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