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