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