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