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