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