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