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