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