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