##// END OF EJS Templates
fix default value in interactiveshell.ask_yes_no...
MinRK -
Show More
@@ -1,2710 +1,2710 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Main IPython class."""
2 """Main IPython class."""
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Imports
14 # Imports
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 from __future__ import with_statement
17 from __future__ import with_statement
18 from __future__ import absolute_import
18 from __future__ import absolute_import
19
19
20 import __builtin__ as builtin_mod
20 import __builtin__ as builtin_mod
21 import __future__
21 import __future__
22 import abc
22 import abc
23 import ast
23 import ast
24 import atexit
24 import atexit
25 import codeop
25 import codeop
26 import inspect
26 import inspect
27 import os
27 import os
28 import re
28 import re
29 import sys
29 import sys
30 import tempfile
30 import tempfile
31 import types
31 import types
32 try:
32 try:
33 from contextlib import nested
33 from contextlib import nested
34 except:
34 except:
35 from IPython.utils.nested_context import nested
35 from IPython.utils.nested_context import nested
36
36
37 from IPython.config.configurable import SingletonConfigurable
37 from IPython.config.configurable import SingletonConfigurable
38 from IPython.core import debugger, oinspect
38 from IPython.core import debugger, oinspect
39 from IPython.core import history as ipcorehist
39 from IPython.core import history as ipcorehist
40 from IPython.core import page
40 from IPython.core import page
41 from IPython.core import prefilter
41 from IPython.core import prefilter
42 from IPython.core import shadowns
42 from IPython.core import shadowns
43 from IPython.core import ultratb
43 from IPython.core import ultratb
44 from IPython.core.alias import AliasManager, AliasError
44 from IPython.core.alias import AliasManager, AliasError
45 from IPython.core.autocall import ExitAutocall
45 from IPython.core.autocall import ExitAutocall
46 from IPython.core.builtin_trap import BuiltinTrap
46 from IPython.core.builtin_trap import BuiltinTrap
47 from IPython.core.compilerop import CachingCompiler
47 from IPython.core.compilerop import CachingCompiler
48 from IPython.core.display_trap import DisplayTrap
48 from IPython.core.display_trap import DisplayTrap
49 from IPython.core.displayhook import DisplayHook
49 from IPython.core.displayhook import DisplayHook
50 from IPython.core.displaypub import DisplayPublisher
50 from IPython.core.displaypub import DisplayPublisher
51 from IPython.core.error import TryNext, UsageError
51 from IPython.core.error import TryNext, UsageError
52 from IPython.core.extensions import ExtensionManager
52 from IPython.core.extensions import ExtensionManager
53 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
53 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
54 from IPython.core.formatters import DisplayFormatter
54 from IPython.core.formatters import DisplayFormatter
55 from IPython.core.history import HistoryManager
55 from IPython.core.history import HistoryManager
56 from IPython.core.inputsplitter import IPythonInputSplitter
56 from IPython.core.inputsplitter import IPythonInputSplitter
57 from IPython.core.logger import Logger
57 from IPython.core.logger import Logger
58 from IPython.core.macro import Macro
58 from IPython.core.macro import Macro
59 from IPython.core.magic import Magic
59 from IPython.core.magic import Magic
60 from IPython.core.payload import PayloadManager
60 from IPython.core.payload import PayloadManager
61 from IPython.core.plugin import PluginManager
61 from IPython.core.plugin import PluginManager
62 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
62 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
63 from IPython.core.profiledir import ProfileDir
63 from IPython.core.profiledir import ProfileDir
64 from IPython.external.Itpl import ItplNS
64 from IPython.external.Itpl import ItplNS
65 from IPython.utils import PyColorize
65 from IPython.utils import PyColorize
66 from IPython.utils import io
66 from IPython.utils import io
67 from IPython.utils import py3compat
67 from IPython.utils import py3compat
68 from IPython.utils.doctestreload import doctest_reload
68 from IPython.utils.doctestreload import doctest_reload
69 from IPython.utils.io import ask_yes_no, rprint
69 from IPython.utils.io import ask_yes_no, rprint
70 from IPython.utils.ipstruct import Struct
70 from IPython.utils.ipstruct import Struct
71 from IPython.utils.path import get_home_dir, get_ipython_dir, HomeDirError
71 from IPython.utils.path import get_home_dir, get_ipython_dir, HomeDirError
72 from IPython.utils.pickleshare import PickleShareDB
72 from IPython.utils.pickleshare import PickleShareDB
73 from IPython.utils.process import system, getoutput
73 from IPython.utils.process import system, getoutput
74 from IPython.utils.strdispatch import StrDispatch
74 from IPython.utils.strdispatch import StrDispatch
75 from IPython.utils.syspathcontext import prepended_to_syspath
75 from IPython.utils.syspathcontext import prepended_to_syspath
76 from IPython.utils.text import (num_ini_spaces, format_screen, LSString, SList,
76 from IPython.utils.text import (num_ini_spaces, format_screen, LSString, SList,
77 DollarFormatter)
77 DollarFormatter)
78 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
78 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
79 List, Unicode, Instance, Type)
79 List, Unicode, Instance, Type)
80 from IPython.utils.warn import warn, error, fatal
80 from IPython.utils.warn import warn, error, fatal
81 import IPython.core.hooks
81 import IPython.core.hooks
82
82
83 #-----------------------------------------------------------------------------
83 #-----------------------------------------------------------------------------
84 # Globals
84 # Globals
85 #-----------------------------------------------------------------------------
85 #-----------------------------------------------------------------------------
86
86
87 # compiled regexps for autoindent management
87 # compiled regexps for autoindent management
88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
89
89
90 #-----------------------------------------------------------------------------
90 #-----------------------------------------------------------------------------
91 # Utilities
91 # Utilities
92 #-----------------------------------------------------------------------------
92 #-----------------------------------------------------------------------------
93
93
94 def softspace(file, newvalue):
94 def softspace(file, newvalue):
95 """Copied from code.py, to remove the dependency"""
95 """Copied from code.py, to remove the dependency"""
96
96
97 oldvalue = 0
97 oldvalue = 0
98 try:
98 try:
99 oldvalue = file.softspace
99 oldvalue = file.softspace
100 except AttributeError:
100 except AttributeError:
101 pass
101 pass
102 try:
102 try:
103 file.softspace = newvalue
103 file.softspace = newvalue
104 except (AttributeError, TypeError):
104 except (AttributeError, TypeError):
105 # "attribute-less object" or "read-only attributes"
105 # "attribute-less object" or "read-only attributes"
106 pass
106 pass
107 return oldvalue
107 return oldvalue
108
108
109
109
110 def no_op(*a, **kw): pass
110 def no_op(*a, **kw): pass
111
111
112 class NoOpContext(object):
112 class NoOpContext(object):
113 def __enter__(self): pass
113 def __enter__(self): pass
114 def __exit__(self, type, value, traceback): pass
114 def __exit__(self, type, value, traceback): pass
115 no_op_context = NoOpContext()
115 no_op_context = NoOpContext()
116
116
117 class SpaceInInput(Exception): pass
117 class SpaceInInput(Exception): pass
118
118
119 class Bunch: pass
119 class Bunch: pass
120
120
121
121
122 def get_default_colors():
122 def get_default_colors():
123 if sys.platform=='darwin':
123 if sys.platform=='darwin':
124 return "LightBG"
124 return "LightBG"
125 elif os.name=='nt':
125 elif os.name=='nt':
126 return 'Linux'
126 return 'Linux'
127 else:
127 else:
128 return 'Linux'
128 return 'Linux'
129
129
130
130
131 class SeparateUnicode(Unicode):
131 class SeparateUnicode(Unicode):
132 """A Unicode subclass to validate separate_in, separate_out, etc.
132 """A Unicode subclass to validate separate_in, separate_out, etc.
133
133
134 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
134 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
135 """
135 """
136
136
137 def validate(self, obj, value):
137 def validate(self, obj, value):
138 if value == '0': value = ''
138 if value == '0': value = ''
139 value = value.replace('\\n','\n')
139 value = value.replace('\\n','\n')
140 return super(SeparateUnicode, self).validate(obj, value)
140 return super(SeparateUnicode, self).validate(obj, value)
141
141
142
142
143 class ReadlineNoRecord(object):
143 class ReadlineNoRecord(object):
144 """Context manager to execute some code, then reload readline history
144 """Context manager to execute some code, then reload readline history
145 so that interactive input to the code doesn't appear when pressing up."""
145 so that interactive input to the code doesn't appear when pressing up."""
146 def __init__(self, shell):
146 def __init__(self, shell):
147 self.shell = shell
147 self.shell = shell
148 self._nested_level = 0
148 self._nested_level = 0
149
149
150 def __enter__(self):
150 def __enter__(self):
151 if self._nested_level == 0:
151 if self._nested_level == 0:
152 try:
152 try:
153 self.orig_length = self.current_length()
153 self.orig_length = self.current_length()
154 self.readline_tail = self.get_readline_tail()
154 self.readline_tail = self.get_readline_tail()
155 except (AttributeError, IndexError): # Can fail with pyreadline
155 except (AttributeError, IndexError): # Can fail with pyreadline
156 self.orig_length, self.readline_tail = 999999, []
156 self.orig_length, self.readline_tail = 999999, []
157 self._nested_level += 1
157 self._nested_level += 1
158
158
159 def __exit__(self, type, value, traceback):
159 def __exit__(self, type, value, traceback):
160 self._nested_level -= 1
160 self._nested_level -= 1
161 if self._nested_level == 0:
161 if self._nested_level == 0:
162 # Try clipping the end if it's got longer
162 # Try clipping the end if it's got longer
163 try:
163 try:
164 e = self.current_length() - self.orig_length
164 e = self.current_length() - self.orig_length
165 if e > 0:
165 if e > 0:
166 for _ in range(e):
166 for _ in range(e):
167 self.shell.readline.remove_history_item(self.orig_length)
167 self.shell.readline.remove_history_item(self.orig_length)
168
168
169 # If it still doesn't match, just reload readline history.
169 # If it still doesn't match, just reload readline history.
170 if self.current_length() != self.orig_length \
170 if self.current_length() != self.orig_length \
171 or self.get_readline_tail() != self.readline_tail:
171 or self.get_readline_tail() != self.readline_tail:
172 self.shell.refill_readline_hist()
172 self.shell.refill_readline_hist()
173 except (AttributeError, IndexError):
173 except (AttributeError, IndexError):
174 pass
174 pass
175 # Returning False will cause exceptions to propagate
175 # Returning False will cause exceptions to propagate
176 return False
176 return False
177
177
178 def current_length(self):
178 def current_length(self):
179 return self.shell.readline.get_current_history_length()
179 return self.shell.readline.get_current_history_length()
180
180
181 def get_readline_tail(self, n=10):
181 def get_readline_tail(self, n=10):
182 """Get the last n items in readline history."""
182 """Get the last n items in readline history."""
183 end = self.shell.readline.get_current_history_length() + 1
183 end = self.shell.readline.get_current_history_length() + 1
184 start = max(end-n, 1)
184 start = max(end-n, 1)
185 ghi = self.shell.readline.get_history_item
185 ghi = self.shell.readline.get_history_item
186 return [ghi(x) for x in range(start, end)]
186 return [ghi(x) for x in range(start, end)]
187
187
188
188
189 _autocall_help = """
189 _autocall_help = """
190 Make IPython automatically call any callable object even if
190 Make IPython automatically call any callable object even if
191 you didn't type explicit parentheses. For example, 'str 43' becomes 'str(43)'
191 you didn't type explicit parentheses. For example, 'str 43' becomes 'str(43)'
192 automatically. The value can be '0' to disable the feature, '1' for 'smart'
192 automatically. The value can be '0' to disable the feature, '1' for 'smart'
193 autocall, where it is not applied if there are no more arguments on the line,
193 autocall, where it is not applied if there are no more arguments on the line,
194 and '2' for 'full' autocall, where all callable objects are automatically
194 and '2' for 'full' autocall, where all callable objects are automatically
195 called (even if no arguments are present). The default is '1'.
195 called (even if no arguments are present). The default is '1'.
196 """
196 """
197
197
198 #-----------------------------------------------------------------------------
198 #-----------------------------------------------------------------------------
199 # Main IPython class
199 # Main IPython class
200 #-----------------------------------------------------------------------------
200 #-----------------------------------------------------------------------------
201
201
202 class InteractiveShell(SingletonConfigurable, Magic):
202 class InteractiveShell(SingletonConfigurable, Magic):
203 """An enhanced, interactive shell for Python."""
203 """An enhanced, interactive shell for Python."""
204
204
205 _instance = None
205 _instance = None
206
206
207 autocall = Enum((0,1,2), default_value=1, config=True, help=
207 autocall = Enum((0,1,2), default_value=1, config=True, help=
208 """
208 """
209 Make IPython automatically call any callable object even if you didn't
209 Make IPython automatically call any callable object even if you didn't
210 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
210 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
211 automatically. The value can be '0' to disable the feature, '1' for
211 automatically. The value can be '0' to disable the feature, '1' for
212 'smart' autocall, where it is not applied if there are no more
212 'smart' autocall, where it is not applied if there are no more
213 arguments on the line, and '2' for 'full' autocall, where all callable
213 arguments on the line, and '2' for 'full' autocall, where all callable
214 objects are automatically called (even if no arguments are present).
214 objects are automatically called (even if no arguments are present).
215 The default is '1'.
215 The default is '1'.
216 """
216 """
217 )
217 )
218 # TODO: remove all autoindent logic and put into frontends.
218 # TODO: remove all autoindent logic and put into frontends.
219 # We can't do this yet because even runlines uses the autoindent.
219 # We can't do this yet because even runlines uses the autoindent.
220 autoindent = CBool(True, config=True, help=
220 autoindent = CBool(True, config=True, help=
221 """
221 """
222 Autoindent IPython code entered interactively.
222 Autoindent IPython code entered interactively.
223 """
223 """
224 )
224 )
225 automagic = CBool(True, config=True, help=
225 automagic = CBool(True, config=True, help=
226 """
226 """
227 Enable magic commands to be called without the leading %.
227 Enable magic commands to be called without the leading %.
228 """
228 """
229 )
229 )
230 cache_size = Integer(1000, config=True, help=
230 cache_size = Integer(1000, config=True, help=
231 """
231 """
232 Set the size of the output cache. The default is 1000, you can
232 Set the size of the output cache. The default is 1000, you can
233 change it permanently in your config file. Setting it to 0 completely
233 change it permanently in your config file. Setting it to 0 completely
234 disables the caching system, and the minimum value accepted is 20 (if
234 disables the caching system, and the minimum value accepted is 20 (if
235 you provide a value less than 20, it is reset to 0 and a warning is
235 you provide a value less than 20, it is reset to 0 and a warning is
236 issued). This limit is defined because otherwise you'll spend more
236 issued). This limit is defined because otherwise you'll spend more
237 time re-flushing a too small cache than working
237 time re-flushing a too small cache than working
238 """
238 """
239 )
239 )
240 color_info = CBool(True, config=True, help=
240 color_info = CBool(True, config=True, help=
241 """
241 """
242 Use colors for displaying information about objects. Because this
242 Use colors for displaying information about objects. Because this
243 information is passed through a pager (like 'less'), and some pagers
243 information is passed through a pager (like 'less'), and some pagers
244 get confused with color codes, this capability can be turned off.
244 get confused with color codes, this capability can be turned off.
245 """
245 """
246 )
246 )
247 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
247 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
248 default_value=get_default_colors(), config=True,
248 default_value=get_default_colors(), config=True,
249 help="Set the color scheme (NoColor, Linux, or LightBG)."
249 help="Set the color scheme (NoColor, Linux, or LightBG)."
250 )
250 )
251 colors_force = CBool(False, help=
251 colors_force = CBool(False, help=
252 """
252 """
253 Force use of ANSI color codes, regardless of OS and readline
253 Force use of ANSI color codes, regardless of OS and readline
254 availability.
254 availability.
255 """
255 """
256 # FIXME: This is essentially a hack to allow ZMQShell to show colors
256 # FIXME: This is essentially a hack to allow ZMQShell to show colors
257 # without readline on Win32. When the ZMQ formatting system is
257 # without readline on Win32. When the ZMQ formatting system is
258 # refactored, this should be removed.
258 # refactored, this should be removed.
259 )
259 )
260 debug = CBool(False, config=True)
260 debug = CBool(False, config=True)
261 deep_reload = CBool(False, config=True, help=
261 deep_reload = CBool(False, config=True, help=
262 """
262 """
263 Enable deep (recursive) reloading by default. IPython can use the
263 Enable deep (recursive) reloading by default. IPython can use the
264 deep_reload module which reloads changes in modules recursively (it
264 deep_reload module which reloads changes in modules recursively (it
265 replaces the reload() function, so you don't need to change anything to
265 replaces the reload() function, so you don't need to change anything to
266 use it). deep_reload() forces a full reload of modules whose code may
266 use it). deep_reload() forces a full reload of modules whose code may
267 have changed, which the default reload() function does not. When
267 have changed, which the default reload() function does not. When
268 deep_reload is off, IPython will use the normal reload(), but
268 deep_reload is off, IPython will use the normal reload(), but
269 deep_reload will still be available as dreload().
269 deep_reload will still be available as dreload().
270 """
270 """
271 )
271 )
272 display_formatter = Instance(DisplayFormatter)
272 display_formatter = Instance(DisplayFormatter)
273 displayhook_class = Type(DisplayHook)
273 displayhook_class = Type(DisplayHook)
274 display_pub_class = Type(DisplayPublisher)
274 display_pub_class = Type(DisplayPublisher)
275
275
276 exit_now = CBool(False)
276 exit_now = CBool(False)
277 exiter = Instance(ExitAutocall)
277 exiter = Instance(ExitAutocall)
278 def _exiter_default(self):
278 def _exiter_default(self):
279 return ExitAutocall(self)
279 return ExitAutocall(self)
280 # Monotonically increasing execution counter
280 # Monotonically increasing execution counter
281 execution_count = Integer(1)
281 execution_count = Integer(1)
282 filename = Unicode("<ipython console>")
282 filename = Unicode("<ipython console>")
283 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
283 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
284
284
285 # Input splitter, to split entire cells of input into either individual
285 # Input splitter, to split entire cells of input into either individual
286 # interactive statements or whole blocks.
286 # interactive statements or whole blocks.
287 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
287 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
288 (), {})
288 (), {})
289 logstart = CBool(False, config=True, help=
289 logstart = CBool(False, config=True, help=
290 """
290 """
291 Start logging to the default log file.
291 Start logging to the default log file.
292 """
292 """
293 )
293 )
294 logfile = Unicode('', config=True, help=
294 logfile = Unicode('', config=True, help=
295 """
295 """
296 The name of the logfile to use.
296 The name of the logfile to use.
297 """
297 """
298 )
298 )
299 logappend = Unicode('', config=True, help=
299 logappend = Unicode('', config=True, help=
300 """
300 """
301 Start logging to the given file in append mode.
301 Start logging to the given file in append mode.
302 """
302 """
303 )
303 )
304 object_info_string_level = Enum((0,1,2), default_value=0,
304 object_info_string_level = Enum((0,1,2), default_value=0,
305 config=True)
305 config=True)
306 pdb = CBool(False, config=True, help=
306 pdb = CBool(False, config=True, help=
307 """
307 """
308 Automatically call the pdb debugger after every exception.
308 Automatically call the pdb debugger after every exception.
309 """
309 """
310 )
310 )
311 multiline_history = CBool(sys.platform != 'win32', config=True,
311 multiline_history = CBool(sys.platform != 'win32', config=True,
312 help="Save multi-line entries as one entry in readline history"
312 help="Save multi-line entries as one entry in readline history"
313 )
313 )
314
314
315 prompt_in1 = Unicode('In [\\#]: ', config=True)
315 prompt_in1 = Unicode('In [\\#]: ', config=True)
316 prompt_in2 = Unicode(' .\\D.: ', config=True)
316 prompt_in2 = Unicode(' .\\D.: ', config=True)
317 prompt_out = Unicode('Out[\\#]: ', config=True)
317 prompt_out = Unicode('Out[\\#]: ', config=True)
318 prompts_pad_left = CBool(True, config=True)
318 prompts_pad_left = CBool(True, config=True)
319 quiet = CBool(False, config=True)
319 quiet = CBool(False, config=True)
320
320
321 history_length = Integer(10000, config=True)
321 history_length = Integer(10000, config=True)
322
322
323 # The readline stuff will eventually be moved to the terminal subclass
323 # The readline stuff will eventually be moved to the terminal subclass
324 # but for now, we can't do that as readline is welded in everywhere.
324 # but for now, we can't do that as readline is welded in everywhere.
325 readline_use = CBool(True, config=True)
325 readline_use = CBool(True, config=True)
326 readline_remove_delims = Unicode('-/~', config=True)
326 readline_remove_delims = Unicode('-/~', config=True)
327 # don't use \M- bindings by default, because they
327 # don't use \M- bindings by default, because they
328 # conflict with 8-bit encodings. See gh-58,gh-88
328 # conflict with 8-bit encodings. See gh-58,gh-88
329 readline_parse_and_bind = List([
329 readline_parse_and_bind = List([
330 'tab: complete',
330 'tab: complete',
331 '"\C-l": clear-screen',
331 '"\C-l": clear-screen',
332 'set show-all-if-ambiguous on',
332 'set show-all-if-ambiguous on',
333 '"\C-o": tab-insert',
333 '"\C-o": tab-insert',
334 '"\C-r": reverse-search-history',
334 '"\C-r": reverse-search-history',
335 '"\C-s": forward-search-history',
335 '"\C-s": forward-search-history',
336 '"\C-p": history-search-backward',
336 '"\C-p": history-search-backward',
337 '"\C-n": history-search-forward',
337 '"\C-n": history-search-forward',
338 '"\e[A": history-search-backward',
338 '"\e[A": history-search-backward',
339 '"\e[B": history-search-forward',
339 '"\e[B": history-search-forward',
340 '"\C-k": kill-line',
340 '"\C-k": kill-line',
341 '"\C-u": unix-line-discard',
341 '"\C-u": unix-line-discard',
342 ], allow_none=False, config=True)
342 ], allow_none=False, config=True)
343
343
344 # TODO: this part of prompt management should be moved to the frontends.
344 # TODO: this part of prompt management should be moved to the frontends.
345 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
345 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
346 separate_in = SeparateUnicode('\n', config=True)
346 separate_in = SeparateUnicode('\n', config=True)
347 separate_out = SeparateUnicode('', config=True)
347 separate_out = SeparateUnicode('', config=True)
348 separate_out2 = SeparateUnicode('', config=True)
348 separate_out2 = SeparateUnicode('', config=True)
349 wildcards_case_sensitive = CBool(True, config=True)
349 wildcards_case_sensitive = CBool(True, config=True)
350 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
350 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
351 default_value='Context', config=True)
351 default_value='Context', config=True)
352
352
353 # Subcomponents of InteractiveShell
353 # Subcomponents of InteractiveShell
354 alias_manager = Instance('IPython.core.alias.AliasManager')
354 alias_manager = Instance('IPython.core.alias.AliasManager')
355 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
355 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
356 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
356 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
357 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
357 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
358 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
358 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
359 plugin_manager = Instance('IPython.core.plugin.PluginManager')
359 plugin_manager = Instance('IPython.core.plugin.PluginManager')
360 payload_manager = Instance('IPython.core.payload.PayloadManager')
360 payload_manager = Instance('IPython.core.payload.PayloadManager')
361 history_manager = Instance('IPython.core.history.HistoryManager')
361 history_manager = Instance('IPython.core.history.HistoryManager')
362
362
363 profile_dir = Instance('IPython.core.application.ProfileDir')
363 profile_dir = Instance('IPython.core.application.ProfileDir')
364 @property
364 @property
365 def profile(self):
365 def profile(self):
366 if self.profile_dir is not None:
366 if self.profile_dir is not None:
367 name = os.path.basename(self.profile_dir.location)
367 name = os.path.basename(self.profile_dir.location)
368 return name.replace('profile_','')
368 return name.replace('profile_','')
369
369
370
370
371 # Private interface
371 # Private interface
372 _post_execute = Instance(dict)
372 _post_execute = Instance(dict)
373
373
374 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
374 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
375 user_ns=None, user_global_ns=None,
375 user_ns=None, user_global_ns=None,
376 custom_exceptions=((), None)):
376 custom_exceptions=((), None)):
377
377
378 # This is where traits with a config_key argument are updated
378 # This is where traits with a config_key argument are updated
379 # from the values on config.
379 # from the values on config.
380 super(InteractiveShell, self).__init__(config=config)
380 super(InteractiveShell, self).__init__(config=config)
381 self.configurables = [self]
381 self.configurables = [self]
382
382
383 # These are relatively independent and stateless
383 # These are relatively independent and stateless
384 self.init_ipython_dir(ipython_dir)
384 self.init_ipython_dir(ipython_dir)
385 self.init_profile_dir(profile_dir)
385 self.init_profile_dir(profile_dir)
386 self.init_instance_attrs()
386 self.init_instance_attrs()
387 self.init_environment()
387 self.init_environment()
388
388
389 # Create namespaces (user_ns, user_global_ns, etc.)
389 # Create namespaces (user_ns, user_global_ns, etc.)
390 self.init_create_namespaces(user_ns, user_global_ns)
390 self.init_create_namespaces(user_ns, user_global_ns)
391 # This has to be done after init_create_namespaces because it uses
391 # This has to be done after init_create_namespaces because it uses
392 # something in self.user_ns, but before init_sys_modules, which
392 # something in self.user_ns, but before init_sys_modules, which
393 # is the first thing to modify sys.
393 # is the first thing to modify sys.
394 # TODO: When we override sys.stdout and sys.stderr before this class
394 # TODO: When we override sys.stdout and sys.stderr before this class
395 # is created, we are saving the overridden ones here. Not sure if this
395 # is created, we are saving the overridden ones here. Not sure if this
396 # is what we want to do.
396 # is what we want to do.
397 self.save_sys_module_state()
397 self.save_sys_module_state()
398 self.init_sys_modules()
398 self.init_sys_modules()
399
399
400 # While we're trying to have each part of the code directly access what
400 # While we're trying to have each part of the code directly access what
401 # it needs without keeping redundant references to objects, we have too
401 # it needs without keeping redundant references to objects, we have too
402 # much legacy code that expects ip.db to exist.
402 # much legacy code that expects ip.db to exist.
403 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
403 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
404
404
405 self.init_history()
405 self.init_history()
406 self.init_encoding()
406 self.init_encoding()
407 self.init_prefilter()
407 self.init_prefilter()
408
408
409 Magic.__init__(self, self)
409 Magic.__init__(self, self)
410
410
411 self.init_syntax_highlighting()
411 self.init_syntax_highlighting()
412 self.init_hooks()
412 self.init_hooks()
413 self.init_pushd_popd_magic()
413 self.init_pushd_popd_magic()
414 # self.init_traceback_handlers use to be here, but we moved it below
414 # self.init_traceback_handlers use to be here, but we moved it below
415 # because it and init_io have to come after init_readline.
415 # because it and init_io have to come after init_readline.
416 self.init_user_ns()
416 self.init_user_ns()
417 self.init_logger()
417 self.init_logger()
418 self.init_alias()
418 self.init_alias()
419 self.init_builtins()
419 self.init_builtins()
420
420
421 # pre_config_initialization
421 # pre_config_initialization
422
422
423 # The next section should contain everything that was in ipmaker.
423 # The next section should contain everything that was in ipmaker.
424 self.init_logstart()
424 self.init_logstart()
425
425
426 # The following was in post_config_initialization
426 # The following was in post_config_initialization
427 self.init_inspector()
427 self.init_inspector()
428 # init_readline() must come before init_io(), because init_io uses
428 # init_readline() must come before init_io(), because init_io uses
429 # readline related things.
429 # readline related things.
430 self.init_readline()
430 self.init_readline()
431 # We save this here in case user code replaces raw_input, but it needs
431 # We save this here in case user code replaces raw_input, but it needs
432 # to be after init_readline(), because PyPy's readline works by replacing
432 # to be after init_readline(), because PyPy's readline works by replacing
433 # raw_input.
433 # raw_input.
434 if py3compat.PY3:
434 if py3compat.PY3:
435 self.raw_input_original = input
435 self.raw_input_original = input
436 else:
436 else:
437 self.raw_input_original = raw_input
437 self.raw_input_original = raw_input
438 # init_completer must come after init_readline, because it needs to
438 # init_completer must come after init_readline, because it needs to
439 # know whether readline is present or not system-wide to configure the
439 # know whether readline is present or not system-wide to configure the
440 # completers, since the completion machinery can now operate
440 # completers, since the completion machinery can now operate
441 # independently of readline (e.g. over the network)
441 # independently of readline (e.g. over the network)
442 self.init_completer()
442 self.init_completer()
443 # TODO: init_io() needs to happen before init_traceback handlers
443 # TODO: init_io() needs to happen before init_traceback handlers
444 # because the traceback handlers hardcode the stdout/stderr streams.
444 # because the traceback handlers hardcode the stdout/stderr streams.
445 # This logic in in debugger.Pdb and should eventually be changed.
445 # This logic in in debugger.Pdb and should eventually be changed.
446 self.init_io()
446 self.init_io()
447 self.init_traceback_handlers(custom_exceptions)
447 self.init_traceback_handlers(custom_exceptions)
448 self.init_prompts()
448 self.init_prompts()
449 self.init_display_formatter()
449 self.init_display_formatter()
450 self.init_display_pub()
450 self.init_display_pub()
451 self.init_displayhook()
451 self.init_displayhook()
452 self.init_reload_doctest()
452 self.init_reload_doctest()
453 self.init_magics()
453 self.init_magics()
454 self.init_pdb()
454 self.init_pdb()
455 self.init_extension_manager()
455 self.init_extension_manager()
456 self.init_plugin_manager()
456 self.init_plugin_manager()
457 self.init_payload()
457 self.init_payload()
458 self.hooks.late_startup_hook()
458 self.hooks.late_startup_hook()
459 atexit.register(self.atexit_operations)
459 atexit.register(self.atexit_operations)
460
460
461 def get_ipython(self):
461 def get_ipython(self):
462 """Return the currently running IPython instance."""
462 """Return the currently running IPython instance."""
463 return self
463 return self
464
464
465 #-------------------------------------------------------------------------
465 #-------------------------------------------------------------------------
466 # Trait changed handlers
466 # Trait changed handlers
467 #-------------------------------------------------------------------------
467 #-------------------------------------------------------------------------
468
468
469 def _ipython_dir_changed(self, name, new):
469 def _ipython_dir_changed(self, name, new):
470 if not os.path.isdir(new):
470 if not os.path.isdir(new):
471 os.makedirs(new, mode = 0777)
471 os.makedirs(new, mode = 0777)
472
472
473 def set_autoindent(self,value=None):
473 def set_autoindent(self,value=None):
474 """Set the autoindent flag, checking for readline support.
474 """Set the autoindent flag, checking for readline support.
475
475
476 If called with no arguments, it acts as a toggle."""
476 If called with no arguments, it acts as a toggle."""
477
477
478 if value != 0 and not self.has_readline:
478 if value != 0 and not self.has_readline:
479 if os.name == 'posix':
479 if os.name == 'posix':
480 warn("The auto-indent feature requires the readline library")
480 warn("The auto-indent feature requires the readline library")
481 self.autoindent = 0
481 self.autoindent = 0
482 return
482 return
483 if value is None:
483 if value is None:
484 self.autoindent = not self.autoindent
484 self.autoindent = not self.autoindent
485 else:
485 else:
486 self.autoindent = value
486 self.autoindent = value
487
487
488 #-------------------------------------------------------------------------
488 #-------------------------------------------------------------------------
489 # init_* methods called by __init__
489 # init_* methods called by __init__
490 #-------------------------------------------------------------------------
490 #-------------------------------------------------------------------------
491
491
492 def init_ipython_dir(self, ipython_dir):
492 def init_ipython_dir(self, ipython_dir):
493 if ipython_dir is not None:
493 if ipython_dir is not None:
494 self.ipython_dir = ipython_dir
494 self.ipython_dir = ipython_dir
495 return
495 return
496
496
497 self.ipython_dir = get_ipython_dir()
497 self.ipython_dir = get_ipython_dir()
498
498
499 def init_profile_dir(self, profile_dir):
499 def init_profile_dir(self, profile_dir):
500 if profile_dir is not None:
500 if profile_dir is not None:
501 self.profile_dir = profile_dir
501 self.profile_dir = profile_dir
502 return
502 return
503 self.profile_dir =\
503 self.profile_dir =\
504 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
504 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
505
505
506 def init_instance_attrs(self):
506 def init_instance_attrs(self):
507 self.more = False
507 self.more = False
508
508
509 # command compiler
509 # command compiler
510 self.compile = CachingCompiler()
510 self.compile = CachingCompiler()
511
511
512 # Make an empty namespace, which extension writers can rely on both
512 # Make an empty namespace, which extension writers can rely on both
513 # existing and NEVER being used by ipython itself. This gives them a
513 # existing and NEVER being used by ipython itself. This gives them a
514 # convenient location for storing additional information and state
514 # convenient location for storing additional information and state
515 # their extensions may require, without fear of collisions with other
515 # their extensions may require, without fear of collisions with other
516 # ipython names that may develop later.
516 # ipython names that may develop later.
517 self.meta = Struct()
517 self.meta = Struct()
518
518
519 # Temporary files used for various purposes. Deleted at exit.
519 # Temporary files used for various purposes. Deleted at exit.
520 self.tempfiles = []
520 self.tempfiles = []
521
521
522 # Keep track of readline usage (later set by init_readline)
522 # Keep track of readline usage (later set by init_readline)
523 self.has_readline = False
523 self.has_readline = False
524
524
525 # keep track of where we started running (mainly for crash post-mortem)
525 # keep track of where we started running (mainly for crash post-mortem)
526 # This is not being used anywhere currently.
526 # This is not being used anywhere currently.
527 self.starting_dir = os.getcwdu()
527 self.starting_dir = os.getcwdu()
528
528
529 # Indentation management
529 # Indentation management
530 self.indent_current_nsp = 0
530 self.indent_current_nsp = 0
531
531
532 # Dict to track post-execution functions that have been registered
532 # Dict to track post-execution functions that have been registered
533 self._post_execute = {}
533 self._post_execute = {}
534
534
535 def init_environment(self):
535 def init_environment(self):
536 """Any changes we need to make to the user's environment."""
536 """Any changes we need to make to the user's environment."""
537 pass
537 pass
538
538
539 def init_encoding(self):
539 def init_encoding(self):
540 # Get system encoding at startup time. Certain terminals (like Emacs
540 # Get system encoding at startup time. Certain terminals (like Emacs
541 # under Win32 have it set to None, and we need to have a known valid
541 # under Win32 have it set to None, and we need to have a known valid
542 # encoding to use in the raw_input() method
542 # encoding to use in the raw_input() method
543 try:
543 try:
544 self.stdin_encoding = sys.stdin.encoding or 'ascii'
544 self.stdin_encoding = sys.stdin.encoding or 'ascii'
545 except AttributeError:
545 except AttributeError:
546 self.stdin_encoding = 'ascii'
546 self.stdin_encoding = 'ascii'
547
547
548 def init_syntax_highlighting(self):
548 def init_syntax_highlighting(self):
549 # Python source parser/formatter for syntax highlighting
549 # Python source parser/formatter for syntax highlighting
550 pyformat = PyColorize.Parser().format
550 pyformat = PyColorize.Parser().format
551 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
551 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
552
552
553 def init_pushd_popd_magic(self):
553 def init_pushd_popd_magic(self):
554 # for pushd/popd management
554 # for pushd/popd management
555 try:
555 try:
556 self.home_dir = get_home_dir()
556 self.home_dir = get_home_dir()
557 except HomeDirError, msg:
557 except HomeDirError, msg:
558 fatal(msg)
558 fatal(msg)
559
559
560 self.dir_stack = []
560 self.dir_stack = []
561
561
562 def init_logger(self):
562 def init_logger(self):
563 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
563 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
564 logmode='rotate')
564 logmode='rotate')
565
565
566 def init_logstart(self):
566 def init_logstart(self):
567 """Initialize logging in case it was requested at the command line.
567 """Initialize logging in case it was requested at the command line.
568 """
568 """
569 if self.logappend:
569 if self.logappend:
570 self.magic_logstart(self.logappend + ' append')
570 self.magic_logstart(self.logappend + ' append')
571 elif self.logfile:
571 elif self.logfile:
572 self.magic_logstart(self.logfile)
572 self.magic_logstart(self.logfile)
573 elif self.logstart:
573 elif self.logstart:
574 self.magic_logstart()
574 self.magic_logstart()
575
575
576 def init_builtins(self):
576 def init_builtins(self):
577 self.builtin_trap = BuiltinTrap(shell=self)
577 self.builtin_trap = BuiltinTrap(shell=self)
578
578
579 def init_inspector(self):
579 def init_inspector(self):
580 # Object inspector
580 # Object inspector
581 self.inspector = oinspect.Inspector(oinspect.InspectColors,
581 self.inspector = oinspect.Inspector(oinspect.InspectColors,
582 PyColorize.ANSICodeColors,
582 PyColorize.ANSICodeColors,
583 'NoColor',
583 'NoColor',
584 self.object_info_string_level)
584 self.object_info_string_level)
585
585
586 def init_io(self):
586 def init_io(self):
587 # This will just use sys.stdout and sys.stderr. If you want to
587 # This will just use sys.stdout and sys.stderr. If you want to
588 # override sys.stdout and sys.stderr themselves, you need to do that
588 # override sys.stdout and sys.stderr themselves, you need to do that
589 # *before* instantiating this class, because io holds onto
589 # *before* instantiating this class, because io holds onto
590 # references to the underlying streams.
590 # references to the underlying streams.
591 if sys.platform == 'win32' and self.has_readline:
591 if sys.platform == 'win32' and self.has_readline:
592 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
592 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
593 else:
593 else:
594 io.stdout = io.IOStream(sys.stdout)
594 io.stdout = io.IOStream(sys.stdout)
595 io.stderr = io.IOStream(sys.stderr)
595 io.stderr = io.IOStream(sys.stderr)
596
596
597 def init_prompts(self):
597 def init_prompts(self):
598 # TODO: This is a pass for now because the prompts are managed inside
598 # TODO: This is a pass for now because the prompts are managed inside
599 # the DisplayHook. Once there is a separate prompt manager, this
599 # the DisplayHook. Once there is a separate prompt manager, this
600 # will initialize that object and all prompt related information.
600 # will initialize that object and all prompt related information.
601 pass
601 pass
602
602
603 def init_display_formatter(self):
603 def init_display_formatter(self):
604 self.display_formatter = DisplayFormatter(config=self.config)
604 self.display_formatter = DisplayFormatter(config=self.config)
605 self.configurables.append(self.display_formatter)
605 self.configurables.append(self.display_formatter)
606
606
607 def init_display_pub(self):
607 def init_display_pub(self):
608 self.display_pub = self.display_pub_class(config=self.config)
608 self.display_pub = self.display_pub_class(config=self.config)
609 self.configurables.append(self.display_pub)
609 self.configurables.append(self.display_pub)
610
610
611 def init_displayhook(self):
611 def init_displayhook(self):
612 # Initialize displayhook, set in/out prompts and printing system
612 # Initialize displayhook, set in/out prompts and printing system
613 self.displayhook = self.displayhook_class(
613 self.displayhook = self.displayhook_class(
614 config=self.config,
614 config=self.config,
615 shell=self,
615 shell=self,
616 cache_size=self.cache_size,
616 cache_size=self.cache_size,
617 input_sep = self.separate_in,
617 input_sep = self.separate_in,
618 output_sep = self.separate_out,
618 output_sep = self.separate_out,
619 output_sep2 = self.separate_out2,
619 output_sep2 = self.separate_out2,
620 ps1 = self.prompt_in1,
620 ps1 = self.prompt_in1,
621 ps2 = self.prompt_in2,
621 ps2 = self.prompt_in2,
622 ps_out = self.prompt_out,
622 ps_out = self.prompt_out,
623 pad_left = self.prompts_pad_left
623 pad_left = self.prompts_pad_left
624 )
624 )
625 self.configurables.append(self.displayhook)
625 self.configurables.append(self.displayhook)
626 # This is a context manager that installs/revmoes the displayhook at
626 # This is a context manager that installs/revmoes the displayhook at
627 # the appropriate time.
627 # the appropriate time.
628 self.display_trap = DisplayTrap(hook=self.displayhook)
628 self.display_trap = DisplayTrap(hook=self.displayhook)
629
629
630 def init_reload_doctest(self):
630 def init_reload_doctest(self):
631 # Do a proper resetting of doctest, including the necessary displayhook
631 # Do a proper resetting of doctest, including the necessary displayhook
632 # monkeypatching
632 # monkeypatching
633 try:
633 try:
634 doctest_reload()
634 doctest_reload()
635 except ImportError:
635 except ImportError:
636 warn("doctest module does not exist.")
636 warn("doctest module does not exist.")
637
637
638 #-------------------------------------------------------------------------
638 #-------------------------------------------------------------------------
639 # Things related to injections into the sys module
639 # Things related to injections into the sys module
640 #-------------------------------------------------------------------------
640 #-------------------------------------------------------------------------
641
641
642 def save_sys_module_state(self):
642 def save_sys_module_state(self):
643 """Save the state of hooks in the sys module.
643 """Save the state of hooks in the sys module.
644
644
645 This has to be called after self.user_ns is created.
645 This has to be called after self.user_ns is created.
646 """
646 """
647 self._orig_sys_module_state = {}
647 self._orig_sys_module_state = {}
648 self._orig_sys_module_state['stdin'] = sys.stdin
648 self._orig_sys_module_state['stdin'] = sys.stdin
649 self._orig_sys_module_state['stdout'] = sys.stdout
649 self._orig_sys_module_state['stdout'] = sys.stdout
650 self._orig_sys_module_state['stderr'] = sys.stderr
650 self._orig_sys_module_state['stderr'] = sys.stderr
651 self._orig_sys_module_state['excepthook'] = sys.excepthook
651 self._orig_sys_module_state['excepthook'] = sys.excepthook
652 try:
652 try:
653 self._orig_sys_modules_main_name = self.user_ns['__name__']
653 self._orig_sys_modules_main_name = self.user_ns['__name__']
654 except KeyError:
654 except KeyError:
655 pass
655 pass
656
656
657 def restore_sys_module_state(self):
657 def restore_sys_module_state(self):
658 """Restore the state of the sys module."""
658 """Restore the state of the sys module."""
659 try:
659 try:
660 for k, v in self._orig_sys_module_state.iteritems():
660 for k, v in self._orig_sys_module_state.iteritems():
661 setattr(sys, k, v)
661 setattr(sys, k, v)
662 except AttributeError:
662 except AttributeError:
663 pass
663 pass
664 # Reset what what done in self.init_sys_modules
664 # Reset what what done in self.init_sys_modules
665 try:
665 try:
666 sys.modules[self.user_ns['__name__']] = self._orig_sys_modules_main_name
666 sys.modules[self.user_ns['__name__']] = self._orig_sys_modules_main_name
667 except (AttributeError, KeyError):
667 except (AttributeError, KeyError):
668 pass
668 pass
669
669
670 #-------------------------------------------------------------------------
670 #-------------------------------------------------------------------------
671 # Things related to hooks
671 # Things related to hooks
672 #-------------------------------------------------------------------------
672 #-------------------------------------------------------------------------
673
673
674 def init_hooks(self):
674 def init_hooks(self):
675 # hooks holds pointers used for user-side customizations
675 # hooks holds pointers used for user-side customizations
676 self.hooks = Struct()
676 self.hooks = Struct()
677
677
678 self.strdispatchers = {}
678 self.strdispatchers = {}
679
679
680 # Set all default hooks, defined in the IPython.hooks module.
680 # Set all default hooks, defined in the IPython.hooks module.
681 hooks = IPython.core.hooks
681 hooks = IPython.core.hooks
682 for hook_name in hooks.__all__:
682 for hook_name in hooks.__all__:
683 # default hooks have priority 100, i.e. low; user hooks should have
683 # default hooks have priority 100, i.e. low; user hooks should have
684 # 0-100 priority
684 # 0-100 priority
685 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
685 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
686
686
687 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
687 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
688 """set_hook(name,hook) -> sets an internal IPython hook.
688 """set_hook(name,hook) -> sets an internal IPython hook.
689
689
690 IPython exposes some of its internal API as user-modifiable hooks. By
690 IPython exposes some of its internal API as user-modifiable hooks. By
691 adding your function to one of these hooks, you can modify IPython's
691 adding your function to one of these hooks, you can modify IPython's
692 behavior to call at runtime your own routines."""
692 behavior to call at runtime your own routines."""
693
693
694 # At some point in the future, this should validate the hook before it
694 # At some point in the future, this should validate the hook before it
695 # accepts it. Probably at least check that the hook takes the number
695 # accepts it. Probably at least check that the hook takes the number
696 # of args it's supposed to.
696 # of args it's supposed to.
697
697
698 f = types.MethodType(hook,self)
698 f = types.MethodType(hook,self)
699
699
700 # check if the hook is for strdispatcher first
700 # check if the hook is for strdispatcher first
701 if str_key is not None:
701 if str_key is not None:
702 sdp = self.strdispatchers.get(name, StrDispatch())
702 sdp = self.strdispatchers.get(name, StrDispatch())
703 sdp.add_s(str_key, f, priority )
703 sdp.add_s(str_key, f, priority )
704 self.strdispatchers[name] = sdp
704 self.strdispatchers[name] = sdp
705 return
705 return
706 if re_key is not None:
706 if re_key is not None:
707 sdp = self.strdispatchers.get(name, StrDispatch())
707 sdp = self.strdispatchers.get(name, StrDispatch())
708 sdp.add_re(re.compile(re_key), f, priority )
708 sdp.add_re(re.compile(re_key), f, priority )
709 self.strdispatchers[name] = sdp
709 self.strdispatchers[name] = sdp
710 return
710 return
711
711
712 dp = getattr(self.hooks, name, None)
712 dp = getattr(self.hooks, name, None)
713 if name not in IPython.core.hooks.__all__:
713 if name not in IPython.core.hooks.__all__:
714 print "Warning! Hook '%s' is not one of %s" % \
714 print "Warning! Hook '%s' is not one of %s" % \
715 (name, IPython.core.hooks.__all__ )
715 (name, IPython.core.hooks.__all__ )
716 if not dp:
716 if not dp:
717 dp = IPython.core.hooks.CommandChainDispatcher()
717 dp = IPython.core.hooks.CommandChainDispatcher()
718
718
719 try:
719 try:
720 dp.add(f,priority)
720 dp.add(f,priority)
721 except AttributeError:
721 except AttributeError:
722 # it was not commandchain, plain old func - replace
722 # it was not commandchain, plain old func - replace
723 dp = f
723 dp = f
724
724
725 setattr(self.hooks,name, dp)
725 setattr(self.hooks,name, dp)
726
726
727 def register_post_execute(self, func):
727 def register_post_execute(self, func):
728 """Register a function for calling after code execution.
728 """Register a function for calling after code execution.
729 """
729 """
730 if not callable(func):
730 if not callable(func):
731 raise ValueError('argument %s must be callable' % func)
731 raise ValueError('argument %s must be callable' % func)
732 self._post_execute[func] = True
732 self._post_execute[func] = True
733
733
734 #-------------------------------------------------------------------------
734 #-------------------------------------------------------------------------
735 # Things related to the "main" module
735 # Things related to the "main" module
736 #-------------------------------------------------------------------------
736 #-------------------------------------------------------------------------
737
737
738 def new_main_mod(self,ns=None):
738 def new_main_mod(self,ns=None):
739 """Return a new 'main' module object for user code execution.
739 """Return a new 'main' module object for user code execution.
740 """
740 """
741 main_mod = self._user_main_module
741 main_mod = self._user_main_module
742 init_fakemod_dict(main_mod,ns)
742 init_fakemod_dict(main_mod,ns)
743 return main_mod
743 return main_mod
744
744
745 def cache_main_mod(self,ns,fname):
745 def cache_main_mod(self,ns,fname):
746 """Cache a main module's namespace.
746 """Cache a main module's namespace.
747
747
748 When scripts are executed via %run, we must keep a reference to the
748 When scripts are executed via %run, we must keep a reference to the
749 namespace of their __main__ module (a FakeModule instance) around so
749 namespace of their __main__ module (a FakeModule instance) around so
750 that Python doesn't clear it, rendering objects defined therein
750 that Python doesn't clear it, rendering objects defined therein
751 useless.
751 useless.
752
752
753 This method keeps said reference in a private dict, keyed by the
753 This method keeps said reference in a private dict, keyed by the
754 absolute path of the module object (which corresponds to the script
754 absolute path of the module object (which corresponds to the script
755 path). This way, for multiple executions of the same script we only
755 path). This way, for multiple executions of the same script we only
756 keep one copy of the namespace (the last one), thus preventing memory
756 keep one copy of the namespace (the last one), thus preventing memory
757 leaks from old references while allowing the objects from the last
757 leaks from old references while allowing the objects from the last
758 execution to be accessible.
758 execution to be accessible.
759
759
760 Note: we can not allow the actual FakeModule instances to be deleted,
760 Note: we can not allow the actual FakeModule instances to be deleted,
761 because of how Python tears down modules (it hard-sets all their
761 because of how Python tears down modules (it hard-sets all their
762 references to None without regard for reference counts). This method
762 references to None without regard for reference counts). This method
763 must therefore make a *copy* of the given namespace, to allow the
763 must therefore make a *copy* of the given namespace, to allow the
764 original module's __dict__ to be cleared and reused.
764 original module's __dict__ to be cleared and reused.
765
765
766
766
767 Parameters
767 Parameters
768 ----------
768 ----------
769 ns : a namespace (a dict, typically)
769 ns : a namespace (a dict, typically)
770
770
771 fname : str
771 fname : str
772 Filename associated with the namespace.
772 Filename associated with the namespace.
773
773
774 Examples
774 Examples
775 --------
775 --------
776
776
777 In [10]: import IPython
777 In [10]: import IPython
778
778
779 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
779 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
780
780
781 In [12]: IPython.__file__ in _ip._main_ns_cache
781 In [12]: IPython.__file__ in _ip._main_ns_cache
782 Out[12]: True
782 Out[12]: True
783 """
783 """
784 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
784 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
785
785
786 def clear_main_mod_cache(self):
786 def clear_main_mod_cache(self):
787 """Clear the cache of main modules.
787 """Clear the cache of main modules.
788
788
789 Mainly for use by utilities like %reset.
789 Mainly for use by utilities like %reset.
790
790
791 Examples
791 Examples
792 --------
792 --------
793
793
794 In [15]: import IPython
794 In [15]: import IPython
795
795
796 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
796 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
797
797
798 In [17]: len(_ip._main_ns_cache) > 0
798 In [17]: len(_ip._main_ns_cache) > 0
799 Out[17]: True
799 Out[17]: True
800
800
801 In [18]: _ip.clear_main_mod_cache()
801 In [18]: _ip.clear_main_mod_cache()
802
802
803 In [19]: len(_ip._main_ns_cache) == 0
803 In [19]: len(_ip._main_ns_cache) == 0
804 Out[19]: True
804 Out[19]: True
805 """
805 """
806 self._main_ns_cache.clear()
806 self._main_ns_cache.clear()
807
807
808 #-------------------------------------------------------------------------
808 #-------------------------------------------------------------------------
809 # Things related to debugging
809 # Things related to debugging
810 #-------------------------------------------------------------------------
810 #-------------------------------------------------------------------------
811
811
812 def init_pdb(self):
812 def init_pdb(self):
813 # Set calling of pdb on exceptions
813 # Set calling of pdb on exceptions
814 # self.call_pdb is a property
814 # self.call_pdb is a property
815 self.call_pdb = self.pdb
815 self.call_pdb = self.pdb
816
816
817 def _get_call_pdb(self):
817 def _get_call_pdb(self):
818 return self._call_pdb
818 return self._call_pdb
819
819
820 def _set_call_pdb(self,val):
820 def _set_call_pdb(self,val):
821
821
822 if val not in (0,1,False,True):
822 if val not in (0,1,False,True):
823 raise ValueError,'new call_pdb value must be boolean'
823 raise ValueError,'new call_pdb value must be boolean'
824
824
825 # store value in instance
825 # store value in instance
826 self._call_pdb = val
826 self._call_pdb = val
827
827
828 # notify the actual exception handlers
828 # notify the actual exception handlers
829 self.InteractiveTB.call_pdb = val
829 self.InteractiveTB.call_pdb = val
830
830
831 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
831 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
832 'Control auto-activation of pdb at exceptions')
832 'Control auto-activation of pdb at exceptions')
833
833
834 def debugger(self,force=False):
834 def debugger(self,force=False):
835 """Call the pydb/pdb debugger.
835 """Call the pydb/pdb debugger.
836
836
837 Keywords:
837 Keywords:
838
838
839 - force(False): by default, this routine checks the instance call_pdb
839 - force(False): by default, this routine checks the instance call_pdb
840 flag and does not actually invoke the debugger if the flag is false.
840 flag and does not actually invoke the debugger if the flag is false.
841 The 'force' option forces the debugger to activate even if the flag
841 The 'force' option forces the debugger to activate even if the flag
842 is false.
842 is false.
843 """
843 """
844
844
845 if not (force or self.call_pdb):
845 if not (force or self.call_pdb):
846 return
846 return
847
847
848 if not hasattr(sys,'last_traceback'):
848 if not hasattr(sys,'last_traceback'):
849 error('No traceback has been produced, nothing to debug.')
849 error('No traceback has been produced, nothing to debug.')
850 return
850 return
851
851
852 # use pydb if available
852 # use pydb if available
853 if debugger.has_pydb:
853 if debugger.has_pydb:
854 from pydb import pm
854 from pydb import pm
855 else:
855 else:
856 # fallback to our internal debugger
856 # fallback to our internal debugger
857 pm = lambda : self.InteractiveTB.debugger(force=True)
857 pm = lambda : self.InteractiveTB.debugger(force=True)
858
858
859 with self.readline_no_record:
859 with self.readline_no_record:
860 pm()
860 pm()
861
861
862 #-------------------------------------------------------------------------
862 #-------------------------------------------------------------------------
863 # Things related to IPython's various namespaces
863 # Things related to IPython's various namespaces
864 #-------------------------------------------------------------------------
864 #-------------------------------------------------------------------------
865
865
866 def init_create_namespaces(self, user_ns=None, user_global_ns=None):
866 def init_create_namespaces(self, user_ns=None, user_global_ns=None):
867 # Create the namespace where the user will operate. user_ns is
867 # Create the namespace where the user will operate. user_ns is
868 # normally the only one used, and it is passed to the exec calls as
868 # normally the only one used, and it is passed to the exec calls as
869 # the locals argument. But we do carry a user_global_ns namespace
869 # the locals argument. But we do carry a user_global_ns namespace
870 # given as the exec 'globals' argument, This is useful in embedding
870 # given as the exec 'globals' argument, This is useful in embedding
871 # situations where the ipython shell opens in a context where the
871 # situations where the ipython shell opens in a context where the
872 # distinction between locals and globals is meaningful. For
872 # distinction between locals and globals is meaningful. For
873 # non-embedded contexts, it is just the same object as the user_ns dict.
873 # non-embedded contexts, it is just the same object as the user_ns dict.
874
874
875 # FIXME. For some strange reason, __builtins__ is showing up at user
875 # FIXME. For some strange reason, __builtins__ is showing up at user
876 # level as a dict instead of a module. This is a manual fix, but I
876 # level as a dict instead of a module. This is a manual fix, but I
877 # should really track down where the problem is coming from. Alex
877 # should really track down where the problem is coming from. Alex
878 # Schmolck reported this problem first.
878 # Schmolck reported this problem first.
879
879
880 # A useful post by Alex Martelli on this topic:
880 # A useful post by Alex Martelli on this topic:
881 # Re: inconsistent value from __builtins__
881 # Re: inconsistent value from __builtins__
882 # Von: Alex Martelli <aleaxit@yahoo.com>
882 # Von: Alex Martelli <aleaxit@yahoo.com>
883 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
883 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
884 # Gruppen: comp.lang.python
884 # Gruppen: comp.lang.python
885
885
886 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
886 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
887 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
887 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
888 # > <type 'dict'>
888 # > <type 'dict'>
889 # > >>> print type(__builtins__)
889 # > >>> print type(__builtins__)
890 # > <type 'module'>
890 # > <type 'module'>
891 # > Is this difference in return value intentional?
891 # > Is this difference in return value intentional?
892
892
893 # Well, it's documented that '__builtins__' can be either a dictionary
893 # Well, it's documented that '__builtins__' can be either a dictionary
894 # or a module, and it's been that way for a long time. Whether it's
894 # or a module, and it's been that way for a long time. Whether it's
895 # intentional (or sensible), I don't know. In any case, the idea is
895 # intentional (or sensible), I don't know. In any case, the idea is
896 # that if you need to access the built-in namespace directly, you
896 # that if you need to access the built-in namespace directly, you
897 # should start with "import __builtin__" (note, no 's') which will
897 # should start with "import __builtin__" (note, no 's') which will
898 # definitely give you a module. Yeah, it's somewhat confusing:-(.
898 # definitely give you a module. Yeah, it's somewhat confusing:-(.
899
899
900 # These routines return properly built dicts as needed by the rest of
900 # These routines return properly built dicts as needed by the rest of
901 # the code, and can also be used by extension writers to generate
901 # the code, and can also be used by extension writers to generate
902 # properly initialized namespaces.
902 # properly initialized namespaces.
903 user_ns, user_global_ns = self.make_user_namespaces(user_ns,
903 user_ns, user_global_ns = self.make_user_namespaces(user_ns,
904 user_global_ns)
904 user_global_ns)
905
905
906 # Assign namespaces
906 # Assign namespaces
907 # This is the namespace where all normal user variables live
907 # This is the namespace where all normal user variables live
908 self.user_ns = user_ns
908 self.user_ns = user_ns
909 self.user_global_ns = user_global_ns
909 self.user_global_ns = user_global_ns
910
910
911 # An auxiliary namespace that checks what parts of the user_ns were
911 # An auxiliary namespace that checks what parts of the user_ns were
912 # loaded at startup, so we can list later only variables defined in
912 # loaded at startup, so we can list later only variables defined in
913 # actual interactive use. Since it is always a subset of user_ns, it
913 # actual interactive use. Since it is always a subset of user_ns, it
914 # doesn't need to be separately tracked in the ns_table.
914 # doesn't need to be separately tracked in the ns_table.
915 self.user_ns_hidden = {}
915 self.user_ns_hidden = {}
916
916
917 # A namespace to keep track of internal data structures to prevent
917 # A namespace to keep track of internal data structures to prevent
918 # them from cluttering user-visible stuff. Will be updated later
918 # them from cluttering user-visible stuff. Will be updated later
919 self.internal_ns = {}
919 self.internal_ns = {}
920
920
921 # Now that FakeModule produces a real module, we've run into a nasty
921 # Now that FakeModule produces a real module, we've run into a nasty
922 # problem: after script execution (via %run), the module where the user
922 # problem: after script execution (via %run), the module where the user
923 # code ran is deleted. Now that this object is a true module (needed
923 # code ran is deleted. Now that this object is a true module (needed
924 # so docetst and other tools work correctly), the Python module
924 # so docetst and other tools work correctly), the Python module
925 # teardown mechanism runs over it, and sets to None every variable
925 # teardown mechanism runs over it, and sets to None every variable
926 # present in that module. Top-level references to objects from the
926 # present in that module. Top-level references to objects from the
927 # script survive, because the user_ns is updated with them. However,
927 # script survive, because the user_ns is updated with them. However,
928 # calling functions defined in the script that use other things from
928 # calling functions defined in the script that use other things from
929 # the script will fail, because the function's closure had references
929 # the script will fail, because the function's closure had references
930 # to the original objects, which are now all None. So we must protect
930 # to the original objects, which are now all None. So we must protect
931 # these modules from deletion by keeping a cache.
931 # these modules from deletion by keeping a cache.
932 #
932 #
933 # To avoid keeping stale modules around (we only need the one from the
933 # To avoid keeping stale modules around (we only need the one from the
934 # last run), we use a dict keyed with the full path to the script, so
934 # last run), we use a dict keyed with the full path to the script, so
935 # only the last version of the module is held in the cache. Note,
935 # only the last version of the module is held in the cache. Note,
936 # however, that we must cache the module *namespace contents* (their
936 # however, that we must cache the module *namespace contents* (their
937 # __dict__). Because if we try to cache the actual modules, old ones
937 # __dict__). Because if we try to cache the actual modules, old ones
938 # (uncached) could be destroyed while still holding references (such as
938 # (uncached) could be destroyed while still holding references (such as
939 # those held by GUI objects that tend to be long-lived)>
939 # those held by GUI objects that tend to be long-lived)>
940 #
940 #
941 # The %reset command will flush this cache. See the cache_main_mod()
941 # The %reset command will flush this cache. See the cache_main_mod()
942 # and clear_main_mod_cache() methods for details on use.
942 # and clear_main_mod_cache() methods for details on use.
943
943
944 # This is the cache used for 'main' namespaces
944 # This is the cache used for 'main' namespaces
945 self._main_ns_cache = {}
945 self._main_ns_cache = {}
946 # And this is the single instance of FakeModule whose __dict__ we keep
946 # And this is the single instance of FakeModule whose __dict__ we keep
947 # copying and clearing for reuse on each %run
947 # copying and clearing for reuse on each %run
948 self._user_main_module = FakeModule()
948 self._user_main_module = FakeModule()
949
949
950 # A table holding all the namespaces IPython deals with, so that
950 # A table holding all the namespaces IPython deals with, so that
951 # introspection facilities can search easily.
951 # introspection facilities can search easily.
952 self.ns_table = {'user':user_ns,
952 self.ns_table = {'user':user_ns,
953 'user_global':user_global_ns,
953 'user_global':user_global_ns,
954 'internal':self.internal_ns,
954 'internal':self.internal_ns,
955 'builtin':builtin_mod.__dict__
955 'builtin':builtin_mod.__dict__
956 }
956 }
957
957
958 # Similarly, track all namespaces where references can be held and that
958 # Similarly, track all namespaces where references can be held and that
959 # we can safely clear (so it can NOT include builtin). This one can be
959 # we can safely clear (so it can NOT include builtin). This one can be
960 # a simple list. Note that the main execution namespaces, user_ns and
960 # a simple list. Note that the main execution namespaces, user_ns and
961 # user_global_ns, can NOT be listed here, as clearing them blindly
961 # user_global_ns, can NOT be listed here, as clearing them blindly
962 # causes errors in object __del__ methods. Instead, the reset() method
962 # causes errors in object __del__ methods. Instead, the reset() method
963 # clears them manually and carefully.
963 # clears them manually and carefully.
964 self.ns_refs_table = [ self.user_ns_hidden,
964 self.ns_refs_table = [ self.user_ns_hidden,
965 self.internal_ns, self._main_ns_cache ]
965 self.internal_ns, self._main_ns_cache ]
966
966
967 def make_user_namespaces(self, user_ns=None, user_global_ns=None):
967 def make_user_namespaces(self, user_ns=None, user_global_ns=None):
968 """Return a valid local and global user interactive namespaces.
968 """Return a valid local and global user interactive namespaces.
969
969
970 This builds a dict with the minimal information needed to operate as a
970 This builds a dict with the minimal information needed to operate as a
971 valid IPython user namespace, which you can pass to the various
971 valid IPython user namespace, which you can pass to the various
972 embedding classes in ipython. The default implementation returns the
972 embedding classes in ipython. The default implementation returns the
973 same dict for both the locals and the globals to allow functions to
973 same dict for both the locals and the globals to allow functions to
974 refer to variables in the namespace. Customized implementations can
974 refer to variables in the namespace. Customized implementations can
975 return different dicts. The locals dictionary can actually be anything
975 return different dicts. The locals dictionary can actually be anything
976 following the basic mapping protocol of a dict, but the globals dict
976 following the basic mapping protocol of a dict, but the globals dict
977 must be a true dict, not even a subclass. It is recommended that any
977 must be a true dict, not even a subclass. It is recommended that any
978 custom object for the locals namespace synchronize with the globals
978 custom object for the locals namespace synchronize with the globals
979 dict somehow.
979 dict somehow.
980
980
981 Raises TypeError if the provided globals namespace is not a true dict.
981 Raises TypeError if the provided globals namespace is not a true dict.
982
982
983 Parameters
983 Parameters
984 ----------
984 ----------
985 user_ns : dict-like, optional
985 user_ns : dict-like, optional
986 The current user namespace. The items in this namespace should
986 The current user namespace. The items in this namespace should
987 be included in the output. If None, an appropriate blank
987 be included in the output. If None, an appropriate blank
988 namespace should be created.
988 namespace should be created.
989 user_global_ns : dict, optional
989 user_global_ns : dict, optional
990 The current user global namespace. The items in this namespace
990 The current user global namespace. The items in this namespace
991 should be included in the output. If None, an appropriate
991 should be included in the output. If None, an appropriate
992 blank namespace should be created.
992 blank namespace should be created.
993
993
994 Returns
994 Returns
995 -------
995 -------
996 A pair of dictionary-like object to be used as the local namespace
996 A pair of dictionary-like object to be used as the local namespace
997 of the interpreter and a dict to be used as the global namespace.
997 of the interpreter and a dict to be used as the global namespace.
998 """
998 """
999
999
1000
1000
1001 # We must ensure that __builtin__ (without the final 's') is always
1001 # We must ensure that __builtin__ (without the final 's') is always
1002 # available and pointing to the __builtin__ *module*. For more details:
1002 # available and pointing to the __builtin__ *module*. For more details:
1003 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1003 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1004
1004
1005 if user_ns is None:
1005 if user_ns is None:
1006 # Set __name__ to __main__ to better match the behavior of the
1006 # Set __name__ to __main__ to better match the behavior of the
1007 # normal interpreter.
1007 # normal interpreter.
1008 user_ns = {'__name__' :'__main__',
1008 user_ns = {'__name__' :'__main__',
1009 py3compat.builtin_mod_name: builtin_mod,
1009 py3compat.builtin_mod_name: builtin_mod,
1010 '__builtins__' : builtin_mod,
1010 '__builtins__' : builtin_mod,
1011 }
1011 }
1012 else:
1012 else:
1013 user_ns.setdefault('__name__','__main__')
1013 user_ns.setdefault('__name__','__main__')
1014 user_ns.setdefault(py3compat.builtin_mod_name,builtin_mod)
1014 user_ns.setdefault(py3compat.builtin_mod_name,builtin_mod)
1015 user_ns.setdefault('__builtins__',builtin_mod)
1015 user_ns.setdefault('__builtins__',builtin_mod)
1016
1016
1017 if user_global_ns is None:
1017 if user_global_ns is None:
1018 user_global_ns = user_ns
1018 user_global_ns = user_ns
1019 if type(user_global_ns) is not dict:
1019 if type(user_global_ns) is not dict:
1020 raise TypeError("user_global_ns must be a true dict; got %r"
1020 raise TypeError("user_global_ns must be a true dict; got %r"
1021 % type(user_global_ns))
1021 % type(user_global_ns))
1022
1022
1023 return user_ns, user_global_ns
1023 return user_ns, user_global_ns
1024
1024
1025 def init_sys_modules(self):
1025 def init_sys_modules(self):
1026 # We need to insert into sys.modules something that looks like a
1026 # We need to insert into sys.modules something that looks like a
1027 # module but which accesses the IPython namespace, for shelve and
1027 # module but which accesses the IPython namespace, for shelve and
1028 # pickle to work interactively. Normally they rely on getting
1028 # pickle to work interactively. Normally they rely on getting
1029 # everything out of __main__, but for embedding purposes each IPython
1029 # everything out of __main__, but for embedding purposes each IPython
1030 # instance has its own private namespace, so we can't go shoving
1030 # instance has its own private namespace, so we can't go shoving
1031 # everything into __main__.
1031 # everything into __main__.
1032
1032
1033 # note, however, that we should only do this for non-embedded
1033 # note, however, that we should only do this for non-embedded
1034 # ipythons, which really mimic the __main__.__dict__ with their own
1034 # ipythons, which really mimic the __main__.__dict__ with their own
1035 # namespace. Embedded instances, on the other hand, should not do
1035 # namespace. Embedded instances, on the other hand, should not do
1036 # this because they need to manage the user local/global namespaces
1036 # this because they need to manage the user local/global namespaces
1037 # only, but they live within a 'normal' __main__ (meaning, they
1037 # only, but they live within a 'normal' __main__ (meaning, they
1038 # shouldn't overtake the execution environment of the script they're
1038 # shouldn't overtake the execution environment of the script they're
1039 # embedded in).
1039 # embedded in).
1040
1040
1041 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1041 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1042
1042
1043 try:
1043 try:
1044 main_name = self.user_ns['__name__']
1044 main_name = self.user_ns['__name__']
1045 except KeyError:
1045 except KeyError:
1046 raise KeyError('user_ns dictionary MUST have a "__name__" key')
1046 raise KeyError('user_ns dictionary MUST have a "__name__" key')
1047 else:
1047 else:
1048 sys.modules[main_name] = FakeModule(self.user_ns)
1048 sys.modules[main_name] = FakeModule(self.user_ns)
1049
1049
1050 def init_user_ns(self):
1050 def init_user_ns(self):
1051 """Initialize all user-visible namespaces to their minimum defaults.
1051 """Initialize all user-visible namespaces to their minimum defaults.
1052
1052
1053 Certain history lists are also initialized here, as they effectively
1053 Certain history lists are also initialized here, as they effectively
1054 act as user namespaces.
1054 act as user namespaces.
1055
1055
1056 Notes
1056 Notes
1057 -----
1057 -----
1058 All data structures here are only filled in, they are NOT reset by this
1058 All data structures here are only filled in, they are NOT reset by this
1059 method. If they were not empty before, data will simply be added to
1059 method. If they were not empty before, data will simply be added to
1060 therm.
1060 therm.
1061 """
1061 """
1062 # This function works in two parts: first we put a few things in
1062 # This function works in two parts: first we put a few things in
1063 # user_ns, and we sync that contents into user_ns_hidden so that these
1063 # user_ns, and we sync that contents into user_ns_hidden so that these
1064 # initial variables aren't shown by %who. After the sync, we add the
1064 # initial variables aren't shown by %who. After the sync, we add the
1065 # rest of what we *do* want the user to see with %who even on a new
1065 # rest of what we *do* want the user to see with %who even on a new
1066 # session (probably nothing, so theye really only see their own stuff)
1066 # session (probably nothing, so theye really only see their own stuff)
1067
1067
1068 # The user dict must *always* have a __builtin__ reference to the
1068 # The user dict must *always* have a __builtin__ reference to the
1069 # Python standard __builtin__ namespace, which must be imported.
1069 # Python standard __builtin__ namespace, which must be imported.
1070 # This is so that certain operations in prompt evaluation can be
1070 # This is so that certain operations in prompt evaluation can be
1071 # reliably executed with builtins. Note that we can NOT use
1071 # reliably executed with builtins. Note that we can NOT use
1072 # __builtins__ (note the 's'), because that can either be a dict or a
1072 # __builtins__ (note the 's'), because that can either be a dict or a
1073 # module, and can even mutate at runtime, depending on the context
1073 # module, and can even mutate at runtime, depending on the context
1074 # (Python makes no guarantees on it). In contrast, __builtin__ is
1074 # (Python makes no guarantees on it). In contrast, __builtin__ is
1075 # always a module object, though it must be explicitly imported.
1075 # always a module object, though it must be explicitly imported.
1076
1076
1077 # For more details:
1077 # For more details:
1078 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1078 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1079 ns = dict(__builtin__ = builtin_mod)
1079 ns = dict(__builtin__ = builtin_mod)
1080
1080
1081 # Put 'help' in the user namespace
1081 # Put 'help' in the user namespace
1082 try:
1082 try:
1083 from site import _Helper
1083 from site import _Helper
1084 ns['help'] = _Helper()
1084 ns['help'] = _Helper()
1085 except ImportError:
1085 except ImportError:
1086 warn('help() not available - check site.py')
1086 warn('help() not available - check site.py')
1087
1087
1088 # make global variables for user access to the histories
1088 # make global variables for user access to the histories
1089 ns['_ih'] = self.history_manager.input_hist_parsed
1089 ns['_ih'] = self.history_manager.input_hist_parsed
1090 ns['_oh'] = self.history_manager.output_hist
1090 ns['_oh'] = self.history_manager.output_hist
1091 ns['_dh'] = self.history_manager.dir_hist
1091 ns['_dh'] = self.history_manager.dir_hist
1092
1092
1093 ns['_sh'] = shadowns
1093 ns['_sh'] = shadowns
1094
1094
1095 # user aliases to input and output histories. These shouldn't show up
1095 # user aliases to input and output histories. These shouldn't show up
1096 # in %who, as they can have very large reprs.
1096 # in %who, as they can have very large reprs.
1097 ns['In'] = self.history_manager.input_hist_parsed
1097 ns['In'] = self.history_manager.input_hist_parsed
1098 ns['Out'] = self.history_manager.output_hist
1098 ns['Out'] = self.history_manager.output_hist
1099
1099
1100 # Store myself as the public api!!!
1100 # Store myself as the public api!!!
1101 ns['get_ipython'] = self.get_ipython
1101 ns['get_ipython'] = self.get_ipython
1102
1102
1103 ns['exit'] = self.exiter
1103 ns['exit'] = self.exiter
1104 ns['quit'] = self.exiter
1104 ns['quit'] = self.exiter
1105
1105
1106 # Sync what we've added so far to user_ns_hidden so these aren't seen
1106 # Sync what we've added so far to user_ns_hidden so these aren't seen
1107 # by %who
1107 # by %who
1108 self.user_ns_hidden.update(ns)
1108 self.user_ns_hidden.update(ns)
1109
1109
1110 # Anything put into ns now would show up in %who. Think twice before
1110 # Anything put into ns now would show up in %who. Think twice before
1111 # putting anything here, as we really want %who to show the user their
1111 # putting anything here, as we really want %who to show the user their
1112 # stuff, not our variables.
1112 # stuff, not our variables.
1113
1113
1114 # Finally, update the real user's namespace
1114 # Finally, update the real user's namespace
1115 self.user_ns.update(ns)
1115 self.user_ns.update(ns)
1116
1116
1117 def reset(self, new_session=True):
1117 def reset(self, new_session=True):
1118 """Clear all internal namespaces, and attempt to release references to
1118 """Clear all internal namespaces, and attempt to release references to
1119 user objects.
1119 user objects.
1120
1120
1121 If new_session is True, a new history session will be opened.
1121 If new_session is True, a new history session will be opened.
1122 """
1122 """
1123 # Clear histories
1123 # Clear histories
1124 self.history_manager.reset(new_session)
1124 self.history_manager.reset(new_session)
1125 # Reset counter used to index all histories
1125 # Reset counter used to index all histories
1126 if new_session:
1126 if new_session:
1127 self.execution_count = 1
1127 self.execution_count = 1
1128
1128
1129 # Flush cached output items
1129 # Flush cached output items
1130 if self.displayhook.do_full_cache:
1130 if self.displayhook.do_full_cache:
1131 self.displayhook.flush()
1131 self.displayhook.flush()
1132
1132
1133 # Restore the user namespaces to minimal usability
1133 # Restore the user namespaces to minimal usability
1134 for ns in self.ns_refs_table:
1134 for ns in self.ns_refs_table:
1135 ns.clear()
1135 ns.clear()
1136
1136
1137 # The main execution namespaces must be cleared very carefully,
1137 # The main execution namespaces must be cleared very carefully,
1138 # skipping the deletion of the builtin-related keys, because doing so
1138 # skipping the deletion of the builtin-related keys, because doing so
1139 # would cause errors in many object's __del__ methods.
1139 # would cause errors in many object's __del__ methods.
1140 for ns in [self.user_ns, self.user_global_ns]:
1140 for ns in [self.user_ns, self.user_global_ns]:
1141 drop_keys = set(ns.keys())
1141 drop_keys = set(ns.keys())
1142 drop_keys.discard('__builtin__')
1142 drop_keys.discard('__builtin__')
1143 drop_keys.discard('__builtins__')
1143 drop_keys.discard('__builtins__')
1144 for k in drop_keys:
1144 for k in drop_keys:
1145 del ns[k]
1145 del ns[k]
1146
1146
1147 # Restore the user namespaces to minimal usability
1147 # Restore the user namespaces to minimal usability
1148 self.init_user_ns()
1148 self.init_user_ns()
1149
1149
1150 # Restore the default and user aliases
1150 # Restore the default and user aliases
1151 self.alias_manager.clear_aliases()
1151 self.alias_manager.clear_aliases()
1152 self.alias_manager.init_aliases()
1152 self.alias_manager.init_aliases()
1153
1153
1154 # Flush the private list of module references kept for script
1154 # Flush the private list of module references kept for script
1155 # execution protection
1155 # execution protection
1156 self.clear_main_mod_cache()
1156 self.clear_main_mod_cache()
1157
1157
1158 # Clear out the namespace from the last %run
1158 # Clear out the namespace from the last %run
1159 self.new_main_mod()
1159 self.new_main_mod()
1160
1160
1161 def del_var(self, varname, by_name=False):
1161 def del_var(self, varname, by_name=False):
1162 """Delete a variable from the various namespaces, so that, as
1162 """Delete a variable from the various namespaces, so that, as
1163 far as possible, we're not keeping any hidden references to it.
1163 far as possible, we're not keeping any hidden references to it.
1164
1164
1165 Parameters
1165 Parameters
1166 ----------
1166 ----------
1167 varname : str
1167 varname : str
1168 The name of the variable to delete.
1168 The name of the variable to delete.
1169 by_name : bool
1169 by_name : bool
1170 If True, delete variables with the given name in each
1170 If True, delete variables with the given name in each
1171 namespace. If False (default), find the variable in the user
1171 namespace. If False (default), find the variable in the user
1172 namespace, and delete references to it.
1172 namespace, and delete references to it.
1173 """
1173 """
1174 if varname in ('__builtin__', '__builtins__'):
1174 if varname in ('__builtin__', '__builtins__'):
1175 raise ValueError("Refusing to delete %s" % varname)
1175 raise ValueError("Refusing to delete %s" % varname)
1176 ns_refs = self.ns_refs_table + [self.user_ns,
1176 ns_refs = self.ns_refs_table + [self.user_ns,
1177 self.user_global_ns, self._user_main_module.__dict__] +\
1177 self.user_global_ns, self._user_main_module.__dict__] +\
1178 self._main_ns_cache.values()
1178 self._main_ns_cache.values()
1179
1179
1180 if by_name: # Delete by name
1180 if by_name: # Delete by name
1181 for ns in ns_refs:
1181 for ns in ns_refs:
1182 try:
1182 try:
1183 del ns[varname]
1183 del ns[varname]
1184 except KeyError:
1184 except KeyError:
1185 pass
1185 pass
1186 else: # Delete by object
1186 else: # Delete by object
1187 try:
1187 try:
1188 obj = self.user_ns[varname]
1188 obj = self.user_ns[varname]
1189 except KeyError:
1189 except KeyError:
1190 raise NameError("name '%s' is not defined" % varname)
1190 raise NameError("name '%s' is not defined" % varname)
1191 # Also check in output history
1191 # Also check in output history
1192 ns_refs.append(self.history_manager.output_hist)
1192 ns_refs.append(self.history_manager.output_hist)
1193 for ns in ns_refs:
1193 for ns in ns_refs:
1194 to_delete = [n for n, o in ns.iteritems() if o is obj]
1194 to_delete = [n for n, o in ns.iteritems() if o is obj]
1195 for name in to_delete:
1195 for name in to_delete:
1196 del ns[name]
1196 del ns[name]
1197
1197
1198 # displayhook keeps extra references, but not in a dictionary
1198 # displayhook keeps extra references, but not in a dictionary
1199 for name in ('_', '__', '___'):
1199 for name in ('_', '__', '___'):
1200 if getattr(self.displayhook, name) is obj:
1200 if getattr(self.displayhook, name) is obj:
1201 setattr(self.displayhook, name, None)
1201 setattr(self.displayhook, name, None)
1202
1202
1203 def reset_selective(self, regex=None):
1203 def reset_selective(self, regex=None):
1204 """Clear selective variables from internal namespaces based on a
1204 """Clear selective variables from internal namespaces based on a
1205 specified regular expression.
1205 specified regular expression.
1206
1206
1207 Parameters
1207 Parameters
1208 ----------
1208 ----------
1209 regex : string or compiled pattern, optional
1209 regex : string or compiled pattern, optional
1210 A regular expression pattern that will be used in searching
1210 A regular expression pattern that will be used in searching
1211 variable names in the users namespaces.
1211 variable names in the users namespaces.
1212 """
1212 """
1213 if regex is not None:
1213 if regex is not None:
1214 try:
1214 try:
1215 m = re.compile(regex)
1215 m = re.compile(regex)
1216 except TypeError:
1216 except TypeError:
1217 raise TypeError('regex must be a string or compiled pattern')
1217 raise TypeError('regex must be a string or compiled pattern')
1218 # Search for keys in each namespace that match the given regex
1218 # Search for keys in each namespace that match the given regex
1219 # If a match is found, delete the key/value pair.
1219 # If a match is found, delete the key/value pair.
1220 for ns in self.ns_refs_table:
1220 for ns in self.ns_refs_table:
1221 for var in ns:
1221 for var in ns:
1222 if m.search(var):
1222 if m.search(var):
1223 del ns[var]
1223 del ns[var]
1224
1224
1225 def push(self, variables, interactive=True):
1225 def push(self, variables, interactive=True):
1226 """Inject a group of variables into the IPython user namespace.
1226 """Inject a group of variables into the IPython user namespace.
1227
1227
1228 Parameters
1228 Parameters
1229 ----------
1229 ----------
1230 variables : dict, str or list/tuple of str
1230 variables : dict, str or list/tuple of str
1231 The variables to inject into the user's namespace. If a dict, a
1231 The variables to inject into the user's namespace. If a dict, a
1232 simple update is done. If a str, the string is assumed to have
1232 simple update is done. If a str, the string is assumed to have
1233 variable names separated by spaces. A list/tuple of str can also
1233 variable names separated by spaces. A list/tuple of str can also
1234 be used to give the variable names. If just the variable names are
1234 be used to give the variable names. If just the variable names are
1235 give (list/tuple/str) then the variable values looked up in the
1235 give (list/tuple/str) then the variable values looked up in the
1236 callers frame.
1236 callers frame.
1237 interactive : bool
1237 interactive : bool
1238 If True (default), the variables will be listed with the ``who``
1238 If True (default), the variables will be listed with the ``who``
1239 magic.
1239 magic.
1240 """
1240 """
1241 vdict = None
1241 vdict = None
1242
1242
1243 # We need a dict of name/value pairs to do namespace updates.
1243 # We need a dict of name/value pairs to do namespace updates.
1244 if isinstance(variables, dict):
1244 if isinstance(variables, dict):
1245 vdict = variables
1245 vdict = variables
1246 elif isinstance(variables, (basestring, list, tuple)):
1246 elif isinstance(variables, (basestring, list, tuple)):
1247 if isinstance(variables, basestring):
1247 if isinstance(variables, basestring):
1248 vlist = variables.split()
1248 vlist = variables.split()
1249 else:
1249 else:
1250 vlist = variables
1250 vlist = variables
1251 vdict = {}
1251 vdict = {}
1252 cf = sys._getframe(1)
1252 cf = sys._getframe(1)
1253 for name in vlist:
1253 for name in vlist:
1254 try:
1254 try:
1255 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1255 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1256 except:
1256 except:
1257 print ('Could not get variable %s from %s' %
1257 print ('Could not get variable %s from %s' %
1258 (name,cf.f_code.co_name))
1258 (name,cf.f_code.co_name))
1259 else:
1259 else:
1260 raise ValueError('variables must be a dict/str/list/tuple')
1260 raise ValueError('variables must be a dict/str/list/tuple')
1261
1261
1262 # Propagate variables to user namespace
1262 # Propagate variables to user namespace
1263 self.user_ns.update(vdict)
1263 self.user_ns.update(vdict)
1264
1264
1265 # And configure interactive visibility
1265 # And configure interactive visibility
1266 config_ns = self.user_ns_hidden
1266 config_ns = self.user_ns_hidden
1267 if interactive:
1267 if interactive:
1268 for name, val in vdict.iteritems():
1268 for name, val in vdict.iteritems():
1269 config_ns.pop(name, None)
1269 config_ns.pop(name, None)
1270 else:
1270 else:
1271 for name,val in vdict.iteritems():
1271 for name,val in vdict.iteritems():
1272 config_ns[name] = val
1272 config_ns[name] = val
1273
1273
1274 def drop_by_id(self, variables):
1274 def drop_by_id(self, variables):
1275 """Remove a dict of variables from the user namespace, if they are the
1275 """Remove a dict of variables from the user namespace, if they are the
1276 same as the values in the dictionary.
1276 same as the values in the dictionary.
1277
1277
1278 This is intended for use by extensions: variables that they've added can
1278 This is intended for use by extensions: variables that they've added can
1279 be taken back out if they are unloaded, without removing any that the
1279 be taken back out if they are unloaded, without removing any that the
1280 user has overwritten.
1280 user has overwritten.
1281
1281
1282 Parameters
1282 Parameters
1283 ----------
1283 ----------
1284 variables : dict
1284 variables : dict
1285 A dictionary mapping object names (as strings) to the objects.
1285 A dictionary mapping object names (as strings) to the objects.
1286 """
1286 """
1287 for name, obj in variables.iteritems():
1287 for name, obj in variables.iteritems():
1288 if name in self.user_ns and self.user_ns[name] is obj:
1288 if name in self.user_ns and self.user_ns[name] is obj:
1289 del self.user_ns[name]
1289 del self.user_ns[name]
1290 self.user_ns_hidden.pop(name, None)
1290 self.user_ns_hidden.pop(name, None)
1291
1291
1292 #-------------------------------------------------------------------------
1292 #-------------------------------------------------------------------------
1293 # Things related to object introspection
1293 # Things related to object introspection
1294 #-------------------------------------------------------------------------
1294 #-------------------------------------------------------------------------
1295
1295
1296 def _ofind(self, oname, namespaces=None):
1296 def _ofind(self, oname, namespaces=None):
1297 """Find an object in the available namespaces.
1297 """Find an object in the available namespaces.
1298
1298
1299 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1299 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1300
1300
1301 Has special code to detect magic functions.
1301 Has special code to detect magic functions.
1302 """
1302 """
1303 oname = oname.strip()
1303 oname = oname.strip()
1304 #print '1- oname: <%r>' % oname # dbg
1304 #print '1- oname: <%r>' % oname # dbg
1305 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1305 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1306 return dict(found=False)
1306 return dict(found=False)
1307
1307
1308 alias_ns = None
1308 alias_ns = None
1309 if namespaces is None:
1309 if namespaces is None:
1310 # Namespaces to search in:
1310 # Namespaces to search in:
1311 # Put them in a list. The order is important so that we
1311 # Put them in a list. The order is important so that we
1312 # find things in the same order that Python finds them.
1312 # find things in the same order that Python finds them.
1313 namespaces = [ ('Interactive', self.user_ns),
1313 namespaces = [ ('Interactive', self.user_ns),
1314 ('IPython internal', self.internal_ns),
1314 ('IPython internal', self.internal_ns),
1315 ('Python builtin', builtin_mod.__dict__),
1315 ('Python builtin', builtin_mod.__dict__),
1316 ('Alias', self.alias_manager.alias_table),
1316 ('Alias', self.alias_manager.alias_table),
1317 ]
1317 ]
1318 alias_ns = self.alias_manager.alias_table
1318 alias_ns = self.alias_manager.alias_table
1319
1319
1320 # initialize results to 'null'
1320 # initialize results to 'null'
1321 found = False; obj = None; ospace = None; ds = None;
1321 found = False; obj = None; ospace = None; ds = None;
1322 ismagic = False; isalias = False; parent = None
1322 ismagic = False; isalias = False; parent = None
1323
1323
1324 # We need to special-case 'print', which as of python2.6 registers as a
1324 # We need to special-case 'print', which as of python2.6 registers as a
1325 # function but should only be treated as one if print_function was
1325 # function but should only be treated as one if print_function was
1326 # loaded with a future import. In this case, just bail.
1326 # loaded with a future import. In this case, just bail.
1327 if (oname == 'print' and not py3compat.PY3 and not \
1327 if (oname == 'print' and not py3compat.PY3 and not \
1328 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1328 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1329 return {'found':found, 'obj':obj, 'namespace':ospace,
1329 return {'found':found, 'obj':obj, 'namespace':ospace,
1330 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1330 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1331
1331
1332 # Look for the given name by splitting it in parts. If the head is
1332 # Look for the given name by splitting it in parts. If the head is
1333 # found, then we look for all the remaining parts as members, and only
1333 # found, then we look for all the remaining parts as members, and only
1334 # declare success if we can find them all.
1334 # declare success if we can find them all.
1335 oname_parts = oname.split('.')
1335 oname_parts = oname.split('.')
1336 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1336 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1337 for nsname,ns in namespaces:
1337 for nsname,ns in namespaces:
1338 try:
1338 try:
1339 obj = ns[oname_head]
1339 obj = ns[oname_head]
1340 except KeyError:
1340 except KeyError:
1341 continue
1341 continue
1342 else:
1342 else:
1343 #print 'oname_rest:', oname_rest # dbg
1343 #print 'oname_rest:', oname_rest # dbg
1344 for part in oname_rest:
1344 for part in oname_rest:
1345 try:
1345 try:
1346 parent = obj
1346 parent = obj
1347 obj = getattr(obj,part)
1347 obj = getattr(obj,part)
1348 except:
1348 except:
1349 # Blanket except b/c some badly implemented objects
1349 # Blanket except b/c some badly implemented objects
1350 # allow __getattr__ to raise exceptions other than
1350 # allow __getattr__ to raise exceptions other than
1351 # AttributeError, which then crashes IPython.
1351 # AttributeError, which then crashes IPython.
1352 break
1352 break
1353 else:
1353 else:
1354 # If we finish the for loop (no break), we got all members
1354 # If we finish the for loop (no break), we got all members
1355 found = True
1355 found = True
1356 ospace = nsname
1356 ospace = nsname
1357 if ns == alias_ns:
1357 if ns == alias_ns:
1358 isalias = True
1358 isalias = True
1359 break # namespace loop
1359 break # namespace loop
1360
1360
1361 # Try to see if it's magic
1361 # Try to see if it's magic
1362 if not found:
1362 if not found:
1363 if oname.startswith(ESC_MAGIC):
1363 if oname.startswith(ESC_MAGIC):
1364 oname = oname[1:]
1364 oname = oname[1:]
1365 obj = getattr(self,'magic_'+oname,None)
1365 obj = getattr(self,'magic_'+oname,None)
1366 if obj is not None:
1366 if obj is not None:
1367 found = True
1367 found = True
1368 ospace = 'IPython internal'
1368 ospace = 'IPython internal'
1369 ismagic = True
1369 ismagic = True
1370
1370
1371 # Last try: special-case some literals like '', [], {}, etc:
1371 # Last try: special-case some literals like '', [], {}, etc:
1372 if not found and oname_head in ["''",'""','[]','{}','()']:
1372 if not found and oname_head in ["''",'""','[]','{}','()']:
1373 obj = eval(oname_head)
1373 obj = eval(oname_head)
1374 found = True
1374 found = True
1375 ospace = 'Interactive'
1375 ospace = 'Interactive'
1376
1376
1377 return {'found':found, 'obj':obj, 'namespace':ospace,
1377 return {'found':found, 'obj':obj, 'namespace':ospace,
1378 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1378 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1379
1379
1380 def _ofind_property(self, oname, info):
1380 def _ofind_property(self, oname, info):
1381 """Second part of object finding, to look for property details."""
1381 """Second part of object finding, to look for property details."""
1382 if info.found:
1382 if info.found:
1383 # Get the docstring of the class property if it exists.
1383 # Get the docstring of the class property if it exists.
1384 path = oname.split('.')
1384 path = oname.split('.')
1385 root = '.'.join(path[:-1])
1385 root = '.'.join(path[:-1])
1386 if info.parent is not None:
1386 if info.parent is not None:
1387 try:
1387 try:
1388 target = getattr(info.parent, '__class__')
1388 target = getattr(info.parent, '__class__')
1389 # The object belongs to a class instance.
1389 # The object belongs to a class instance.
1390 try:
1390 try:
1391 target = getattr(target, path[-1])
1391 target = getattr(target, path[-1])
1392 # The class defines the object.
1392 # The class defines the object.
1393 if isinstance(target, property):
1393 if isinstance(target, property):
1394 oname = root + '.__class__.' + path[-1]
1394 oname = root + '.__class__.' + path[-1]
1395 info = Struct(self._ofind(oname))
1395 info = Struct(self._ofind(oname))
1396 except AttributeError: pass
1396 except AttributeError: pass
1397 except AttributeError: pass
1397 except AttributeError: pass
1398
1398
1399 # We return either the new info or the unmodified input if the object
1399 # We return either the new info or the unmodified input if the object
1400 # hadn't been found
1400 # hadn't been found
1401 return info
1401 return info
1402
1402
1403 def _object_find(self, oname, namespaces=None):
1403 def _object_find(self, oname, namespaces=None):
1404 """Find an object and return a struct with info about it."""
1404 """Find an object and return a struct with info about it."""
1405 inf = Struct(self._ofind(oname, namespaces))
1405 inf = Struct(self._ofind(oname, namespaces))
1406 return Struct(self._ofind_property(oname, inf))
1406 return Struct(self._ofind_property(oname, inf))
1407
1407
1408 def _inspect(self, meth, oname, namespaces=None, **kw):
1408 def _inspect(self, meth, oname, namespaces=None, **kw):
1409 """Generic interface to the inspector system.
1409 """Generic interface to the inspector system.
1410
1410
1411 This function is meant to be called by pdef, pdoc & friends."""
1411 This function is meant to be called by pdef, pdoc & friends."""
1412 info = self._object_find(oname)
1412 info = self._object_find(oname)
1413 if info.found:
1413 if info.found:
1414 pmethod = getattr(self.inspector, meth)
1414 pmethod = getattr(self.inspector, meth)
1415 formatter = format_screen if info.ismagic else None
1415 formatter = format_screen if info.ismagic else None
1416 if meth == 'pdoc':
1416 if meth == 'pdoc':
1417 pmethod(info.obj, oname, formatter)
1417 pmethod(info.obj, oname, formatter)
1418 elif meth == 'pinfo':
1418 elif meth == 'pinfo':
1419 pmethod(info.obj, oname, formatter, info, **kw)
1419 pmethod(info.obj, oname, formatter, info, **kw)
1420 else:
1420 else:
1421 pmethod(info.obj, oname)
1421 pmethod(info.obj, oname)
1422 else:
1422 else:
1423 print 'Object `%s` not found.' % oname
1423 print 'Object `%s` not found.' % oname
1424 return 'not found' # so callers can take other action
1424 return 'not found' # so callers can take other action
1425
1425
1426 def object_inspect(self, oname):
1426 def object_inspect(self, oname):
1427 with self.builtin_trap:
1427 with self.builtin_trap:
1428 info = self._object_find(oname)
1428 info = self._object_find(oname)
1429 if info.found:
1429 if info.found:
1430 return self.inspector.info(info.obj, oname, info=info)
1430 return self.inspector.info(info.obj, oname, info=info)
1431 else:
1431 else:
1432 return oinspect.object_info(name=oname, found=False)
1432 return oinspect.object_info(name=oname, found=False)
1433
1433
1434 #-------------------------------------------------------------------------
1434 #-------------------------------------------------------------------------
1435 # Things related to history management
1435 # Things related to history management
1436 #-------------------------------------------------------------------------
1436 #-------------------------------------------------------------------------
1437
1437
1438 def init_history(self):
1438 def init_history(self):
1439 """Sets up the command history, and starts regular autosaves."""
1439 """Sets up the command history, and starts regular autosaves."""
1440 self.history_manager = HistoryManager(shell=self, config=self.config)
1440 self.history_manager = HistoryManager(shell=self, config=self.config)
1441 self.configurables.append(self.history_manager)
1441 self.configurables.append(self.history_manager)
1442
1442
1443 #-------------------------------------------------------------------------
1443 #-------------------------------------------------------------------------
1444 # Things related to exception handling and tracebacks (not debugging)
1444 # Things related to exception handling and tracebacks (not debugging)
1445 #-------------------------------------------------------------------------
1445 #-------------------------------------------------------------------------
1446
1446
1447 def init_traceback_handlers(self, custom_exceptions):
1447 def init_traceback_handlers(self, custom_exceptions):
1448 # Syntax error handler.
1448 # Syntax error handler.
1449 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1449 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1450
1450
1451 # The interactive one is initialized with an offset, meaning we always
1451 # The interactive one is initialized with an offset, meaning we always
1452 # want to remove the topmost item in the traceback, which is our own
1452 # want to remove the topmost item in the traceback, which is our own
1453 # internal code. Valid modes: ['Plain','Context','Verbose']
1453 # internal code. Valid modes: ['Plain','Context','Verbose']
1454 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1454 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1455 color_scheme='NoColor',
1455 color_scheme='NoColor',
1456 tb_offset = 1,
1456 tb_offset = 1,
1457 check_cache=self.compile.check_cache)
1457 check_cache=self.compile.check_cache)
1458
1458
1459 # The instance will store a pointer to the system-wide exception hook,
1459 # The instance will store a pointer to the system-wide exception hook,
1460 # so that runtime code (such as magics) can access it. This is because
1460 # so that runtime code (such as magics) can access it. This is because
1461 # during the read-eval loop, it may get temporarily overwritten.
1461 # during the read-eval loop, it may get temporarily overwritten.
1462 self.sys_excepthook = sys.excepthook
1462 self.sys_excepthook = sys.excepthook
1463
1463
1464 # and add any custom exception handlers the user may have specified
1464 # and add any custom exception handlers the user may have specified
1465 self.set_custom_exc(*custom_exceptions)
1465 self.set_custom_exc(*custom_exceptions)
1466
1466
1467 # Set the exception mode
1467 # Set the exception mode
1468 self.InteractiveTB.set_mode(mode=self.xmode)
1468 self.InteractiveTB.set_mode(mode=self.xmode)
1469
1469
1470 def set_custom_exc(self, exc_tuple, handler):
1470 def set_custom_exc(self, exc_tuple, handler):
1471 """set_custom_exc(exc_tuple,handler)
1471 """set_custom_exc(exc_tuple,handler)
1472
1472
1473 Set a custom exception handler, which will be called if any of the
1473 Set a custom exception handler, which will be called if any of the
1474 exceptions in exc_tuple occur in the mainloop (specifically, in the
1474 exceptions in exc_tuple occur in the mainloop (specifically, in the
1475 run_code() method).
1475 run_code() method).
1476
1476
1477 Parameters
1477 Parameters
1478 ----------
1478 ----------
1479
1479
1480 exc_tuple : tuple of exception classes
1480 exc_tuple : tuple of exception classes
1481 A *tuple* of exception classes, for which to call the defined
1481 A *tuple* of exception classes, for which to call the defined
1482 handler. It is very important that you use a tuple, and NOT A
1482 handler. It is very important that you use a tuple, and NOT A
1483 LIST here, because of the way Python's except statement works. If
1483 LIST here, because of the way Python's except statement works. If
1484 you only want to trap a single exception, use a singleton tuple::
1484 you only want to trap a single exception, use a singleton tuple::
1485
1485
1486 exc_tuple == (MyCustomException,)
1486 exc_tuple == (MyCustomException,)
1487
1487
1488 handler : callable
1488 handler : callable
1489 handler must have the following signature::
1489 handler must have the following signature::
1490
1490
1491 def my_handler(self, etype, value, tb, tb_offset=None):
1491 def my_handler(self, etype, value, tb, tb_offset=None):
1492 ...
1492 ...
1493 return structured_traceback
1493 return structured_traceback
1494
1494
1495 Your handler must return a structured traceback (a list of strings),
1495 Your handler must return a structured traceback (a list of strings),
1496 or None.
1496 or None.
1497
1497
1498 This will be made into an instance method (via types.MethodType)
1498 This will be made into an instance method (via types.MethodType)
1499 of IPython itself, and it will be called if any of the exceptions
1499 of IPython itself, and it will be called if any of the exceptions
1500 listed in the exc_tuple are caught. If the handler is None, an
1500 listed in the exc_tuple are caught. If the handler is None, an
1501 internal basic one is used, which just prints basic info.
1501 internal basic one is used, which just prints basic info.
1502
1502
1503 To protect IPython from crashes, if your handler ever raises an
1503 To protect IPython from crashes, if your handler ever raises an
1504 exception or returns an invalid result, it will be immediately
1504 exception or returns an invalid result, it will be immediately
1505 disabled.
1505 disabled.
1506
1506
1507 WARNING: by putting in your own exception handler into IPython's main
1507 WARNING: by putting in your own exception handler into IPython's main
1508 execution loop, you run a very good chance of nasty crashes. This
1508 execution loop, you run a very good chance of nasty crashes. This
1509 facility should only be used if you really know what you are doing."""
1509 facility should only be used if you really know what you are doing."""
1510
1510
1511 assert type(exc_tuple)==type(()) , \
1511 assert type(exc_tuple)==type(()) , \
1512 "The custom exceptions must be given AS A TUPLE."
1512 "The custom exceptions must be given AS A TUPLE."
1513
1513
1514 def dummy_handler(self,etype,value,tb,tb_offset=None):
1514 def dummy_handler(self,etype,value,tb,tb_offset=None):
1515 print '*** Simple custom exception handler ***'
1515 print '*** Simple custom exception handler ***'
1516 print 'Exception type :',etype
1516 print 'Exception type :',etype
1517 print 'Exception value:',value
1517 print 'Exception value:',value
1518 print 'Traceback :',tb
1518 print 'Traceback :',tb
1519 #print 'Source code :','\n'.join(self.buffer)
1519 #print 'Source code :','\n'.join(self.buffer)
1520
1520
1521 def validate_stb(stb):
1521 def validate_stb(stb):
1522 """validate structured traceback return type
1522 """validate structured traceback return type
1523
1523
1524 return type of CustomTB *should* be a list of strings, but allow
1524 return type of CustomTB *should* be a list of strings, but allow
1525 single strings or None, which are harmless.
1525 single strings or None, which are harmless.
1526
1526
1527 This function will *always* return a list of strings,
1527 This function will *always* return a list of strings,
1528 and will raise a TypeError if stb is inappropriate.
1528 and will raise a TypeError if stb is inappropriate.
1529 """
1529 """
1530 msg = "CustomTB must return list of strings, not %r" % stb
1530 msg = "CustomTB must return list of strings, not %r" % stb
1531 if stb is None:
1531 if stb is None:
1532 return []
1532 return []
1533 elif isinstance(stb, basestring):
1533 elif isinstance(stb, basestring):
1534 return [stb]
1534 return [stb]
1535 elif not isinstance(stb, list):
1535 elif not isinstance(stb, list):
1536 raise TypeError(msg)
1536 raise TypeError(msg)
1537 # it's a list
1537 # it's a list
1538 for line in stb:
1538 for line in stb:
1539 # check every element
1539 # check every element
1540 if not isinstance(line, basestring):
1540 if not isinstance(line, basestring):
1541 raise TypeError(msg)
1541 raise TypeError(msg)
1542 return stb
1542 return stb
1543
1543
1544 if handler is None:
1544 if handler is None:
1545 wrapped = dummy_handler
1545 wrapped = dummy_handler
1546 else:
1546 else:
1547 def wrapped(self,etype,value,tb,tb_offset=None):
1547 def wrapped(self,etype,value,tb,tb_offset=None):
1548 """wrap CustomTB handler, to protect IPython from user code
1548 """wrap CustomTB handler, to protect IPython from user code
1549
1549
1550 This makes it harder (but not impossible) for custom exception
1550 This makes it harder (but not impossible) for custom exception
1551 handlers to crash IPython.
1551 handlers to crash IPython.
1552 """
1552 """
1553 try:
1553 try:
1554 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1554 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1555 return validate_stb(stb)
1555 return validate_stb(stb)
1556 except:
1556 except:
1557 # clear custom handler immediately
1557 # clear custom handler immediately
1558 self.set_custom_exc((), None)
1558 self.set_custom_exc((), None)
1559 print >> io.stderr, "Custom TB Handler failed, unregistering"
1559 print >> io.stderr, "Custom TB Handler failed, unregistering"
1560 # show the exception in handler first
1560 # show the exception in handler first
1561 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1561 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1562 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1562 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1563 print >> io.stdout, "The original exception:"
1563 print >> io.stdout, "The original exception:"
1564 stb = self.InteractiveTB.structured_traceback(
1564 stb = self.InteractiveTB.structured_traceback(
1565 (etype,value,tb), tb_offset=tb_offset
1565 (etype,value,tb), tb_offset=tb_offset
1566 )
1566 )
1567 return stb
1567 return stb
1568
1568
1569 self.CustomTB = types.MethodType(wrapped,self)
1569 self.CustomTB = types.MethodType(wrapped,self)
1570 self.custom_exceptions = exc_tuple
1570 self.custom_exceptions = exc_tuple
1571
1571
1572 def excepthook(self, etype, value, tb):
1572 def excepthook(self, etype, value, tb):
1573 """One more defense for GUI apps that call sys.excepthook.
1573 """One more defense for GUI apps that call sys.excepthook.
1574
1574
1575 GUI frameworks like wxPython trap exceptions and call
1575 GUI frameworks like wxPython trap exceptions and call
1576 sys.excepthook themselves. I guess this is a feature that
1576 sys.excepthook themselves. I guess this is a feature that
1577 enables them to keep running after exceptions that would
1577 enables them to keep running after exceptions that would
1578 otherwise kill their mainloop. This is a bother for IPython
1578 otherwise kill their mainloop. This is a bother for IPython
1579 which excepts to catch all of the program exceptions with a try:
1579 which excepts to catch all of the program exceptions with a try:
1580 except: statement.
1580 except: statement.
1581
1581
1582 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1582 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1583 any app directly invokes sys.excepthook, it will look to the user like
1583 any app directly invokes sys.excepthook, it will look to the user like
1584 IPython crashed. In order to work around this, we can disable the
1584 IPython crashed. In order to work around this, we can disable the
1585 CrashHandler and replace it with this excepthook instead, which prints a
1585 CrashHandler and replace it with this excepthook instead, which prints a
1586 regular traceback using our InteractiveTB. In this fashion, apps which
1586 regular traceback using our InteractiveTB. In this fashion, apps which
1587 call sys.excepthook will generate a regular-looking exception from
1587 call sys.excepthook will generate a regular-looking exception from
1588 IPython, and the CrashHandler will only be triggered by real IPython
1588 IPython, and the CrashHandler will only be triggered by real IPython
1589 crashes.
1589 crashes.
1590
1590
1591 This hook should be used sparingly, only in places which are not likely
1591 This hook should be used sparingly, only in places which are not likely
1592 to be true IPython errors.
1592 to be true IPython errors.
1593 """
1593 """
1594 self.showtraceback((etype,value,tb),tb_offset=0)
1594 self.showtraceback((etype,value,tb),tb_offset=0)
1595
1595
1596 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1596 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1597 exception_only=False):
1597 exception_only=False):
1598 """Display the exception that just occurred.
1598 """Display the exception that just occurred.
1599
1599
1600 If nothing is known about the exception, this is the method which
1600 If nothing is known about the exception, this is the method which
1601 should be used throughout the code for presenting user tracebacks,
1601 should be used throughout the code for presenting user tracebacks,
1602 rather than directly invoking the InteractiveTB object.
1602 rather than directly invoking the InteractiveTB object.
1603
1603
1604 A specific showsyntaxerror() also exists, but this method can take
1604 A specific showsyntaxerror() also exists, but this method can take
1605 care of calling it if needed, so unless you are explicitly catching a
1605 care of calling it if needed, so unless you are explicitly catching a
1606 SyntaxError exception, don't try to analyze the stack manually and
1606 SyntaxError exception, don't try to analyze the stack manually and
1607 simply call this method."""
1607 simply call this method."""
1608
1608
1609 try:
1609 try:
1610 if exc_tuple is None:
1610 if exc_tuple is None:
1611 etype, value, tb = sys.exc_info()
1611 etype, value, tb = sys.exc_info()
1612 else:
1612 else:
1613 etype, value, tb = exc_tuple
1613 etype, value, tb = exc_tuple
1614
1614
1615 if etype is None:
1615 if etype is None:
1616 if hasattr(sys, 'last_type'):
1616 if hasattr(sys, 'last_type'):
1617 etype, value, tb = sys.last_type, sys.last_value, \
1617 etype, value, tb = sys.last_type, sys.last_value, \
1618 sys.last_traceback
1618 sys.last_traceback
1619 else:
1619 else:
1620 self.write_err('No traceback available to show.\n')
1620 self.write_err('No traceback available to show.\n')
1621 return
1621 return
1622
1622
1623 if etype is SyntaxError:
1623 if etype is SyntaxError:
1624 # Though this won't be called by syntax errors in the input
1624 # Though this won't be called by syntax errors in the input
1625 # line, there may be SyntaxError cases with imported code.
1625 # line, there may be SyntaxError cases with imported code.
1626 self.showsyntaxerror(filename)
1626 self.showsyntaxerror(filename)
1627 elif etype is UsageError:
1627 elif etype is UsageError:
1628 self.write_err("UsageError: %s" % value)
1628 self.write_err("UsageError: %s" % value)
1629 else:
1629 else:
1630 # WARNING: these variables are somewhat deprecated and not
1630 # WARNING: these variables are somewhat deprecated and not
1631 # necessarily safe to use in a threaded environment, but tools
1631 # necessarily safe to use in a threaded environment, but tools
1632 # like pdb depend on their existence, so let's set them. If we
1632 # like pdb depend on their existence, so let's set them. If we
1633 # find problems in the field, we'll need to revisit their use.
1633 # find problems in the field, we'll need to revisit their use.
1634 sys.last_type = etype
1634 sys.last_type = etype
1635 sys.last_value = value
1635 sys.last_value = value
1636 sys.last_traceback = tb
1636 sys.last_traceback = tb
1637 if etype in self.custom_exceptions:
1637 if etype in self.custom_exceptions:
1638 stb = self.CustomTB(etype, value, tb, tb_offset)
1638 stb = self.CustomTB(etype, value, tb, tb_offset)
1639 else:
1639 else:
1640 if exception_only:
1640 if exception_only:
1641 stb = ['An exception has occurred, use %tb to see '
1641 stb = ['An exception has occurred, use %tb to see '
1642 'the full traceback.\n']
1642 'the full traceback.\n']
1643 stb.extend(self.InteractiveTB.get_exception_only(etype,
1643 stb.extend(self.InteractiveTB.get_exception_only(etype,
1644 value))
1644 value))
1645 else:
1645 else:
1646 stb = self.InteractiveTB.structured_traceback(etype,
1646 stb = self.InteractiveTB.structured_traceback(etype,
1647 value, tb, tb_offset=tb_offset)
1647 value, tb, tb_offset=tb_offset)
1648
1648
1649 self._showtraceback(etype, value, stb)
1649 self._showtraceback(etype, value, stb)
1650 if self.call_pdb:
1650 if self.call_pdb:
1651 # drop into debugger
1651 # drop into debugger
1652 self.debugger(force=True)
1652 self.debugger(force=True)
1653 return
1653 return
1654
1654
1655 # Actually show the traceback
1655 # Actually show the traceback
1656 self._showtraceback(etype, value, stb)
1656 self._showtraceback(etype, value, stb)
1657
1657
1658 except KeyboardInterrupt:
1658 except KeyboardInterrupt:
1659 self.write_err("\nKeyboardInterrupt\n")
1659 self.write_err("\nKeyboardInterrupt\n")
1660
1660
1661 def _showtraceback(self, etype, evalue, stb):
1661 def _showtraceback(self, etype, evalue, stb):
1662 """Actually show a traceback.
1662 """Actually show a traceback.
1663
1663
1664 Subclasses may override this method to put the traceback on a different
1664 Subclasses may override this method to put the traceback on a different
1665 place, like a side channel.
1665 place, like a side channel.
1666 """
1666 """
1667 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1667 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1668
1668
1669 def showsyntaxerror(self, filename=None):
1669 def showsyntaxerror(self, filename=None):
1670 """Display the syntax error that just occurred.
1670 """Display the syntax error that just occurred.
1671
1671
1672 This doesn't display a stack trace because there isn't one.
1672 This doesn't display a stack trace because there isn't one.
1673
1673
1674 If a filename is given, it is stuffed in the exception instead
1674 If a filename is given, it is stuffed in the exception instead
1675 of what was there before (because Python's parser always uses
1675 of what was there before (because Python's parser always uses
1676 "<string>" when reading from a string).
1676 "<string>" when reading from a string).
1677 """
1677 """
1678 etype, value, last_traceback = sys.exc_info()
1678 etype, value, last_traceback = sys.exc_info()
1679
1679
1680 # See note about these variables in showtraceback() above
1680 # See note about these variables in showtraceback() above
1681 sys.last_type = etype
1681 sys.last_type = etype
1682 sys.last_value = value
1682 sys.last_value = value
1683 sys.last_traceback = last_traceback
1683 sys.last_traceback = last_traceback
1684
1684
1685 if filename and etype is SyntaxError:
1685 if filename and etype is SyntaxError:
1686 # Work hard to stuff the correct filename in the exception
1686 # Work hard to stuff the correct filename in the exception
1687 try:
1687 try:
1688 msg, (dummy_filename, lineno, offset, line) = value
1688 msg, (dummy_filename, lineno, offset, line) = value
1689 except:
1689 except:
1690 # Not the format we expect; leave it alone
1690 # Not the format we expect; leave it alone
1691 pass
1691 pass
1692 else:
1692 else:
1693 # Stuff in the right filename
1693 # Stuff in the right filename
1694 try:
1694 try:
1695 # Assume SyntaxError is a class exception
1695 # Assume SyntaxError is a class exception
1696 value = SyntaxError(msg, (filename, lineno, offset, line))
1696 value = SyntaxError(msg, (filename, lineno, offset, line))
1697 except:
1697 except:
1698 # If that failed, assume SyntaxError is a string
1698 # If that failed, assume SyntaxError is a string
1699 value = msg, (filename, lineno, offset, line)
1699 value = msg, (filename, lineno, offset, line)
1700 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1700 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1701 self._showtraceback(etype, value, stb)
1701 self._showtraceback(etype, value, stb)
1702
1702
1703 # This is overridden in TerminalInteractiveShell to show a message about
1703 # This is overridden in TerminalInteractiveShell to show a message about
1704 # the %paste magic.
1704 # the %paste magic.
1705 def showindentationerror(self):
1705 def showindentationerror(self):
1706 """Called by run_cell when there's an IndentationError in code entered
1706 """Called by run_cell when there's an IndentationError in code entered
1707 at the prompt.
1707 at the prompt.
1708
1708
1709 This is overridden in TerminalInteractiveShell to show a message about
1709 This is overridden in TerminalInteractiveShell to show a message about
1710 the %paste magic."""
1710 the %paste magic."""
1711 self.showsyntaxerror()
1711 self.showsyntaxerror()
1712
1712
1713 #-------------------------------------------------------------------------
1713 #-------------------------------------------------------------------------
1714 # Things related to readline
1714 # Things related to readline
1715 #-------------------------------------------------------------------------
1715 #-------------------------------------------------------------------------
1716
1716
1717 def init_readline(self):
1717 def init_readline(self):
1718 """Command history completion/saving/reloading."""
1718 """Command history completion/saving/reloading."""
1719
1719
1720 if self.readline_use:
1720 if self.readline_use:
1721 import IPython.utils.rlineimpl as readline
1721 import IPython.utils.rlineimpl as readline
1722
1722
1723 self.rl_next_input = None
1723 self.rl_next_input = None
1724 self.rl_do_indent = False
1724 self.rl_do_indent = False
1725
1725
1726 if not self.readline_use or not readline.have_readline:
1726 if not self.readline_use or not readline.have_readline:
1727 self.has_readline = False
1727 self.has_readline = False
1728 self.readline = None
1728 self.readline = None
1729 # Set a number of methods that depend on readline to be no-op
1729 # Set a number of methods that depend on readline to be no-op
1730 self.readline_no_record = no_op_context
1730 self.readline_no_record = no_op_context
1731 self.set_readline_completer = no_op
1731 self.set_readline_completer = no_op
1732 self.set_custom_completer = no_op
1732 self.set_custom_completer = no_op
1733 self.set_completer_frame = no_op
1733 self.set_completer_frame = no_op
1734 if self.readline_use:
1734 if self.readline_use:
1735 warn('Readline services not available or not loaded.')
1735 warn('Readline services not available or not loaded.')
1736 else:
1736 else:
1737 self.has_readline = True
1737 self.has_readline = True
1738 self.readline = readline
1738 self.readline = readline
1739 sys.modules['readline'] = readline
1739 sys.modules['readline'] = readline
1740
1740
1741 # Platform-specific configuration
1741 # Platform-specific configuration
1742 if os.name == 'nt':
1742 if os.name == 'nt':
1743 # FIXME - check with Frederick to see if we can harmonize
1743 # FIXME - check with Frederick to see if we can harmonize
1744 # naming conventions with pyreadline to avoid this
1744 # naming conventions with pyreadline to avoid this
1745 # platform-dependent check
1745 # platform-dependent check
1746 self.readline_startup_hook = readline.set_pre_input_hook
1746 self.readline_startup_hook = readline.set_pre_input_hook
1747 else:
1747 else:
1748 self.readline_startup_hook = readline.set_startup_hook
1748 self.readline_startup_hook = readline.set_startup_hook
1749
1749
1750 # Load user's initrc file (readline config)
1750 # Load user's initrc file (readline config)
1751 # Or if libedit is used, load editrc.
1751 # Or if libedit is used, load editrc.
1752 inputrc_name = os.environ.get('INPUTRC')
1752 inputrc_name = os.environ.get('INPUTRC')
1753 if inputrc_name is None:
1753 if inputrc_name is None:
1754 home_dir = get_home_dir()
1754 home_dir = get_home_dir()
1755 if home_dir is not None:
1755 if home_dir is not None:
1756 inputrc_name = '.inputrc'
1756 inputrc_name = '.inputrc'
1757 if readline.uses_libedit:
1757 if readline.uses_libedit:
1758 inputrc_name = '.editrc'
1758 inputrc_name = '.editrc'
1759 inputrc_name = os.path.join(home_dir, inputrc_name)
1759 inputrc_name = os.path.join(home_dir, inputrc_name)
1760 if os.path.isfile(inputrc_name):
1760 if os.path.isfile(inputrc_name):
1761 try:
1761 try:
1762 readline.read_init_file(inputrc_name)
1762 readline.read_init_file(inputrc_name)
1763 except:
1763 except:
1764 warn('Problems reading readline initialization file <%s>'
1764 warn('Problems reading readline initialization file <%s>'
1765 % inputrc_name)
1765 % inputrc_name)
1766
1766
1767 # Configure readline according to user's prefs
1767 # Configure readline according to user's prefs
1768 # This is only done if GNU readline is being used. If libedit
1768 # This is only done if GNU readline is being used. If libedit
1769 # is being used (as on Leopard) the readline config is
1769 # is being used (as on Leopard) the readline config is
1770 # not run as the syntax for libedit is different.
1770 # not run as the syntax for libedit is different.
1771 if not readline.uses_libedit:
1771 if not readline.uses_libedit:
1772 for rlcommand in self.readline_parse_and_bind:
1772 for rlcommand in self.readline_parse_and_bind:
1773 #print "loading rl:",rlcommand # dbg
1773 #print "loading rl:",rlcommand # dbg
1774 readline.parse_and_bind(rlcommand)
1774 readline.parse_and_bind(rlcommand)
1775
1775
1776 # Remove some chars from the delimiters list. If we encounter
1776 # Remove some chars from the delimiters list. If we encounter
1777 # unicode chars, discard them.
1777 # unicode chars, discard them.
1778 delims = readline.get_completer_delims()
1778 delims = readline.get_completer_delims()
1779 if not py3compat.PY3:
1779 if not py3compat.PY3:
1780 delims = delims.encode("ascii", "ignore")
1780 delims = delims.encode("ascii", "ignore")
1781 for d in self.readline_remove_delims:
1781 for d in self.readline_remove_delims:
1782 delims = delims.replace(d, "")
1782 delims = delims.replace(d, "")
1783 delims = delims.replace(ESC_MAGIC, '')
1783 delims = delims.replace(ESC_MAGIC, '')
1784 readline.set_completer_delims(delims)
1784 readline.set_completer_delims(delims)
1785 # otherwise we end up with a monster history after a while:
1785 # otherwise we end up with a monster history after a while:
1786 readline.set_history_length(self.history_length)
1786 readline.set_history_length(self.history_length)
1787
1787
1788 self.refill_readline_hist()
1788 self.refill_readline_hist()
1789 self.readline_no_record = ReadlineNoRecord(self)
1789 self.readline_no_record = ReadlineNoRecord(self)
1790
1790
1791 # Configure auto-indent for all platforms
1791 # Configure auto-indent for all platforms
1792 self.set_autoindent(self.autoindent)
1792 self.set_autoindent(self.autoindent)
1793
1793
1794 def refill_readline_hist(self):
1794 def refill_readline_hist(self):
1795 # Load the last 1000 lines from history
1795 # Load the last 1000 lines from history
1796 self.readline.clear_history()
1796 self.readline.clear_history()
1797 stdin_encoding = sys.stdin.encoding or "utf-8"
1797 stdin_encoding = sys.stdin.encoding or "utf-8"
1798 last_cell = u""
1798 last_cell = u""
1799 for _, _, cell in self.history_manager.get_tail(1000,
1799 for _, _, cell in self.history_manager.get_tail(1000,
1800 include_latest=True):
1800 include_latest=True):
1801 # Ignore blank lines and consecutive duplicates
1801 # Ignore blank lines and consecutive duplicates
1802 cell = cell.rstrip()
1802 cell = cell.rstrip()
1803 if cell and (cell != last_cell):
1803 if cell and (cell != last_cell):
1804 if self.multiline_history:
1804 if self.multiline_history:
1805 self.readline.add_history(py3compat.unicode_to_str(cell,
1805 self.readline.add_history(py3compat.unicode_to_str(cell,
1806 stdin_encoding))
1806 stdin_encoding))
1807 else:
1807 else:
1808 for line in cell.splitlines():
1808 for line in cell.splitlines():
1809 self.readline.add_history(py3compat.unicode_to_str(line,
1809 self.readline.add_history(py3compat.unicode_to_str(line,
1810 stdin_encoding))
1810 stdin_encoding))
1811 last_cell = cell
1811 last_cell = cell
1812
1812
1813 def set_next_input(self, s):
1813 def set_next_input(self, s):
1814 """ Sets the 'default' input string for the next command line.
1814 """ Sets the 'default' input string for the next command line.
1815
1815
1816 Requires readline.
1816 Requires readline.
1817
1817
1818 Example:
1818 Example:
1819
1819
1820 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1820 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1821 [D:\ipython]|2> Hello Word_ # cursor is here
1821 [D:\ipython]|2> Hello Word_ # cursor is here
1822 """
1822 """
1823 self.rl_next_input = py3compat.cast_bytes_py2(s)
1823 self.rl_next_input = py3compat.cast_bytes_py2(s)
1824
1824
1825 # Maybe move this to the terminal subclass?
1825 # Maybe move this to the terminal subclass?
1826 def pre_readline(self):
1826 def pre_readline(self):
1827 """readline hook to be used at the start of each line.
1827 """readline hook to be used at the start of each line.
1828
1828
1829 Currently it handles auto-indent only."""
1829 Currently it handles auto-indent only."""
1830
1830
1831 if self.rl_do_indent:
1831 if self.rl_do_indent:
1832 self.readline.insert_text(self._indent_current_str())
1832 self.readline.insert_text(self._indent_current_str())
1833 if self.rl_next_input is not None:
1833 if self.rl_next_input is not None:
1834 self.readline.insert_text(self.rl_next_input)
1834 self.readline.insert_text(self.rl_next_input)
1835 self.rl_next_input = None
1835 self.rl_next_input = None
1836
1836
1837 def _indent_current_str(self):
1837 def _indent_current_str(self):
1838 """return the current level of indentation as a string"""
1838 """return the current level of indentation as a string"""
1839 return self.input_splitter.indent_spaces * ' '
1839 return self.input_splitter.indent_spaces * ' '
1840
1840
1841 #-------------------------------------------------------------------------
1841 #-------------------------------------------------------------------------
1842 # Things related to text completion
1842 # Things related to text completion
1843 #-------------------------------------------------------------------------
1843 #-------------------------------------------------------------------------
1844
1844
1845 def init_completer(self):
1845 def init_completer(self):
1846 """Initialize the completion machinery.
1846 """Initialize the completion machinery.
1847
1847
1848 This creates completion machinery that can be used by client code,
1848 This creates completion machinery that can be used by client code,
1849 either interactively in-process (typically triggered by the readline
1849 either interactively in-process (typically triggered by the readline
1850 library), programatically (such as in test suites) or out-of-prcess
1850 library), programatically (such as in test suites) or out-of-prcess
1851 (typically over the network by remote frontends).
1851 (typically over the network by remote frontends).
1852 """
1852 """
1853 from IPython.core.completer import IPCompleter
1853 from IPython.core.completer import IPCompleter
1854 from IPython.core.completerlib import (module_completer,
1854 from IPython.core.completerlib import (module_completer,
1855 magic_run_completer, cd_completer)
1855 magic_run_completer, cd_completer)
1856
1856
1857 self.Completer = IPCompleter(shell=self,
1857 self.Completer = IPCompleter(shell=self,
1858 namespace=self.user_ns,
1858 namespace=self.user_ns,
1859 global_namespace=self.user_global_ns,
1859 global_namespace=self.user_global_ns,
1860 alias_table=self.alias_manager.alias_table,
1860 alias_table=self.alias_manager.alias_table,
1861 use_readline=self.has_readline,
1861 use_readline=self.has_readline,
1862 config=self.config,
1862 config=self.config,
1863 )
1863 )
1864 self.configurables.append(self.Completer)
1864 self.configurables.append(self.Completer)
1865
1865
1866 # Add custom completers to the basic ones built into IPCompleter
1866 # Add custom completers to the basic ones built into IPCompleter
1867 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1867 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1868 self.strdispatchers['complete_command'] = sdisp
1868 self.strdispatchers['complete_command'] = sdisp
1869 self.Completer.custom_completers = sdisp
1869 self.Completer.custom_completers = sdisp
1870
1870
1871 self.set_hook('complete_command', module_completer, str_key = 'import')
1871 self.set_hook('complete_command', module_completer, str_key = 'import')
1872 self.set_hook('complete_command', module_completer, str_key = 'from')
1872 self.set_hook('complete_command', module_completer, str_key = 'from')
1873 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1873 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1874 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1874 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1875
1875
1876 # Only configure readline if we truly are using readline. IPython can
1876 # Only configure readline if we truly are using readline. IPython can
1877 # do tab-completion over the network, in GUIs, etc, where readline
1877 # do tab-completion over the network, in GUIs, etc, where readline
1878 # itself may be absent
1878 # itself may be absent
1879 if self.has_readline:
1879 if self.has_readline:
1880 self.set_readline_completer()
1880 self.set_readline_completer()
1881
1881
1882 def complete(self, text, line=None, cursor_pos=None):
1882 def complete(self, text, line=None, cursor_pos=None):
1883 """Return the completed text and a list of completions.
1883 """Return the completed text and a list of completions.
1884
1884
1885 Parameters
1885 Parameters
1886 ----------
1886 ----------
1887
1887
1888 text : string
1888 text : string
1889 A string of text to be completed on. It can be given as empty and
1889 A string of text to be completed on. It can be given as empty and
1890 instead a line/position pair are given. In this case, the
1890 instead a line/position pair are given. In this case, the
1891 completer itself will split the line like readline does.
1891 completer itself will split the line like readline does.
1892
1892
1893 line : string, optional
1893 line : string, optional
1894 The complete line that text is part of.
1894 The complete line that text is part of.
1895
1895
1896 cursor_pos : int, optional
1896 cursor_pos : int, optional
1897 The position of the cursor on the input line.
1897 The position of the cursor on the input line.
1898
1898
1899 Returns
1899 Returns
1900 -------
1900 -------
1901 text : string
1901 text : string
1902 The actual text that was completed.
1902 The actual text that was completed.
1903
1903
1904 matches : list
1904 matches : list
1905 A sorted list with all possible completions.
1905 A sorted list with all possible completions.
1906
1906
1907 The optional arguments allow the completion to take more context into
1907 The optional arguments allow the completion to take more context into
1908 account, and are part of the low-level completion API.
1908 account, and are part of the low-level completion API.
1909
1909
1910 This is a wrapper around the completion mechanism, similar to what
1910 This is a wrapper around the completion mechanism, similar to what
1911 readline does at the command line when the TAB key is hit. By
1911 readline does at the command line when the TAB key is hit. By
1912 exposing it as a method, it can be used by other non-readline
1912 exposing it as a method, it can be used by other non-readline
1913 environments (such as GUIs) for text completion.
1913 environments (such as GUIs) for text completion.
1914
1914
1915 Simple usage example:
1915 Simple usage example:
1916
1916
1917 In [1]: x = 'hello'
1917 In [1]: x = 'hello'
1918
1918
1919 In [2]: _ip.complete('x.l')
1919 In [2]: _ip.complete('x.l')
1920 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1920 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1921 """
1921 """
1922
1922
1923 # Inject names into __builtin__ so we can complete on the added names.
1923 # Inject names into __builtin__ so we can complete on the added names.
1924 with self.builtin_trap:
1924 with self.builtin_trap:
1925 return self.Completer.complete(text, line, cursor_pos)
1925 return self.Completer.complete(text, line, cursor_pos)
1926
1926
1927 def set_custom_completer(self, completer, pos=0):
1927 def set_custom_completer(self, completer, pos=0):
1928 """Adds a new custom completer function.
1928 """Adds a new custom completer function.
1929
1929
1930 The position argument (defaults to 0) is the index in the completers
1930 The position argument (defaults to 0) is the index in the completers
1931 list where you want the completer to be inserted."""
1931 list where you want the completer to be inserted."""
1932
1932
1933 newcomp = types.MethodType(completer,self.Completer)
1933 newcomp = types.MethodType(completer,self.Completer)
1934 self.Completer.matchers.insert(pos,newcomp)
1934 self.Completer.matchers.insert(pos,newcomp)
1935
1935
1936 def set_readline_completer(self):
1936 def set_readline_completer(self):
1937 """Reset readline's completer to be our own."""
1937 """Reset readline's completer to be our own."""
1938 self.readline.set_completer(self.Completer.rlcomplete)
1938 self.readline.set_completer(self.Completer.rlcomplete)
1939
1939
1940 def set_completer_frame(self, frame=None):
1940 def set_completer_frame(self, frame=None):
1941 """Set the frame of the completer."""
1941 """Set the frame of the completer."""
1942 if frame:
1942 if frame:
1943 self.Completer.namespace = frame.f_locals
1943 self.Completer.namespace = frame.f_locals
1944 self.Completer.global_namespace = frame.f_globals
1944 self.Completer.global_namespace = frame.f_globals
1945 else:
1945 else:
1946 self.Completer.namespace = self.user_ns
1946 self.Completer.namespace = self.user_ns
1947 self.Completer.global_namespace = self.user_global_ns
1947 self.Completer.global_namespace = self.user_global_ns
1948
1948
1949 #-------------------------------------------------------------------------
1949 #-------------------------------------------------------------------------
1950 # Things related to magics
1950 # Things related to magics
1951 #-------------------------------------------------------------------------
1951 #-------------------------------------------------------------------------
1952
1952
1953 def init_magics(self):
1953 def init_magics(self):
1954 # FIXME: Move the color initialization to the DisplayHook, which
1954 # FIXME: Move the color initialization to the DisplayHook, which
1955 # should be split into a prompt manager and displayhook. We probably
1955 # should be split into a prompt manager and displayhook. We probably
1956 # even need a centralize colors management object.
1956 # even need a centralize colors management object.
1957 self.magic_colors(self.colors)
1957 self.magic_colors(self.colors)
1958 # History was moved to a separate module
1958 # History was moved to a separate module
1959 from . import history
1959 from . import history
1960 history.init_ipython(self)
1960 history.init_ipython(self)
1961
1961
1962 def magic(self, arg_s, next_input=None):
1962 def magic(self, arg_s, next_input=None):
1963 """Call a magic function by name.
1963 """Call a magic function by name.
1964
1964
1965 Input: a string containing the name of the magic function to call and
1965 Input: a string containing the name of the magic function to call and
1966 any additional arguments to be passed to the magic.
1966 any additional arguments to be passed to the magic.
1967
1967
1968 magic('name -opt foo bar') is equivalent to typing at the ipython
1968 magic('name -opt foo bar') is equivalent to typing at the ipython
1969 prompt:
1969 prompt:
1970
1970
1971 In[1]: %name -opt foo bar
1971 In[1]: %name -opt foo bar
1972
1972
1973 To call a magic without arguments, simply use magic('name').
1973 To call a magic without arguments, simply use magic('name').
1974
1974
1975 This provides a proper Python function to call IPython's magics in any
1975 This provides a proper Python function to call IPython's magics in any
1976 valid Python code you can type at the interpreter, including loops and
1976 valid Python code you can type at the interpreter, including loops and
1977 compound statements.
1977 compound statements.
1978 """
1978 """
1979 # Allow setting the next input - this is used if the user does `a=abs?`.
1979 # Allow setting the next input - this is used if the user does `a=abs?`.
1980 # We do this first so that magic functions can override it.
1980 # We do this first so that magic functions can override it.
1981 if next_input:
1981 if next_input:
1982 self.set_next_input(next_input)
1982 self.set_next_input(next_input)
1983
1983
1984 args = arg_s.split(' ',1)
1984 args = arg_s.split(' ',1)
1985 magic_name = args[0]
1985 magic_name = args[0]
1986 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
1986 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
1987
1987
1988 try:
1988 try:
1989 magic_args = args[1]
1989 magic_args = args[1]
1990 except IndexError:
1990 except IndexError:
1991 magic_args = ''
1991 magic_args = ''
1992 fn = getattr(self,'magic_'+magic_name,None)
1992 fn = getattr(self,'magic_'+magic_name,None)
1993 if fn is None:
1993 if fn is None:
1994 error("Magic function `%s` not found." % magic_name)
1994 error("Magic function `%s` not found." % magic_name)
1995 else:
1995 else:
1996 magic_args = self.var_expand(magic_args,1)
1996 magic_args = self.var_expand(magic_args,1)
1997 # Grab local namespace if we need it:
1997 # Grab local namespace if we need it:
1998 if getattr(fn, "needs_local_scope", False):
1998 if getattr(fn, "needs_local_scope", False):
1999 self._magic_locals = sys._getframe(1).f_locals
1999 self._magic_locals = sys._getframe(1).f_locals
2000 with self.builtin_trap:
2000 with self.builtin_trap:
2001 result = fn(magic_args)
2001 result = fn(magic_args)
2002 # Ensure we're not keeping object references around:
2002 # Ensure we're not keeping object references around:
2003 self._magic_locals = {}
2003 self._magic_locals = {}
2004 return result
2004 return result
2005
2005
2006 def define_magic(self, magicname, func):
2006 def define_magic(self, magicname, func):
2007 """Expose own function as magic function for ipython
2007 """Expose own function as magic function for ipython
2008
2008
2009 def foo_impl(self,parameter_s=''):
2009 def foo_impl(self,parameter_s=''):
2010 'My very own magic!. (Use docstrings, IPython reads them).'
2010 'My very own magic!. (Use docstrings, IPython reads them).'
2011 print 'Magic function. Passed parameter is between < >:'
2011 print 'Magic function. Passed parameter is between < >:'
2012 print '<%s>' % parameter_s
2012 print '<%s>' % parameter_s
2013 print 'The self object is:',self
2013 print 'The self object is:',self
2014
2014
2015 self.define_magic('foo',foo_impl)
2015 self.define_magic('foo',foo_impl)
2016 """
2016 """
2017 im = types.MethodType(func,self)
2017 im = types.MethodType(func,self)
2018 old = getattr(self, "magic_" + magicname, None)
2018 old = getattr(self, "magic_" + magicname, None)
2019 setattr(self, "magic_" + magicname, im)
2019 setattr(self, "magic_" + magicname, im)
2020 return old
2020 return old
2021
2021
2022 #-------------------------------------------------------------------------
2022 #-------------------------------------------------------------------------
2023 # Things related to macros
2023 # Things related to macros
2024 #-------------------------------------------------------------------------
2024 #-------------------------------------------------------------------------
2025
2025
2026 def define_macro(self, name, themacro):
2026 def define_macro(self, name, themacro):
2027 """Define a new macro
2027 """Define a new macro
2028
2028
2029 Parameters
2029 Parameters
2030 ----------
2030 ----------
2031 name : str
2031 name : str
2032 The name of the macro.
2032 The name of the macro.
2033 themacro : str or Macro
2033 themacro : str or Macro
2034 The action to do upon invoking the macro. If a string, a new
2034 The action to do upon invoking the macro. If a string, a new
2035 Macro object is created by passing the string to it.
2035 Macro object is created by passing the string to it.
2036 """
2036 """
2037
2037
2038 from IPython.core import macro
2038 from IPython.core import macro
2039
2039
2040 if isinstance(themacro, basestring):
2040 if isinstance(themacro, basestring):
2041 themacro = macro.Macro(themacro)
2041 themacro = macro.Macro(themacro)
2042 if not isinstance(themacro, macro.Macro):
2042 if not isinstance(themacro, macro.Macro):
2043 raise ValueError('A macro must be a string or a Macro instance.')
2043 raise ValueError('A macro must be a string or a Macro instance.')
2044 self.user_ns[name] = themacro
2044 self.user_ns[name] = themacro
2045
2045
2046 #-------------------------------------------------------------------------
2046 #-------------------------------------------------------------------------
2047 # Things related to the running of system commands
2047 # Things related to the running of system commands
2048 #-------------------------------------------------------------------------
2048 #-------------------------------------------------------------------------
2049
2049
2050 def system_piped(self, cmd):
2050 def system_piped(self, cmd):
2051 """Call the given cmd in a subprocess, piping stdout/err
2051 """Call the given cmd in a subprocess, piping stdout/err
2052
2052
2053 Parameters
2053 Parameters
2054 ----------
2054 ----------
2055 cmd : str
2055 cmd : str
2056 Command to execute (can not end in '&', as background processes are
2056 Command to execute (can not end in '&', as background processes are
2057 not supported. Should not be a command that expects input
2057 not supported. Should not be a command that expects input
2058 other than simple text.
2058 other than simple text.
2059 """
2059 """
2060 if cmd.rstrip().endswith('&'):
2060 if cmd.rstrip().endswith('&'):
2061 # this is *far* from a rigorous test
2061 # this is *far* from a rigorous test
2062 # We do not support backgrounding processes because we either use
2062 # We do not support backgrounding processes because we either use
2063 # pexpect or pipes to read from. Users can always just call
2063 # pexpect or pipes to read from. Users can always just call
2064 # os.system() or use ip.system=ip.system_raw
2064 # os.system() or use ip.system=ip.system_raw
2065 # if they really want a background process.
2065 # if they really want a background process.
2066 raise OSError("Background processes not supported.")
2066 raise OSError("Background processes not supported.")
2067
2067
2068 # we explicitly do NOT return the subprocess status code, because
2068 # we explicitly do NOT return the subprocess status code, because
2069 # a non-None value would trigger :func:`sys.displayhook` calls.
2069 # a non-None value would trigger :func:`sys.displayhook` calls.
2070 # Instead, we store the exit_code in user_ns.
2070 # Instead, we store the exit_code in user_ns.
2071 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
2071 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
2072
2072
2073 def system_raw(self, cmd):
2073 def system_raw(self, cmd):
2074 """Call the given cmd in a subprocess using os.system
2074 """Call the given cmd in a subprocess using os.system
2075
2075
2076 Parameters
2076 Parameters
2077 ----------
2077 ----------
2078 cmd : str
2078 cmd : str
2079 Command to execute.
2079 Command to execute.
2080 """
2080 """
2081 cmd = self.var_expand(cmd, depth=2)
2081 cmd = self.var_expand(cmd, depth=2)
2082 # protect os.system from UNC paths on Windows, which it can't handle:
2082 # protect os.system from UNC paths on Windows, which it can't handle:
2083 if sys.platform == 'win32':
2083 if sys.platform == 'win32':
2084 from IPython.utils._process_win32 import AvoidUNCPath
2084 from IPython.utils._process_win32 import AvoidUNCPath
2085 with AvoidUNCPath() as path:
2085 with AvoidUNCPath() as path:
2086 if path is not None:
2086 if path is not None:
2087 cmd = '"pushd %s &&"%s' % (path, cmd)
2087 cmd = '"pushd %s &&"%s' % (path, cmd)
2088 cmd = py3compat.unicode_to_str(cmd)
2088 cmd = py3compat.unicode_to_str(cmd)
2089 ec = os.system(cmd)
2089 ec = os.system(cmd)
2090 else:
2090 else:
2091 cmd = py3compat.unicode_to_str(cmd)
2091 cmd = py3compat.unicode_to_str(cmd)
2092 ec = os.system(cmd)
2092 ec = os.system(cmd)
2093
2093
2094 # We explicitly do NOT return the subprocess status code, because
2094 # We explicitly do NOT return the subprocess status code, because
2095 # a non-None value would trigger :func:`sys.displayhook` calls.
2095 # a non-None value would trigger :func:`sys.displayhook` calls.
2096 # Instead, we store the exit_code in user_ns.
2096 # Instead, we store the exit_code in user_ns.
2097 self.user_ns['_exit_code'] = ec
2097 self.user_ns['_exit_code'] = ec
2098
2098
2099 # use piped system by default, because it is better behaved
2099 # use piped system by default, because it is better behaved
2100 system = system_piped
2100 system = system_piped
2101
2101
2102 def getoutput(self, cmd, split=True):
2102 def getoutput(self, cmd, split=True):
2103 """Get output (possibly including stderr) from a subprocess.
2103 """Get output (possibly including stderr) from a subprocess.
2104
2104
2105 Parameters
2105 Parameters
2106 ----------
2106 ----------
2107 cmd : str
2107 cmd : str
2108 Command to execute (can not end in '&', as background processes are
2108 Command to execute (can not end in '&', as background processes are
2109 not supported.
2109 not supported.
2110 split : bool, optional
2110 split : bool, optional
2111
2111
2112 If True, split the output into an IPython SList. Otherwise, an
2112 If True, split the output into an IPython SList. Otherwise, an
2113 IPython LSString is returned. These are objects similar to normal
2113 IPython LSString is returned. These are objects similar to normal
2114 lists and strings, with a few convenience attributes for easier
2114 lists and strings, with a few convenience attributes for easier
2115 manipulation of line-based output. You can use '?' on them for
2115 manipulation of line-based output. You can use '?' on them for
2116 details.
2116 details.
2117 """
2117 """
2118 if cmd.rstrip().endswith('&'):
2118 if cmd.rstrip().endswith('&'):
2119 # this is *far* from a rigorous test
2119 # this is *far* from a rigorous test
2120 raise OSError("Background processes not supported.")
2120 raise OSError("Background processes not supported.")
2121 out = getoutput(self.var_expand(cmd, depth=2))
2121 out = getoutput(self.var_expand(cmd, depth=2))
2122 if split:
2122 if split:
2123 out = SList(out.splitlines())
2123 out = SList(out.splitlines())
2124 else:
2124 else:
2125 out = LSString(out)
2125 out = LSString(out)
2126 return out
2126 return out
2127
2127
2128 #-------------------------------------------------------------------------
2128 #-------------------------------------------------------------------------
2129 # Things related to aliases
2129 # Things related to aliases
2130 #-------------------------------------------------------------------------
2130 #-------------------------------------------------------------------------
2131
2131
2132 def init_alias(self):
2132 def init_alias(self):
2133 self.alias_manager = AliasManager(shell=self, config=self.config)
2133 self.alias_manager = AliasManager(shell=self, config=self.config)
2134 self.configurables.append(self.alias_manager)
2134 self.configurables.append(self.alias_manager)
2135 self.ns_table['alias'] = self.alias_manager.alias_table,
2135 self.ns_table['alias'] = self.alias_manager.alias_table,
2136
2136
2137 #-------------------------------------------------------------------------
2137 #-------------------------------------------------------------------------
2138 # Things related to extensions and plugins
2138 # Things related to extensions and plugins
2139 #-------------------------------------------------------------------------
2139 #-------------------------------------------------------------------------
2140
2140
2141 def init_extension_manager(self):
2141 def init_extension_manager(self):
2142 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2142 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2143 self.configurables.append(self.extension_manager)
2143 self.configurables.append(self.extension_manager)
2144
2144
2145 def init_plugin_manager(self):
2145 def init_plugin_manager(self):
2146 self.plugin_manager = PluginManager(config=self.config)
2146 self.plugin_manager = PluginManager(config=self.config)
2147 self.configurables.append(self.plugin_manager)
2147 self.configurables.append(self.plugin_manager)
2148
2148
2149
2149
2150 #-------------------------------------------------------------------------
2150 #-------------------------------------------------------------------------
2151 # Things related to payloads
2151 # Things related to payloads
2152 #-------------------------------------------------------------------------
2152 #-------------------------------------------------------------------------
2153
2153
2154 def init_payload(self):
2154 def init_payload(self):
2155 self.payload_manager = PayloadManager(config=self.config)
2155 self.payload_manager = PayloadManager(config=self.config)
2156 self.configurables.append(self.payload_manager)
2156 self.configurables.append(self.payload_manager)
2157
2157
2158 #-------------------------------------------------------------------------
2158 #-------------------------------------------------------------------------
2159 # Things related to the prefilter
2159 # Things related to the prefilter
2160 #-------------------------------------------------------------------------
2160 #-------------------------------------------------------------------------
2161
2161
2162 def init_prefilter(self):
2162 def init_prefilter(self):
2163 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2163 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2164 self.configurables.append(self.prefilter_manager)
2164 self.configurables.append(self.prefilter_manager)
2165 # Ultimately this will be refactored in the new interpreter code, but
2165 # Ultimately this will be refactored in the new interpreter code, but
2166 # for now, we should expose the main prefilter method (there's legacy
2166 # for now, we should expose the main prefilter method (there's legacy
2167 # code out there that may rely on this).
2167 # code out there that may rely on this).
2168 self.prefilter = self.prefilter_manager.prefilter_lines
2168 self.prefilter = self.prefilter_manager.prefilter_lines
2169
2169
2170 def auto_rewrite_input(self, cmd):
2170 def auto_rewrite_input(self, cmd):
2171 """Print to the screen the rewritten form of the user's command.
2171 """Print to the screen the rewritten form of the user's command.
2172
2172
2173 This shows visual feedback by rewriting input lines that cause
2173 This shows visual feedback by rewriting input lines that cause
2174 automatic calling to kick in, like::
2174 automatic calling to kick in, like::
2175
2175
2176 /f x
2176 /f x
2177
2177
2178 into::
2178 into::
2179
2179
2180 ------> f(x)
2180 ------> f(x)
2181
2181
2182 after the user's input prompt. This helps the user understand that the
2182 after the user's input prompt. This helps the user understand that the
2183 input line was transformed automatically by IPython.
2183 input line was transformed automatically by IPython.
2184 """
2184 """
2185 rw = self.displayhook.prompt1.auto_rewrite() + cmd
2185 rw = self.displayhook.prompt1.auto_rewrite() + cmd
2186
2186
2187 try:
2187 try:
2188 # plain ascii works better w/ pyreadline, on some machines, so
2188 # plain ascii works better w/ pyreadline, on some machines, so
2189 # we use it and only print uncolored rewrite if we have unicode
2189 # we use it and only print uncolored rewrite if we have unicode
2190 rw = str(rw)
2190 rw = str(rw)
2191 print >> io.stdout, rw
2191 print >> io.stdout, rw
2192 except UnicodeEncodeError:
2192 except UnicodeEncodeError:
2193 print "------> " + cmd
2193 print "------> " + cmd
2194
2194
2195 #-------------------------------------------------------------------------
2195 #-------------------------------------------------------------------------
2196 # Things related to extracting values/expressions from kernel and user_ns
2196 # Things related to extracting values/expressions from kernel and user_ns
2197 #-------------------------------------------------------------------------
2197 #-------------------------------------------------------------------------
2198
2198
2199 def _simple_error(self):
2199 def _simple_error(self):
2200 etype, value = sys.exc_info()[:2]
2200 etype, value = sys.exc_info()[:2]
2201 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2201 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2202
2202
2203 def user_variables(self, names):
2203 def user_variables(self, names):
2204 """Get a list of variable names from the user's namespace.
2204 """Get a list of variable names from the user's namespace.
2205
2205
2206 Parameters
2206 Parameters
2207 ----------
2207 ----------
2208 names : list of strings
2208 names : list of strings
2209 A list of names of variables to be read from the user namespace.
2209 A list of names of variables to be read from the user namespace.
2210
2210
2211 Returns
2211 Returns
2212 -------
2212 -------
2213 A dict, keyed by the input names and with the repr() of each value.
2213 A dict, keyed by the input names and with the repr() of each value.
2214 """
2214 """
2215 out = {}
2215 out = {}
2216 user_ns = self.user_ns
2216 user_ns = self.user_ns
2217 for varname in names:
2217 for varname in names:
2218 try:
2218 try:
2219 value = repr(user_ns[varname])
2219 value = repr(user_ns[varname])
2220 except:
2220 except:
2221 value = self._simple_error()
2221 value = self._simple_error()
2222 out[varname] = value
2222 out[varname] = value
2223 return out
2223 return out
2224
2224
2225 def user_expressions(self, expressions):
2225 def user_expressions(self, expressions):
2226 """Evaluate a dict of expressions in the user's namespace.
2226 """Evaluate a dict of expressions in the user's namespace.
2227
2227
2228 Parameters
2228 Parameters
2229 ----------
2229 ----------
2230 expressions : dict
2230 expressions : dict
2231 A dict with string keys and string values. The expression values
2231 A dict with string keys and string values. The expression values
2232 should be valid Python expressions, each of which will be evaluated
2232 should be valid Python expressions, each of which will be evaluated
2233 in the user namespace.
2233 in the user namespace.
2234
2234
2235 Returns
2235 Returns
2236 -------
2236 -------
2237 A dict, keyed like the input expressions dict, with the repr() of each
2237 A dict, keyed like the input expressions dict, with the repr() of each
2238 value.
2238 value.
2239 """
2239 """
2240 out = {}
2240 out = {}
2241 user_ns = self.user_ns
2241 user_ns = self.user_ns
2242 global_ns = self.user_global_ns
2242 global_ns = self.user_global_ns
2243 for key, expr in expressions.iteritems():
2243 for key, expr in expressions.iteritems():
2244 try:
2244 try:
2245 value = repr(eval(expr, global_ns, user_ns))
2245 value = repr(eval(expr, global_ns, user_ns))
2246 except:
2246 except:
2247 value = self._simple_error()
2247 value = self._simple_error()
2248 out[key] = value
2248 out[key] = value
2249 return out
2249 return out
2250
2250
2251 #-------------------------------------------------------------------------
2251 #-------------------------------------------------------------------------
2252 # Things related to the running of code
2252 # Things related to the running of code
2253 #-------------------------------------------------------------------------
2253 #-------------------------------------------------------------------------
2254
2254
2255 def ex(self, cmd):
2255 def ex(self, cmd):
2256 """Execute a normal python statement in user namespace."""
2256 """Execute a normal python statement in user namespace."""
2257 with self.builtin_trap:
2257 with self.builtin_trap:
2258 exec cmd in self.user_global_ns, self.user_ns
2258 exec cmd in self.user_global_ns, self.user_ns
2259
2259
2260 def ev(self, expr):
2260 def ev(self, expr):
2261 """Evaluate python expression expr in user namespace.
2261 """Evaluate python expression expr in user namespace.
2262
2262
2263 Returns the result of evaluation
2263 Returns the result of evaluation
2264 """
2264 """
2265 with self.builtin_trap:
2265 with self.builtin_trap:
2266 return eval(expr, self.user_global_ns, self.user_ns)
2266 return eval(expr, self.user_global_ns, self.user_ns)
2267
2267
2268 def safe_execfile(self, fname, *where, **kw):
2268 def safe_execfile(self, fname, *where, **kw):
2269 """A safe version of the builtin execfile().
2269 """A safe version of the builtin execfile().
2270
2270
2271 This version will never throw an exception, but instead print
2271 This version will never throw an exception, but instead print
2272 helpful error messages to the screen. This only works on pure
2272 helpful error messages to the screen. This only works on pure
2273 Python files with the .py extension.
2273 Python files with the .py extension.
2274
2274
2275 Parameters
2275 Parameters
2276 ----------
2276 ----------
2277 fname : string
2277 fname : string
2278 The name of the file to be executed.
2278 The name of the file to be executed.
2279 where : tuple
2279 where : tuple
2280 One or two namespaces, passed to execfile() as (globals,locals).
2280 One or two namespaces, passed to execfile() as (globals,locals).
2281 If only one is given, it is passed as both.
2281 If only one is given, it is passed as both.
2282 exit_ignore : bool (False)
2282 exit_ignore : bool (False)
2283 If True, then silence SystemExit for non-zero status (it is always
2283 If True, then silence SystemExit for non-zero status (it is always
2284 silenced for zero status, as it is so common).
2284 silenced for zero status, as it is so common).
2285 raise_exceptions : bool (False)
2285 raise_exceptions : bool (False)
2286 If True raise exceptions everywhere. Meant for testing.
2286 If True raise exceptions everywhere. Meant for testing.
2287
2287
2288 """
2288 """
2289 kw.setdefault('exit_ignore', False)
2289 kw.setdefault('exit_ignore', False)
2290 kw.setdefault('raise_exceptions', False)
2290 kw.setdefault('raise_exceptions', False)
2291
2291
2292 fname = os.path.abspath(os.path.expanduser(fname))
2292 fname = os.path.abspath(os.path.expanduser(fname))
2293
2293
2294 # Make sure we can open the file
2294 # Make sure we can open the file
2295 try:
2295 try:
2296 with open(fname) as thefile:
2296 with open(fname) as thefile:
2297 pass
2297 pass
2298 except:
2298 except:
2299 warn('Could not open file <%s> for safe execution.' % fname)
2299 warn('Could not open file <%s> for safe execution.' % fname)
2300 return
2300 return
2301
2301
2302 # Find things also in current directory. This is needed to mimic the
2302 # Find things also in current directory. This is needed to mimic the
2303 # behavior of running a script from the system command line, where
2303 # behavior of running a script from the system command line, where
2304 # Python inserts the script's directory into sys.path
2304 # Python inserts the script's directory into sys.path
2305 dname = os.path.dirname(fname)
2305 dname = os.path.dirname(fname)
2306
2306
2307 with prepended_to_syspath(dname):
2307 with prepended_to_syspath(dname):
2308 try:
2308 try:
2309 py3compat.execfile(fname,*where)
2309 py3compat.execfile(fname,*where)
2310 except SystemExit, status:
2310 except SystemExit, status:
2311 # If the call was made with 0 or None exit status (sys.exit(0)
2311 # If the call was made with 0 or None exit status (sys.exit(0)
2312 # or sys.exit() ), don't bother showing a traceback, as both of
2312 # or sys.exit() ), don't bother showing a traceback, as both of
2313 # these are considered normal by the OS:
2313 # these are considered normal by the OS:
2314 # > python -c'import sys;sys.exit(0)'; echo $?
2314 # > python -c'import sys;sys.exit(0)'; echo $?
2315 # 0
2315 # 0
2316 # > python -c'import sys;sys.exit()'; echo $?
2316 # > python -c'import sys;sys.exit()'; echo $?
2317 # 0
2317 # 0
2318 # For other exit status, we show the exception unless
2318 # For other exit status, we show the exception unless
2319 # explicitly silenced, but only in short form.
2319 # explicitly silenced, but only in short form.
2320 if kw['raise_exceptions']:
2320 if kw['raise_exceptions']:
2321 raise
2321 raise
2322 if status.code not in (0, None) and not kw['exit_ignore']:
2322 if status.code not in (0, None) and not kw['exit_ignore']:
2323 self.showtraceback(exception_only=True)
2323 self.showtraceback(exception_only=True)
2324 except:
2324 except:
2325 if kw['raise_exceptions']:
2325 if kw['raise_exceptions']:
2326 raise
2326 raise
2327 self.showtraceback()
2327 self.showtraceback()
2328
2328
2329 def safe_execfile_ipy(self, fname):
2329 def safe_execfile_ipy(self, fname):
2330 """Like safe_execfile, but for .ipy files with IPython syntax.
2330 """Like safe_execfile, but for .ipy files with IPython syntax.
2331
2331
2332 Parameters
2332 Parameters
2333 ----------
2333 ----------
2334 fname : str
2334 fname : str
2335 The name of the file to execute. The filename must have a
2335 The name of the file to execute. The filename must have a
2336 .ipy extension.
2336 .ipy extension.
2337 """
2337 """
2338 fname = os.path.abspath(os.path.expanduser(fname))
2338 fname = os.path.abspath(os.path.expanduser(fname))
2339
2339
2340 # Make sure we can open the file
2340 # Make sure we can open the file
2341 try:
2341 try:
2342 with open(fname) as thefile:
2342 with open(fname) as thefile:
2343 pass
2343 pass
2344 except:
2344 except:
2345 warn('Could not open file <%s> for safe execution.' % fname)
2345 warn('Could not open file <%s> for safe execution.' % fname)
2346 return
2346 return
2347
2347
2348 # Find things also in current directory. This is needed to mimic the
2348 # Find things also in current directory. This is needed to mimic the
2349 # behavior of running a script from the system command line, where
2349 # behavior of running a script from the system command line, where
2350 # Python inserts the script's directory into sys.path
2350 # Python inserts the script's directory into sys.path
2351 dname = os.path.dirname(fname)
2351 dname = os.path.dirname(fname)
2352
2352
2353 with prepended_to_syspath(dname):
2353 with prepended_to_syspath(dname):
2354 try:
2354 try:
2355 with open(fname) as thefile:
2355 with open(fname) as thefile:
2356 # self.run_cell currently captures all exceptions
2356 # self.run_cell currently captures all exceptions
2357 # raised in user code. It would be nice if there were
2357 # raised in user code. It would be nice if there were
2358 # versions of runlines, execfile that did raise, so
2358 # versions of runlines, execfile that did raise, so
2359 # we could catch the errors.
2359 # we could catch the errors.
2360 self.run_cell(thefile.read(), store_history=False)
2360 self.run_cell(thefile.read(), store_history=False)
2361 except:
2361 except:
2362 self.showtraceback()
2362 self.showtraceback()
2363 warn('Unknown failure executing file: <%s>' % fname)
2363 warn('Unknown failure executing file: <%s>' % fname)
2364
2364
2365 def run_cell(self, raw_cell, store_history=False):
2365 def run_cell(self, raw_cell, store_history=False):
2366 """Run a complete IPython cell.
2366 """Run a complete IPython cell.
2367
2367
2368 Parameters
2368 Parameters
2369 ----------
2369 ----------
2370 raw_cell : str
2370 raw_cell : str
2371 The code (including IPython code such as %magic functions) to run.
2371 The code (including IPython code such as %magic functions) to run.
2372 store_history : bool
2372 store_history : bool
2373 If True, the raw and translated cell will be stored in IPython's
2373 If True, the raw and translated cell will be stored in IPython's
2374 history. For user code calling back into IPython's machinery, this
2374 history. For user code calling back into IPython's machinery, this
2375 should be set to False.
2375 should be set to False.
2376 """
2376 """
2377 if (not raw_cell) or raw_cell.isspace():
2377 if (not raw_cell) or raw_cell.isspace():
2378 return
2378 return
2379
2379
2380 for line in raw_cell.splitlines():
2380 for line in raw_cell.splitlines():
2381 self.input_splitter.push(line)
2381 self.input_splitter.push(line)
2382 cell = self.input_splitter.source_reset()
2382 cell = self.input_splitter.source_reset()
2383
2383
2384 with self.builtin_trap:
2384 with self.builtin_trap:
2385 prefilter_failed = False
2385 prefilter_failed = False
2386 if len(cell.splitlines()) == 1:
2386 if len(cell.splitlines()) == 1:
2387 try:
2387 try:
2388 # use prefilter_lines to handle trailing newlines
2388 # use prefilter_lines to handle trailing newlines
2389 # restore trailing newline for ast.parse
2389 # restore trailing newline for ast.parse
2390 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2390 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2391 except AliasError as e:
2391 except AliasError as e:
2392 error(e)
2392 error(e)
2393 prefilter_failed = True
2393 prefilter_failed = True
2394 except Exception:
2394 except Exception:
2395 # don't allow prefilter errors to crash IPython
2395 # don't allow prefilter errors to crash IPython
2396 self.showtraceback()
2396 self.showtraceback()
2397 prefilter_failed = True
2397 prefilter_failed = True
2398
2398
2399 # Store raw and processed history
2399 # Store raw and processed history
2400 if store_history:
2400 if store_history:
2401 self.history_manager.store_inputs(self.execution_count,
2401 self.history_manager.store_inputs(self.execution_count,
2402 cell, raw_cell)
2402 cell, raw_cell)
2403
2403
2404 self.logger.log(cell, raw_cell)
2404 self.logger.log(cell, raw_cell)
2405
2405
2406 if not prefilter_failed:
2406 if not prefilter_failed:
2407 # don't run if prefilter failed
2407 # don't run if prefilter failed
2408 cell_name = self.compile.cache(cell, self.execution_count)
2408 cell_name = self.compile.cache(cell, self.execution_count)
2409
2409
2410 with self.display_trap:
2410 with self.display_trap:
2411 try:
2411 try:
2412 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2412 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2413 except IndentationError:
2413 except IndentationError:
2414 self.showindentationerror()
2414 self.showindentationerror()
2415 self.execution_count += 1
2415 self.execution_count += 1
2416 return None
2416 return None
2417 except (OverflowError, SyntaxError, ValueError, TypeError,
2417 except (OverflowError, SyntaxError, ValueError, TypeError,
2418 MemoryError):
2418 MemoryError):
2419 self.showsyntaxerror()
2419 self.showsyntaxerror()
2420 self.execution_count += 1
2420 self.execution_count += 1
2421 return None
2421 return None
2422
2422
2423 self.run_ast_nodes(code_ast.body, cell_name,
2423 self.run_ast_nodes(code_ast.body, cell_name,
2424 interactivity="last_expr")
2424 interactivity="last_expr")
2425
2425
2426 # Execute any registered post-execution functions.
2426 # Execute any registered post-execution functions.
2427 for func, status in self._post_execute.iteritems():
2427 for func, status in self._post_execute.iteritems():
2428 if not status:
2428 if not status:
2429 continue
2429 continue
2430 try:
2430 try:
2431 func()
2431 func()
2432 except KeyboardInterrupt:
2432 except KeyboardInterrupt:
2433 print >> io.stderr, "\nKeyboardInterrupt"
2433 print >> io.stderr, "\nKeyboardInterrupt"
2434 except Exception:
2434 except Exception:
2435 print >> io.stderr, "Disabling failed post-execution function: %s" % func
2435 print >> io.stderr, "Disabling failed post-execution function: %s" % func
2436 self.showtraceback()
2436 self.showtraceback()
2437 # Deactivate failing function
2437 # Deactivate failing function
2438 self._post_execute[func] = False
2438 self._post_execute[func] = False
2439
2439
2440 if store_history:
2440 if store_history:
2441 # Write output to the database. Does nothing unless
2441 # Write output to the database. Does nothing unless
2442 # history output logging is enabled.
2442 # history output logging is enabled.
2443 self.history_manager.store_output(self.execution_count)
2443 self.history_manager.store_output(self.execution_count)
2444 # Each cell is a *single* input, regardless of how many lines it has
2444 # Each cell is a *single* input, regardless of how many lines it has
2445 self.execution_count += 1
2445 self.execution_count += 1
2446
2446
2447 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2447 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2448 """Run a sequence of AST nodes. The execution mode depends on the
2448 """Run a sequence of AST nodes. The execution mode depends on the
2449 interactivity parameter.
2449 interactivity parameter.
2450
2450
2451 Parameters
2451 Parameters
2452 ----------
2452 ----------
2453 nodelist : list
2453 nodelist : list
2454 A sequence of AST nodes to run.
2454 A sequence of AST nodes to run.
2455 cell_name : str
2455 cell_name : str
2456 Will be passed to the compiler as the filename of the cell. Typically
2456 Will be passed to the compiler as the filename of the cell. Typically
2457 the value returned by ip.compile.cache(cell).
2457 the value returned by ip.compile.cache(cell).
2458 interactivity : str
2458 interactivity : str
2459 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2459 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2460 run interactively (displaying output from expressions). 'last_expr'
2460 run interactively (displaying output from expressions). 'last_expr'
2461 will run the last node interactively only if it is an expression (i.e.
2461 will run the last node interactively only if it is an expression (i.e.
2462 expressions in loops or other blocks are not displayed. Other values
2462 expressions in loops or other blocks are not displayed. Other values
2463 for this parameter will raise a ValueError.
2463 for this parameter will raise a ValueError.
2464 """
2464 """
2465 if not nodelist:
2465 if not nodelist:
2466 return
2466 return
2467
2467
2468 if interactivity == 'last_expr':
2468 if interactivity == 'last_expr':
2469 if isinstance(nodelist[-1], ast.Expr):
2469 if isinstance(nodelist[-1], ast.Expr):
2470 interactivity = "last"
2470 interactivity = "last"
2471 else:
2471 else:
2472 interactivity = "none"
2472 interactivity = "none"
2473
2473
2474 if interactivity == 'none':
2474 if interactivity == 'none':
2475 to_run_exec, to_run_interactive = nodelist, []
2475 to_run_exec, to_run_interactive = nodelist, []
2476 elif interactivity == 'last':
2476 elif interactivity == 'last':
2477 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2477 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2478 elif interactivity == 'all':
2478 elif interactivity == 'all':
2479 to_run_exec, to_run_interactive = [], nodelist
2479 to_run_exec, to_run_interactive = [], nodelist
2480 else:
2480 else:
2481 raise ValueError("Interactivity was %r" % interactivity)
2481 raise ValueError("Interactivity was %r" % interactivity)
2482
2482
2483 exec_count = self.execution_count
2483 exec_count = self.execution_count
2484
2484
2485 try:
2485 try:
2486 for i, node in enumerate(to_run_exec):
2486 for i, node in enumerate(to_run_exec):
2487 mod = ast.Module([node])
2487 mod = ast.Module([node])
2488 code = self.compile(mod, cell_name, "exec")
2488 code = self.compile(mod, cell_name, "exec")
2489 if self.run_code(code):
2489 if self.run_code(code):
2490 return True
2490 return True
2491
2491
2492 for i, node in enumerate(to_run_interactive):
2492 for i, node in enumerate(to_run_interactive):
2493 mod = ast.Interactive([node])
2493 mod = ast.Interactive([node])
2494 code = self.compile(mod, cell_name, "single")
2494 code = self.compile(mod, cell_name, "single")
2495 if self.run_code(code):
2495 if self.run_code(code):
2496 return True
2496 return True
2497 except:
2497 except:
2498 # It's possible to have exceptions raised here, typically by
2498 # It's possible to have exceptions raised here, typically by
2499 # compilation of odd code (such as a naked 'return' outside a
2499 # compilation of odd code (such as a naked 'return' outside a
2500 # function) that did parse but isn't valid. Typically the exception
2500 # function) that did parse but isn't valid. Typically the exception
2501 # is a SyntaxError, but it's safest just to catch anything and show
2501 # is a SyntaxError, but it's safest just to catch anything and show
2502 # the user a traceback.
2502 # the user a traceback.
2503
2503
2504 # We do only one try/except outside the loop to minimize the impact
2504 # We do only one try/except outside the loop to minimize the impact
2505 # on runtime, and also because if any node in the node list is
2505 # on runtime, and also because if any node in the node list is
2506 # broken, we should stop execution completely.
2506 # broken, we should stop execution completely.
2507 self.showtraceback()
2507 self.showtraceback()
2508
2508
2509 return False
2509 return False
2510
2510
2511 def run_code(self, code_obj):
2511 def run_code(self, code_obj):
2512 """Execute a code object.
2512 """Execute a code object.
2513
2513
2514 When an exception occurs, self.showtraceback() is called to display a
2514 When an exception occurs, self.showtraceback() is called to display a
2515 traceback.
2515 traceback.
2516
2516
2517 Parameters
2517 Parameters
2518 ----------
2518 ----------
2519 code_obj : code object
2519 code_obj : code object
2520 A compiled code object, to be executed
2520 A compiled code object, to be executed
2521 post_execute : bool [default: True]
2521 post_execute : bool [default: True]
2522 whether to call post_execute hooks after this particular execution.
2522 whether to call post_execute hooks after this particular execution.
2523
2523
2524 Returns
2524 Returns
2525 -------
2525 -------
2526 False : successful execution.
2526 False : successful execution.
2527 True : an error occurred.
2527 True : an error occurred.
2528 """
2528 """
2529
2529
2530 # Set our own excepthook in case the user code tries to call it
2530 # Set our own excepthook in case the user code tries to call it
2531 # directly, so that the IPython crash handler doesn't get triggered
2531 # directly, so that the IPython crash handler doesn't get triggered
2532 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2532 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2533
2533
2534 # we save the original sys.excepthook in the instance, in case config
2534 # we save the original sys.excepthook in the instance, in case config
2535 # code (such as magics) needs access to it.
2535 # code (such as magics) needs access to it.
2536 self.sys_excepthook = old_excepthook
2536 self.sys_excepthook = old_excepthook
2537 outflag = 1 # happens in more places, so it's easier as default
2537 outflag = 1 # happens in more places, so it's easier as default
2538 try:
2538 try:
2539 try:
2539 try:
2540 self.hooks.pre_run_code_hook()
2540 self.hooks.pre_run_code_hook()
2541 #rprint('Running code', repr(code_obj)) # dbg
2541 #rprint('Running code', repr(code_obj)) # dbg
2542 exec code_obj in self.user_global_ns, self.user_ns
2542 exec code_obj in self.user_global_ns, self.user_ns
2543 finally:
2543 finally:
2544 # Reset our crash handler in place
2544 # Reset our crash handler in place
2545 sys.excepthook = old_excepthook
2545 sys.excepthook = old_excepthook
2546 except SystemExit:
2546 except SystemExit:
2547 self.showtraceback(exception_only=True)
2547 self.showtraceback(exception_only=True)
2548 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2548 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2549 except self.custom_exceptions:
2549 except self.custom_exceptions:
2550 etype,value,tb = sys.exc_info()
2550 etype,value,tb = sys.exc_info()
2551 self.CustomTB(etype,value,tb)
2551 self.CustomTB(etype,value,tb)
2552 except:
2552 except:
2553 self.showtraceback()
2553 self.showtraceback()
2554 else:
2554 else:
2555 outflag = 0
2555 outflag = 0
2556 if softspace(sys.stdout, 0):
2556 if softspace(sys.stdout, 0):
2557 print
2557 print
2558
2558
2559 return outflag
2559 return outflag
2560
2560
2561 # For backwards compatibility
2561 # For backwards compatibility
2562 runcode = run_code
2562 runcode = run_code
2563
2563
2564 #-------------------------------------------------------------------------
2564 #-------------------------------------------------------------------------
2565 # Things related to GUI support and pylab
2565 # Things related to GUI support and pylab
2566 #-------------------------------------------------------------------------
2566 #-------------------------------------------------------------------------
2567
2567
2568 def enable_pylab(self, gui=None, import_all=True):
2568 def enable_pylab(self, gui=None, import_all=True):
2569 raise NotImplementedError('Implement enable_pylab in a subclass')
2569 raise NotImplementedError('Implement enable_pylab in a subclass')
2570
2570
2571 #-------------------------------------------------------------------------
2571 #-------------------------------------------------------------------------
2572 # Utilities
2572 # Utilities
2573 #-------------------------------------------------------------------------
2573 #-------------------------------------------------------------------------
2574
2574
2575 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2575 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2576 """Expand python variables in a string.
2576 """Expand python variables in a string.
2577
2577
2578 The depth argument indicates how many frames above the caller should
2578 The depth argument indicates how many frames above the caller should
2579 be walked to look for the local namespace where to expand variables.
2579 be walked to look for the local namespace where to expand variables.
2580
2580
2581 The global namespace for expansion is always the user's interactive
2581 The global namespace for expansion is always the user's interactive
2582 namespace.
2582 namespace.
2583 """
2583 """
2584 ns = self.user_ns.copy()
2584 ns = self.user_ns.copy()
2585 ns.update(sys._getframe(depth+1).f_locals)
2585 ns.update(sys._getframe(depth+1).f_locals)
2586 ns.pop('self', None)
2586 ns.pop('self', None)
2587 return formatter.format(cmd, **ns)
2587 return formatter.format(cmd, **ns)
2588
2588
2589 def mktempfile(self, data=None, prefix='ipython_edit_'):
2589 def mktempfile(self, data=None, prefix='ipython_edit_'):
2590 """Make a new tempfile and return its filename.
2590 """Make a new tempfile and return its filename.
2591
2591
2592 This makes a call to tempfile.mktemp, but it registers the created
2592 This makes a call to tempfile.mktemp, but it registers the created
2593 filename internally so ipython cleans it up at exit time.
2593 filename internally so ipython cleans it up at exit time.
2594
2594
2595 Optional inputs:
2595 Optional inputs:
2596
2596
2597 - data(None): if data is given, it gets written out to the temp file
2597 - data(None): if data is given, it gets written out to the temp file
2598 immediately, and the file is closed again."""
2598 immediately, and the file is closed again."""
2599
2599
2600 filename = tempfile.mktemp('.py', prefix)
2600 filename = tempfile.mktemp('.py', prefix)
2601 self.tempfiles.append(filename)
2601 self.tempfiles.append(filename)
2602
2602
2603 if data:
2603 if data:
2604 tmp_file = open(filename,'w')
2604 tmp_file = open(filename,'w')
2605 tmp_file.write(data)
2605 tmp_file.write(data)
2606 tmp_file.close()
2606 tmp_file.close()
2607 return filename
2607 return filename
2608
2608
2609 # TODO: This should be removed when Term is refactored.
2609 # TODO: This should be removed when Term is refactored.
2610 def write(self,data):
2610 def write(self,data):
2611 """Write a string to the default output"""
2611 """Write a string to the default output"""
2612 io.stdout.write(data)
2612 io.stdout.write(data)
2613
2613
2614 # TODO: This should be removed when Term is refactored.
2614 # TODO: This should be removed when Term is refactored.
2615 def write_err(self,data):
2615 def write_err(self,data):
2616 """Write a string to the default error output"""
2616 """Write a string to the default error output"""
2617 io.stderr.write(data)
2617 io.stderr.write(data)
2618
2618
2619 def ask_yes_no(self,prompt,default=True):
2619 def ask_yes_no(self, prompt, default=None):
2620 if self.quiet:
2620 if self.quiet:
2621 return True
2621 return True
2622 return ask_yes_no(prompt,default)
2622 return ask_yes_no(prompt,default)
2623
2623
2624 def show_usage(self):
2624 def show_usage(self):
2625 """Show a usage message"""
2625 """Show a usage message"""
2626 page.page(IPython.core.usage.interactive_usage)
2626 page.page(IPython.core.usage.interactive_usage)
2627
2627
2628 def find_user_code(self, target, raw=True):
2628 def find_user_code(self, target, raw=True):
2629 """Get a code string from history, file, or a string or macro.
2629 """Get a code string from history, file, or a string or macro.
2630
2630
2631 This is mainly used by magic functions.
2631 This is mainly used by magic functions.
2632
2632
2633 Parameters
2633 Parameters
2634 ----------
2634 ----------
2635 target : str
2635 target : str
2636 A string specifying code to retrieve. This will be tried respectively
2636 A string specifying code to retrieve. This will be tried respectively
2637 as: ranges of input history (see %history for syntax), a filename, or
2637 as: ranges of input history (see %history for syntax), a filename, or
2638 an expression evaluating to a string or Macro in the user namespace.
2638 an expression evaluating to a string or Macro in the user namespace.
2639 raw : bool
2639 raw : bool
2640 If true (default), retrieve raw history. Has no effect on the other
2640 If true (default), retrieve raw history. Has no effect on the other
2641 retrieval mechanisms.
2641 retrieval mechanisms.
2642
2642
2643 Returns
2643 Returns
2644 -------
2644 -------
2645 A string of code.
2645 A string of code.
2646
2646
2647 ValueError is raised if nothing is found, and TypeError if it evaluates
2647 ValueError is raised if nothing is found, and TypeError if it evaluates
2648 to an object of another type. In each case, .args[0] is a printable
2648 to an object of another type. In each case, .args[0] is a printable
2649 message.
2649 message.
2650 """
2650 """
2651 code = self.extract_input_lines(target, raw=raw) # Grab history
2651 code = self.extract_input_lines(target, raw=raw) # Grab history
2652 if code:
2652 if code:
2653 return code
2653 return code
2654 if os.path.isfile(target): # Read file
2654 if os.path.isfile(target): # Read file
2655 return open(target, "r").read()
2655 return open(target, "r").read()
2656
2656
2657 try: # User namespace
2657 try: # User namespace
2658 codeobj = eval(target, self.user_ns)
2658 codeobj = eval(target, self.user_ns)
2659 except Exception:
2659 except Exception:
2660 raise ValueError(("'%s' was not found in history, as a file, nor in"
2660 raise ValueError(("'%s' was not found in history, as a file, nor in"
2661 " the user namespace.") % target)
2661 " the user namespace.") % target)
2662 if isinstance(codeobj, basestring):
2662 if isinstance(codeobj, basestring):
2663 return codeobj
2663 return codeobj
2664 elif isinstance(codeobj, Macro):
2664 elif isinstance(codeobj, Macro):
2665 return codeobj.value
2665 return codeobj.value
2666
2666
2667 raise TypeError("%s is neither a string nor a macro." % target,
2667 raise TypeError("%s is neither a string nor a macro." % target,
2668 codeobj)
2668 codeobj)
2669
2669
2670 #-------------------------------------------------------------------------
2670 #-------------------------------------------------------------------------
2671 # Things related to IPython exiting
2671 # Things related to IPython exiting
2672 #-------------------------------------------------------------------------
2672 #-------------------------------------------------------------------------
2673 def atexit_operations(self):
2673 def atexit_operations(self):
2674 """This will be executed at the time of exit.
2674 """This will be executed at the time of exit.
2675
2675
2676 Cleanup operations and saving of persistent data that is done
2676 Cleanup operations and saving of persistent data that is done
2677 unconditionally by IPython should be performed here.
2677 unconditionally by IPython should be performed here.
2678
2678
2679 For things that may depend on startup flags or platform specifics (such
2679 For things that may depend on startup flags or platform specifics (such
2680 as having readline or not), register a separate atexit function in the
2680 as having readline or not), register a separate atexit function in the
2681 code that has the appropriate information, rather than trying to
2681 code that has the appropriate information, rather than trying to
2682 clutter
2682 clutter
2683 """
2683 """
2684 # Close the history session (this stores the end time and line count)
2684 # Close the history session (this stores the end time and line count)
2685 # this must be *before* the tempfile cleanup, in case of temporary
2685 # this must be *before* the tempfile cleanup, in case of temporary
2686 # history db
2686 # history db
2687 self.history_manager.end_session()
2687 self.history_manager.end_session()
2688
2688
2689 # Cleanup all tempfiles left around
2689 # Cleanup all tempfiles left around
2690 for tfile in self.tempfiles:
2690 for tfile in self.tempfiles:
2691 try:
2691 try:
2692 os.unlink(tfile)
2692 os.unlink(tfile)
2693 except OSError:
2693 except OSError:
2694 pass
2694 pass
2695
2695
2696 # Clear all user namespaces to release all references cleanly.
2696 # Clear all user namespaces to release all references cleanly.
2697 self.reset(new_session=False)
2697 self.reset(new_session=False)
2698
2698
2699 # Run user hooks
2699 # Run user hooks
2700 self.hooks.shutdown_hook()
2700 self.hooks.shutdown_hook()
2701
2701
2702 def cleanup(self):
2702 def cleanup(self):
2703 self.restore_sys_module_state()
2703 self.restore_sys_module_state()
2704
2704
2705
2705
2706 class InteractiveShellABC(object):
2706 class InteractiveShellABC(object):
2707 """An abstract base class for InteractiveShell."""
2707 """An abstract base class for InteractiveShell."""
2708 __metaclass__ = abc.ABCMeta
2708 __metaclass__ = abc.ABCMeta
2709
2709
2710 InteractiveShellABC.register(InteractiveShell)
2710 InteractiveShellABC.register(InteractiveShell)
@@ -1,3738 +1,3739 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3 """
3 """
4
4
5 #-----------------------------------------------------------------------------
5 #-----------------------------------------------------------------------------
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2008-2009 The IPython Development Team
8 # Copyright (C) 2008-2009 The IPython Development Team
9
9
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17
17
18 import __builtin__ as builtin_mod
18 import __builtin__ as builtin_mod
19 import __future__
19 import __future__
20 import bdb
20 import bdb
21 import inspect
21 import inspect
22 import imp
22 import imp
23 import os
23 import os
24 import sys
24 import sys
25 import shutil
25 import shutil
26 import re
26 import re
27 import time
27 import time
28 import textwrap
28 import textwrap
29 from StringIO import StringIO
29 from StringIO import StringIO
30 from getopt import getopt,GetoptError
30 from getopt import getopt,GetoptError
31 from pprint import pformat
31 from pprint import pformat
32 from xmlrpclib import ServerProxy
32 from xmlrpclib import ServerProxy
33
33
34 # cProfile was added in Python2.5
34 # cProfile was added in Python2.5
35 try:
35 try:
36 import cProfile as profile
36 import cProfile as profile
37 import pstats
37 import pstats
38 except ImportError:
38 except ImportError:
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 import IPython
45 import IPython
46 from IPython.core import debugger, oinspect
46 from IPython.core import debugger, oinspect
47 from IPython.core.error import TryNext
47 from IPython.core.error import TryNext
48 from IPython.core.error import UsageError
48 from IPython.core.error import UsageError
49 from IPython.core.fakemodule import FakeModule
49 from IPython.core.fakemodule import FakeModule
50 from IPython.core.profiledir import ProfileDir
50 from IPython.core.profiledir import ProfileDir
51 from IPython.core.macro import Macro
51 from IPython.core.macro import Macro
52 from IPython.core import magic_arguments, page
52 from IPython.core import magic_arguments, page
53 from IPython.core.prefilter import ESC_MAGIC
53 from IPython.core.prefilter import ESC_MAGIC
54 from IPython.lib.pylabtools import mpl_runner
54 from IPython.lib.pylabtools import mpl_runner
55 from IPython.testing.skipdoctest import skip_doctest
55 from IPython.testing.skipdoctest import skip_doctest
56 from IPython.utils import py3compat
56 from IPython.utils import py3compat
57 from IPython.utils.io import file_read, nlprint
57 from IPython.utils.io import file_read, nlprint
58 from IPython.utils.module_paths import find_mod
58 from IPython.utils.module_paths import find_mod
59 from IPython.utils.path import get_py_filename, unquote_filename
59 from IPython.utils.path import get_py_filename, unquote_filename
60 from IPython.utils.process import arg_split, abbrev_cwd
60 from IPython.utils.process import arg_split, abbrev_cwd
61 from IPython.utils.terminal import set_term_title
61 from IPython.utils.terminal import set_term_title
62 from IPython.utils.text import LSString, SList, format_screen
62 from IPython.utils.text import LSString, SList, format_screen
63 from IPython.utils.timing import clock, clock2
63 from IPython.utils.timing import clock, clock2
64 from IPython.utils.warn import warn, error
64 from IPython.utils.warn import warn, error
65 from IPython.utils.ipstruct import Struct
65 from IPython.utils.ipstruct import Struct
66 from IPython.config.application import Application
66 from IPython.config.application import Application
67
67
68 #-----------------------------------------------------------------------------
68 #-----------------------------------------------------------------------------
69 # Utility functions
69 # Utility functions
70 #-----------------------------------------------------------------------------
70 #-----------------------------------------------------------------------------
71
71
72 def on_off(tag):
72 def on_off(tag):
73 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
73 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
74 return ['OFF','ON'][tag]
74 return ['OFF','ON'][tag]
75
75
76 class Bunch: pass
76 class Bunch: pass
77
77
78 def compress_dhist(dh):
78 def compress_dhist(dh):
79 head, tail = dh[:-10], dh[-10:]
79 head, tail = dh[:-10], dh[-10:]
80
80
81 newhead = []
81 newhead = []
82 done = set()
82 done = set()
83 for h in head:
83 for h in head:
84 if h in done:
84 if h in done:
85 continue
85 continue
86 newhead.append(h)
86 newhead.append(h)
87 done.add(h)
87 done.add(h)
88
88
89 return newhead + tail
89 return newhead + tail
90
90
91 def needs_local_scope(func):
91 def needs_local_scope(func):
92 """Decorator to mark magic functions which need to local scope to run."""
92 """Decorator to mark magic functions which need to local scope to run."""
93 func.needs_local_scope = True
93 func.needs_local_scope = True
94 return func
94 return func
95
95
96
96
97 # Used for exception handling in magic_edit
97 # Used for exception handling in magic_edit
98 class MacroToEdit(ValueError): pass
98 class MacroToEdit(ValueError): pass
99
99
100 #***************************************************************************
100 #***************************************************************************
101 # Main class implementing Magic functionality
101 # Main class implementing Magic functionality
102
102
103 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
103 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
104 # on construction of the main InteractiveShell object. Something odd is going
104 # on construction of the main InteractiveShell object. Something odd is going
105 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
105 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
106 # eventually this needs to be clarified.
106 # eventually this needs to be clarified.
107 # BG: This is because InteractiveShell inherits from this, but is itself a
107 # BG: This is because InteractiveShell inherits from this, but is itself a
108 # Configurable. This messes up the MRO in some way. The fix is that we need to
108 # Configurable. This messes up the MRO in some way. The fix is that we need to
109 # make Magic a configurable that InteractiveShell does not subclass.
109 # make Magic a configurable that InteractiveShell does not subclass.
110
110
111 class Magic:
111 class Magic:
112 """Magic functions for InteractiveShell.
112 """Magic functions for InteractiveShell.
113
113
114 Shell functions which can be reached as %function_name. All magic
114 Shell functions which can be reached as %function_name. All magic
115 functions should accept a string, which they can parse for their own
115 functions should accept a string, which they can parse for their own
116 needs. This can make some functions easier to type, eg `%cd ../`
116 needs. This can make some functions easier to type, eg `%cd ../`
117 vs. `%cd("../")`
117 vs. `%cd("../")`
118
118
119 ALL definitions MUST begin with the prefix magic_. The user won't need it
119 ALL definitions MUST begin with the prefix magic_. The user won't need it
120 at the command line, but it is is needed in the definition. """
120 at the command line, but it is is needed in the definition. """
121
121
122 # class globals
122 # class globals
123 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
123 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
124 'Automagic is ON, % prefix NOT needed for magic functions.']
124 'Automagic is ON, % prefix NOT needed for magic functions.']
125
125
126
126
127 configurables = None
127 configurables = None
128 #......................................................................
128 #......................................................................
129 # some utility functions
129 # some utility functions
130
130
131 def __init__(self,shell):
131 def __init__(self,shell):
132
132
133 self.options_table = {}
133 self.options_table = {}
134 if profile is None:
134 if profile is None:
135 self.magic_prun = self.profile_missing_notice
135 self.magic_prun = self.profile_missing_notice
136 self.shell = shell
136 self.shell = shell
137 if self.configurables is None:
137 if self.configurables is None:
138 self.configurables = []
138 self.configurables = []
139
139
140 # namespace for holding state we may need
140 # namespace for holding state we may need
141 self._magic_state = Bunch()
141 self._magic_state = Bunch()
142
142
143 def profile_missing_notice(self, *args, **kwargs):
143 def profile_missing_notice(self, *args, **kwargs):
144 error("""\
144 error("""\
145 The profile module could not be found. It has been removed from the standard
145 The profile module could not be found. It has been removed from the standard
146 python packages because of its non-free license. To use profiling, install the
146 python packages because of its non-free license. To use profiling, install the
147 python-profiler package from non-free.""")
147 python-profiler package from non-free.""")
148
148
149 def default_option(self,fn,optstr):
149 def default_option(self,fn,optstr):
150 """Make an entry in the options_table for fn, with value optstr"""
150 """Make an entry in the options_table for fn, with value optstr"""
151
151
152 if fn not in self.lsmagic():
152 if fn not in self.lsmagic():
153 error("%s is not a magic function" % fn)
153 error("%s is not a magic function" % fn)
154 self.options_table[fn] = optstr
154 self.options_table[fn] = optstr
155
155
156 def lsmagic(self):
156 def lsmagic(self):
157 """Return a list of currently available magic functions.
157 """Return a list of currently available magic functions.
158
158
159 Gives a list of the bare names after mangling (['ls','cd', ...], not
159 Gives a list of the bare names after mangling (['ls','cd', ...], not
160 ['magic_ls','magic_cd',...]"""
160 ['magic_ls','magic_cd',...]"""
161
161
162 # FIXME. This needs a cleanup, in the way the magics list is built.
162 # FIXME. This needs a cleanup, in the way the magics list is built.
163
163
164 # magics in class definition
164 # magics in class definition
165 class_magic = lambda fn: fn.startswith('magic_') and \
165 class_magic = lambda fn: fn.startswith('magic_') and \
166 callable(Magic.__dict__[fn])
166 callable(Magic.__dict__[fn])
167 # in instance namespace (run-time user additions)
167 # in instance namespace (run-time user additions)
168 inst_magic = lambda fn: fn.startswith('magic_') and \
168 inst_magic = lambda fn: fn.startswith('magic_') and \
169 callable(self.__dict__[fn])
169 callable(self.__dict__[fn])
170 # and bound magics by user (so they can access self):
170 # and bound magics by user (so they can access self):
171 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
171 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
172 callable(self.__class__.__dict__[fn])
172 callable(self.__class__.__dict__[fn])
173 magics = filter(class_magic,Magic.__dict__.keys()) + \
173 magics = filter(class_magic,Magic.__dict__.keys()) + \
174 filter(inst_magic,self.__dict__.keys()) + \
174 filter(inst_magic,self.__dict__.keys()) + \
175 filter(inst_bound_magic,self.__class__.__dict__.keys())
175 filter(inst_bound_magic,self.__class__.__dict__.keys())
176 out = []
176 out = []
177 for fn in set(magics):
177 for fn in set(magics):
178 out.append(fn.replace('magic_','',1))
178 out.append(fn.replace('magic_','',1))
179 out.sort()
179 out.sort()
180 return out
180 return out
181
181
182 def extract_input_lines(self, range_str, raw=False):
182 def extract_input_lines(self, range_str, raw=False):
183 """Return as a string a set of input history slices.
183 """Return as a string a set of input history slices.
184
184
185 Inputs:
185 Inputs:
186
186
187 - range_str: the set of slices is given as a string, like
187 - range_str: the set of slices is given as a string, like
188 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
188 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
189 which get their arguments as strings. The number before the / is the
189 which get their arguments as strings. The number before the / is the
190 session number: ~n goes n back from the current session.
190 session number: ~n goes n back from the current session.
191
191
192 Optional inputs:
192 Optional inputs:
193
193
194 - raw(False): by default, the processed input is used. If this is
194 - raw(False): by default, the processed input is used. If this is
195 true, the raw input history is used instead.
195 true, the raw input history is used instead.
196
196
197 Note that slices can be called with two notations:
197 Note that slices can be called with two notations:
198
198
199 N:M -> standard python form, means including items N...(M-1).
199 N:M -> standard python form, means including items N...(M-1).
200
200
201 N-M -> include items N..M (closed endpoint)."""
201 N-M -> include items N..M (closed endpoint)."""
202 lines = self.shell.history_manager.\
202 lines = self.shell.history_manager.\
203 get_range_by_str(range_str, raw=raw)
203 get_range_by_str(range_str, raw=raw)
204 return "\n".join(x for _, _, x in lines)
204 return "\n".join(x for _, _, x in lines)
205
205
206 def arg_err(self,func):
206 def arg_err(self,func):
207 """Print docstring if incorrect arguments were passed"""
207 """Print docstring if incorrect arguments were passed"""
208 print 'Error in arguments:'
208 print 'Error in arguments:'
209 print oinspect.getdoc(func)
209 print oinspect.getdoc(func)
210
210
211 def format_latex(self,strng):
211 def format_latex(self,strng):
212 """Format a string for latex inclusion."""
212 """Format a string for latex inclusion."""
213
213
214 # Characters that need to be escaped for latex:
214 # Characters that need to be escaped for latex:
215 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
215 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
216 # Magic command names as headers:
216 # Magic command names as headers:
217 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
217 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
218 re.MULTILINE)
218 re.MULTILINE)
219 # Magic commands
219 # Magic commands
220 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
220 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
221 re.MULTILINE)
221 re.MULTILINE)
222 # Paragraph continue
222 # Paragraph continue
223 par_re = re.compile(r'\\$',re.MULTILINE)
223 par_re = re.compile(r'\\$',re.MULTILINE)
224
224
225 # The "\n" symbol
225 # The "\n" symbol
226 newline_re = re.compile(r'\\n')
226 newline_re = re.compile(r'\\n')
227
227
228 # Now build the string for output:
228 # Now build the string for output:
229 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
229 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
230 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
230 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
231 strng)
231 strng)
232 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
232 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
233 strng = par_re.sub(r'\\\\',strng)
233 strng = par_re.sub(r'\\\\',strng)
234 strng = escape_re.sub(r'\\\1',strng)
234 strng = escape_re.sub(r'\\\1',strng)
235 strng = newline_re.sub(r'\\textbackslash{}n',strng)
235 strng = newline_re.sub(r'\\textbackslash{}n',strng)
236 return strng
236 return strng
237
237
238 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
238 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
239 """Parse options passed to an argument string.
239 """Parse options passed to an argument string.
240
240
241 The interface is similar to that of getopt(), but it returns back a
241 The interface is similar to that of getopt(), but it returns back a
242 Struct with the options as keys and the stripped argument string still
242 Struct with the options as keys and the stripped argument string still
243 as a string.
243 as a string.
244
244
245 arg_str is quoted as a true sys.argv vector by using shlex.split.
245 arg_str is quoted as a true sys.argv vector by using shlex.split.
246 This allows us to easily expand variables, glob files, quote
246 This allows us to easily expand variables, glob files, quote
247 arguments, etc.
247 arguments, etc.
248
248
249 Options:
249 Options:
250 -mode: default 'string'. If given as 'list', the argument string is
250 -mode: default 'string'. If given as 'list', the argument string is
251 returned as a list (split on whitespace) instead of a string.
251 returned as a list (split on whitespace) instead of a string.
252
252
253 -list_all: put all option values in lists. Normally only options
253 -list_all: put all option values in lists. Normally only options
254 appearing more than once are put in a list.
254 appearing more than once are put in a list.
255
255
256 -posix (True): whether to split the input line in POSIX mode or not,
256 -posix (True): whether to split the input line in POSIX mode or not,
257 as per the conventions outlined in the shlex module from the
257 as per the conventions outlined in the shlex module from the
258 standard library."""
258 standard library."""
259
259
260 # inject default options at the beginning of the input line
260 # inject default options at the beginning of the input line
261 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
261 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
262 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
262 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
263
263
264 mode = kw.get('mode','string')
264 mode = kw.get('mode','string')
265 if mode not in ['string','list']:
265 if mode not in ['string','list']:
266 raise ValueError,'incorrect mode given: %s' % mode
266 raise ValueError,'incorrect mode given: %s' % mode
267 # Get options
267 # Get options
268 list_all = kw.get('list_all',0)
268 list_all = kw.get('list_all',0)
269 posix = kw.get('posix', os.name == 'posix')
269 posix = kw.get('posix', os.name == 'posix')
270
270
271 # Check if we have more than one argument to warrant extra processing:
271 # Check if we have more than one argument to warrant extra processing:
272 odict = {} # Dictionary with options
272 odict = {} # Dictionary with options
273 args = arg_str.split()
273 args = arg_str.split()
274 if len(args) >= 1:
274 if len(args) >= 1:
275 # If the list of inputs only has 0 or 1 thing in it, there's no
275 # If the list of inputs only has 0 or 1 thing in it, there's no
276 # need to look for options
276 # need to look for options
277 argv = arg_split(arg_str,posix)
277 argv = arg_split(arg_str,posix)
278 # Do regular option processing
278 # Do regular option processing
279 try:
279 try:
280 opts,args = getopt(argv,opt_str,*long_opts)
280 opts,args = getopt(argv,opt_str,*long_opts)
281 except GetoptError,e:
281 except GetoptError,e:
282 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
282 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
283 " ".join(long_opts)))
283 " ".join(long_opts)))
284 for o,a in opts:
284 for o,a in opts:
285 if o.startswith('--'):
285 if o.startswith('--'):
286 o = o[2:]
286 o = o[2:]
287 else:
287 else:
288 o = o[1:]
288 o = o[1:]
289 try:
289 try:
290 odict[o].append(a)
290 odict[o].append(a)
291 except AttributeError:
291 except AttributeError:
292 odict[o] = [odict[o],a]
292 odict[o] = [odict[o],a]
293 except KeyError:
293 except KeyError:
294 if list_all:
294 if list_all:
295 odict[o] = [a]
295 odict[o] = [a]
296 else:
296 else:
297 odict[o] = a
297 odict[o] = a
298
298
299 # Prepare opts,args for return
299 # Prepare opts,args for return
300 opts = Struct(odict)
300 opts = Struct(odict)
301 if mode == 'string':
301 if mode == 'string':
302 args = ' '.join(args)
302 args = ' '.join(args)
303
303
304 return opts,args
304 return opts,args
305
305
306 #......................................................................
306 #......................................................................
307 # And now the actual magic functions
307 # And now the actual magic functions
308
308
309 # Functions for IPython shell work (vars,funcs, config, etc)
309 # Functions for IPython shell work (vars,funcs, config, etc)
310 def magic_lsmagic(self, parameter_s = ''):
310 def magic_lsmagic(self, parameter_s = ''):
311 """List currently available magic functions."""
311 """List currently available magic functions."""
312 mesc = ESC_MAGIC
312 mesc = ESC_MAGIC
313 print 'Available magic functions:\n'+mesc+\
313 print 'Available magic functions:\n'+mesc+\
314 (' '+mesc).join(self.lsmagic())
314 (' '+mesc).join(self.lsmagic())
315 print '\n' + Magic.auto_status[self.shell.automagic]
315 print '\n' + Magic.auto_status[self.shell.automagic]
316 return None
316 return None
317
317
318 def magic_magic(self, parameter_s = ''):
318 def magic_magic(self, parameter_s = ''):
319 """Print information about the magic function system.
319 """Print information about the magic function system.
320
320
321 Supported formats: -latex, -brief, -rest
321 Supported formats: -latex, -brief, -rest
322 """
322 """
323
323
324 mode = ''
324 mode = ''
325 try:
325 try:
326 if parameter_s.split()[0] == '-latex':
326 if parameter_s.split()[0] == '-latex':
327 mode = 'latex'
327 mode = 'latex'
328 if parameter_s.split()[0] == '-brief':
328 if parameter_s.split()[0] == '-brief':
329 mode = 'brief'
329 mode = 'brief'
330 if parameter_s.split()[0] == '-rest':
330 if parameter_s.split()[0] == '-rest':
331 mode = 'rest'
331 mode = 'rest'
332 rest_docs = []
332 rest_docs = []
333 except:
333 except:
334 pass
334 pass
335
335
336 magic_docs = []
336 magic_docs = []
337 for fname in self.lsmagic():
337 for fname in self.lsmagic():
338 mname = 'magic_' + fname
338 mname = 'magic_' + fname
339 for space in (Magic,self,self.__class__):
339 for space in (Magic,self,self.__class__):
340 try:
340 try:
341 fn = space.__dict__[mname]
341 fn = space.__dict__[mname]
342 except KeyError:
342 except KeyError:
343 pass
343 pass
344 else:
344 else:
345 break
345 break
346 if mode == 'brief':
346 if mode == 'brief':
347 # only first line
347 # only first line
348 if fn.__doc__:
348 if fn.__doc__:
349 fndoc = fn.__doc__.split('\n',1)[0]
349 fndoc = fn.__doc__.split('\n',1)[0]
350 else:
350 else:
351 fndoc = 'No documentation'
351 fndoc = 'No documentation'
352 else:
352 else:
353 if fn.__doc__:
353 if fn.__doc__:
354 fndoc = fn.__doc__.rstrip()
354 fndoc = fn.__doc__.rstrip()
355 else:
355 else:
356 fndoc = 'No documentation'
356 fndoc = 'No documentation'
357
357
358
358
359 if mode == 'rest':
359 if mode == 'rest':
360 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
360 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
361 fname,fndoc))
361 fname,fndoc))
362
362
363 else:
363 else:
364 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
364 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
365 fname,fndoc))
365 fname,fndoc))
366
366
367 magic_docs = ''.join(magic_docs)
367 magic_docs = ''.join(magic_docs)
368
368
369 if mode == 'rest':
369 if mode == 'rest':
370 return "".join(rest_docs)
370 return "".join(rest_docs)
371
371
372 if mode == 'latex':
372 if mode == 'latex':
373 print self.format_latex(magic_docs)
373 print self.format_latex(magic_docs)
374 return
374 return
375 else:
375 else:
376 magic_docs = format_screen(magic_docs)
376 magic_docs = format_screen(magic_docs)
377 if mode == 'brief':
377 if mode == 'brief':
378 return magic_docs
378 return magic_docs
379
379
380 outmsg = """
380 outmsg = """
381 IPython's 'magic' functions
381 IPython's 'magic' functions
382 ===========================
382 ===========================
383
383
384 The magic function system provides a series of functions which allow you to
384 The magic function system provides a series of functions which allow you to
385 control the behavior of IPython itself, plus a lot of system-type
385 control the behavior of IPython itself, plus a lot of system-type
386 features. All these functions are prefixed with a % character, but parameters
386 features. All these functions are prefixed with a % character, but parameters
387 are given without parentheses or quotes.
387 are given without parentheses or quotes.
388
388
389 NOTE: If you have 'automagic' enabled (via the command line option or with the
389 NOTE: If you have 'automagic' enabled (via the command line option or with the
390 %automagic function), you don't need to type in the % explicitly. By default,
390 %automagic function), you don't need to type in the % explicitly. By default,
391 IPython ships with automagic on, so you should only rarely need the % escape.
391 IPython ships with automagic on, so you should only rarely need the % escape.
392
392
393 Example: typing '%cd mydir' (without the quotes) changes you working directory
393 Example: typing '%cd mydir' (without the quotes) changes you working directory
394 to 'mydir', if it exists.
394 to 'mydir', if it exists.
395
395
396 For a list of the available magic functions, use %lsmagic. For a description
396 For a list of the available magic functions, use %lsmagic. For a description
397 of any of them, type %magic_name?, e.g. '%cd?'.
397 of any of them, type %magic_name?, e.g. '%cd?'.
398
398
399 Currently the magic system has the following functions:\n"""
399 Currently the magic system has the following functions:\n"""
400
400
401 mesc = ESC_MAGIC
401 mesc = ESC_MAGIC
402 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
402 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
403 "\n\n%s%s\n\n%s" % (outmsg,
403 "\n\n%s%s\n\n%s" % (outmsg,
404 magic_docs,mesc,mesc,
404 magic_docs,mesc,mesc,
405 (' '+mesc).join(self.lsmagic()),
405 (' '+mesc).join(self.lsmagic()),
406 Magic.auto_status[self.shell.automagic] ) )
406 Magic.auto_status[self.shell.automagic] ) )
407 page.page(outmsg)
407 page.page(outmsg)
408
408
409 def magic_automagic(self, parameter_s = ''):
409 def magic_automagic(self, parameter_s = ''):
410 """Make magic functions callable without having to type the initial %.
410 """Make magic functions callable without having to type the initial %.
411
411
412 Without argumentsl toggles on/off (when off, you must call it as
412 Without argumentsl toggles on/off (when off, you must call it as
413 %automagic, of course). With arguments it sets the value, and you can
413 %automagic, of course). With arguments it sets the value, and you can
414 use any of (case insensitive):
414 use any of (case insensitive):
415
415
416 - on,1,True: to activate
416 - on,1,True: to activate
417
417
418 - off,0,False: to deactivate.
418 - off,0,False: to deactivate.
419
419
420 Note that magic functions have lowest priority, so if there's a
420 Note that magic functions have lowest priority, so if there's a
421 variable whose name collides with that of a magic fn, automagic won't
421 variable whose name collides with that of a magic fn, automagic won't
422 work for that function (you get the variable instead). However, if you
422 work for that function (you get the variable instead). However, if you
423 delete the variable (del var), the previously shadowed magic function
423 delete the variable (del var), the previously shadowed magic function
424 becomes visible to automagic again."""
424 becomes visible to automagic again."""
425
425
426 arg = parameter_s.lower()
426 arg = parameter_s.lower()
427 if parameter_s in ('on','1','true'):
427 if parameter_s in ('on','1','true'):
428 self.shell.automagic = True
428 self.shell.automagic = True
429 elif parameter_s in ('off','0','false'):
429 elif parameter_s in ('off','0','false'):
430 self.shell.automagic = False
430 self.shell.automagic = False
431 else:
431 else:
432 self.shell.automagic = not self.shell.automagic
432 self.shell.automagic = not self.shell.automagic
433 print '\n' + Magic.auto_status[self.shell.automagic]
433 print '\n' + Magic.auto_status[self.shell.automagic]
434
434
435 @skip_doctest
435 @skip_doctest
436 def magic_autocall(self, parameter_s = ''):
436 def magic_autocall(self, parameter_s = ''):
437 """Make functions callable without having to type parentheses.
437 """Make functions callable without having to type parentheses.
438
438
439 Usage:
439 Usage:
440
440
441 %autocall [mode]
441 %autocall [mode]
442
442
443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
444 value is toggled on and off (remembering the previous state).
444 value is toggled on and off (remembering the previous state).
445
445
446 In more detail, these values mean:
446 In more detail, these values mean:
447
447
448 0 -> fully disabled
448 0 -> fully disabled
449
449
450 1 -> active, but do not apply if there are no arguments on the line.
450 1 -> active, but do not apply if there are no arguments on the line.
451
451
452 In this mode, you get:
452 In this mode, you get:
453
453
454 In [1]: callable
454 In [1]: callable
455 Out[1]: <built-in function callable>
455 Out[1]: <built-in function callable>
456
456
457 In [2]: callable 'hello'
457 In [2]: callable 'hello'
458 ------> callable('hello')
458 ------> callable('hello')
459 Out[2]: False
459 Out[2]: False
460
460
461 2 -> Active always. Even if no arguments are present, the callable
461 2 -> Active always. Even if no arguments are present, the callable
462 object is called:
462 object is called:
463
463
464 In [2]: float
464 In [2]: float
465 ------> float()
465 ------> float()
466 Out[2]: 0.0
466 Out[2]: 0.0
467
467
468 Note that even with autocall off, you can still use '/' at the start of
468 Note that even with autocall off, you can still use '/' at the start of
469 a line to treat the first argument on the command line as a function
469 a line to treat the first argument on the command line as a function
470 and add parentheses to it:
470 and add parentheses to it:
471
471
472 In [8]: /str 43
472 In [8]: /str 43
473 ------> str(43)
473 ------> str(43)
474 Out[8]: '43'
474 Out[8]: '43'
475
475
476 # all-random (note for auto-testing)
476 # all-random (note for auto-testing)
477 """
477 """
478
478
479 if parameter_s:
479 if parameter_s:
480 arg = int(parameter_s)
480 arg = int(parameter_s)
481 else:
481 else:
482 arg = 'toggle'
482 arg = 'toggle'
483
483
484 if not arg in (0,1,2,'toggle'):
484 if not arg in (0,1,2,'toggle'):
485 error('Valid modes: (0->Off, 1->Smart, 2->Full')
485 error('Valid modes: (0->Off, 1->Smart, 2->Full')
486 return
486 return
487
487
488 if arg in (0,1,2):
488 if arg in (0,1,2):
489 self.shell.autocall = arg
489 self.shell.autocall = arg
490 else: # toggle
490 else: # toggle
491 if self.shell.autocall:
491 if self.shell.autocall:
492 self._magic_state.autocall_save = self.shell.autocall
492 self._magic_state.autocall_save = self.shell.autocall
493 self.shell.autocall = 0
493 self.shell.autocall = 0
494 else:
494 else:
495 try:
495 try:
496 self.shell.autocall = self._magic_state.autocall_save
496 self.shell.autocall = self._magic_state.autocall_save
497 except AttributeError:
497 except AttributeError:
498 self.shell.autocall = self._magic_state.autocall_save = 1
498 self.shell.autocall = self._magic_state.autocall_save = 1
499
499
500 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
500 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
501
501
502
502
503 def magic_page(self, parameter_s=''):
503 def magic_page(self, parameter_s=''):
504 """Pretty print the object and display it through a pager.
504 """Pretty print the object and display it through a pager.
505
505
506 %page [options] OBJECT
506 %page [options] OBJECT
507
507
508 If no object is given, use _ (last output).
508 If no object is given, use _ (last output).
509
509
510 Options:
510 Options:
511
511
512 -r: page str(object), don't pretty-print it."""
512 -r: page str(object), don't pretty-print it."""
513
513
514 # After a function contributed by Olivier Aubert, slightly modified.
514 # After a function contributed by Olivier Aubert, slightly modified.
515
515
516 # Process options/args
516 # Process options/args
517 opts,args = self.parse_options(parameter_s,'r')
517 opts,args = self.parse_options(parameter_s,'r')
518 raw = 'r' in opts
518 raw = 'r' in opts
519
519
520 oname = args and args or '_'
520 oname = args and args or '_'
521 info = self._ofind(oname)
521 info = self._ofind(oname)
522 if info['found']:
522 if info['found']:
523 txt = (raw and str or pformat)( info['obj'] )
523 txt = (raw and str or pformat)( info['obj'] )
524 page.page(txt)
524 page.page(txt)
525 else:
525 else:
526 print 'Object `%s` not found' % oname
526 print 'Object `%s` not found' % oname
527
527
528 def magic_profile(self, parameter_s=''):
528 def magic_profile(self, parameter_s=''):
529 """Print your currently active IPython profile."""
529 """Print your currently active IPython profile."""
530 from IPython.core.application import BaseIPythonApplication
530 from IPython.core.application import BaseIPythonApplication
531 if BaseIPythonApplication.initialized():
531 if BaseIPythonApplication.initialized():
532 print BaseIPythonApplication.instance().profile
532 print BaseIPythonApplication.instance().profile
533 else:
533 else:
534 error("profile is an application-level value, but you don't appear to be in an IPython application")
534 error("profile is an application-level value, but you don't appear to be in an IPython application")
535
535
536 def magic_pinfo(self, parameter_s='', namespaces=None):
536 def magic_pinfo(self, parameter_s='', namespaces=None):
537 """Provide detailed information about an object.
537 """Provide detailed information about an object.
538
538
539 '%pinfo object' is just a synonym for object? or ?object."""
539 '%pinfo object' is just a synonym for object? or ?object."""
540
540
541 #print 'pinfo par: <%s>' % parameter_s # dbg
541 #print 'pinfo par: <%s>' % parameter_s # dbg
542
542
543
543
544 # detail_level: 0 -> obj? , 1 -> obj??
544 # detail_level: 0 -> obj? , 1 -> obj??
545 detail_level = 0
545 detail_level = 0
546 # We need to detect if we got called as 'pinfo pinfo foo', which can
546 # We need to detect if we got called as 'pinfo pinfo foo', which can
547 # happen if the user types 'pinfo foo?' at the cmd line.
547 # happen if the user types 'pinfo foo?' at the cmd line.
548 pinfo,qmark1,oname,qmark2 = \
548 pinfo,qmark1,oname,qmark2 = \
549 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
549 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
550 if pinfo or qmark1 or qmark2:
550 if pinfo or qmark1 or qmark2:
551 detail_level = 1
551 detail_level = 1
552 if "*" in oname:
552 if "*" in oname:
553 self.magic_psearch(oname)
553 self.magic_psearch(oname)
554 else:
554 else:
555 self.shell._inspect('pinfo', oname, detail_level=detail_level,
555 self.shell._inspect('pinfo', oname, detail_level=detail_level,
556 namespaces=namespaces)
556 namespaces=namespaces)
557
557
558 def magic_pinfo2(self, parameter_s='', namespaces=None):
558 def magic_pinfo2(self, parameter_s='', namespaces=None):
559 """Provide extra detailed information about an object.
559 """Provide extra detailed information about an object.
560
560
561 '%pinfo2 object' is just a synonym for object?? or ??object."""
561 '%pinfo2 object' is just a synonym for object?? or ??object."""
562 self.shell._inspect('pinfo', parameter_s, detail_level=1,
562 self.shell._inspect('pinfo', parameter_s, detail_level=1,
563 namespaces=namespaces)
563 namespaces=namespaces)
564
564
565 @skip_doctest
565 @skip_doctest
566 def magic_pdef(self, parameter_s='', namespaces=None):
566 def magic_pdef(self, parameter_s='', namespaces=None):
567 """Print the definition header for any callable object.
567 """Print the definition header for any callable object.
568
568
569 If the object is a class, print the constructor information.
569 If the object is a class, print the constructor information.
570
570
571 Examples
571 Examples
572 --------
572 --------
573 ::
573 ::
574
574
575 In [3]: %pdef urllib.urlopen
575 In [3]: %pdef urllib.urlopen
576 urllib.urlopen(url, data=None, proxies=None)
576 urllib.urlopen(url, data=None, proxies=None)
577 """
577 """
578 self._inspect('pdef',parameter_s, namespaces)
578 self._inspect('pdef',parameter_s, namespaces)
579
579
580 def magic_pdoc(self, parameter_s='', namespaces=None):
580 def magic_pdoc(self, parameter_s='', namespaces=None):
581 """Print the docstring for an object.
581 """Print the docstring for an object.
582
582
583 If the given object is a class, it will print both the class and the
583 If the given object is a class, it will print both the class and the
584 constructor docstrings."""
584 constructor docstrings."""
585 self._inspect('pdoc',parameter_s, namespaces)
585 self._inspect('pdoc',parameter_s, namespaces)
586
586
587 def magic_psource(self, parameter_s='', namespaces=None):
587 def magic_psource(self, parameter_s='', namespaces=None):
588 """Print (or run through pager) the source code for an object."""
588 """Print (or run through pager) the source code for an object."""
589 self._inspect('psource',parameter_s, namespaces)
589 self._inspect('psource',parameter_s, namespaces)
590
590
591 def magic_pfile(self, parameter_s=''):
591 def magic_pfile(self, parameter_s=''):
592 """Print (or run through pager) the file where an object is defined.
592 """Print (or run through pager) the file where an object is defined.
593
593
594 The file opens at the line where the object definition begins. IPython
594 The file opens at the line where the object definition begins. IPython
595 will honor the environment variable PAGER if set, and otherwise will
595 will honor the environment variable PAGER if set, and otherwise will
596 do its best to print the file in a convenient form.
596 do its best to print the file in a convenient form.
597
597
598 If the given argument is not an object currently defined, IPython will
598 If the given argument is not an object currently defined, IPython will
599 try to interpret it as a filename (automatically adding a .py extension
599 try to interpret it as a filename (automatically adding a .py extension
600 if needed). You can thus use %pfile as a syntax highlighting code
600 if needed). You can thus use %pfile as a syntax highlighting code
601 viewer."""
601 viewer."""
602
602
603 # first interpret argument as an object name
603 # first interpret argument as an object name
604 out = self._inspect('pfile',parameter_s)
604 out = self._inspect('pfile',parameter_s)
605 # if not, try the input as a filename
605 # if not, try the input as a filename
606 if out == 'not found':
606 if out == 'not found':
607 try:
607 try:
608 filename = get_py_filename(parameter_s)
608 filename = get_py_filename(parameter_s)
609 except IOError,msg:
609 except IOError,msg:
610 print msg
610 print msg
611 return
611 return
612 page.page(self.shell.inspector.format(file(filename).read()))
612 page.page(self.shell.inspector.format(file(filename).read()))
613
613
614 def magic_psearch(self, parameter_s=''):
614 def magic_psearch(self, parameter_s=''):
615 """Search for object in namespaces by wildcard.
615 """Search for object in namespaces by wildcard.
616
616
617 %psearch [options] PATTERN [OBJECT TYPE]
617 %psearch [options] PATTERN [OBJECT TYPE]
618
618
619 Note: ? can be used as a synonym for %psearch, at the beginning or at
619 Note: ? can be used as a synonym for %psearch, at the beginning or at
620 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
620 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
621 rest of the command line must be unchanged (options come first), so
621 rest of the command line must be unchanged (options come first), so
622 for example the following forms are equivalent
622 for example the following forms are equivalent
623
623
624 %psearch -i a* function
624 %psearch -i a* function
625 -i a* function?
625 -i a* function?
626 ?-i a* function
626 ?-i a* function
627
627
628 Arguments:
628 Arguments:
629
629
630 PATTERN
630 PATTERN
631
631
632 where PATTERN is a string containing * as a wildcard similar to its
632 where PATTERN is a string containing * as a wildcard similar to its
633 use in a shell. The pattern is matched in all namespaces on the
633 use in a shell. The pattern is matched in all namespaces on the
634 search path. By default objects starting with a single _ are not
634 search path. By default objects starting with a single _ are not
635 matched, many IPython generated objects have a single
635 matched, many IPython generated objects have a single
636 underscore. The default is case insensitive matching. Matching is
636 underscore. The default is case insensitive matching. Matching is
637 also done on the attributes of objects and not only on the objects
637 also done on the attributes of objects and not only on the objects
638 in a module.
638 in a module.
639
639
640 [OBJECT TYPE]
640 [OBJECT TYPE]
641
641
642 Is the name of a python type from the types module. The name is
642 Is the name of a python type from the types module. The name is
643 given in lowercase without the ending type, ex. StringType is
643 given in lowercase without the ending type, ex. StringType is
644 written string. By adding a type here only objects matching the
644 written string. By adding a type here only objects matching the
645 given type are matched. Using all here makes the pattern match all
645 given type are matched. Using all here makes the pattern match all
646 types (this is the default).
646 types (this is the default).
647
647
648 Options:
648 Options:
649
649
650 -a: makes the pattern match even objects whose names start with a
650 -a: makes the pattern match even objects whose names start with a
651 single underscore. These names are normally ommitted from the
651 single underscore. These names are normally ommitted from the
652 search.
652 search.
653
653
654 -i/-c: make the pattern case insensitive/sensitive. If neither of
654 -i/-c: make the pattern case insensitive/sensitive. If neither of
655 these options are given, the default is read from your configuration
655 these options are given, the default is read from your configuration
656 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
656 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
657 If this option is not specified in your configuration file, IPython's
657 If this option is not specified in your configuration file, IPython's
658 internal default is to do a case sensitive search.
658 internal default is to do a case sensitive search.
659
659
660 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
660 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
661 specifiy can be searched in any of the following namespaces:
661 specifiy can be searched in any of the following namespaces:
662 'builtin', 'user', 'user_global','internal', 'alias', where
662 'builtin', 'user', 'user_global','internal', 'alias', where
663 'builtin' and 'user' are the search defaults. Note that you should
663 'builtin' and 'user' are the search defaults. Note that you should
664 not use quotes when specifying namespaces.
664 not use quotes when specifying namespaces.
665
665
666 'Builtin' contains the python module builtin, 'user' contains all
666 'Builtin' contains the python module builtin, 'user' contains all
667 user data, 'alias' only contain the shell aliases and no python
667 user data, 'alias' only contain the shell aliases and no python
668 objects, 'internal' contains objects used by IPython. The
668 objects, 'internal' contains objects used by IPython. The
669 'user_global' namespace is only used by embedded IPython instances,
669 'user_global' namespace is only used by embedded IPython instances,
670 and it contains module-level globals. You can add namespaces to the
670 and it contains module-level globals. You can add namespaces to the
671 search with -s or exclude them with -e (these options can be given
671 search with -s or exclude them with -e (these options can be given
672 more than once).
672 more than once).
673
673
674 Examples:
674 Examples:
675
675
676 %psearch a* -> objects beginning with an a
676 %psearch a* -> objects beginning with an a
677 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
677 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
678 %psearch a* function -> all functions beginning with an a
678 %psearch a* function -> all functions beginning with an a
679 %psearch re.e* -> objects beginning with an e in module re
679 %psearch re.e* -> objects beginning with an e in module re
680 %psearch r*.e* -> objects that start with e in modules starting in r
680 %psearch r*.e* -> objects that start with e in modules starting in r
681 %psearch r*.* string -> all strings in modules beginning with r
681 %psearch r*.* string -> all strings in modules beginning with r
682
682
683 Case sensitve search:
683 Case sensitve search:
684
684
685 %psearch -c a* list all object beginning with lower case a
685 %psearch -c a* list all object beginning with lower case a
686
686
687 Show objects beginning with a single _:
687 Show objects beginning with a single _:
688
688
689 %psearch -a _* list objects beginning with a single underscore"""
689 %psearch -a _* list objects beginning with a single underscore"""
690 try:
690 try:
691 parameter_s.encode('ascii')
691 parameter_s.encode('ascii')
692 except UnicodeEncodeError:
692 except UnicodeEncodeError:
693 print 'Python identifiers can only contain ascii characters.'
693 print 'Python identifiers can only contain ascii characters.'
694 return
694 return
695
695
696 # default namespaces to be searched
696 # default namespaces to be searched
697 def_search = ['user','builtin']
697 def_search = ['user','builtin']
698
698
699 # Process options/args
699 # Process options/args
700 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
700 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
701 opt = opts.get
701 opt = opts.get
702 shell = self.shell
702 shell = self.shell
703 psearch = shell.inspector.psearch
703 psearch = shell.inspector.psearch
704
704
705 # select case options
705 # select case options
706 if opts.has_key('i'):
706 if opts.has_key('i'):
707 ignore_case = True
707 ignore_case = True
708 elif opts.has_key('c'):
708 elif opts.has_key('c'):
709 ignore_case = False
709 ignore_case = False
710 else:
710 else:
711 ignore_case = not shell.wildcards_case_sensitive
711 ignore_case = not shell.wildcards_case_sensitive
712
712
713 # Build list of namespaces to search from user options
713 # Build list of namespaces to search from user options
714 def_search.extend(opt('s',[]))
714 def_search.extend(opt('s',[]))
715 ns_exclude = ns_exclude=opt('e',[])
715 ns_exclude = ns_exclude=opt('e',[])
716 ns_search = [nm for nm in def_search if nm not in ns_exclude]
716 ns_search = [nm for nm in def_search if nm not in ns_exclude]
717
717
718 # Call the actual search
718 # Call the actual search
719 try:
719 try:
720 psearch(args,shell.ns_table,ns_search,
720 psearch(args,shell.ns_table,ns_search,
721 show_all=opt('a'),ignore_case=ignore_case)
721 show_all=opt('a'),ignore_case=ignore_case)
722 except:
722 except:
723 shell.showtraceback()
723 shell.showtraceback()
724
724
725 @skip_doctest
725 @skip_doctest
726 def magic_who_ls(self, parameter_s=''):
726 def magic_who_ls(self, parameter_s=''):
727 """Return a sorted list of all interactive variables.
727 """Return a sorted list of all interactive variables.
728
728
729 If arguments are given, only variables of types matching these
729 If arguments are given, only variables of types matching these
730 arguments are returned.
730 arguments are returned.
731
731
732 Examples
732 Examples
733 --------
733 --------
734
734
735 Define two variables and list them with who_ls::
735 Define two variables and list them with who_ls::
736
736
737 In [1]: alpha = 123
737 In [1]: alpha = 123
738
738
739 In [2]: beta = 'test'
739 In [2]: beta = 'test'
740
740
741 In [3]: %who_ls
741 In [3]: %who_ls
742 Out[3]: ['alpha', 'beta']
742 Out[3]: ['alpha', 'beta']
743
743
744 In [4]: %who_ls int
744 In [4]: %who_ls int
745 Out[4]: ['alpha']
745 Out[4]: ['alpha']
746
746
747 In [5]: %who_ls str
747 In [5]: %who_ls str
748 Out[5]: ['beta']
748 Out[5]: ['beta']
749 """
749 """
750
750
751 user_ns = self.shell.user_ns
751 user_ns = self.shell.user_ns
752 internal_ns = self.shell.internal_ns
752 internal_ns = self.shell.internal_ns
753 user_ns_hidden = self.shell.user_ns_hidden
753 user_ns_hidden = self.shell.user_ns_hidden
754 out = [ i for i in user_ns
754 out = [ i for i in user_ns
755 if not i.startswith('_') \
755 if not i.startswith('_') \
756 and not (i in internal_ns or i in user_ns_hidden) ]
756 and not (i in internal_ns or i in user_ns_hidden) ]
757
757
758 typelist = parameter_s.split()
758 typelist = parameter_s.split()
759 if typelist:
759 if typelist:
760 typeset = set(typelist)
760 typeset = set(typelist)
761 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
761 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
762
762
763 out.sort()
763 out.sort()
764 return out
764 return out
765
765
766 @skip_doctest
766 @skip_doctest
767 def magic_who(self, parameter_s=''):
767 def magic_who(self, parameter_s=''):
768 """Print all interactive variables, with some minimal formatting.
768 """Print all interactive variables, with some minimal formatting.
769
769
770 If any arguments are given, only variables whose type matches one of
770 If any arguments are given, only variables whose type matches one of
771 these are printed. For example:
771 these are printed. For example:
772
772
773 %who function str
773 %who function str
774
774
775 will only list functions and strings, excluding all other types of
775 will only list functions and strings, excluding all other types of
776 variables. To find the proper type names, simply use type(var) at a
776 variables. To find the proper type names, simply use type(var) at a
777 command line to see how python prints type names. For example:
777 command line to see how python prints type names. For example:
778
778
779 In [1]: type('hello')\\
779 In [1]: type('hello')\\
780 Out[1]: <type 'str'>
780 Out[1]: <type 'str'>
781
781
782 indicates that the type name for strings is 'str'.
782 indicates that the type name for strings is 'str'.
783
783
784 %who always excludes executed names loaded through your configuration
784 %who always excludes executed names loaded through your configuration
785 file and things which are internal to IPython.
785 file and things which are internal to IPython.
786
786
787 This is deliberate, as typically you may load many modules and the
787 This is deliberate, as typically you may load many modules and the
788 purpose of %who is to show you only what you've manually defined.
788 purpose of %who is to show you only what you've manually defined.
789
789
790 Examples
790 Examples
791 --------
791 --------
792
792
793 Define two variables and list them with who::
793 Define two variables and list them with who::
794
794
795 In [1]: alpha = 123
795 In [1]: alpha = 123
796
796
797 In [2]: beta = 'test'
797 In [2]: beta = 'test'
798
798
799 In [3]: %who
799 In [3]: %who
800 alpha beta
800 alpha beta
801
801
802 In [4]: %who int
802 In [4]: %who int
803 alpha
803 alpha
804
804
805 In [5]: %who str
805 In [5]: %who str
806 beta
806 beta
807 """
807 """
808
808
809 varlist = self.magic_who_ls(parameter_s)
809 varlist = self.magic_who_ls(parameter_s)
810 if not varlist:
810 if not varlist:
811 if parameter_s:
811 if parameter_s:
812 print 'No variables match your requested type.'
812 print 'No variables match your requested type.'
813 else:
813 else:
814 print 'Interactive namespace is empty.'
814 print 'Interactive namespace is empty.'
815 return
815 return
816
816
817 # if we have variables, move on...
817 # if we have variables, move on...
818 count = 0
818 count = 0
819 for i in varlist:
819 for i in varlist:
820 print i+'\t',
820 print i+'\t',
821 count += 1
821 count += 1
822 if count > 8:
822 if count > 8:
823 count = 0
823 count = 0
824 print
824 print
825 print
825 print
826
826
827 @skip_doctest
827 @skip_doctest
828 def magic_whos(self, parameter_s=''):
828 def magic_whos(self, parameter_s=''):
829 """Like %who, but gives some extra information about each variable.
829 """Like %who, but gives some extra information about each variable.
830
830
831 The same type filtering of %who can be applied here.
831 The same type filtering of %who can be applied here.
832
832
833 For all variables, the type is printed. Additionally it prints:
833 For all variables, the type is printed. Additionally it prints:
834
834
835 - For {},[],(): their length.
835 - For {},[],(): their length.
836
836
837 - For numpy arrays, a summary with shape, number of
837 - For numpy arrays, a summary with shape, number of
838 elements, typecode and size in memory.
838 elements, typecode and size in memory.
839
839
840 - Everything else: a string representation, snipping their middle if
840 - Everything else: a string representation, snipping their middle if
841 too long.
841 too long.
842
842
843 Examples
843 Examples
844 --------
844 --------
845
845
846 Define two variables and list them with whos::
846 Define two variables and list them with whos::
847
847
848 In [1]: alpha = 123
848 In [1]: alpha = 123
849
849
850 In [2]: beta = 'test'
850 In [2]: beta = 'test'
851
851
852 In [3]: %whos
852 In [3]: %whos
853 Variable Type Data/Info
853 Variable Type Data/Info
854 --------------------------------
854 --------------------------------
855 alpha int 123
855 alpha int 123
856 beta str test
856 beta str test
857 """
857 """
858
858
859 varnames = self.magic_who_ls(parameter_s)
859 varnames = self.magic_who_ls(parameter_s)
860 if not varnames:
860 if not varnames:
861 if parameter_s:
861 if parameter_s:
862 print 'No variables match your requested type.'
862 print 'No variables match your requested type.'
863 else:
863 else:
864 print 'Interactive namespace is empty.'
864 print 'Interactive namespace is empty.'
865 return
865 return
866
866
867 # if we have variables, move on...
867 # if we have variables, move on...
868
868
869 # for these types, show len() instead of data:
869 # for these types, show len() instead of data:
870 seq_types = ['dict', 'list', 'tuple']
870 seq_types = ['dict', 'list', 'tuple']
871
871
872 # for numpy arrays, display summary info
872 # for numpy arrays, display summary info
873 ndarray_type = None
873 ndarray_type = None
874 if 'numpy' in sys.modules:
874 if 'numpy' in sys.modules:
875 try:
875 try:
876 from numpy import ndarray
876 from numpy import ndarray
877 except ImportError:
877 except ImportError:
878 pass
878 pass
879 else:
879 else:
880 ndarray_type = ndarray.__name__
880 ndarray_type = ndarray.__name__
881
881
882 # Find all variable names and types so we can figure out column sizes
882 # Find all variable names and types so we can figure out column sizes
883 def get_vars(i):
883 def get_vars(i):
884 return self.shell.user_ns[i]
884 return self.shell.user_ns[i]
885
885
886 # some types are well known and can be shorter
886 # some types are well known and can be shorter
887 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
887 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
888 def type_name(v):
888 def type_name(v):
889 tn = type(v).__name__
889 tn = type(v).__name__
890 return abbrevs.get(tn,tn)
890 return abbrevs.get(tn,tn)
891
891
892 varlist = map(get_vars,varnames)
892 varlist = map(get_vars,varnames)
893
893
894 typelist = []
894 typelist = []
895 for vv in varlist:
895 for vv in varlist:
896 tt = type_name(vv)
896 tt = type_name(vv)
897
897
898 if tt=='instance':
898 if tt=='instance':
899 typelist.append( abbrevs.get(str(vv.__class__),
899 typelist.append( abbrevs.get(str(vv.__class__),
900 str(vv.__class__)))
900 str(vv.__class__)))
901 else:
901 else:
902 typelist.append(tt)
902 typelist.append(tt)
903
903
904 # column labels and # of spaces as separator
904 # column labels and # of spaces as separator
905 varlabel = 'Variable'
905 varlabel = 'Variable'
906 typelabel = 'Type'
906 typelabel = 'Type'
907 datalabel = 'Data/Info'
907 datalabel = 'Data/Info'
908 colsep = 3
908 colsep = 3
909 # variable format strings
909 # variable format strings
910 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
910 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
911 aformat = "%s: %s elems, type `%s`, %s bytes"
911 aformat = "%s: %s elems, type `%s`, %s bytes"
912 # find the size of the columns to format the output nicely
912 # find the size of the columns to format the output nicely
913 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
913 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
914 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
914 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
915 # table header
915 # table header
916 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
916 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
917 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
917 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
918 # and the table itself
918 # and the table itself
919 kb = 1024
919 kb = 1024
920 Mb = 1048576 # kb**2
920 Mb = 1048576 # kb**2
921 for vname,var,vtype in zip(varnames,varlist,typelist):
921 for vname,var,vtype in zip(varnames,varlist,typelist):
922 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
922 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
923 if vtype in seq_types:
923 if vtype in seq_types:
924 print "n="+str(len(var))
924 print "n="+str(len(var))
925 elif vtype == ndarray_type:
925 elif vtype == ndarray_type:
926 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
926 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
927 if vtype==ndarray_type:
927 if vtype==ndarray_type:
928 # numpy
928 # numpy
929 vsize = var.size
929 vsize = var.size
930 vbytes = vsize*var.itemsize
930 vbytes = vsize*var.itemsize
931 vdtype = var.dtype
931 vdtype = var.dtype
932 else:
932 else:
933 # Numeric
933 # Numeric
934 vsize = Numeric.size(var)
934 vsize = Numeric.size(var)
935 vbytes = vsize*var.itemsize()
935 vbytes = vsize*var.itemsize()
936 vdtype = var.typecode()
936 vdtype = var.typecode()
937
937
938 if vbytes < 100000:
938 if vbytes < 100000:
939 print aformat % (vshape,vsize,vdtype,vbytes)
939 print aformat % (vshape,vsize,vdtype,vbytes)
940 else:
940 else:
941 print aformat % (vshape,vsize,vdtype,vbytes),
941 print aformat % (vshape,vsize,vdtype,vbytes),
942 if vbytes < Mb:
942 if vbytes < Mb:
943 print '(%s kb)' % (vbytes/kb,)
943 print '(%s kb)' % (vbytes/kb,)
944 else:
944 else:
945 print '(%s Mb)' % (vbytes/Mb,)
945 print '(%s Mb)' % (vbytes/Mb,)
946 else:
946 else:
947 try:
947 try:
948 vstr = str(var)
948 vstr = str(var)
949 except UnicodeEncodeError:
949 except UnicodeEncodeError:
950 vstr = unicode(var).encode(sys.getdefaultencoding(),
950 vstr = unicode(var).encode(sys.getdefaultencoding(),
951 'backslashreplace')
951 'backslashreplace')
952 vstr = vstr.replace('\n','\\n')
952 vstr = vstr.replace('\n','\\n')
953 if len(vstr) < 50:
953 if len(vstr) < 50:
954 print vstr
954 print vstr
955 else:
955 else:
956 print vstr[:25] + "<...>" + vstr[-25:]
956 print vstr[:25] + "<...>" + vstr[-25:]
957
957
958 def magic_reset(self, parameter_s=''):
958 def magic_reset(self, parameter_s=''):
959 """Resets the namespace by removing all names defined by the user.
959 """Resets the namespace by removing all names defined by the user.
960
960
961 Parameters
961 Parameters
962 ----------
962 ----------
963 -f : force reset without asking for confirmation.
963 -f : force reset without asking for confirmation.
964
964
965 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
965 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
966 References to objects may be kept. By default (without this option),
966 References to objects may be kept. By default (without this option),
967 we do a 'hard' reset, giving you a new session and removing all
967 we do a 'hard' reset, giving you a new session and removing all
968 references to objects from the current session.
968 references to objects from the current session.
969
969
970 Examples
970 Examples
971 --------
971 --------
972 In [6]: a = 1
972 In [6]: a = 1
973
973
974 In [7]: a
974 In [7]: a
975 Out[7]: 1
975 Out[7]: 1
976
976
977 In [8]: 'a' in _ip.user_ns
977 In [8]: 'a' in _ip.user_ns
978 Out[8]: True
978 Out[8]: True
979
979
980 In [9]: %reset -f
980 In [9]: %reset -f
981
981
982 In [1]: 'a' in _ip.user_ns
982 In [1]: 'a' in _ip.user_ns
983 Out[1]: False
983 Out[1]: False
984 """
984 """
985 opts, args = self.parse_options(parameter_s,'sf')
985 opts, args = self.parse_options(parameter_s,'sf')
986 if 'f' in opts:
986 if 'f' in opts:
987 ans = True
987 ans = True
988 else:
988 else:
989 ans = self.shell.ask_yes_no(
989 ans = self.shell.ask_yes_no(
990 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
990 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
991 if not ans:
991 if not ans:
992 print 'Nothing done.'
992 print 'Nothing done.'
993 return
993 return
994
994
995 if 's' in opts: # Soft reset
995 if 's' in opts: # Soft reset
996 user_ns = self.shell.user_ns
996 user_ns = self.shell.user_ns
997 for i in self.magic_who_ls():
997 for i in self.magic_who_ls():
998 del(user_ns[i])
998 del(user_ns[i])
999
999
1000 else: # Hard reset
1000 else: # Hard reset
1001 self.shell.reset(new_session = False)
1001 self.shell.reset(new_session = False)
1002
1002
1003
1003
1004
1004
1005 def magic_reset_selective(self, parameter_s=''):
1005 def magic_reset_selective(self, parameter_s=''):
1006 """Resets the namespace by removing names defined by the user.
1006 """Resets the namespace by removing names defined by the user.
1007
1007
1008 Input/Output history are left around in case you need them.
1008 Input/Output history are left around in case you need them.
1009
1009
1010 %reset_selective [-f] regex
1010 %reset_selective [-f] regex
1011
1011
1012 No action is taken if regex is not included
1012 No action is taken if regex is not included
1013
1013
1014 Options
1014 Options
1015 -f : force reset without asking for confirmation.
1015 -f : force reset without asking for confirmation.
1016
1016
1017 Examples
1017 Examples
1018 --------
1018 --------
1019
1019
1020 We first fully reset the namespace so your output looks identical to
1020 We first fully reset the namespace so your output looks identical to
1021 this example for pedagogical reasons; in practice you do not need a
1021 this example for pedagogical reasons; in practice you do not need a
1022 full reset.
1022 full reset.
1023
1023
1024 In [1]: %reset -f
1024 In [1]: %reset -f
1025
1025
1026 Now, with a clean namespace we can make a few variables and use
1026 Now, with a clean namespace we can make a few variables and use
1027 %reset_selective to only delete names that match our regexp:
1027 %reset_selective to only delete names that match our regexp:
1028
1028
1029 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1029 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1030
1030
1031 In [3]: who_ls
1031 In [3]: who_ls
1032 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1032 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1033
1033
1034 In [4]: %reset_selective -f b[2-3]m
1034 In [4]: %reset_selective -f b[2-3]m
1035
1035
1036 In [5]: who_ls
1036 In [5]: who_ls
1037 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1037 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1038
1038
1039 In [6]: %reset_selective -f d
1039 In [6]: %reset_selective -f d
1040
1040
1041 In [7]: who_ls
1041 In [7]: who_ls
1042 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1042 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1043
1043
1044 In [8]: %reset_selective -f c
1044 In [8]: %reset_selective -f c
1045
1045
1046 In [9]: who_ls
1046 In [9]: who_ls
1047 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1047 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1048
1048
1049 In [10]: %reset_selective -f b
1049 In [10]: %reset_selective -f b
1050
1050
1051 In [11]: who_ls
1051 In [11]: who_ls
1052 Out[11]: ['a']
1052 Out[11]: ['a']
1053 """
1053 """
1054
1054
1055 opts, regex = self.parse_options(parameter_s,'f')
1055 opts, regex = self.parse_options(parameter_s,'f')
1056
1056
1057 if opts.has_key('f'):
1057 if opts.has_key('f'):
1058 ans = True
1058 ans = True
1059 else:
1059 else:
1060 ans = self.shell.ask_yes_no(
1060 ans = self.shell.ask_yes_no(
1061 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1061 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ",
1062 default='n')
1062 if not ans:
1063 if not ans:
1063 print 'Nothing done.'
1064 print 'Nothing done.'
1064 return
1065 return
1065 user_ns = self.shell.user_ns
1066 user_ns = self.shell.user_ns
1066 if not regex:
1067 if not regex:
1067 print 'No regex pattern specified. Nothing done.'
1068 print 'No regex pattern specified. Nothing done.'
1068 return
1069 return
1069 else:
1070 else:
1070 try:
1071 try:
1071 m = re.compile(regex)
1072 m = re.compile(regex)
1072 except TypeError:
1073 except TypeError:
1073 raise TypeError('regex must be a string or compiled pattern')
1074 raise TypeError('regex must be a string or compiled pattern')
1074 for i in self.magic_who_ls():
1075 for i in self.magic_who_ls():
1075 if m.search(i):
1076 if m.search(i):
1076 del(user_ns[i])
1077 del(user_ns[i])
1077
1078
1078 def magic_xdel(self, parameter_s=''):
1079 def magic_xdel(self, parameter_s=''):
1079 """Delete a variable, trying to clear it from anywhere that
1080 """Delete a variable, trying to clear it from anywhere that
1080 IPython's machinery has references to it. By default, this uses
1081 IPython's machinery has references to it. By default, this uses
1081 the identity of the named object in the user namespace to remove
1082 the identity of the named object in the user namespace to remove
1082 references held under other names. The object is also removed
1083 references held under other names. The object is also removed
1083 from the output history.
1084 from the output history.
1084
1085
1085 Options
1086 Options
1086 -n : Delete the specified name from all namespaces, without
1087 -n : Delete the specified name from all namespaces, without
1087 checking their identity.
1088 checking their identity.
1088 """
1089 """
1089 opts, varname = self.parse_options(parameter_s,'n')
1090 opts, varname = self.parse_options(parameter_s,'n')
1090 try:
1091 try:
1091 self.shell.del_var(varname, ('n' in opts))
1092 self.shell.del_var(varname, ('n' in opts))
1092 except (NameError, ValueError) as e:
1093 except (NameError, ValueError) as e:
1093 print type(e).__name__ +": "+ str(e)
1094 print type(e).__name__ +": "+ str(e)
1094
1095
1095 def magic_logstart(self,parameter_s=''):
1096 def magic_logstart(self,parameter_s=''):
1096 """Start logging anywhere in a session.
1097 """Start logging anywhere in a session.
1097
1098
1098 %logstart [-o|-r|-t] [log_name [log_mode]]
1099 %logstart [-o|-r|-t] [log_name [log_mode]]
1099
1100
1100 If no name is given, it defaults to a file named 'ipython_log.py' in your
1101 If no name is given, it defaults to a file named 'ipython_log.py' in your
1101 current directory, in 'rotate' mode (see below).
1102 current directory, in 'rotate' mode (see below).
1102
1103
1103 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1104 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1104 history up to that point and then continues logging.
1105 history up to that point and then continues logging.
1105
1106
1106 %logstart takes a second optional parameter: logging mode. This can be one
1107 %logstart takes a second optional parameter: logging mode. This can be one
1107 of (note that the modes are given unquoted):\\
1108 of (note that the modes are given unquoted):\\
1108 append: well, that says it.\\
1109 append: well, that says it.\\
1109 backup: rename (if exists) to name~ and start name.\\
1110 backup: rename (if exists) to name~ and start name.\\
1110 global: single logfile in your home dir, appended to.\\
1111 global: single logfile in your home dir, appended to.\\
1111 over : overwrite existing log.\\
1112 over : overwrite existing log.\\
1112 rotate: create rotating logs name.1~, name.2~, etc.
1113 rotate: create rotating logs name.1~, name.2~, etc.
1113
1114
1114 Options:
1115 Options:
1115
1116
1116 -o: log also IPython's output. In this mode, all commands which
1117 -o: log also IPython's output. In this mode, all commands which
1117 generate an Out[NN] prompt are recorded to the logfile, right after
1118 generate an Out[NN] prompt are recorded to the logfile, right after
1118 their corresponding input line. The output lines are always
1119 their corresponding input line. The output lines are always
1119 prepended with a '#[Out]# ' marker, so that the log remains valid
1120 prepended with a '#[Out]# ' marker, so that the log remains valid
1120 Python code.
1121 Python code.
1121
1122
1122 Since this marker is always the same, filtering only the output from
1123 Since this marker is always the same, filtering only the output from
1123 a log is very easy, using for example a simple awk call:
1124 a log is very easy, using for example a simple awk call:
1124
1125
1125 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1126 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1126
1127
1127 -r: log 'raw' input. Normally, IPython's logs contain the processed
1128 -r: log 'raw' input. Normally, IPython's logs contain the processed
1128 input, so that user lines are logged in their final form, converted
1129 input, so that user lines are logged in their final form, converted
1129 into valid Python. For example, %Exit is logged as
1130 into valid Python. For example, %Exit is logged as
1130 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1131 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1131 exactly as typed, with no transformations applied.
1132 exactly as typed, with no transformations applied.
1132
1133
1133 -t: put timestamps before each input line logged (these are put in
1134 -t: put timestamps before each input line logged (these are put in
1134 comments)."""
1135 comments)."""
1135
1136
1136 opts,par = self.parse_options(parameter_s,'ort')
1137 opts,par = self.parse_options(parameter_s,'ort')
1137 log_output = 'o' in opts
1138 log_output = 'o' in opts
1138 log_raw_input = 'r' in opts
1139 log_raw_input = 'r' in opts
1139 timestamp = 't' in opts
1140 timestamp = 't' in opts
1140
1141
1141 logger = self.shell.logger
1142 logger = self.shell.logger
1142
1143
1143 # if no args are given, the defaults set in the logger constructor by
1144 # if no args are given, the defaults set in the logger constructor by
1144 # ipytohn remain valid
1145 # ipytohn remain valid
1145 if par:
1146 if par:
1146 try:
1147 try:
1147 logfname,logmode = par.split()
1148 logfname,logmode = par.split()
1148 except:
1149 except:
1149 logfname = par
1150 logfname = par
1150 logmode = 'backup'
1151 logmode = 'backup'
1151 else:
1152 else:
1152 logfname = logger.logfname
1153 logfname = logger.logfname
1153 logmode = logger.logmode
1154 logmode = logger.logmode
1154 # put logfname into rc struct as if it had been called on the command
1155 # put logfname into rc struct as if it had been called on the command
1155 # line, so it ends up saved in the log header Save it in case we need
1156 # line, so it ends up saved in the log header Save it in case we need
1156 # to restore it...
1157 # to restore it...
1157 old_logfile = self.shell.logfile
1158 old_logfile = self.shell.logfile
1158 if logfname:
1159 if logfname:
1159 logfname = os.path.expanduser(logfname)
1160 logfname = os.path.expanduser(logfname)
1160 self.shell.logfile = logfname
1161 self.shell.logfile = logfname
1161
1162
1162 loghead = '# IPython log file\n\n'
1163 loghead = '# IPython log file\n\n'
1163 try:
1164 try:
1164 started = logger.logstart(logfname,loghead,logmode,
1165 started = logger.logstart(logfname,loghead,logmode,
1165 log_output,timestamp,log_raw_input)
1166 log_output,timestamp,log_raw_input)
1166 except:
1167 except:
1167 self.shell.logfile = old_logfile
1168 self.shell.logfile = old_logfile
1168 warn("Couldn't start log: %s" % sys.exc_info()[1])
1169 warn("Couldn't start log: %s" % sys.exc_info()[1])
1169 else:
1170 else:
1170 # log input history up to this point, optionally interleaving
1171 # log input history up to this point, optionally interleaving
1171 # output if requested
1172 # output if requested
1172
1173
1173 if timestamp:
1174 if timestamp:
1174 # disable timestamping for the previous history, since we've
1175 # disable timestamping for the previous history, since we've
1175 # lost those already (no time machine here).
1176 # lost those already (no time machine here).
1176 logger.timestamp = False
1177 logger.timestamp = False
1177
1178
1178 if log_raw_input:
1179 if log_raw_input:
1179 input_hist = self.shell.history_manager.input_hist_raw
1180 input_hist = self.shell.history_manager.input_hist_raw
1180 else:
1181 else:
1181 input_hist = self.shell.history_manager.input_hist_parsed
1182 input_hist = self.shell.history_manager.input_hist_parsed
1182
1183
1183 if log_output:
1184 if log_output:
1184 log_write = logger.log_write
1185 log_write = logger.log_write
1185 output_hist = self.shell.history_manager.output_hist
1186 output_hist = self.shell.history_manager.output_hist
1186 for n in range(1,len(input_hist)-1):
1187 for n in range(1,len(input_hist)-1):
1187 log_write(input_hist[n].rstrip() + '\n')
1188 log_write(input_hist[n].rstrip() + '\n')
1188 if n in output_hist:
1189 if n in output_hist:
1189 log_write(repr(output_hist[n]),'output')
1190 log_write(repr(output_hist[n]),'output')
1190 else:
1191 else:
1191 logger.log_write('\n'.join(input_hist[1:]))
1192 logger.log_write('\n'.join(input_hist[1:]))
1192 logger.log_write('\n')
1193 logger.log_write('\n')
1193 if timestamp:
1194 if timestamp:
1194 # re-enable timestamping
1195 # re-enable timestamping
1195 logger.timestamp = True
1196 logger.timestamp = True
1196
1197
1197 print ('Activating auto-logging. '
1198 print ('Activating auto-logging. '
1198 'Current session state plus future input saved.')
1199 'Current session state plus future input saved.')
1199 logger.logstate()
1200 logger.logstate()
1200
1201
1201 def magic_logstop(self,parameter_s=''):
1202 def magic_logstop(self,parameter_s=''):
1202 """Fully stop logging and close log file.
1203 """Fully stop logging and close log file.
1203
1204
1204 In order to start logging again, a new %logstart call needs to be made,
1205 In order to start logging again, a new %logstart call needs to be made,
1205 possibly (though not necessarily) with a new filename, mode and other
1206 possibly (though not necessarily) with a new filename, mode and other
1206 options."""
1207 options."""
1207 self.logger.logstop()
1208 self.logger.logstop()
1208
1209
1209 def magic_logoff(self,parameter_s=''):
1210 def magic_logoff(self,parameter_s=''):
1210 """Temporarily stop logging.
1211 """Temporarily stop logging.
1211
1212
1212 You must have previously started logging."""
1213 You must have previously started logging."""
1213 self.shell.logger.switch_log(0)
1214 self.shell.logger.switch_log(0)
1214
1215
1215 def magic_logon(self,parameter_s=''):
1216 def magic_logon(self,parameter_s=''):
1216 """Restart logging.
1217 """Restart logging.
1217
1218
1218 This function is for restarting logging which you've temporarily
1219 This function is for restarting logging which you've temporarily
1219 stopped with %logoff. For starting logging for the first time, you
1220 stopped with %logoff. For starting logging for the first time, you
1220 must use the %logstart function, which allows you to specify an
1221 must use the %logstart function, which allows you to specify an
1221 optional log filename."""
1222 optional log filename."""
1222
1223
1223 self.shell.logger.switch_log(1)
1224 self.shell.logger.switch_log(1)
1224
1225
1225 def magic_logstate(self,parameter_s=''):
1226 def magic_logstate(self,parameter_s=''):
1226 """Print the status of the logging system."""
1227 """Print the status of the logging system."""
1227
1228
1228 self.shell.logger.logstate()
1229 self.shell.logger.logstate()
1229
1230
1230 def magic_pdb(self, parameter_s=''):
1231 def magic_pdb(self, parameter_s=''):
1231 """Control the automatic calling of the pdb interactive debugger.
1232 """Control the automatic calling of the pdb interactive debugger.
1232
1233
1233 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1234 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1234 argument it works as a toggle.
1235 argument it works as a toggle.
1235
1236
1236 When an exception is triggered, IPython can optionally call the
1237 When an exception is triggered, IPython can optionally call the
1237 interactive pdb debugger after the traceback printout. %pdb toggles
1238 interactive pdb debugger after the traceback printout. %pdb toggles
1238 this feature on and off.
1239 this feature on and off.
1239
1240
1240 The initial state of this feature is set in your configuration
1241 The initial state of this feature is set in your configuration
1241 file (the option is ``InteractiveShell.pdb``).
1242 file (the option is ``InteractiveShell.pdb``).
1242
1243
1243 If you want to just activate the debugger AFTER an exception has fired,
1244 If you want to just activate the debugger AFTER an exception has fired,
1244 without having to type '%pdb on' and rerunning your code, you can use
1245 without having to type '%pdb on' and rerunning your code, you can use
1245 the %debug magic."""
1246 the %debug magic."""
1246
1247
1247 par = parameter_s.strip().lower()
1248 par = parameter_s.strip().lower()
1248
1249
1249 if par:
1250 if par:
1250 try:
1251 try:
1251 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1252 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1252 except KeyError:
1253 except KeyError:
1253 print ('Incorrect argument. Use on/1, off/0, '
1254 print ('Incorrect argument. Use on/1, off/0, '
1254 'or nothing for a toggle.')
1255 'or nothing for a toggle.')
1255 return
1256 return
1256 else:
1257 else:
1257 # toggle
1258 # toggle
1258 new_pdb = not self.shell.call_pdb
1259 new_pdb = not self.shell.call_pdb
1259
1260
1260 # set on the shell
1261 # set on the shell
1261 self.shell.call_pdb = new_pdb
1262 self.shell.call_pdb = new_pdb
1262 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1263 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1263
1264
1264 def magic_debug(self, parameter_s=''):
1265 def magic_debug(self, parameter_s=''):
1265 """Activate the interactive debugger in post-mortem mode.
1266 """Activate the interactive debugger in post-mortem mode.
1266
1267
1267 If an exception has just occurred, this lets you inspect its stack
1268 If an exception has just occurred, this lets you inspect its stack
1268 frames interactively. Note that this will always work only on the last
1269 frames interactively. Note that this will always work only on the last
1269 traceback that occurred, so you must call this quickly after an
1270 traceback that occurred, so you must call this quickly after an
1270 exception that you wish to inspect has fired, because if another one
1271 exception that you wish to inspect has fired, because if another one
1271 occurs, it clobbers the previous one.
1272 occurs, it clobbers the previous one.
1272
1273
1273 If you want IPython to automatically do this on every exception, see
1274 If you want IPython to automatically do this on every exception, see
1274 the %pdb magic for more details.
1275 the %pdb magic for more details.
1275 """
1276 """
1276 self.shell.debugger(force=True)
1277 self.shell.debugger(force=True)
1277
1278
1278 @skip_doctest
1279 @skip_doctest
1279 def magic_prun(self, parameter_s ='',user_mode=1,
1280 def magic_prun(self, parameter_s ='',user_mode=1,
1280 opts=None,arg_lst=None,prog_ns=None):
1281 opts=None,arg_lst=None,prog_ns=None):
1281
1282
1282 """Run a statement through the python code profiler.
1283 """Run a statement through the python code profiler.
1283
1284
1284 Usage:
1285 Usage:
1285 %prun [options] statement
1286 %prun [options] statement
1286
1287
1287 The given statement (which doesn't require quote marks) is run via the
1288 The given statement (which doesn't require quote marks) is run via the
1288 python profiler in a manner similar to the profile.run() function.
1289 python profiler in a manner similar to the profile.run() function.
1289 Namespaces are internally managed to work correctly; profile.run
1290 Namespaces are internally managed to work correctly; profile.run
1290 cannot be used in IPython because it makes certain assumptions about
1291 cannot be used in IPython because it makes certain assumptions about
1291 namespaces which do not hold under IPython.
1292 namespaces which do not hold under IPython.
1292
1293
1293 Options:
1294 Options:
1294
1295
1295 -l <limit>: you can place restrictions on what or how much of the
1296 -l <limit>: you can place restrictions on what or how much of the
1296 profile gets printed. The limit value can be:
1297 profile gets printed. The limit value can be:
1297
1298
1298 * A string: only information for function names containing this string
1299 * A string: only information for function names containing this string
1299 is printed.
1300 is printed.
1300
1301
1301 * An integer: only these many lines are printed.
1302 * An integer: only these many lines are printed.
1302
1303
1303 * A float (between 0 and 1): this fraction of the report is printed
1304 * A float (between 0 and 1): this fraction of the report is printed
1304 (for example, use a limit of 0.4 to see the topmost 40% only).
1305 (for example, use a limit of 0.4 to see the topmost 40% only).
1305
1306
1306 You can combine several limits with repeated use of the option. For
1307 You can combine several limits with repeated use of the option. For
1307 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1308 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1308 information about class constructors.
1309 information about class constructors.
1309
1310
1310 -r: return the pstats.Stats object generated by the profiling. This
1311 -r: return the pstats.Stats object generated by the profiling. This
1311 object has all the information about the profile in it, and you can
1312 object has all the information about the profile in it, and you can
1312 later use it for further analysis or in other functions.
1313 later use it for further analysis or in other functions.
1313
1314
1314 -s <key>: sort profile by given key. You can provide more than one key
1315 -s <key>: sort profile by given key. You can provide more than one key
1315 by using the option several times: '-s key1 -s key2 -s key3...'. The
1316 by using the option several times: '-s key1 -s key2 -s key3...'. The
1316 default sorting key is 'time'.
1317 default sorting key is 'time'.
1317
1318
1318 The following is copied verbatim from the profile documentation
1319 The following is copied verbatim from the profile documentation
1319 referenced below:
1320 referenced below:
1320
1321
1321 When more than one key is provided, additional keys are used as
1322 When more than one key is provided, additional keys are used as
1322 secondary criteria when the there is equality in all keys selected
1323 secondary criteria when the there is equality in all keys selected
1323 before them.
1324 before them.
1324
1325
1325 Abbreviations can be used for any key names, as long as the
1326 Abbreviations can be used for any key names, as long as the
1326 abbreviation is unambiguous. The following are the keys currently
1327 abbreviation is unambiguous. The following are the keys currently
1327 defined:
1328 defined:
1328
1329
1329 Valid Arg Meaning
1330 Valid Arg Meaning
1330 "calls" call count
1331 "calls" call count
1331 "cumulative" cumulative time
1332 "cumulative" cumulative time
1332 "file" file name
1333 "file" file name
1333 "module" file name
1334 "module" file name
1334 "pcalls" primitive call count
1335 "pcalls" primitive call count
1335 "line" line number
1336 "line" line number
1336 "name" function name
1337 "name" function name
1337 "nfl" name/file/line
1338 "nfl" name/file/line
1338 "stdname" standard name
1339 "stdname" standard name
1339 "time" internal time
1340 "time" internal time
1340
1341
1341 Note that all sorts on statistics are in descending order (placing
1342 Note that all sorts on statistics are in descending order (placing
1342 most time consuming items first), where as name, file, and line number
1343 most time consuming items first), where as name, file, and line number
1343 searches are in ascending order (i.e., alphabetical). The subtle
1344 searches are in ascending order (i.e., alphabetical). The subtle
1344 distinction between "nfl" and "stdname" is that the standard name is a
1345 distinction between "nfl" and "stdname" is that the standard name is a
1345 sort of the name as printed, which means that the embedded line
1346 sort of the name as printed, which means that the embedded line
1346 numbers get compared in an odd way. For example, lines 3, 20, and 40
1347 numbers get compared in an odd way. For example, lines 3, 20, and 40
1347 would (if the file names were the same) appear in the string order
1348 would (if the file names were the same) appear in the string order
1348 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1349 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1349 line numbers. In fact, sort_stats("nfl") is the same as
1350 line numbers. In fact, sort_stats("nfl") is the same as
1350 sort_stats("name", "file", "line").
1351 sort_stats("name", "file", "line").
1351
1352
1352 -T <filename>: save profile results as shown on screen to a text
1353 -T <filename>: save profile results as shown on screen to a text
1353 file. The profile is still shown on screen.
1354 file. The profile is still shown on screen.
1354
1355
1355 -D <filename>: save (via dump_stats) profile statistics to given
1356 -D <filename>: save (via dump_stats) profile statistics to given
1356 filename. This data is in a format understod by the pstats module, and
1357 filename. This data is in a format understod by the pstats module, and
1357 is generated by a call to the dump_stats() method of profile
1358 is generated by a call to the dump_stats() method of profile
1358 objects. The profile is still shown on screen.
1359 objects. The profile is still shown on screen.
1359
1360
1360 If you want to run complete programs under the profiler's control, use
1361 If you want to run complete programs under the profiler's control, use
1361 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1362 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1362 contains profiler specific options as described here.
1363 contains profiler specific options as described here.
1363
1364
1364 You can read the complete documentation for the profile module with::
1365 You can read the complete documentation for the profile module with::
1365
1366
1366 In [1]: import profile; profile.help()
1367 In [1]: import profile; profile.help()
1367 """
1368 """
1368
1369
1369 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1370 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1370 # protect user quote marks
1371 # protect user quote marks
1371 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1372 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1372
1373
1373 if user_mode: # regular user call
1374 if user_mode: # regular user call
1374 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1375 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1375 list_all=1)
1376 list_all=1)
1376 namespace = self.shell.user_ns
1377 namespace = self.shell.user_ns
1377 else: # called to run a program by %run -p
1378 else: # called to run a program by %run -p
1378 try:
1379 try:
1379 filename = get_py_filename(arg_lst[0])
1380 filename = get_py_filename(arg_lst[0])
1380 except IOError as e:
1381 except IOError as e:
1381 try:
1382 try:
1382 msg = str(e)
1383 msg = str(e)
1383 except UnicodeError:
1384 except UnicodeError:
1384 msg = e.message
1385 msg = e.message
1385 error(msg)
1386 error(msg)
1386 return
1387 return
1387
1388
1388 arg_str = 'execfile(filename,prog_ns)'
1389 arg_str = 'execfile(filename,prog_ns)'
1389 namespace = {
1390 namespace = {
1390 'execfile': self.shell.safe_execfile,
1391 'execfile': self.shell.safe_execfile,
1391 'prog_ns': prog_ns,
1392 'prog_ns': prog_ns,
1392 'filename': filename
1393 'filename': filename
1393 }
1394 }
1394
1395
1395 opts.merge(opts_def)
1396 opts.merge(opts_def)
1396
1397
1397 prof = profile.Profile()
1398 prof = profile.Profile()
1398 try:
1399 try:
1399 prof = prof.runctx(arg_str,namespace,namespace)
1400 prof = prof.runctx(arg_str,namespace,namespace)
1400 sys_exit = ''
1401 sys_exit = ''
1401 except SystemExit:
1402 except SystemExit:
1402 sys_exit = """*** SystemExit exception caught in code being profiled."""
1403 sys_exit = """*** SystemExit exception caught in code being profiled."""
1403
1404
1404 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1405 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1405
1406
1406 lims = opts.l
1407 lims = opts.l
1407 if lims:
1408 if lims:
1408 lims = [] # rebuild lims with ints/floats/strings
1409 lims = [] # rebuild lims with ints/floats/strings
1409 for lim in opts.l:
1410 for lim in opts.l:
1410 try:
1411 try:
1411 lims.append(int(lim))
1412 lims.append(int(lim))
1412 except ValueError:
1413 except ValueError:
1413 try:
1414 try:
1414 lims.append(float(lim))
1415 lims.append(float(lim))
1415 except ValueError:
1416 except ValueError:
1416 lims.append(lim)
1417 lims.append(lim)
1417
1418
1418 # Trap output.
1419 # Trap output.
1419 stdout_trap = StringIO()
1420 stdout_trap = StringIO()
1420
1421
1421 if hasattr(stats,'stream'):
1422 if hasattr(stats,'stream'):
1422 # In newer versions of python, the stats object has a 'stream'
1423 # In newer versions of python, the stats object has a 'stream'
1423 # attribute to write into.
1424 # attribute to write into.
1424 stats.stream = stdout_trap
1425 stats.stream = stdout_trap
1425 stats.print_stats(*lims)
1426 stats.print_stats(*lims)
1426 else:
1427 else:
1427 # For older versions, we manually redirect stdout during printing
1428 # For older versions, we manually redirect stdout during printing
1428 sys_stdout = sys.stdout
1429 sys_stdout = sys.stdout
1429 try:
1430 try:
1430 sys.stdout = stdout_trap
1431 sys.stdout = stdout_trap
1431 stats.print_stats(*lims)
1432 stats.print_stats(*lims)
1432 finally:
1433 finally:
1433 sys.stdout = sys_stdout
1434 sys.stdout = sys_stdout
1434
1435
1435 output = stdout_trap.getvalue()
1436 output = stdout_trap.getvalue()
1436 output = output.rstrip()
1437 output = output.rstrip()
1437
1438
1438 page.page(output)
1439 page.page(output)
1439 print sys_exit,
1440 print sys_exit,
1440
1441
1441 dump_file = opts.D[0]
1442 dump_file = opts.D[0]
1442 text_file = opts.T[0]
1443 text_file = opts.T[0]
1443 if dump_file:
1444 if dump_file:
1444 dump_file = unquote_filename(dump_file)
1445 dump_file = unquote_filename(dump_file)
1445 prof.dump_stats(dump_file)
1446 prof.dump_stats(dump_file)
1446 print '\n*** Profile stats marshalled to file',\
1447 print '\n*** Profile stats marshalled to file',\
1447 `dump_file`+'.',sys_exit
1448 `dump_file`+'.',sys_exit
1448 if text_file:
1449 if text_file:
1449 text_file = unquote_filename(text_file)
1450 text_file = unquote_filename(text_file)
1450 pfile = file(text_file,'w')
1451 pfile = file(text_file,'w')
1451 pfile.write(output)
1452 pfile.write(output)
1452 pfile.close()
1453 pfile.close()
1453 print '\n*** Profile printout saved to text file',\
1454 print '\n*** Profile printout saved to text file',\
1454 `text_file`+'.',sys_exit
1455 `text_file`+'.',sys_exit
1455
1456
1456 if opts.has_key('r'):
1457 if opts.has_key('r'):
1457 return stats
1458 return stats
1458 else:
1459 else:
1459 return None
1460 return None
1460
1461
1461 @skip_doctest
1462 @skip_doctest
1462 def magic_run(self, parameter_s ='', runner=None,
1463 def magic_run(self, parameter_s ='', runner=None,
1463 file_finder=get_py_filename):
1464 file_finder=get_py_filename):
1464 """Run the named file inside IPython as a program.
1465 """Run the named file inside IPython as a program.
1465
1466
1466 Usage:\\
1467 Usage:\\
1467 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1468 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1468
1469
1469 Parameters after the filename are passed as command-line arguments to
1470 Parameters after the filename are passed as command-line arguments to
1470 the program (put in sys.argv). Then, control returns to IPython's
1471 the program (put in sys.argv). Then, control returns to IPython's
1471 prompt.
1472 prompt.
1472
1473
1473 This is similar to running at a system prompt:\\
1474 This is similar to running at a system prompt:\\
1474 $ python file args\\
1475 $ python file args\\
1475 but with the advantage of giving you IPython's tracebacks, and of
1476 but with the advantage of giving you IPython's tracebacks, and of
1476 loading all variables into your interactive namespace for further use
1477 loading all variables into your interactive namespace for further use
1477 (unless -p is used, see below).
1478 (unless -p is used, see below).
1478
1479
1479 The file is executed in a namespace initially consisting only of
1480 The file is executed in a namespace initially consisting only of
1480 __name__=='__main__' and sys.argv constructed as indicated. It thus
1481 __name__=='__main__' and sys.argv constructed as indicated. It thus
1481 sees its environment as if it were being run as a stand-alone program
1482 sees its environment as if it were being run as a stand-alone program
1482 (except for sharing global objects such as previously imported
1483 (except for sharing global objects such as previously imported
1483 modules). But after execution, the IPython interactive namespace gets
1484 modules). But after execution, the IPython interactive namespace gets
1484 updated with all variables defined in the program (except for __name__
1485 updated with all variables defined in the program (except for __name__
1485 and sys.argv). This allows for very convenient loading of code for
1486 and sys.argv). This allows for very convenient loading of code for
1486 interactive work, while giving each program a 'clean sheet' to run in.
1487 interactive work, while giving each program a 'clean sheet' to run in.
1487
1488
1488 Options:
1489 Options:
1489
1490
1490 -n: __name__ is NOT set to '__main__', but to the running file's name
1491 -n: __name__ is NOT set to '__main__', but to the running file's name
1491 without extension (as python does under import). This allows running
1492 without extension (as python does under import). This allows running
1492 scripts and reloading the definitions in them without calling code
1493 scripts and reloading the definitions in them without calling code
1493 protected by an ' if __name__ == "__main__" ' clause.
1494 protected by an ' if __name__ == "__main__" ' clause.
1494
1495
1495 -i: run the file in IPython's namespace instead of an empty one. This
1496 -i: run the file in IPython's namespace instead of an empty one. This
1496 is useful if you are experimenting with code written in a text editor
1497 is useful if you are experimenting with code written in a text editor
1497 which depends on variables defined interactively.
1498 which depends on variables defined interactively.
1498
1499
1499 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1500 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1500 being run. This is particularly useful if IPython is being used to
1501 being run. This is particularly useful if IPython is being used to
1501 run unittests, which always exit with a sys.exit() call. In such
1502 run unittests, which always exit with a sys.exit() call. In such
1502 cases you are interested in the output of the test results, not in
1503 cases you are interested in the output of the test results, not in
1503 seeing a traceback of the unittest module.
1504 seeing a traceback of the unittest module.
1504
1505
1505 -t: print timing information at the end of the run. IPython will give
1506 -t: print timing information at the end of the run. IPython will give
1506 you an estimated CPU time consumption for your script, which under
1507 you an estimated CPU time consumption for your script, which under
1507 Unix uses the resource module to avoid the wraparound problems of
1508 Unix uses the resource module to avoid the wraparound problems of
1508 time.clock(). Under Unix, an estimate of time spent on system tasks
1509 time.clock(). Under Unix, an estimate of time spent on system tasks
1509 is also given (for Windows platforms this is reported as 0.0).
1510 is also given (for Windows platforms this is reported as 0.0).
1510
1511
1511 If -t is given, an additional -N<N> option can be given, where <N>
1512 If -t is given, an additional -N<N> option can be given, where <N>
1512 must be an integer indicating how many times you want the script to
1513 must be an integer indicating how many times you want the script to
1513 run. The final timing report will include total and per run results.
1514 run. The final timing report will include total and per run results.
1514
1515
1515 For example (testing the script uniq_stable.py):
1516 For example (testing the script uniq_stable.py):
1516
1517
1517 In [1]: run -t uniq_stable
1518 In [1]: run -t uniq_stable
1518
1519
1519 IPython CPU timings (estimated):\\
1520 IPython CPU timings (estimated):\\
1520 User : 0.19597 s.\\
1521 User : 0.19597 s.\\
1521 System: 0.0 s.\\
1522 System: 0.0 s.\\
1522
1523
1523 In [2]: run -t -N5 uniq_stable
1524 In [2]: run -t -N5 uniq_stable
1524
1525
1525 IPython CPU timings (estimated):\\
1526 IPython CPU timings (estimated):\\
1526 Total runs performed: 5\\
1527 Total runs performed: 5\\
1527 Times : Total Per run\\
1528 Times : Total Per run\\
1528 User : 0.910862 s, 0.1821724 s.\\
1529 User : 0.910862 s, 0.1821724 s.\\
1529 System: 0.0 s, 0.0 s.
1530 System: 0.0 s, 0.0 s.
1530
1531
1531 -d: run your program under the control of pdb, the Python debugger.
1532 -d: run your program under the control of pdb, the Python debugger.
1532 This allows you to execute your program step by step, watch variables,
1533 This allows you to execute your program step by step, watch variables,
1533 etc. Internally, what IPython does is similar to calling:
1534 etc. Internally, what IPython does is similar to calling:
1534
1535
1535 pdb.run('execfile("YOURFILENAME")')
1536 pdb.run('execfile("YOURFILENAME")')
1536
1537
1537 with a breakpoint set on line 1 of your file. You can change the line
1538 with a breakpoint set on line 1 of your file. You can change the line
1538 number for this automatic breakpoint to be <N> by using the -bN option
1539 number for this automatic breakpoint to be <N> by using the -bN option
1539 (where N must be an integer). For example:
1540 (where N must be an integer). For example:
1540
1541
1541 %run -d -b40 myscript
1542 %run -d -b40 myscript
1542
1543
1543 will set the first breakpoint at line 40 in myscript.py. Note that
1544 will set the first breakpoint at line 40 in myscript.py. Note that
1544 the first breakpoint must be set on a line which actually does
1545 the first breakpoint must be set on a line which actually does
1545 something (not a comment or docstring) for it to stop execution.
1546 something (not a comment or docstring) for it to stop execution.
1546
1547
1547 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1548 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1548 first enter 'c' (without qoutes) to start execution up to the first
1549 first enter 'c' (without qoutes) to start execution up to the first
1549 breakpoint.
1550 breakpoint.
1550
1551
1551 Entering 'help' gives information about the use of the debugger. You
1552 Entering 'help' gives information about the use of the debugger. You
1552 can easily see pdb's full documentation with "import pdb;pdb.help()"
1553 can easily see pdb's full documentation with "import pdb;pdb.help()"
1553 at a prompt.
1554 at a prompt.
1554
1555
1555 -p: run program under the control of the Python profiler module (which
1556 -p: run program under the control of the Python profiler module (which
1556 prints a detailed report of execution times, function calls, etc).
1557 prints a detailed report of execution times, function calls, etc).
1557
1558
1558 You can pass other options after -p which affect the behavior of the
1559 You can pass other options after -p which affect the behavior of the
1559 profiler itself. See the docs for %prun for details.
1560 profiler itself. See the docs for %prun for details.
1560
1561
1561 In this mode, the program's variables do NOT propagate back to the
1562 In this mode, the program's variables do NOT propagate back to the
1562 IPython interactive namespace (because they remain in the namespace
1563 IPython interactive namespace (because they remain in the namespace
1563 where the profiler executes them).
1564 where the profiler executes them).
1564
1565
1565 Internally this triggers a call to %prun, see its documentation for
1566 Internally this triggers a call to %prun, see its documentation for
1566 details on the options available specifically for profiling.
1567 details on the options available specifically for profiling.
1567
1568
1568 There is one special usage for which the text above doesn't apply:
1569 There is one special usage for which the text above doesn't apply:
1569 if the filename ends with .ipy, the file is run as ipython script,
1570 if the filename ends with .ipy, the file is run as ipython script,
1570 just as if the commands were written on IPython prompt.
1571 just as if the commands were written on IPython prompt.
1571
1572
1572 -m: specify module name to load instead of script path. Similar to
1573 -m: specify module name to load instead of script path. Similar to
1573 the -m option for the python interpreter. Use this option last if you
1574 the -m option for the python interpreter. Use this option last if you
1574 want to combine with other %run options. Unlike the python interpreter
1575 want to combine with other %run options. Unlike the python interpreter
1575 only source modules are allowed no .pyc or .pyo files.
1576 only source modules are allowed no .pyc or .pyo files.
1576 For example:
1577 For example:
1577
1578
1578 %run -m example
1579 %run -m example
1579
1580
1580 will run the example module.
1581 will run the example module.
1581
1582
1582 """
1583 """
1583
1584
1584 # get arguments and set sys.argv for program to be run.
1585 # get arguments and set sys.argv for program to be run.
1585 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1586 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1586 mode='list', list_all=1)
1587 mode='list', list_all=1)
1587 if "m" in opts:
1588 if "m" in opts:
1588 modulename = opts["m"][0]
1589 modulename = opts["m"][0]
1589 modpath = find_mod(modulename)
1590 modpath = find_mod(modulename)
1590 if modpath is None:
1591 if modpath is None:
1591 warn('%r is not a valid modulename on sys.path'%modulename)
1592 warn('%r is not a valid modulename on sys.path'%modulename)
1592 return
1593 return
1593 arg_lst = [modpath] + arg_lst
1594 arg_lst = [modpath] + arg_lst
1594 try:
1595 try:
1595 filename = file_finder(arg_lst[0])
1596 filename = file_finder(arg_lst[0])
1596 except IndexError:
1597 except IndexError:
1597 warn('you must provide at least a filename.')
1598 warn('you must provide at least a filename.')
1598 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1599 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1599 return
1600 return
1600 except IOError as e:
1601 except IOError as e:
1601 try:
1602 try:
1602 msg = str(e)
1603 msg = str(e)
1603 except UnicodeError:
1604 except UnicodeError:
1604 msg = e.message
1605 msg = e.message
1605 error(msg)
1606 error(msg)
1606 return
1607 return
1607
1608
1608 if filename.lower().endswith('.ipy'):
1609 if filename.lower().endswith('.ipy'):
1609 self.shell.safe_execfile_ipy(filename)
1610 self.shell.safe_execfile_ipy(filename)
1610 return
1611 return
1611
1612
1612 # Control the response to exit() calls made by the script being run
1613 # Control the response to exit() calls made by the script being run
1613 exit_ignore = 'e' in opts
1614 exit_ignore = 'e' in opts
1614
1615
1615 # Make sure that the running script gets a proper sys.argv as if it
1616 # Make sure that the running script gets a proper sys.argv as if it
1616 # were run from a system shell.
1617 # were run from a system shell.
1617 save_argv = sys.argv # save it for later restoring
1618 save_argv = sys.argv # save it for later restoring
1618
1619
1619 # simulate shell expansion on arguments, at least tilde expansion
1620 # simulate shell expansion on arguments, at least tilde expansion
1620 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1621 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1621
1622
1622 sys.argv = [filename] + args # put in the proper filename
1623 sys.argv = [filename] + args # put in the proper filename
1623 # protect sys.argv from potential unicode strings on Python 2:
1624 # protect sys.argv from potential unicode strings on Python 2:
1624 if not py3compat.PY3:
1625 if not py3compat.PY3:
1625 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1626 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1626
1627
1627 if 'i' in opts:
1628 if 'i' in opts:
1628 # Run in user's interactive namespace
1629 # Run in user's interactive namespace
1629 prog_ns = self.shell.user_ns
1630 prog_ns = self.shell.user_ns
1630 __name__save = self.shell.user_ns['__name__']
1631 __name__save = self.shell.user_ns['__name__']
1631 prog_ns['__name__'] = '__main__'
1632 prog_ns['__name__'] = '__main__'
1632 main_mod = self.shell.new_main_mod(prog_ns)
1633 main_mod = self.shell.new_main_mod(prog_ns)
1633 else:
1634 else:
1634 # Run in a fresh, empty namespace
1635 # Run in a fresh, empty namespace
1635 if 'n' in opts:
1636 if 'n' in opts:
1636 name = os.path.splitext(os.path.basename(filename))[0]
1637 name = os.path.splitext(os.path.basename(filename))[0]
1637 else:
1638 else:
1638 name = '__main__'
1639 name = '__main__'
1639
1640
1640 main_mod = self.shell.new_main_mod()
1641 main_mod = self.shell.new_main_mod()
1641 prog_ns = main_mod.__dict__
1642 prog_ns = main_mod.__dict__
1642 prog_ns['__name__'] = name
1643 prog_ns['__name__'] = name
1643
1644
1644 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1645 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1645 # set the __file__ global in the script's namespace
1646 # set the __file__ global in the script's namespace
1646 prog_ns['__file__'] = filename
1647 prog_ns['__file__'] = filename
1647
1648
1648 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1649 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1649 # that, if we overwrite __main__, we replace it at the end
1650 # that, if we overwrite __main__, we replace it at the end
1650 main_mod_name = prog_ns['__name__']
1651 main_mod_name = prog_ns['__name__']
1651
1652
1652 if main_mod_name == '__main__':
1653 if main_mod_name == '__main__':
1653 restore_main = sys.modules['__main__']
1654 restore_main = sys.modules['__main__']
1654 else:
1655 else:
1655 restore_main = False
1656 restore_main = False
1656
1657
1657 # This needs to be undone at the end to prevent holding references to
1658 # This needs to be undone at the end to prevent holding references to
1658 # every single object ever created.
1659 # every single object ever created.
1659 sys.modules[main_mod_name] = main_mod
1660 sys.modules[main_mod_name] = main_mod
1660
1661
1661 try:
1662 try:
1662 stats = None
1663 stats = None
1663 with self.readline_no_record:
1664 with self.readline_no_record:
1664 if 'p' in opts:
1665 if 'p' in opts:
1665 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1666 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1666 else:
1667 else:
1667 if 'd' in opts:
1668 if 'd' in opts:
1668 deb = debugger.Pdb(self.shell.colors)
1669 deb = debugger.Pdb(self.shell.colors)
1669 # reset Breakpoint state, which is moronically kept
1670 # reset Breakpoint state, which is moronically kept
1670 # in a class
1671 # in a class
1671 bdb.Breakpoint.next = 1
1672 bdb.Breakpoint.next = 1
1672 bdb.Breakpoint.bplist = {}
1673 bdb.Breakpoint.bplist = {}
1673 bdb.Breakpoint.bpbynumber = [None]
1674 bdb.Breakpoint.bpbynumber = [None]
1674 # Set an initial breakpoint to stop execution
1675 # Set an initial breakpoint to stop execution
1675 maxtries = 10
1676 maxtries = 10
1676 bp = int(opts.get('b', [1])[0])
1677 bp = int(opts.get('b', [1])[0])
1677 checkline = deb.checkline(filename, bp)
1678 checkline = deb.checkline(filename, bp)
1678 if not checkline:
1679 if not checkline:
1679 for bp in range(bp + 1, bp + maxtries + 1):
1680 for bp in range(bp + 1, bp + maxtries + 1):
1680 if deb.checkline(filename, bp):
1681 if deb.checkline(filename, bp):
1681 break
1682 break
1682 else:
1683 else:
1683 msg = ("\nI failed to find a valid line to set "
1684 msg = ("\nI failed to find a valid line to set "
1684 "a breakpoint\n"
1685 "a breakpoint\n"
1685 "after trying up to line: %s.\n"
1686 "after trying up to line: %s.\n"
1686 "Please set a valid breakpoint manually "
1687 "Please set a valid breakpoint manually "
1687 "with the -b option." % bp)
1688 "with the -b option." % bp)
1688 error(msg)
1689 error(msg)
1689 return
1690 return
1690 # if we find a good linenumber, set the breakpoint
1691 # if we find a good linenumber, set the breakpoint
1691 deb.do_break('%s:%s' % (filename, bp))
1692 deb.do_break('%s:%s' % (filename, bp))
1692 # Start file run
1693 # Start file run
1693 print "NOTE: Enter 'c' at the",
1694 print "NOTE: Enter 'c' at the",
1694 print "%s prompt to start your script." % deb.prompt
1695 print "%s prompt to start your script." % deb.prompt
1695 try:
1696 try:
1696 deb.run('execfile("%s")' % filename, prog_ns)
1697 deb.run('execfile("%s")' % filename, prog_ns)
1697
1698
1698 except:
1699 except:
1699 etype, value, tb = sys.exc_info()
1700 etype, value, tb = sys.exc_info()
1700 # Skip three frames in the traceback: the %run one,
1701 # Skip three frames in the traceback: the %run one,
1701 # one inside bdb.py, and the command-line typed by the
1702 # one inside bdb.py, and the command-line typed by the
1702 # user (run by exec in pdb itself).
1703 # user (run by exec in pdb itself).
1703 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1704 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1704 else:
1705 else:
1705 if runner is None:
1706 if runner is None:
1706 runner = self.shell.safe_execfile
1707 runner = self.shell.safe_execfile
1707 if 't' in opts:
1708 if 't' in opts:
1708 # timed execution
1709 # timed execution
1709 try:
1710 try:
1710 nruns = int(opts['N'][0])
1711 nruns = int(opts['N'][0])
1711 if nruns < 1:
1712 if nruns < 1:
1712 error('Number of runs must be >=1')
1713 error('Number of runs must be >=1')
1713 return
1714 return
1714 except (KeyError):
1715 except (KeyError):
1715 nruns = 1
1716 nruns = 1
1716 twall0 = time.time()
1717 twall0 = time.time()
1717 if nruns == 1:
1718 if nruns == 1:
1718 t0 = clock2()
1719 t0 = clock2()
1719 runner(filename, prog_ns, prog_ns,
1720 runner(filename, prog_ns, prog_ns,
1720 exit_ignore=exit_ignore)
1721 exit_ignore=exit_ignore)
1721 t1 = clock2()
1722 t1 = clock2()
1722 t_usr = t1[0] - t0[0]
1723 t_usr = t1[0] - t0[0]
1723 t_sys = t1[1] - t0[1]
1724 t_sys = t1[1] - t0[1]
1724 print "\nIPython CPU timings (estimated):"
1725 print "\nIPython CPU timings (estimated):"
1725 print " User : %10.2f s." % t_usr
1726 print " User : %10.2f s." % t_usr
1726 print " System : %10.2f s." % t_sys
1727 print " System : %10.2f s." % t_sys
1727 else:
1728 else:
1728 runs = range(nruns)
1729 runs = range(nruns)
1729 t0 = clock2()
1730 t0 = clock2()
1730 for nr in runs:
1731 for nr in runs:
1731 runner(filename, prog_ns, prog_ns,
1732 runner(filename, prog_ns, prog_ns,
1732 exit_ignore=exit_ignore)
1733 exit_ignore=exit_ignore)
1733 t1 = clock2()
1734 t1 = clock2()
1734 t_usr = t1[0] - t0[0]
1735 t_usr = t1[0] - t0[0]
1735 t_sys = t1[1] - t0[1]
1736 t_sys = t1[1] - t0[1]
1736 print "\nIPython CPU timings (estimated):"
1737 print "\nIPython CPU timings (estimated):"
1737 print "Total runs performed:", nruns
1738 print "Total runs performed:", nruns
1738 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1739 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1739 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1740 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1740 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1741 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1741 twall1 = time.time()
1742 twall1 = time.time()
1742 print "Wall time: %10.2f s." % (twall1 - twall0)
1743 print "Wall time: %10.2f s." % (twall1 - twall0)
1743
1744
1744 else:
1745 else:
1745 # regular execution
1746 # regular execution
1746 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1747 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1747
1748
1748 if 'i' in opts:
1749 if 'i' in opts:
1749 self.shell.user_ns['__name__'] = __name__save
1750 self.shell.user_ns['__name__'] = __name__save
1750 else:
1751 else:
1751 # The shell MUST hold a reference to prog_ns so after %run
1752 # The shell MUST hold a reference to prog_ns so after %run
1752 # exits, the python deletion mechanism doesn't zero it out
1753 # exits, the python deletion mechanism doesn't zero it out
1753 # (leaving dangling references).
1754 # (leaving dangling references).
1754 self.shell.cache_main_mod(prog_ns, filename)
1755 self.shell.cache_main_mod(prog_ns, filename)
1755 # update IPython interactive namespace
1756 # update IPython interactive namespace
1756
1757
1757 # Some forms of read errors on the file may mean the
1758 # Some forms of read errors on the file may mean the
1758 # __name__ key was never set; using pop we don't have to
1759 # __name__ key was never set; using pop we don't have to
1759 # worry about a possible KeyError.
1760 # worry about a possible KeyError.
1760 prog_ns.pop('__name__', None)
1761 prog_ns.pop('__name__', None)
1761
1762
1762 self.shell.user_ns.update(prog_ns)
1763 self.shell.user_ns.update(prog_ns)
1763 finally:
1764 finally:
1764 # It's a bit of a mystery why, but __builtins__ can change from
1765 # It's a bit of a mystery why, but __builtins__ can change from
1765 # being a module to becoming a dict missing some key data after
1766 # being a module to becoming a dict missing some key data after
1766 # %run. As best I can see, this is NOT something IPython is doing
1767 # %run. As best I can see, this is NOT something IPython is doing
1767 # at all, and similar problems have been reported before:
1768 # at all, and similar problems have been reported before:
1768 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1769 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1769 # Since this seems to be done by the interpreter itself, the best
1770 # Since this seems to be done by the interpreter itself, the best
1770 # we can do is to at least restore __builtins__ for the user on
1771 # we can do is to at least restore __builtins__ for the user on
1771 # exit.
1772 # exit.
1772 self.shell.user_ns['__builtins__'] = builtin_mod
1773 self.shell.user_ns['__builtins__'] = builtin_mod
1773
1774
1774 # Ensure key global structures are restored
1775 # Ensure key global structures are restored
1775 sys.argv = save_argv
1776 sys.argv = save_argv
1776 if restore_main:
1777 if restore_main:
1777 sys.modules['__main__'] = restore_main
1778 sys.modules['__main__'] = restore_main
1778 else:
1779 else:
1779 # Remove from sys.modules the reference to main_mod we'd
1780 # Remove from sys.modules the reference to main_mod we'd
1780 # added. Otherwise it will trap references to objects
1781 # added. Otherwise it will trap references to objects
1781 # contained therein.
1782 # contained therein.
1782 del sys.modules[main_mod_name]
1783 del sys.modules[main_mod_name]
1783
1784
1784 return stats
1785 return stats
1785
1786
1786 @skip_doctest
1787 @skip_doctest
1787 def magic_timeit(self, parameter_s =''):
1788 def magic_timeit(self, parameter_s =''):
1788 """Time execution of a Python statement or expression
1789 """Time execution of a Python statement or expression
1789
1790
1790 Usage:\\
1791 Usage:\\
1791 %timeit [-n<N> -r<R> [-t|-c]] statement
1792 %timeit [-n<N> -r<R> [-t|-c]] statement
1792
1793
1793 Time execution of a Python statement or expression using the timeit
1794 Time execution of a Python statement or expression using the timeit
1794 module.
1795 module.
1795
1796
1796 Options:
1797 Options:
1797 -n<N>: execute the given statement <N> times in a loop. If this value
1798 -n<N>: execute the given statement <N> times in a loop. If this value
1798 is not given, a fitting value is chosen.
1799 is not given, a fitting value is chosen.
1799
1800
1800 -r<R>: repeat the loop iteration <R> times and take the best result.
1801 -r<R>: repeat the loop iteration <R> times and take the best result.
1801 Default: 3
1802 Default: 3
1802
1803
1803 -t: use time.time to measure the time, which is the default on Unix.
1804 -t: use time.time to measure the time, which is the default on Unix.
1804 This function measures wall time.
1805 This function measures wall time.
1805
1806
1806 -c: use time.clock to measure the time, which is the default on
1807 -c: use time.clock to measure the time, which is the default on
1807 Windows and measures wall time. On Unix, resource.getrusage is used
1808 Windows and measures wall time. On Unix, resource.getrusage is used
1808 instead and returns the CPU user time.
1809 instead and returns the CPU user time.
1809
1810
1810 -p<P>: use a precision of <P> digits to display the timing result.
1811 -p<P>: use a precision of <P> digits to display the timing result.
1811 Default: 3
1812 Default: 3
1812
1813
1813
1814
1814 Examples:
1815 Examples:
1815
1816
1816 In [1]: %timeit pass
1817 In [1]: %timeit pass
1817 10000000 loops, best of 3: 53.3 ns per loop
1818 10000000 loops, best of 3: 53.3 ns per loop
1818
1819
1819 In [2]: u = None
1820 In [2]: u = None
1820
1821
1821 In [3]: %timeit u is None
1822 In [3]: %timeit u is None
1822 10000000 loops, best of 3: 184 ns per loop
1823 10000000 loops, best of 3: 184 ns per loop
1823
1824
1824 In [4]: %timeit -r 4 u == None
1825 In [4]: %timeit -r 4 u == None
1825 1000000 loops, best of 4: 242 ns per loop
1826 1000000 loops, best of 4: 242 ns per loop
1826
1827
1827 In [5]: import time
1828 In [5]: import time
1828
1829
1829 In [6]: %timeit -n1 time.sleep(2)
1830 In [6]: %timeit -n1 time.sleep(2)
1830 1 loops, best of 3: 2 s per loop
1831 1 loops, best of 3: 2 s per loop
1831
1832
1832
1833
1833 The times reported by %timeit will be slightly higher than those
1834 The times reported by %timeit will be slightly higher than those
1834 reported by the timeit.py script when variables are accessed. This is
1835 reported by the timeit.py script when variables are accessed. This is
1835 due to the fact that %timeit executes the statement in the namespace
1836 due to the fact that %timeit executes the statement in the namespace
1836 of the shell, compared with timeit.py, which uses a single setup
1837 of the shell, compared with timeit.py, which uses a single setup
1837 statement to import function or create variables. Generally, the bias
1838 statement to import function or create variables. Generally, the bias
1838 does not matter as long as results from timeit.py are not mixed with
1839 does not matter as long as results from timeit.py are not mixed with
1839 those from %timeit."""
1840 those from %timeit."""
1840
1841
1841 import timeit
1842 import timeit
1842 import math
1843 import math
1843
1844
1844 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1845 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1845 # certain terminals. Until we figure out a robust way of
1846 # certain terminals. Until we figure out a robust way of
1846 # auto-detecting if the terminal can deal with it, use plain 'us' for
1847 # auto-detecting if the terminal can deal with it, use plain 'us' for
1847 # microseconds. I am really NOT happy about disabling the proper
1848 # microseconds. I am really NOT happy about disabling the proper
1848 # 'micro' prefix, but crashing is worse... If anyone knows what the
1849 # 'micro' prefix, but crashing is worse... If anyone knows what the
1849 # right solution for this is, I'm all ears...
1850 # right solution for this is, I'm all ears...
1850 #
1851 #
1851 # Note: using
1852 # Note: using
1852 #
1853 #
1853 # s = u'\xb5'
1854 # s = u'\xb5'
1854 # s.encode(sys.getdefaultencoding())
1855 # s.encode(sys.getdefaultencoding())
1855 #
1856 #
1856 # is not sufficient, as I've seen terminals where that fails but
1857 # is not sufficient, as I've seen terminals where that fails but
1857 # print s
1858 # print s
1858 #
1859 #
1859 # succeeds
1860 # succeeds
1860 #
1861 #
1861 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1862 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1862
1863
1863 #units = [u"s", u"ms",u'\xb5',"ns"]
1864 #units = [u"s", u"ms",u'\xb5',"ns"]
1864 units = [u"s", u"ms",u'us',"ns"]
1865 units = [u"s", u"ms",u'us',"ns"]
1865
1866
1866 scaling = [1, 1e3, 1e6, 1e9]
1867 scaling = [1, 1e3, 1e6, 1e9]
1867
1868
1868 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1869 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1869 posix=False)
1870 posix=False)
1870 if stmt == "":
1871 if stmt == "":
1871 return
1872 return
1872 timefunc = timeit.default_timer
1873 timefunc = timeit.default_timer
1873 number = int(getattr(opts, "n", 0))
1874 number = int(getattr(opts, "n", 0))
1874 repeat = int(getattr(opts, "r", timeit.default_repeat))
1875 repeat = int(getattr(opts, "r", timeit.default_repeat))
1875 precision = int(getattr(opts, "p", 3))
1876 precision = int(getattr(opts, "p", 3))
1876 if hasattr(opts, "t"):
1877 if hasattr(opts, "t"):
1877 timefunc = time.time
1878 timefunc = time.time
1878 if hasattr(opts, "c"):
1879 if hasattr(opts, "c"):
1879 timefunc = clock
1880 timefunc = clock
1880
1881
1881 timer = timeit.Timer(timer=timefunc)
1882 timer = timeit.Timer(timer=timefunc)
1882 # this code has tight coupling to the inner workings of timeit.Timer,
1883 # this code has tight coupling to the inner workings of timeit.Timer,
1883 # but is there a better way to achieve that the code stmt has access
1884 # but is there a better way to achieve that the code stmt has access
1884 # to the shell namespace?
1885 # to the shell namespace?
1885
1886
1886 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1887 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1887 'setup': "pass"}
1888 'setup': "pass"}
1888 # Track compilation time so it can be reported if too long
1889 # Track compilation time so it can be reported if too long
1889 # Minimum time above which compilation time will be reported
1890 # Minimum time above which compilation time will be reported
1890 tc_min = 0.1
1891 tc_min = 0.1
1891
1892
1892 t0 = clock()
1893 t0 = clock()
1893 code = compile(src, "<magic-timeit>", "exec")
1894 code = compile(src, "<magic-timeit>", "exec")
1894 tc = clock()-t0
1895 tc = clock()-t0
1895
1896
1896 ns = {}
1897 ns = {}
1897 exec code in self.shell.user_ns, ns
1898 exec code in self.shell.user_ns, ns
1898 timer.inner = ns["inner"]
1899 timer.inner = ns["inner"]
1899
1900
1900 if number == 0:
1901 if number == 0:
1901 # determine number so that 0.2 <= total time < 2.0
1902 # determine number so that 0.2 <= total time < 2.0
1902 number = 1
1903 number = 1
1903 for i in range(1, 10):
1904 for i in range(1, 10):
1904 if timer.timeit(number) >= 0.2:
1905 if timer.timeit(number) >= 0.2:
1905 break
1906 break
1906 number *= 10
1907 number *= 10
1907
1908
1908 best = min(timer.repeat(repeat, number)) / number
1909 best = min(timer.repeat(repeat, number)) / number
1909
1910
1910 if best > 0.0 and best < 1000.0:
1911 if best > 0.0 and best < 1000.0:
1911 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1912 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1912 elif best >= 1000.0:
1913 elif best >= 1000.0:
1913 order = 0
1914 order = 0
1914 else:
1915 else:
1915 order = 3
1916 order = 3
1916 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1917 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1917 precision,
1918 precision,
1918 best * scaling[order],
1919 best * scaling[order],
1919 units[order])
1920 units[order])
1920 if tc > tc_min:
1921 if tc > tc_min:
1921 print "Compiler time: %.2f s" % tc
1922 print "Compiler time: %.2f s" % tc
1922
1923
1923 @skip_doctest
1924 @skip_doctest
1924 @needs_local_scope
1925 @needs_local_scope
1925 def magic_time(self,parameter_s = ''):
1926 def magic_time(self,parameter_s = ''):
1926 """Time execution of a Python statement or expression.
1927 """Time execution of a Python statement or expression.
1927
1928
1928 The CPU and wall clock times are printed, and the value of the
1929 The CPU and wall clock times are printed, and the value of the
1929 expression (if any) is returned. Note that under Win32, system time
1930 expression (if any) is returned. Note that under Win32, system time
1930 is always reported as 0, since it can not be measured.
1931 is always reported as 0, since it can not be measured.
1931
1932
1932 This function provides very basic timing functionality. In Python
1933 This function provides very basic timing functionality. In Python
1933 2.3, the timeit module offers more control and sophistication, so this
1934 2.3, the timeit module offers more control and sophistication, so this
1934 could be rewritten to use it (patches welcome).
1935 could be rewritten to use it (patches welcome).
1935
1936
1936 Some examples:
1937 Some examples:
1937
1938
1938 In [1]: time 2**128
1939 In [1]: time 2**128
1939 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1940 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1940 Wall time: 0.00
1941 Wall time: 0.00
1941 Out[1]: 340282366920938463463374607431768211456L
1942 Out[1]: 340282366920938463463374607431768211456L
1942
1943
1943 In [2]: n = 1000000
1944 In [2]: n = 1000000
1944
1945
1945 In [3]: time sum(range(n))
1946 In [3]: time sum(range(n))
1946 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1947 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1947 Wall time: 1.37
1948 Wall time: 1.37
1948 Out[3]: 499999500000L
1949 Out[3]: 499999500000L
1949
1950
1950 In [4]: time print 'hello world'
1951 In [4]: time print 'hello world'
1951 hello world
1952 hello world
1952 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1953 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1953 Wall time: 0.00
1954 Wall time: 0.00
1954
1955
1955 Note that the time needed by Python to compile the given expression
1956 Note that the time needed by Python to compile the given expression
1956 will be reported if it is more than 0.1s. In this example, the
1957 will be reported if it is more than 0.1s. In this example, the
1957 actual exponentiation is done by Python at compilation time, so while
1958 actual exponentiation is done by Python at compilation time, so while
1958 the expression can take a noticeable amount of time to compute, that
1959 the expression can take a noticeable amount of time to compute, that
1959 time is purely due to the compilation:
1960 time is purely due to the compilation:
1960
1961
1961 In [5]: time 3**9999;
1962 In [5]: time 3**9999;
1962 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1963 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1963 Wall time: 0.00 s
1964 Wall time: 0.00 s
1964
1965
1965 In [6]: time 3**999999;
1966 In [6]: time 3**999999;
1966 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1967 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1967 Wall time: 0.00 s
1968 Wall time: 0.00 s
1968 Compiler : 0.78 s
1969 Compiler : 0.78 s
1969 """
1970 """
1970
1971
1971 # fail immediately if the given expression can't be compiled
1972 # fail immediately if the given expression can't be compiled
1972
1973
1973 expr = self.shell.prefilter(parameter_s,False)
1974 expr = self.shell.prefilter(parameter_s,False)
1974
1975
1975 # Minimum time above which compilation time will be reported
1976 # Minimum time above which compilation time will be reported
1976 tc_min = 0.1
1977 tc_min = 0.1
1977
1978
1978 try:
1979 try:
1979 mode = 'eval'
1980 mode = 'eval'
1980 t0 = clock()
1981 t0 = clock()
1981 code = compile(expr,'<timed eval>',mode)
1982 code = compile(expr,'<timed eval>',mode)
1982 tc = clock()-t0
1983 tc = clock()-t0
1983 except SyntaxError:
1984 except SyntaxError:
1984 mode = 'exec'
1985 mode = 'exec'
1985 t0 = clock()
1986 t0 = clock()
1986 code = compile(expr,'<timed exec>',mode)
1987 code = compile(expr,'<timed exec>',mode)
1987 tc = clock()-t0
1988 tc = clock()-t0
1988 # skew measurement as little as possible
1989 # skew measurement as little as possible
1989 glob = self.shell.user_ns
1990 glob = self.shell.user_ns
1990 locs = self._magic_locals
1991 locs = self._magic_locals
1991 clk = clock2
1992 clk = clock2
1992 wtime = time.time
1993 wtime = time.time
1993 # time execution
1994 # time execution
1994 wall_st = wtime()
1995 wall_st = wtime()
1995 if mode=='eval':
1996 if mode=='eval':
1996 st = clk()
1997 st = clk()
1997 out = eval(code, glob, locs)
1998 out = eval(code, glob, locs)
1998 end = clk()
1999 end = clk()
1999 else:
2000 else:
2000 st = clk()
2001 st = clk()
2001 exec code in glob, locs
2002 exec code in glob, locs
2002 end = clk()
2003 end = clk()
2003 out = None
2004 out = None
2004 wall_end = wtime()
2005 wall_end = wtime()
2005 # Compute actual times and report
2006 # Compute actual times and report
2006 wall_time = wall_end-wall_st
2007 wall_time = wall_end-wall_st
2007 cpu_user = end[0]-st[0]
2008 cpu_user = end[0]-st[0]
2008 cpu_sys = end[1]-st[1]
2009 cpu_sys = end[1]-st[1]
2009 cpu_tot = cpu_user+cpu_sys
2010 cpu_tot = cpu_user+cpu_sys
2010 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2011 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2011 (cpu_user,cpu_sys,cpu_tot)
2012 (cpu_user,cpu_sys,cpu_tot)
2012 print "Wall time: %.2f s" % wall_time
2013 print "Wall time: %.2f s" % wall_time
2013 if tc > tc_min:
2014 if tc > tc_min:
2014 print "Compiler : %.2f s" % tc
2015 print "Compiler : %.2f s" % tc
2015 return out
2016 return out
2016
2017
2017 @skip_doctest
2018 @skip_doctest
2018 def magic_macro(self,parameter_s = ''):
2019 def magic_macro(self,parameter_s = ''):
2019 """Define a macro for future re-execution. It accepts ranges of history,
2020 """Define a macro for future re-execution. It accepts ranges of history,
2020 filenames or string objects.
2021 filenames or string objects.
2021
2022
2022 Usage:\\
2023 Usage:\\
2023 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2024 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2024
2025
2025 Options:
2026 Options:
2026
2027
2027 -r: use 'raw' input. By default, the 'processed' history is used,
2028 -r: use 'raw' input. By default, the 'processed' history is used,
2028 so that magics are loaded in their transformed version to valid
2029 so that magics are loaded in their transformed version to valid
2029 Python. If this option is given, the raw input as typed as the
2030 Python. If this option is given, the raw input as typed as the
2030 command line is used instead.
2031 command line is used instead.
2031
2032
2032 This will define a global variable called `name` which is a string
2033 This will define a global variable called `name` which is a string
2033 made of joining the slices and lines you specify (n1,n2,... numbers
2034 made of joining the slices and lines you specify (n1,n2,... numbers
2034 above) from your input history into a single string. This variable
2035 above) from your input history into a single string. This variable
2035 acts like an automatic function which re-executes those lines as if
2036 acts like an automatic function which re-executes those lines as if
2036 you had typed them. You just type 'name' at the prompt and the code
2037 you had typed them. You just type 'name' at the prompt and the code
2037 executes.
2038 executes.
2038
2039
2039 The syntax for indicating input ranges is described in %history.
2040 The syntax for indicating input ranges is described in %history.
2040
2041
2041 Note: as a 'hidden' feature, you can also use traditional python slice
2042 Note: as a 'hidden' feature, you can also use traditional python slice
2042 notation, where N:M means numbers N through M-1.
2043 notation, where N:M means numbers N through M-1.
2043
2044
2044 For example, if your history contains (%hist prints it):
2045 For example, if your history contains (%hist prints it):
2045
2046
2046 44: x=1
2047 44: x=1
2047 45: y=3
2048 45: y=3
2048 46: z=x+y
2049 46: z=x+y
2049 47: print x
2050 47: print x
2050 48: a=5
2051 48: a=5
2051 49: print 'x',x,'y',y
2052 49: print 'x',x,'y',y
2052
2053
2053 you can create a macro with lines 44 through 47 (included) and line 49
2054 you can create a macro with lines 44 through 47 (included) and line 49
2054 called my_macro with:
2055 called my_macro with:
2055
2056
2056 In [55]: %macro my_macro 44-47 49
2057 In [55]: %macro my_macro 44-47 49
2057
2058
2058 Now, typing `my_macro` (without quotes) will re-execute all this code
2059 Now, typing `my_macro` (without quotes) will re-execute all this code
2059 in one pass.
2060 in one pass.
2060
2061
2061 You don't need to give the line-numbers in order, and any given line
2062 You don't need to give the line-numbers in order, and any given line
2062 number can appear multiple times. You can assemble macros with any
2063 number can appear multiple times. You can assemble macros with any
2063 lines from your input history in any order.
2064 lines from your input history in any order.
2064
2065
2065 The macro is a simple object which holds its value in an attribute,
2066 The macro is a simple object which holds its value in an attribute,
2066 but IPython's display system checks for macros and executes them as
2067 but IPython's display system checks for macros and executes them as
2067 code instead of printing them when you type their name.
2068 code instead of printing them when you type their name.
2068
2069
2069 You can view a macro's contents by explicitly printing it with:
2070 You can view a macro's contents by explicitly printing it with:
2070
2071
2071 'print macro_name'.
2072 'print macro_name'.
2072
2073
2073 """
2074 """
2074 opts,args = self.parse_options(parameter_s,'r',mode='list')
2075 opts,args = self.parse_options(parameter_s,'r',mode='list')
2075 if not args: # List existing macros
2076 if not args: # List existing macros
2076 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2077 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2077 isinstance(v, Macro))
2078 isinstance(v, Macro))
2078 if len(args) == 1:
2079 if len(args) == 1:
2079 raise UsageError(
2080 raise UsageError(
2080 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2081 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2081 name, codefrom = args[0], " ".join(args[1:])
2082 name, codefrom = args[0], " ".join(args[1:])
2082
2083
2083 #print 'rng',ranges # dbg
2084 #print 'rng',ranges # dbg
2084 try:
2085 try:
2085 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2086 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2086 except (ValueError, TypeError) as e:
2087 except (ValueError, TypeError) as e:
2087 print e.args[0]
2088 print e.args[0]
2088 return
2089 return
2089 macro = Macro(lines)
2090 macro = Macro(lines)
2090 self.shell.define_macro(name, macro)
2091 self.shell.define_macro(name, macro)
2091 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2092 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2092 print '=== Macro contents: ==='
2093 print '=== Macro contents: ==='
2093 print macro,
2094 print macro,
2094
2095
2095 def magic_save(self,parameter_s = ''):
2096 def magic_save(self,parameter_s = ''):
2096 """Save a set of lines or a macro to a given filename.
2097 """Save a set of lines or a macro to a given filename.
2097
2098
2098 Usage:\\
2099 Usage:\\
2099 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2100 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2100
2101
2101 Options:
2102 Options:
2102
2103
2103 -r: use 'raw' input. By default, the 'processed' history is used,
2104 -r: use 'raw' input. By default, the 'processed' history is used,
2104 so that magics are loaded in their transformed version to valid
2105 so that magics are loaded in their transformed version to valid
2105 Python. If this option is given, the raw input as typed as the
2106 Python. If this option is given, the raw input as typed as the
2106 command line is used instead.
2107 command line is used instead.
2107
2108
2108 This function uses the same syntax as %history for input ranges,
2109 This function uses the same syntax as %history for input ranges,
2109 then saves the lines to the filename you specify.
2110 then saves the lines to the filename you specify.
2110
2111
2111 It adds a '.py' extension to the file if you don't do so yourself, and
2112 It adds a '.py' extension to the file if you don't do so yourself, and
2112 it asks for confirmation before overwriting existing files."""
2113 it asks for confirmation before overwriting existing files."""
2113
2114
2114 opts,args = self.parse_options(parameter_s,'r',mode='list')
2115 opts,args = self.parse_options(parameter_s,'r',mode='list')
2115 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2116 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2116 if not fname.endswith('.py'):
2117 if not fname.endswith('.py'):
2117 fname += '.py'
2118 fname += '.py'
2118 if os.path.isfile(fname):
2119 if os.path.isfile(fname):
2119 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2120 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2120 if ans.lower() not in ['y','yes']:
2121 if ans.lower() not in ['y','yes']:
2121 print 'Operation cancelled.'
2122 print 'Operation cancelled.'
2122 return
2123 return
2123 try:
2124 try:
2124 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2125 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2125 except (TypeError, ValueError) as e:
2126 except (TypeError, ValueError) as e:
2126 print e.args[0]
2127 print e.args[0]
2127 return
2128 return
2128 with py3compat.open(fname,'w', encoding="utf-8") as f:
2129 with py3compat.open(fname,'w', encoding="utf-8") as f:
2129 f.write(u"# coding: utf-8\n")
2130 f.write(u"# coding: utf-8\n")
2130 f.write(py3compat.cast_unicode(cmds))
2131 f.write(py3compat.cast_unicode(cmds))
2131 print 'The following commands were written to file `%s`:' % fname
2132 print 'The following commands were written to file `%s`:' % fname
2132 print cmds
2133 print cmds
2133
2134
2134 def magic_pastebin(self, parameter_s = ''):
2135 def magic_pastebin(self, parameter_s = ''):
2135 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2136 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2136 try:
2137 try:
2137 code = self.shell.find_user_code(parameter_s)
2138 code = self.shell.find_user_code(parameter_s)
2138 except (ValueError, TypeError) as e:
2139 except (ValueError, TypeError) as e:
2139 print e.args[0]
2140 print e.args[0]
2140 return
2141 return
2141 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2142 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2142 id = pbserver.pastes.newPaste("python", code)
2143 id = pbserver.pastes.newPaste("python", code)
2143 return "http://paste.pocoo.org/show/" + id
2144 return "http://paste.pocoo.org/show/" + id
2144
2145
2145 def magic_loadpy(self, arg_s):
2146 def magic_loadpy(self, arg_s):
2146 """Load a .py python script into the GUI console.
2147 """Load a .py python script into the GUI console.
2147
2148
2148 This magic command can either take a local filename or a url::
2149 This magic command can either take a local filename or a url::
2149
2150
2150 %loadpy myscript.py
2151 %loadpy myscript.py
2151 %loadpy http://www.example.com/myscript.py
2152 %loadpy http://www.example.com/myscript.py
2152 """
2153 """
2153 arg_s = unquote_filename(arg_s)
2154 arg_s = unquote_filename(arg_s)
2154 if not arg_s.endswith('.py'):
2155 if not arg_s.endswith('.py'):
2155 raise ValueError('%%load only works with .py files: %s' % arg_s)
2156 raise ValueError('%%load only works with .py files: %s' % arg_s)
2156 if arg_s.startswith('http'):
2157 if arg_s.startswith('http'):
2157 import urllib2
2158 import urllib2
2158 response = urllib2.urlopen(arg_s)
2159 response = urllib2.urlopen(arg_s)
2159 content = response.read()
2160 content = response.read()
2160 else:
2161 else:
2161 with open(arg_s) as f:
2162 with open(arg_s) as f:
2162 content = f.read()
2163 content = f.read()
2163 self.set_next_input(content)
2164 self.set_next_input(content)
2164
2165
2165 def _find_edit_target(self, args, opts, last_call):
2166 def _find_edit_target(self, args, opts, last_call):
2166 """Utility method used by magic_edit to find what to edit."""
2167 """Utility method used by magic_edit to find what to edit."""
2167
2168
2168 def make_filename(arg):
2169 def make_filename(arg):
2169 "Make a filename from the given args"
2170 "Make a filename from the given args"
2170 arg = unquote_filename(arg)
2171 arg = unquote_filename(arg)
2171 try:
2172 try:
2172 filename = get_py_filename(arg)
2173 filename = get_py_filename(arg)
2173 except IOError:
2174 except IOError:
2174 # If it ends with .py but doesn't already exist, assume we want
2175 # If it ends with .py but doesn't already exist, assume we want
2175 # a new file.
2176 # a new file.
2176 if arg.endswith('.py'):
2177 if arg.endswith('.py'):
2177 filename = arg
2178 filename = arg
2178 else:
2179 else:
2179 filename = None
2180 filename = None
2180 return filename
2181 return filename
2181
2182
2182 # Set a few locals from the options for convenience:
2183 # Set a few locals from the options for convenience:
2183 opts_prev = 'p' in opts
2184 opts_prev = 'p' in opts
2184 opts_raw = 'r' in opts
2185 opts_raw = 'r' in opts
2185
2186
2186 # custom exceptions
2187 # custom exceptions
2187 class DataIsObject(Exception): pass
2188 class DataIsObject(Exception): pass
2188
2189
2189 # Default line number value
2190 # Default line number value
2190 lineno = opts.get('n',None)
2191 lineno = opts.get('n',None)
2191
2192
2192 if opts_prev:
2193 if opts_prev:
2193 args = '_%s' % last_call[0]
2194 args = '_%s' % last_call[0]
2194 if not self.shell.user_ns.has_key(args):
2195 if not self.shell.user_ns.has_key(args):
2195 args = last_call[1]
2196 args = last_call[1]
2196
2197
2197 # use last_call to remember the state of the previous call, but don't
2198 # use last_call to remember the state of the previous call, but don't
2198 # let it be clobbered by successive '-p' calls.
2199 # let it be clobbered by successive '-p' calls.
2199 try:
2200 try:
2200 last_call[0] = self.shell.displayhook.prompt_count
2201 last_call[0] = self.shell.displayhook.prompt_count
2201 if not opts_prev:
2202 if not opts_prev:
2202 last_call[1] = parameter_s
2203 last_call[1] = parameter_s
2203 except:
2204 except:
2204 pass
2205 pass
2205
2206
2206 # by default this is done with temp files, except when the given
2207 # by default this is done with temp files, except when the given
2207 # arg is a filename
2208 # arg is a filename
2208 use_temp = True
2209 use_temp = True
2209
2210
2210 data = ''
2211 data = ''
2211
2212
2212 # First, see if the arguments should be a filename.
2213 # First, see if the arguments should be a filename.
2213 filename = make_filename(args)
2214 filename = make_filename(args)
2214 if filename:
2215 if filename:
2215 use_temp = False
2216 use_temp = False
2216 elif args:
2217 elif args:
2217 # Mode where user specifies ranges of lines, like in %macro.
2218 # Mode where user specifies ranges of lines, like in %macro.
2218 data = self.extract_input_lines(args, opts_raw)
2219 data = self.extract_input_lines(args, opts_raw)
2219 if not data:
2220 if not data:
2220 try:
2221 try:
2221 # Load the parameter given as a variable. If not a string,
2222 # Load the parameter given as a variable. If not a string,
2222 # process it as an object instead (below)
2223 # process it as an object instead (below)
2223
2224
2224 #print '*** args',args,'type',type(args) # dbg
2225 #print '*** args',args,'type',type(args) # dbg
2225 data = eval(args, self.shell.user_ns)
2226 data = eval(args, self.shell.user_ns)
2226 if not isinstance(data, basestring):
2227 if not isinstance(data, basestring):
2227 raise DataIsObject
2228 raise DataIsObject
2228
2229
2229 except (NameError,SyntaxError):
2230 except (NameError,SyntaxError):
2230 # given argument is not a variable, try as a filename
2231 # given argument is not a variable, try as a filename
2231 filename = make_filename(args)
2232 filename = make_filename(args)
2232 if filename is None:
2233 if filename is None:
2233 warn("Argument given (%s) can't be found as a variable "
2234 warn("Argument given (%s) can't be found as a variable "
2234 "or as a filename." % args)
2235 "or as a filename." % args)
2235 return
2236 return
2236 use_temp = False
2237 use_temp = False
2237
2238
2238 except DataIsObject:
2239 except DataIsObject:
2239 # macros have a special edit function
2240 # macros have a special edit function
2240 if isinstance(data, Macro):
2241 if isinstance(data, Macro):
2241 raise MacroToEdit(data)
2242 raise MacroToEdit(data)
2242
2243
2243 # For objects, try to edit the file where they are defined
2244 # For objects, try to edit the file where they are defined
2244 try:
2245 try:
2245 filename = inspect.getabsfile(data)
2246 filename = inspect.getabsfile(data)
2246 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2247 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2247 # class created by %edit? Try to find source
2248 # class created by %edit? Try to find source
2248 # by looking for method definitions instead, the
2249 # by looking for method definitions instead, the
2249 # __module__ in those classes is FakeModule.
2250 # __module__ in those classes is FakeModule.
2250 attrs = [getattr(data, aname) for aname in dir(data)]
2251 attrs = [getattr(data, aname) for aname in dir(data)]
2251 for attr in attrs:
2252 for attr in attrs:
2252 if not inspect.ismethod(attr):
2253 if not inspect.ismethod(attr):
2253 continue
2254 continue
2254 filename = inspect.getabsfile(attr)
2255 filename = inspect.getabsfile(attr)
2255 if filename and 'fakemodule' not in filename.lower():
2256 if filename and 'fakemodule' not in filename.lower():
2256 # change the attribute to be the edit target instead
2257 # change the attribute to be the edit target instead
2257 data = attr
2258 data = attr
2258 break
2259 break
2259
2260
2260 datafile = 1
2261 datafile = 1
2261 except TypeError:
2262 except TypeError:
2262 filename = make_filename(args)
2263 filename = make_filename(args)
2263 datafile = 1
2264 datafile = 1
2264 warn('Could not find file where `%s` is defined.\n'
2265 warn('Could not find file where `%s` is defined.\n'
2265 'Opening a file named `%s`' % (args,filename))
2266 'Opening a file named `%s`' % (args,filename))
2266 # Now, make sure we can actually read the source (if it was in
2267 # Now, make sure we can actually read the source (if it was in
2267 # a temp file it's gone by now).
2268 # a temp file it's gone by now).
2268 if datafile:
2269 if datafile:
2269 try:
2270 try:
2270 if lineno is None:
2271 if lineno is None:
2271 lineno = inspect.getsourcelines(data)[1]
2272 lineno = inspect.getsourcelines(data)[1]
2272 except IOError:
2273 except IOError:
2273 filename = make_filename(args)
2274 filename = make_filename(args)
2274 if filename is None:
2275 if filename is None:
2275 warn('The file `%s` where `%s` was defined cannot '
2276 warn('The file `%s` where `%s` was defined cannot '
2276 'be read.' % (filename,data))
2277 'be read.' % (filename,data))
2277 return
2278 return
2278 use_temp = False
2279 use_temp = False
2279
2280
2280 if use_temp:
2281 if use_temp:
2281 filename = self.shell.mktempfile(data)
2282 filename = self.shell.mktempfile(data)
2282 print 'IPython will make a temporary file named:',filename
2283 print 'IPython will make a temporary file named:',filename
2283
2284
2284 return filename, lineno, use_temp
2285 return filename, lineno, use_temp
2285
2286
2286 def _edit_macro(self,mname,macro):
2287 def _edit_macro(self,mname,macro):
2287 """open an editor with the macro data in a file"""
2288 """open an editor with the macro data in a file"""
2288 filename = self.shell.mktempfile(macro.value)
2289 filename = self.shell.mktempfile(macro.value)
2289 self.shell.hooks.editor(filename)
2290 self.shell.hooks.editor(filename)
2290
2291
2291 # and make a new macro object, to replace the old one
2292 # and make a new macro object, to replace the old one
2292 mfile = open(filename)
2293 mfile = open(filename)
2293 mvalue = mfile.read()
2294 mvalue = mfile.read()
2294 mfile.close()
2295 mfile.close()
2295 self.shell.user_ns[mname] = Macro(mvalue)
2296 self.shell.user_ns[mname] = Macro(mvalue)
2296
2297
2297 def magic_ed(self,parameter_s=''):
2298 def magic_ed(self,parameter_s=''):
2298 """Alias to %edit."""
2299 """Alias to %edit."""
2299 return self.magic_edit(parameter_s)
2300 return self.magic_edit(parameter_s)
2300
2301
2301 @skip_doctest
2302 @skip_doctest
2302 def magic_edit(self,parameter_s='',last_call=['','']):
2303 def magic_edit(self,parameter_s='',last_call=['','']):
2303 """Bring up an editor and execute the resulting code.
2304 """Bring up an editor and execute the resulting code.
2304
2305
2305 Usage:
2306 Usage:
2306 %edit [options] [args]
2307 %edit [options] [args]
2307
2308
2308 %edit runs IPython's editor hook. The default version of this hook is
2309 %edit runs IPython's editor hook. The default version of this hook is
2309 set to call the editor specified by your $EDITOR environment variable.
2310 set to call the editor specified by your $EDITOR environment variable.
2310 If this isn't found, it will default to vi under Linux/Unix and to
2311 If this isn't found, it will default to vi under Linux/Unix and to
2311 notepad under Windows. See the end of this docstring for how to change
2312 notepad under Windows. See the end of this docstring for how to change
2312 the editor hook.
2313 the editor hook.
2313
2314
2314 You can also set the value of this editor via the
2315 You can also set the value of this editor via the
2315 ``TerminalInteractiveShell.editor`` option in your configuration file.
2316 ``TerminalInteractiveShell.editor`` option in your configuration file.
2316 This is useful if you wish to use a different editor from your typical
2317 This is useful if you wish to use a different editor from your typical
2317 default with IPython (and for Windows users who typically don't set
2318 default with IPython (and for Windows users who typically don't set
2318 environment variables).
2319 environment variables).
2319
2320
2320 This command allows you to conveniently edit multi-line code right in
2321 This command allows you to conveniently edit multi-line code right in
2321 your IPython session.
2322 your IPython session.
2322
2323
2323 If called without arguments, %edit opens up an empty editor with a
2324 If called without arguments, %edit opens up an empty editor with a
2324 temporary file and will execute the contents of this file when you
2325 temporary file and will execute the contents of this file when you
2325 close it (don't forget to save it!).
2326 close it (don't forget to save it!).
2326
2327
2327
2328
2328 Options:
2329 Options:
2329
2330
2330 -n <number>: open the editor at a specified line number. By default,
2331 -n <number>: open the editor at a specified line number. By default,
2331 the IPython editor hook uses the unix syntax 'editor +N filename', but
2332 the IPython editor hook uses the unix syntax 'editor +N filename', but
2332 you can configure this by providing your own modified hook if your
2333 you can configure this by providing your own modified hook if your
2333 favorite editor supports line-number specifications with a different
2334 favorite editor supports line-number specifications with a different
2334 syntax.
2335 syntax.
2335
2336
2336 -p: this will call the editor with the same data as the previous time
2337 -p: this will call the editor with the same data as the previous time
2337 it was used, regardless of how long ago (in your current session) it
2338 it was used, regardless of how long ago (in your current session) it
2338 was.
2339 was.
2339
2340
2340 -r: use 'raw' input. This option only applies to input taken from the
2341 -r: use 'raw' input. This option only applies to input taken from the
2341 user's history. By default, the 'processed' history is used, so that
2342 user's history. By default, the 'processed' history is used, so that
2342 magics are loaded in their transformed version to valid Python. If
2343 magics are loaded in their transformed version to valid Python. If
2343 this option is given, the raw input as typed as the command line is
2344 this option is given, the raw input as typed as the command line is
2344 used instead. When you exit the editor, it will be executed by
2345 used instead. When you exit the editor, it will be executed by
2345 IPython's own processor.
2346 IPython's own processor.
2346
2347
2347 -x: do not execute the edited code immediately upon exit. This is
2348 -x: do not execute the edited code immediately upon exit. This is
2348 mainly useful if you are editing programs which need to be called with
2349 mainly useful if you are editing programs which need to be called with
2349 command line arguments, which you can then do using %run.
2350 command line arguments, which you can then do using %run.
2350
2351
2351
2352
2352 Arguments:
2353 Arguments:
2353
2354
2354 If arguments are given, the following possibilites exist:
2355 If arguments are given, the following possibilites exist:
2355
2356
2356 - If the argument is a filename, IPython will load that into the
2357 - If the argument is a filename, IPython will load that into the
2357 editor. It will execute its contents with execfile() when you exit,
2358 editor. It will execute its contents with execfile() when you exit,
2358 loading any code in the file into your interactive namespace.
2359 loading any code in the file into your interactive namespace.
2359
2360
2360 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2361 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2361 The syntax is the same as in the %history magic.
2362 The syntax is the same as in the %history magic.
2362
2363
2363 - If the argument is a string variable, its contents are loaded
2364 - If the argument is a string variable, its contents are loaded
2364 into the editor. You can thus edit any string which contains
2365 into the editor. You can thus edit any string which contains
2365 python code (including the result of previous edits).
2366 python code (including the result of previous edits).
2366
2367
2367 - If the argument is the name of an object (other than a string),
2368 - If the argument is the name of an object (other than a string),
2368 IPython will try to locate the file where it was defined and open the
2369 IPython will try to locate the file where it was defined and open the
2369 editor at the point where it is defined. You can use `%edit function`
2370 editor at the point where it is defined. You can use `%edit function`
2370 to load an editor exactly at the point where 'function' is defined,
2371 to load an editor exactly at the point where 'function' is defined,
2371 edit it and have the file be executed automatically.
2372 edit it and have the file be executed automatically.
2372
2373
2373 - If the object is a macro (see %macro for details), this opens up your
2374 - If the object is a macro (see %macro for details), this opens up your
2374 specified editor with a temporary file containing the macro's data.
2375 specified editor with a temporary file containing the macro's data.
2375 Upon exit, the macro is reloaded with the contents of the file.
2376 Upon exit, the macro is reloaded with the contents of the file.
2376
2377
2377 Note: opening at an exact line is only supported under Unix, and some
2378 Note: opening at an exact line is only supported under Unix, and some
2378 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2379 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2379 '+NUMBER' parameter necessary for this feature. Good editors like
2380 '+NUMBER' parameter necessary for this feature. Good editors like
2380 (X)Emacs, vi, jed, pico and joe all do.
2381 (X)Emacs, vi, jed, pico and joe all do.
2381
2382
2382 After executing your code, %edit will return as output the code you
2383 After executing your code, %edit will return as output the code you
2383 typed in the editor (except when it was an existing file). This way
2384 typed in the editor (except when it was an existing file). This way
2384 you can reload the code in further invocations of %edit as a variable,
2385 you can reload the code in further invocations of %edit as a variable,
2385 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2386 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2386 the output.
2387 the output.
2387
2388
2388 Note that %edit is also available through the alias %ed.
2389 Note that %edit is also available through the alias %ed.
2389
2390
2390 This is an example of creating a simple function inside the editor and
2391 This is an example of creating a simple function inside the editor and
2391 then modifying it. First, start up the editor:
2392 then modifying it. First, start up the editor:
2392
2393
2393 In [1]: ed
2394 In [1]: ed
2394 Editing... done. Executing edited code...
2395 Editing... done. Executing edited code...
2395 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2396 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2396
2397
2397 We can then call the function foo():
2398 We can then call the function foo():
2398
2399
2399 In [2]: foo()
2400 In [2]: foo()
2400 foo() was defined in an editing session
2401 foo() was defined in an editing session
2401
2402
2402 Now we edit foo. IPython automatically loads the editor with the
2403 Now we edit foo. IPython automatically loads the editor with the
2403 (temporary) file where foo() was previously defined:
2404 (temporary) file where foo() was previously defined:
2404
2405
2405 In [3]: ed foo
2406 In [3]: ed foo
2406 Editing... done. Executing edited code...
2407 Editing... done. Executing edited code...
2407
2408
2408 And if we call foo() again we get the modified version:
2409 And if we call foo() again we get the modified version:
2409
2410
2410 In [4]: foo()
2411 In [4]: foo()
2411 foo() has now been changed!
2412 foo() has now been changed!
2412
2413
2413 Here is an example of how to edit a code snippet successive
2414 Here is an example of how to edit a code snippet successive
2414 times. First we call the editor:
2415 times. First we call the editor:
2415
2416
2416 In [5]: ed
2417 In [5]: ed
2417 Editing... done. Executing edited code...
2418 Editing... done. Executing edited code...
2418 hello
2419 hello
2419 Out[5]: "print 'hello'n"
2420 Out[5]: "print 'hello'n"
2420
2421
2421 Now we call it again with the previous output (stored in _):
2422 Now we call it again with the previous output (stored in _):
2422
2423
2423 In [6]: ed _
2424 In [6]: ed _
2424 Editing... done. Executing edited code...
2425 Editing... done. Executing edited code...
2425 hello world
2426 hello world
2426 Out[6]: "print 'hello world'n"
2427 Out[6]: "print 'hello world'n"
2427
2428
2428 Now we call it with the output #8 (stored in _8, also as Out[8]):
2429 Now we call it with the output #8 (stored in _8, also as Out[8]):
2429
2430
2430 In [7]: ed _8
2431 In [7]: ed _8
2431 Editing... done. Executing edited code...
2432 Editing... done. Executing edited code...
2432 hello again
2433 hello again
2433 Out[7]: "print 'hello again'n"
2434 Out[7]: "print 'hello again'n"
2434
2435
2435
2436
2436 Changing the default editor hook:
2437 Changing the default editor hook:
2437
2438
2438 If you wish to write your own editor hook, you can put it in a
2439 If you wish to write your own editor hook, you can put it in a
2439 configuration file which you load at startup time. The default hook
2440 configuration file which you load at startup time. The default hook
2440 is defined in the IPython.core.hooks module, and you can use that as a
2441 is defined in the IPython.core.hooks module, and you can use that as a
2441 starting example for further modifications. That file also has
2442 starting example for further modifications. That file also has
2442 general instructions on how to set a new hook for use once you've
2443 general instructions on how to set a new hook for use once you've
2443 defined it."""
2444 defined it."""
2444 opts,args = self.parse_options(parameter_s,'prxn:')
2445 opts,args = self.parse_options(parameter_s,'prxn:')
2445
2446
2446 try:
2447 try:
2447 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2448 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2448 except MacroToEdit as e:
2449 except MacroToEdit as e:
2449 self._edit_macro(args, e.args[0])
2450 self._edit_macro(args, e.args[0])
2450 return
2451 return
2451
2452
2452 # do actual editing here
2453 # do actual editing here
2453 print 'Editing...',
2454 print 'Editing...',
2454 sys.stdout.flush()
2455 sys.stdout.flush()
2455 try:
2456 try:
2456 # Quote filenames that may have spaces in them
2457 # Quote filenames that may have spaces in them
2457 if ' ' in filename:
2458 if ' ' in filename:
2458 filename = "'%s'" % filename
2459 filename = "'%s'" % filename
2459 self.shell.hooks.editor(filename,lineno)
2460 self.shell.hooks.editor(filename,lineno)
2460 except TryNext:
2461 except TryNext:
2461 warn('Could not open editor')
2462 warn('Could not open editor')
2462 return
2463 return
2463
2464
2464 # XXX TODO: should this be generalized for all string vars?
2465 # XXX TODO: should this be generalized for all string vars?
2465 # For now, this is special-cased to blocks created by cpaste
2466 # For now, this is special-cased to blocks created by cpaste
2466 if args.strip() == 'pasted_block':
2467 if args.strip() == 'pasted_block':
2467 self.shell.user_ns['pasted_block'] = file_read(filename)
2468 self.shell.user_ns['pasted_block'] = file_read(filename)
2468
2469
2469 if 'x' in opts: # -x prevents actual execution
2470 if 'x' in opts: # -x prevents actual execution
2470 print
2471 print
2471 else:
2472 else:
2472 print 'done. Executing edited code...'
2473 print 'done. Executing edited code...'
2473 if 'r' in opts: # Untranslated IPython code
2474 if 'r' in opts: # Untranslated IPython code
2474 self.shell.run_cell(file_read(filename),
2475 self.shell.run_cell(file_read(filename),
2475 store_history=False)
2476 store_history=False)
2476 else:
2477 else:
2477 self.shell.safe_execfile(filename,self.shell.user_ns,
2478 self.shell.safe_execfile(filename,self.shell.user_ns,
2478 self.shell.user_ns)
2479 self.shell.user_ns)
2479
2480
2480 if is_temp:
2481 if is_temp:
2481 try:
2482 try:
2482 return open(filename).read()
2483 return open(filename).read()
2483 except IOError,msg:
2484 except IOError,msg:
2484 if msg.filename == filename:
2485 if msg.filename == filename:
2485 warn('File not found. Did you forget to save?')
2486 warn('File not found. Did you forget to save?')
2486 return
2487 return
2487 else:
2488 else:
2488 self.shell.showtraceback()
2489 self.shell.showtraceback()
2489
2490
2490 def magic_xmode(self,parameter_s = ''):
2491 def magic_xmode(self,parameter_s = ''):
2491 """Switch modes for the exception handlers.
2492 """Switch modes for the exception handlers.
2492
2493
2493 Valid modes: Plain, Context and Verbose.
2494 Valid modes: Plain, Context and Verbose.
2494
2495
2495 If called without arguments, acts as a toggle."""
2496 If called without arguments, acts as a toggle."""
2496
2497
2497 def xmode_switch_err(name):
2498 def xmode_switch_err(name):
2498 warn('Error changing %s exception modes.\n%s' %
2499 warn('Error changing %s exception modes.\n%s' %
2499 (name,sys.exc_info()[1]))
2500 (name,sys.exc_info()[1]))
2500
2501
2501 shell = self.shell
2502 shell = self.shell
2502 new_mode = parameter_s.strip().capitalize()
2503 new_mode = parameter_s.strip().capitalize()
2503 try:
2504 try:
2504 shell.InteractiveTB.set_mode(mode=new_mode)
2505 shell.InteractiveTB.set_mode(mode=new_mode)
2505 print 'Exception reporting mode:',shell.InteractiveTB.mode
2506 print 'Exception reporting mode:',shell.InteractiveTB.mode
2506 except:
2507 except:
2507 xmode_switch_err('user')
2508 xmode_switch_err('user')
2508
2509
2509 def magic_colors(self,parameter_s = ''):
2510 def magic_colors(self,parameter_s = ''):
2510 """Switch color scheme for prompts, info system and exception handlers.
2511 """Switch color scheme for prompts, info system and exception handlers.
2511
2512
2512 Currently implemented schemes: NoColor, Linux, LightBG.
2513 Currently implemented schemes: NoColor, Linux, LightBG.
2513
2514
2514 Color scheme names are not case-sensitive.
2515 Color scheme names are not case-sensitive.
2515
2516
2516 Examples
2517 Examples
2517 --------
2518 --------
2518 To get a plain black and white terminal::
2519 To get a plain black and white terminal::
2519
2520
2520 %colors nocolor
2521 %colors nocolor
2521 """
2522 """
2522
2523
2523 def color_switch_err(name):
2524 def color_switch_err(name):
2524 warn('Error changing %s color schemes.\n%s' %
2525 warn('Error changing %s color schemes.\n%s' %
2525 (name,sys.exc_info()[1]))
2526 (name,sys.exc_info()[1]))
2526
2527
2527
2528
2528 new_scheme = parameter_s.strip()
2529 new_scheme = parameter_s.strip()
2529 if not new_scheme:
2530 if not new_scheme:
2530 raise UsageError(
2531 raise UsageError(
2531 "%colors: you must specify a color scheme. See '%colors?'")
2532 "%colors: you must specify a color scheme. See '%colors?'")
2532 return
2533 return
2533 # local shortcut
2534 # local shortcut
2534 shell = self.shell
2535 shell = self.shell
2535
2536
2536 import IPython.utils.rlineimpl as readline
2537 import IPython.utils.rlineimpl as readline
2537
2538
2538 if not shell.colors_force and \
2539 if not shell.colors_force and \
2539 not readline.have_readline and sys.platform == "win32":
2540 not readline.have_readline and sys.platform == "win32":
2540 msg = """\
2541 msg = """\
2541 Proper color support under MS Windows requires the pyreadline library.
2542 Proper color support under MS Windows requires the pyreadline library.
2542 You can find it at:
2543 You can find it at:
2543 http://ipython.org/pyreadline.html
2544 http://ipython.org/pyreadline.html
2544 Gary's readline needs the ctypes module, from:
2545 Gary's readline needs the ctypes module, from:
2545 http://starship.python.net/crew/theller/ctypes
2546 http://starship.python.net/crew/theller/ctypes
2546 (Note that ctypes is already part of Python versions 2.5 and newer).
2547 (Note that ctypes is already part of Python versions 2.5 and newer).
2547
2548
2548 Defaulting color scheme to 'NoColor'"""
2549 Defaulting color scheme to 'NoColor'"""
2549 new_scheme = 'NoColor'
2550 new_scheme = 'NoColor'
2550 warn(msg)
2551 warn(msg)
2551
2552
2552 # readline option is 0
2553 # readline option is 0
2553 if not shell.colors_force and not shell.has_readline:
2554 if not shell.colors_force and not shell.has_readline:
2554 new_scheme = 'NoColor'
2555 new_scheme = 'NoColor'
2555
2556
2556 # Set prompt colors
2557 # Set prompt colors
2557 try:
2558 try:
2558 shell.displayhook.set_colors(new_scheme)
2559 shell.displayhook.set_colors(new_scheme)
2559 except:
2560 except:
2560 color_switch_err('prompt')
2561 color_switch_err('prompt')
2561 else:
2562 else:
2562 shell.colors = \
2563 shell.colors = \
2563 shell.displayhook.color_table.active_scheme_name
2564 shell.displayhook.color_table.active_scheme_name
2564 # Set exception colors
2565 # Set exception colors
2565 try:
2566 try:
2566 shell.InteractiveTB.set_colors(scheme = new_scheme)
2567 shell.InteractiveTB.set_colors(scheme = new_scheme)
2567 shell.SyntaxTB.set_colors(scheme = new_scheme)
2568 shell.SyntaxTB.set_colors(scheme = new_scheme)
2568 except:
2569 except:
2569 color_switch_err('exception')
2570 color_switch_err('exception')
2570
2571
2571 # Set info (for 'object?') colors
2572 # Set info (for 'object?') colors
2572 if shell.color_info:
2573 if shell.color_info:
2573 try:
2574 try:
2574 shell.inspector.set_active_scheme(new_scheme)
2575 shell.inspector.set_active_scheme(new_scheme)
2575 except:
2576 except:
2576 color_switch_err('object inspector')
2577 color_switch_err('object inspector')
2577 else:
2578 else:
2578 shell.inspector.set_active_scheme('NoColor')
2579 shell.inspector.set_active_scheme('NoColor')
2579
2580
2580 def magic_pprint(self, parameter_s=''):
2581 def magic_pprint(self, parameter_s=''):
2581 """Toggle pretty printing on/off."""
2582 """Toggle pretty printing on/off."""
2582 ptformatter = self.shell.display_formatter.formatters['text/plain']
2583 ptformatter = self.shell.display_formatter.formatters['text/plain']
2583 ptformatter.pprint = bool(1 - ptformatter.pprint)
2584 ptformatter.pprint = bool(1 - ptformatter.pprint)
2584 print 'Pretty printing has been turned', \
2585 print 'Pretty printing has been turned', \
2585 ['OFF','ON'][ptformatter.pprint]
2586 ['OFF','ON'][ptformatter.pprint]
2586
2587
2587 #......................................................................
2588 #......................................................................
2588 # Functions to implement unix shell-type things
2589 # Functions to implement unix shell-type things
2589
2590
2590 @skip_doctest
2591 @skip_doctest
2591 def magic_alias(self, parameter_s = ''):
2592 def magic_alias(self, parameter_s = ''):
2592 """Define an alias for a system command.
2593 """Define an alias for a system command.
2593
2594
2594 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2595 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2595
2596
2596 Then, typing 'alias_name params' will execute the system command 'cmd
2597 Then, typing 'alias_name params' will execute the system command 'cmd
2597 params' (from your underlying operating system).
2598 params' (from your underlying operating system).
2598
2599
2599 Aliases have lower precedence than magic functions and Python normal
2600 Aliases have lower precedence than magic functions and Python normal
2600 variables, so if 'foo' is both a Python variable and an alias, the
2601 variables, so if 'foo' is both a Python variable and an alias, the
2601 alias can not be executed until 'del foo' removes the Python variable.
2602 alias can not be executed until 'del foo' removes the Python variable.
2602
2603
2603 You can use the %l specifier in an alias definition to represent the
2604 You can use the %l specifier in an alias definition to represent the
2604 whole line when the alias is called. For example:
2605 whole line when the alias is called. For example:
2605
2606
2606 In [2]: alias bracket echo "Input in brackets: <%l>"
2607 In [2]: alias bracket echo "Input in brackets: <%l>"
2607 In [3]: bracket hello world
2608 In [3]: bracket hello world
2608 Input in brackets: <hello world>
2609 Input in brackets: <hello world>
2609
2610
2610 You can also define aliases with parameters using %s specifiers (one
2611 You can also define aliases with parameters using %s specifiers (one
2611 per parameter):
2612 per parameter):
2612
2613
2613 In [1]: alias parts echo first %s second %s
2614 In [1]: alias parts echo first %s second %s
2614 In [2]: %parts A B
2615 In [2]: %parts A B
2615 first A second B
2616 first A second B
2616 In [3]: %parts A
2617 In [3]: %parts A
2617 Incorrect number of arguments: 2 expected.
2618 Incorrect number of arguments: 2 expected.
2618 parts is an alias to: 'echo first %s second %s'
2619 parts is an alias to: 'echo first %s second %s'
2619
2620
2620 Note that %l and %s are mutually exclusive. You can only use one or
2621 Note that %l and %s are mutually exclusive. You can only use one or
2621 the other in your aliases.
2622 the other in your aliases.
2622
2623
2623 Aliases expand Python variables just like system calls using ! or !!
2624 Aliases expand Python variables just like system calls using ! or !!
2624 do: all expressions prefixed with '$' get expanded. For details of
2625 do: all expressions prefixed with '$' get expanded. For details of
2625 the semantic rules, see PEP-215:
2626 the semantic rules, see PEP-215:
2626 http://www.python.org/peps/pep-0215.html. This is the library used by
2627 http://www.python.org/peps/pep-0215.html. This is the library used by
2627 IPython for variable expansion. If you want to access a true shell
2628 IPython for variable expansion. If you want to access a true shell
2628 variable, an extra $ is necessary to prevent its expansion by IPython:
2629 variable, an extra $ is necessary to prevent its expansion by IPython:
2629
2630
2630 In [6]: alias show echo
2631 In [6]: alias show echo
2631 In [7]: PATH='A Python string'
2632 In [7]: PATH='A Python string'
2632 In [8]: show $PATH
2633 In [8]: show $PATH
2633 A Python string
2634 A Python string
2634 In [9]: show $$PATH
2635 In [9]: show $$PATH
2635 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2636 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2636
2637
2637 You can use the alias facility to acess all of $PATH. See the %rehash
2638 You can use the alias facility to acess all of $PATH. See the %rehash
2638 and %rehashx functions, which automatically create aliases for the
2639 and %rehashx functions, which automatically create aliases for the
2639 contents of your $PATH.
2640 contents of your $PATH.
2640
2641
2641 If called with no parameters, %alias prints the current alias table."""
2642 If called with no parameters, %alias prints the current alias table."""
2642
2643
2643 par = parameter_s.strip()
2644 par = parameter_s.strip()
2644 if not par:
2645 if not par:
2645 stored = self.db.get('stored_aliases', {} )
2646 stored = self.db.get('stored_aliases', {} )
2646 aliases = sorted(self.shell.alias_manager.aliases)
2647 aliases = sorted(self.shell.alias_manager.aliases)
2647 # for k, v in stored:
2648 # for k, v in stored:
2648 # atab.append(k, v[0])
2649 # atab.append(k, v[0])
2649
2650
2650 print "Total number of aliases:", len(aliases)
2651 print "Total number of aliases:", len(aliases)
2651 sys.stdout.flush()
2652 sys.stdout.flush()
2652 return aliases
2653 return aliases
2653
2654
2654 # Now try to define a new one
2655 # Now try to define a new one
2655 try:
2656 try:
2656 alias,cmd = par.split(None, 1)
2657 alias,cmd = par.split(None, 1)
2657 except:
2658 except:
2658 print oinspect.getdoc(self.magic_alias)
2659 print oinspect.getdoc(self.magic_alias)
2659 else:
2660 else:
2660 self.shell.alias_manager.soft_define_alias(alias, cmd)
2661 self.shell.alias_manager.soft_define_alias(alias, cmd)
2661 # end magic_alias
2662 # end magic_alias
2662
2663
2663 def magic_unalias(self, parameter_s = ''):
2664 def magic_unalias(self, parameter_s = ''):
2664 """Remove an alias"""
2665 """Remove an alias"""
2665
2666
2666 aname = parameter_s.strip()
2667 aname = parameter_s.strip()
2667 self.shell.alias_manager.undefine_alias(aname)
2668 self.shell.alias_manager.undefine_alias(aname)
2668 stored = self.db.get('stored_aliases', {} )
2669 stored = self.db.get('stored_aliases', {} )
2669 if aname in stored:
2670 if aname in stored:
2670 print "Removing %stored alias",aname
2671 print "Removing %stored alias",aname
2671 del stored[aname]
2672 del stored[aname]
2672 self.db['stored_aliases'] = stored
2673 self.db['stored_aliases'] = stored
2673
2674
2674 def magic_rehashx(self, parameter_s = ''):
2675 def magic_rehashx(self, parameter_s = ''):
2675 """Update the alias table with all executable files in $PATH.
2676 """Update the alias table with all executable files in $PATH.
2676
2677
2677 This version explicitly checks that every entry in $PATH is a file
2678 This version explicitly checks that every entry in $PATH is a file
2678 with execute access (os.X_OK), so it is much slower than %rehash.
2679 with execute access (os.X_OK), so it is much slower than %rehash.
2679
2680
2680 Under Windows, it checks executability as a match agains a
2681 Under Windows, it checks executability as a match agains a
2681 '|'-separated string of extensions, stored in the IPython config
2682 '|'-separated string of extensions, stored in the IPython config
2682 variable win_exec_ext. This defaults to 'exe|com|bat'.
2683 variable win_exec_ext. This defaults to 'exe|com|bat'.
2683
2684
2684 This function also resets the root module cache of module completer,
2685 This function also resets the root module cache of module completer,
2685 used on slow filesystems.
2686 used on slow filesystems.
2686 """
2687 """
2687 from IPython.core.alias import InvalidAliasError
2688 from IPython.core.alias import InvalidAliasError
2688
2689
2689 # for the benefit of module completer in ipy_completers.py
2690 # for the benefit of module completer in ipy_completers.py
2690 del self.db['rootmodules']
2691 del self.db['rootmodules']
2691
2692
2692 path = [os.path.abspath(os.path.expanduser(p)) for p in
2693 path = [os.path.abspath(os.path.expanduser(p)) for p in
2693 os.environ.get('PATH','').split(os.pathsep)]
2694 os.environ.get('PATH','').split(os.pathsep)]
2694 path = filter(os.path.isdir,path)
2695 path = filter(os.path.isdir,path)
2695
2696
2696 syscmdlist = []
2697 syscmdlist = []
2697 # Now define isexec in a cross platform manner.
2698 # Now define isexec in a cross platform manner.
2698 if os.name == 'posix':
2699 if os.name == 'posix':
2699 isexec = lambda fname:os.path.isfile(fname) and \
2700 isexec = lambda fname:os.path.isfile(fname) and \
2700 os.access(fname,os.X_OK)
2701 os.access(fname,os.X_OK)
2701 else:
2702 else:
2702 try:
2703 try:
2703 winext = os.environ['pathext'].replace(';','|').replace('.','')
2704 winext = os.environ['pathext'].replace(';','|').replace('.','')
2704 except KeyError:
2705 except KeyError:
2705 winext = 'exe|com|bat|py'
2706 winext = 'exe|com|bat|py'
2706 if 'py' not in winext:
2707 if 'py' not in winext:
2707 winext += '|py'
2708 winext += '|py'
2708 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2709 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2709 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2710 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2710 savedir = os.getcwdu()
2711 savedir = os.getcwdu()
2711
2712
2712 # Now walk the paths looking for executables to alias.
2713 # Now walk the paths looking for executables to alias.
2713 try:
2714 try:
2714 # write the whole loop for posix/Windows so we don't have an if in
2715 # write the whole loop for posix/Windows so we don't have an if in
2715 # the innermost part
2716 # the innermost part
2716 if os.name == 'posix':
2717 if os.name == 'posix':
2717 for pdir in path:
2718 for pdir in path:
2718 os.chdir(pdir)
2719 os.chdir(pdir)
2719 for ff in os.listdir(pdir):
2720 for ff in os.listdir(pdir):
2720 if isexec(ff):
2721 if isexec(ff):
2721 try:
2722 try:
2722 # Removes dots from the name since ipython
2723 # Removes dots from the name since ipython
2723 # will assume names with dots to be python.
2724 # will assume names with dots to be python.
2724 self.shell.alias_manager.define_alias(
2725 self.shell.alias_manager.define_alias(
2725 ff.replace('.',''), ff)
2726 ff.replace('.',''), ff)
2726 except InvalidAliasError:
2727 except InvalidAliasError:
2727 pass
2728 pass
2728 else:
2729 else:
2729 syscmdlist.append(ff)
2730 syscmdlist.append(ff)
2730 else:
2731 else:
2731 no_alias = self.shell.alias_manager.no_alias
2732 no_alias = self.shell.alias_manager.no_alias
2732 for pdir in path:
2733 for pdir in path:
2733 os.chdir(pdir)
2734 os.chdir(pdir)
2734 for ff in os.listdir(pdir):
2735 for ff in os.listdir(pdir):
2735 base, ext = os.path.splitext(ff)
2736 base, ext = os.path.splitext(ff)
2736 if isexec(ff) and base.lower() not in no_alias:
2737 if isexec(ff) and base.lower() not in no_alias:
2737 if ext.lower() == '.exe':
2738 if ext.lower() == '.exe':
2738 ff = base
2739 ff = base
2739 try:
2740 try:
2740 # Removes dots from the name since ipython
2741 # Removes dots from the name since ipython
2741 # will assume names with dots to be python.
2742 # will assume names with dots to be python.
2742 self.shell.alias_manager.define_alias(
2743 self.shell.alias_manager.define_alias(
2743 base.lower().replace('.',''), ff)
2744 base.lower().replace('.',''), ff)
2744 except InvalidAliasError:
2745 except InvalidAliasError:
2745 pass
2746 pass
2746 syscmdlist.append(ff)
2747 syscmdlist.append(ff)
2747 db = self.db
2748 db = self.db
2748 db['syscmdlist'] = syscmdlist
2749 db['syscmdlist'] = syscmdlist
2749 finally:
2750 finally:
2750 os.chdir(savedir)
2751 os.chdir(savedir)
2751
2752
2752 @skip_doctest
2753 @skip_doctest
2753 def magic_pwd(self, parameter_s = ''):
2754 def magic_pwd(self, parameter_s = ''):
2754 """Return the current working directory path.
2755 """Return the current working directory path.
2755
2756
2756 Examples
2757 Examples
2757 --------
2758 --------
2758 ::
2759 ::
2759
2760
2760 In [9]: pwd
2761 In [9]: pwd
2761 Out[9]: '/home/tsuser/sprint/ipython'
2762 Out[9]: '/home/tsuser/sprint/ipython'
2762 """
2763 """
2763 return os.getcwdu()
2764 return os.getcwdu()
2764
2765
2765 @skip_doctest
2766 @skip_doctest
2766 def magic_cd(self, parameter_s=''):
2767 def magic_cd(self, parameter_s=''):
2767 """Change the current working directory.
2768 """Change the current working directory.
2768
2769
2769 This command automatically maintains an internal list of directories
2770 This command automatically maintains an internal list of directories
2770 you visit during your IPython session, in the variable _dh. The
2771 you visit during your IPython session, in the variable _dh. The
2771 command %dhist shows this history nicely formatted. You can also
2772 command %dhist shows this history nicely formatted. You can also
2772 do 'cd -<tab>' to see directory history conveniently.
2773 do 'cd -<tab>' to see directory history conveniently.
2773
2774
2774 Usage:
2775 Usage:
2775
2776
2776 cd 'dir': changes to directory 'dir'.
2777 cd 'dir': changes to directory 'dir'.
2777
2778
2778 cd -: changes to the last visited directory.
2779 cd -: changes to the last visited directory.
2779
2780
2780 cd -<n>: changes to the n-th directory in the directory history.
2781 cd -<n>: changes to the n-th directory in the directory history.
2781
2782
2782 cd --foo: change to directory that matches 'foo' in history
2783 cd --foo: change to directory that matches 'foo' in history
2783
2784
2784 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2785 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2785 (note: cd <bookmark_name> is enough if there is no
2786 (note: cd <bookmark_name> is enough if there is no
2786 directory <bookmark_name>, but a bookmark with the name exists.)
2787 directory <bookmark_name>, but a bookmark with the name exists.)
2787 'cd -b <tab>' allows you to tab-complete bookmark names.
2788 'cd -b <tab>' allows you to tab-complete bookmark names.
2788
2789
2789 Options:
2790 Options:
2790
2791
2791 -q: quiet. Do not print the working directory after the cd command is
2792 -q: quiet. Do not print the working directory after the cd command is
2792 executed. By default IPython's cd command does print this directory,
2793 executed. By default IPython's cd command does print this directory,
2793 since the default prompts do not display path information.
2794 since the default prompts do not display path information.
2794
2795
2795 Note that !cd doesn't work for this purpose because the shell where
2796 Note that !cd doesn't work for this purpose because the shell where
2796 !command runs is immediately discarded after executing 'command'.
2797 !command runs is immediately discarded after executing 'command'.
2797
2798
2798 Examples
2799 Examples
2799 --------
2800 --------
2800 ::
2801 ::
2801
2802
2802 In [10]: cd parent/child
2803 In [10]: cd parent/child
2803 /home/tsuser/parent/child
2804 /home/tsuser/parent/child
2804 """
2805 """
2805
2806
2806 parameter_s = parameter_s.strip()
2807 parameter_s = parameter_s.strip()
2807 #bkms = self.shell.persist.get("bookmarks",{})
2808 #bkms = self.shell.persist.get("bookmarks",{})
2808
2809
2809 oldcwd = os.getcwdu()
2810 oldcwd = os.getcwdu()
2810 numcd = re.match(r'(-)(\d+)$',parameter_s)
2811 numcd = re.match(r'(-)(\d+)$',parameter_s)
2811 # jump in directory history by number
2812 # jump in directory history by number
2812 if numcd:
2813 if numcd:
2813 nn = int(numcd.group(2))
2814 nn = int(numcd.group(2))
2814 try:
2815 try:
2815 ps = self.shell.user_ns['_dh'][nn]
2816 ps = self.shell.user_ns['_dh'][nn]
2816 except IndexError:
2817 except IndexError:
2817 print 'The requested directory does not exist in history.'
2818 print 'The requested directory does not exist in history.'
2818 return
2819 return
2819 else:
2820 else:
2820 opts = {}
2821 opts = {}
2821 elif parameter_s.startswith('--'):
2822 elif parameter_s.startswith('--'):
2822 ps = None
2823 ps = None
2823 fallback = None
2824 fallback = None
2824 pat = parameter_s[2:]
2825 pat = parameter_s[2:]
2825 dh = self.shell.user_ns['_dh']
2826 dh = self.shell.user_ns['_dh']
2826 # first search only by basename (last component)
2827 # first search only by basename (last component)
2827 for ent in reversed(dh):
2828 for ent in reversed(dh):
2828 if pat in os.path.basename(ent) and os.path.isdir(ent):
2829 if pat in os.path.basename(ent) and os.path.isdir(ent):
2829 ps = ent
2830 ps = ent
2830 break
2831 break
2831
2832
2832 if fallback is None and pat in ent and os.path.isdir(ent):
2833 if fallback is None and pat in ent and os.path.isdir(ent):
2833 fallback = ent
2834 fallback = ent
2834
2835
2835 # if we have no last part match, pick the first full path match
2836 # if we have no last part match, pick the first full path match
2836 if ps is None:
2837 if ps is None:
2837 ps = fallback
2838 ps = fallback
2838
2839
2839 if ps is None:
2840 if ps is None:
2840 print "No matching entry in directory history"
2841 print "No matching entry in directory history"
2841 return
2842 return
2842 else:
2843 else:
2843 opts = {}
2844 opts = {}
2844
2845
2845
2846
2846 else:
2847 else:
2847 #turn all non-space-escaping backslashes to slashes,
2848 #turn all non-space-escaping backslashes to slashes,
2848 # for c:\windows\directory\names\
2849 # for c:\windows\directory\names\
2849 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2850 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2850 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2851 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2851 # jump to previous
2852 # jump to previous
2852 if ps == '-':
2853 if ps == '-':
2853 try:
2854 try:
2854 ps = self.shell.user_ns['_dh'][-2]
2855 ps = self.shell.user_ns['_dh'][-2]
2855 except IndexError:
2856 except IndexError:
2856 raise UsageError('%cd -: No previous directory to change to.')
2857 raise UsageError('%cd -: No previous directory to change to.')
2857 # jump to bookmark if needed
2858 # jump to bookmark if needed
2858 else:
2859 else:
2859 if not os.path.isdir(ps) or opts.has_key('b'):
2860 if not os.path.isdir(ps) or opts.has_key('b'):
2860 bkms = self.db.get('bookmarks', {})
2861 bkms = self.db.get('bookmarks', {})
2861
2862
2862 if bkms.has_key(ps):
2863 if bkms.has_key(ps):
2863 target = bkms[ps]
2864 target = bkms[ps]
2864 print '(bookmark:%s) -> %s' % (ps,target)
2865 print '(bookmark:%s) -> %s' % (ps,target)
2865 ps = target
2866 ps = target
2866 else:
2867 else:
2867 if opts.has_key('b'):
2868 if opts.has_key('b'):
2868 raise UsageError("Bookmark '%s' not found. "
2869 raise UsageError("Bookmark '%s' not found. "
2869 "Use '%%bookmark -l' to see your bookmarks." % ps)
2870 "Use '%%bookmark -l' to see your bookmarks." % ps)
2870
2871
2871 # strip extra quotes on Windows, because os.chdir doesn't like them
2872 # strip extra quotes on Windows, because os.chdir doesn't like them
2872 ps = unquote_filename(ps)
2873 ps = unquote_filename(ps)
2873 # at this point ps should point to the target dir
2874 # at this point ps should point to the target dir
2874 if ps:
2875 if ps:
2875 try:
2876 try:
2876 os.chdir(os.path.expanduser(ps))
2877 os.chdir(os.path.expanduser(ps))
2877 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2878 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2878 set_term_title('IPython: ' + abbrev_cwd())
2879 set_term_title('IPython: ' + abbrev_cwd())
2879 except OSError:
2880 except OSError:
2880 print sys.exc_info()[1]
2881 print sys.exc_info()[1]
2881 else:
2882 else:
2882 cwd = os.getcwdu()
2883 cwd = os.getcwdu()
2883 dhist = self.shell.user_ns['_dh']
2884 dhist = self.shell.user_ns['_dh']
2884 if oldcwd != cwd:
2885 if oldcwd != cwd:
2885 dhist.append(cwd)
2886 dhist.append(cwd)
2886 self.db['dhist'] = compress_dhist(dhist)[-100:]
2887 self.db['dhist'] = compress_dhist(dhist)[-100:]
2887
2888
2888 else:
2889 else:
2889 os.chdir(self.shell.home_dir)
2890 os.chdir(self.shell.home_dir)
2890 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2891 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2891 set_term_title('IPython: ' + '~')
2892 set_term_title('IPython: ' + '~')
2892 cwd = os.getcwdu()
2893 cwd = os.getcwdu()
2893 dhist = self.shell.user_ns['_dh']
2894 dhist = self.shell.user_ns['_dh']
2894
2895
2895 if oldcwd != cwd:
2896 if oldcwd != cwd:
2896 dhist.append(cwd)
2897 dhist.append(cwd)
2897 self.db['dhist'] = compress_dhist(dhist)[-100:]
2898 self.db['dhist'] = compress_dhist(dhist)[-100:]
2898 if not 'q' in opts and self.shell.user_ns['_dh']:
2899 if not 'q' in opts and self.shell.user_ns['_dh']:
2899 print self.shell.user_ns['_dh'][-1]
2900 print self.shell.user_ns['_dh'][-1]
2900
2901
2901
2902
2902 def magic_env(self, parameter_s=''):
2903 def magic_env(self, parameter_s=''):
2903 """List environment variables."""
2904 """List environment variables."""
2904
2905
2905 return os.environ.data
2906 return os.environ.data
2906
2907
2907 def magic_pushd(self, parameter_s=''):
2908 def magic_pushd(self, parameter_s=''):
2908 """Place the current dir on stack and change directory.
2909 """Place the current dir on stack and change directory.
2909
2910
2910 Usage:\\
2911 Usage:\\
2911 %pushd ['dirname']
2912 %pushd ['dirname']
2912 """
2913 """
2913
2914
2914 dir_s = self.shell.dir_stack
2915 dir_s = self.shell.dir_stack
2915 tgt = os.path.expanduser(unquote_filename(parameter_s))
2916 tgt = os.path.expanduser(unquote_filename(parameter_s))
2916 cwd = os.getcwdu().replace(self.home_dir,'~')
2917 cwd = os.getcwdu().replace(self.home_dir,'~')
2917 if tgt:
2918 if tgt:
2918 self.magic_cd(parameter_s)
2919 self.magic_cd(parameter_s)
2919 dir_s.insert(0,cwd)
2920 dir_s.insert(0,cwd)
2920 return self.magic_dirs()
2921 return self.magic_dirs()
2921
2922
2922 def magic_popd(self, parameter_s=''):
2923 def magic_popd(self, parameter_s=''):
2923 """Change to directory popped off the top of the stack.
2924 """Change to directory popped off the top of the stack.
2924 """
2925 """
2925 if not self.shell.dir_stack:
2926 if not self.shell.dir_stack:
2926 raise UsageError("%popd on empty stack")
2927 raise UsageError("%popd on empty stack")
2927 top = self.shell.dir_stack.pop(0)
2928 top = self.shell.dir_stack.pop(0)
2928 self.magic_cd(top)
2929 self.magic_cd(top)
2929 print "popd ->",top
2930 print "popd ->",top
2930
2931
2931 def magic_dirs(self, parameter_s=''):
2932 def magic_dirs(self, parameter_s=''):
2932 """Return the current directory stack."""
2933 """Return the current directory stack."""
2933
2934
2934 return self.shell.dir_stack
2935 return self.shell.dir_stack
2935
2936
2936 def magic_dhist(self, parameter_s=''):
2937 def magic_dhist(self, parameter_s=''):
2937 """Print your history of visited directories.
2938 """Print your history of visited directories.
2938
2939
2939 %dhist -> print full history\\
2940 %dhist -> print full history\\
2940 %dhist n -> print last n entries only\\
2941 %dhist n -> print last n entries only\\
2941 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2942 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2942
2943
2943 This history is automatically maintained by the %cd command, and
2944 This history is automatically maintained by the %cd command, and
2944 always available as the global list variable _dh. You can use %cd -<n>
2945 always available as the global list variable _dh. You can use %cd -<n>
2945 to go to directory number <n>.
2946 to go to directory number <n>.
2946
2947
2947 Note that most of time, you should view directory history by entering
2948 Note that most of time, you should view directory history by entering
2948 cd -<TAB>.
2949 cd -<TAB>.
2949
2950
2950 """
2951 """
2951
2952
2952 dh = self.shell.user_ns['_dh']
2953 dh = self.shell.user_ns['_dh']
2953 if parameter_s:
2954 if parameter_s:
2954 try:
2955 try:
2955 args = map(int,parameter_s.split())
2956 args = map(int,parameter_s.split())
2956 except:
2957 except:
2957 self.arg_err(Magic.magic_dhist)
2958 self.arg_err(Magic.magic_dhist)
2958 return
2959 return
2959 if len(args) == 1:
2960 if len(args) == 1:
2960 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2961 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2961 elif len(args) == 2:
2962 elif len(args) == 2:
2962 ini,fin = args
2963 ini,fin = args
2963 else:
2964 else:
2964 self.arg_err(Magic.magic_dhist)
2965 self.arg_err(Magic.magic_dhist)
2965 return
2966 return
2966 else:
2967 else:
2967 ini,fin = 0,len(dh)
2968 ini,fin = 0,len(dh)
2968 nlprint(dh,
2969 nlprint(dh,
2969 header = 'Directory history (kept in _dh)',
2970 header = 'Directory history (kept in _dh)',
2970 start=ini,stop=fin)
2971 start=ini,stop=fin)
2971
2972
2972 @skip_doctest
2973 @skip_doctest
2973 def magic_sc(self, parameter_s=''):
2974 def magic_sc(self, parameter_s=''):
2974 """Shell capture - execute a shell command and capture its output.
2975 """Shell capture - execute a shell command and capture its output.
2975
2976
2976 DEPRECATED. Suboptimal, retained for backwards compatibility.
2977 DEPRECATED. Suboptimal, retained for backwards compatibility.
2977
2978
2978 You should use the form 'var = !command' instead. Example:
2979 You should use the form 'var = !command' instead. Example:
2979
2980
2980 "%sc -l myfiles = ls ~" should now be written as
2981 "%sc -l myfiles = ls ~" should now be written as
2981
2982
2982 "myfiles = !ls ~"
2983 "myfiles = !ls ~"
2983
2984
2984 myfiles.s, myfiles.l and myfiles.n still apply as documented
2985 myfiles.s, myfiles.l and myfiles.n still apply as documented
2985 below.
2986 below.
2986
2987
2987 --
2988 --
2988 %sc [options] varname=command
2989 %sc [options] varname=command
2989
2990
2990 IPython will run the given command using commands.getoutput(), and
2991 IPython will run the given command using commands.getoutput(), and
2991 will then update the user's interactive namespace with a variable
2992 will then update the user's interactive namespace with a variable
2992 called varname, containing the value of the call. Your command can
2993 called varname, containing the value of the call. Your command can
2993 contain shell wildcards, pipes, etc.
2994 contain shell wildcards, pipes, etc.
2994
2995
2995 The '=' sign in the syntax is mandatory, and the variable name you
2996 The '=' sign in the syntax is mandatory, and the variable name you
2996 supply must follow Python's standard conventions for valid names.
2997 supply must follow Python's standard conventions for valid names.
2997
2998
2998 (A special format without variable name exists for internal use)
2999 (A special format without variable name exists for internal use)
2999
3000
3000 Options:
3001 Options:
3001
3002
3002 -l: list output. Split the output on newlines into a list before
3003 -l: list output. Split the output on newlines into a list before
3003 assigning it to the given variable. By default the output is stored
3004 assigning it to the given variable. By default the output is stored
3004 as a single string.
3005 as a single string.
3005
3006
3006 -v: verbose. Print the contents of the variable.
3007 -v: verbose. Print the contents of the variable.
3007
3008
3008 In most cases you should not need to split as a list, because the
3009 In most cases you should not need to split as a list, because the
3009 returned value is a special type of string which can automatically
3010 returned value is a special type of string which can automatically
3010 provide its contents either as a list (split on newlines) or as a
3011 provide its contents either as a list (split on newlines) or as a
3011 space-separated string. These are convenient, respectively, either
3012 space-separated string. These are convenient, respectively, either
3012 for sequential processing or to be passed to a shell command.
3013 for sequential processing or to be passed to a shell command.
3013
3014
3014 For example:
3015 For example:
3015
3016
3016 # all-random
3017 # all-random
3017
3018
3018 # Capture into variable a
3019 # Capture into variable a
3019 In [1]: sc a=ls *py
3020 In [1]: sc a=ls *py
3020
3021
3021 # a is a string with embedded newlines
3022 # a is a string with embedded newlines
3022 In [2]: a
3023 In [2]: a
3023 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3024 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3024
3025
3025 # which can be seen as a list:
3026 # which can be seen as a list:
3026 In [3]: a.l
3027 In [3]: a.l
3027 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3028 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3028
3029
3029 # or as a whitespace-separated string:
3030 # or as a whitespace-separated string:
3030 In [4]: a.s
3031 In [4]: a.s
3031 Out[4]: 'setup.py win32_manual_post_install.py'
3032 Out[4]: 'setup.py win32_manual_post_install.py'
3032
3033
3033 # a.s is useful to pass as a single command line:
3034 # a.s is useful to pass as a single command line:
3034 In [5]: !wc -l $a.s
3035 In [5]: !wc -l $a.s
3035 146 setup.py
3036 146 setup.py
3036 130 win32_manual_post_install.py
3037 130 win32_manual_post_install.py
3037 276 total
3038 276 total
3038
3039
3039 # while the list form is useful to loop over:
3040 # while the list form is useful to loop over:
3040 In [6]: for f in a.l:
3041 In [6]: for f in a.l:
3041 ...: !wc -l $f
3042 ...: !wc -l $f
3042 ...:
3043 ...:
3043 146 setup.py
3044 146 setup.py
3044 130 win32_manual_post_install.py
3045 130 win32_manual_post_install.py
3045
3046
3046 Similiarly, the lists returned by the -l option are also special, in
3047 Similiarly, the lists returned by the -l option are also special, in
3047 the sense that you can equally invoke the .s attribute on them to
3048 the sense that you can equally invoke the .s attribute on them to
3048 automatically get a whitespace-separated string from their contents:
3049 automatically get a whitespace-separated string from their contents:
3049
3050
3050 In [7]: sc -l b=ls *py
3051 In [7]: sc -l b=ls *py
3051
3052
3052 In [8]: b
3053 In [8]: b
3053 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3054 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3054
3055
3055 In [9]: b.s
3056 In [9]: b.s
3056 Out[9]: 'setup.py win32_manual_post_install.py'
3057 Out[9]: 'setup.py win32_manual_post_install.py'
3057
3058
3058 In summary, both the lists and strings used for ouptut capture have
3059 In summary, both the lists and strings used for ouptut capture have
3059 the following special attributes:
3060 the following special attributes:
3060
3061
3061 .l (or .list) : value as list.
3062 .l (or .list) : value as list.
3062 .n (or .nlstr): value as newline-separated string.
3063 .n (or .nlstr): value as newline-separated string.
3063 .s (or .spstr): value as space-separated string.
3064 .s (or .spstr): value as space-separated string.
3064 """
3065 """
3065
3066
3066 opts,args = self.parse_options(parameter_s,'lv')
3067 opts,args = self.parse_options(parameter_s,'lv')
3067 # Try to get a variable name and command to run
3068 # Try to get a variable name and command to run
3068 try:
3069 try:
3069 # the variable name must be obtained from the parse_options
3070 # the variable name must be obtained from the parse_options
3070 # output, which uses shlex.split to strip options out.
3071 # output, which uses shlex.split to strip options out.
3071 var,_ = args.split('=',1)
3072 var,_ = args.split('=',1)
3072 var = var.strip()
3073 var = var.strip()
3073 # But the the command has to be extracted from the original input
3074 # But the the command has to be extracted from the original input
3074 # parameter_s, not on what parse_options returns, to avoid the
3075 # parameter_s, not on what parse_options returns, to avoid the
3075 # quote stripping which shlex.split performs on it.
3076 # quote stripping which shlex.split performs on it.
3076 _,cmd = parameter_s.split('=',1)
3077 _,cmd = parameter_s.split('=',1)
3077 except ValueError:
3078 except ValueError:
3078 var,cmd = '',''
3079 var,cmd = '',''
3079 # If all looks ok, proceed
3080 # If all looks ok, proceed
3080 split = 'l' in opts
3081 split = 'l' in opts
3081 out = self.shell.getoutput(cmd, split=split)
3082 out = self.shell.getoutput(cmd, split=split)
3082 if opts.has_key('v'):
3083 if opts.has_key('v'):
3083 print '%s ==\n%s' % (var,pformat(out))
3084 print '%s ==\n%s' % (var,pformat(out))
3084 if var:
3085 if var:
3085 self.shell.user_ns.update({var:out})
3086 self.shell.user_ns.update({var:out})
3086 else:
3087 else:
3087 return out
3088 return out
3088
3089
3089 def magic_sx(self, parameter_s=''):
3090 def magic_sx(self, parameter_s=''):
3090 """Shell execute - run a shell command and capture its output.
3091 """Shell execute - run a shell command and capture its output.
3091
3092
3092 %sx command
3093 %sx command
3093
3094
3094 IPython will run the given command using commands.getoutput(), and
3095 IPython will run the given command using commands.getoutput(), and
3095 return the result formatted as a list (split on '\\n'). Since the
3096 return the result formatted as a list (split on '\\n'). Since the
3096 output is _returned_, it will be stored in ipython's regular output
3097 output is _returned_, it will be stored in ipython's regular output
3097 cache Out[N] and in the '_N' automatic variables.
3098 cache Out[N] and in the '_N' automatic variables.
3098
3099
3099 Notes:
3100 Notes:
3100
3101
3101 1) If an input line begins with '!!', then %sx is automatically
3102 1) If an input line begins with '!!', then %sx is automatically
3102 invoked. That is, while:
3103 invoked. That is, while:
3103 !ls
3104 !ls
3104 causes ipython to simply issue system('ls'), typing
3105 causes ipython to simply issue system('ls'), typing
3105 !!ls
3106 !!ls
3106 is a shorthand equivalent to:
3107 is a shorthand equivalent to:
3107 %sx ls
3108 %sx ls
3108
3109
3109 2) %sx differs from %sc in that %sx automatically splits into a list,
3110 2) %sx differs from %sc in that %sx automatically splits into a list,
3110 like '%sc -l'. The reason for this is to make it as easy as possible
3111 like '%sc -l'. The reason for this is to make it as easy as possible
3111 to process line-oriented shell output via further python commands.
3112 to process line-oriented shell output via further python commands.
3112 %sc is meant to provide much finer control, but requires more
3113 %sc is meant to provide much finer control, but requires more
3113 typing.
3114 typing.
3114
3115
3115 3) Just like %sc -l, this is a list with special attributes:
3116 3) Just like %sc -l, this is a list with special attributes:
3116
3117
3117 .l (or .list) : value as list.
3118 .l (or .list) : value as list.
3118 .n (or .nlstr): value as newline-separated string.
3119 .n (or .nlstr): value as newline-separated string.
3119 .s (or .spstr): value as whitespace-separated string.
3120 .s (or .spstr): value as whitespace-separated string.
3120
3121
3121 This is very useful when trying to use such lists as arguments to
3122 This is very useful when trying to use such lists as arguments to
3122 system commands."""
3123 system commands."""
3123
3124
3124 if parameter_s:
3125 if parameter_s:
3125 return self.shell.getoutput(parameter_s)
3126 return self.shell.getoutput(parameter_s)
3126
3127
3127
3128
3128 def magic_bookmark(self, parameter_s=''):
3129 def magic_bookmark(self, parameter_s=''):
3129 """Manage IPython's bookmark system.
3130 """Manage IPython's bookmark system.
3130
3131
3131 %bookmark <name> - set bookmark to current dir
3132 %bookmark <name> - set bookmark to current dir
3132 %bookmark <name> <dir> - set bookmark to <dir>
3133 %bookmark <name> <dir> - set bookmark to <dir>
3133 %bookmark -l - list all bookmarks
3134 %bookmark -l - list all bookmarks
3134 %bookmark -d <name> - remove bookmark
3135 %bookmark -d <name> - remove bookmark
3135 %bookmark -r - remove all bookmarks
3136 %bookmark -r - remove all bookmarks
3136
3137
3137 You can later on access a bookmarked folder with:
3138 You can later on access a bookmarked folder with:
3138 %cd -b <name>
3139 %cd -b <name>
3139 or simply '%cd <name>' if there is no directory called <name> AND
3140 or simply '%cd <name>' if there is no directory called <name> AND
3140 there is such a bookmark defined.
3141 there is such a bookmark defined.
3141
3142
3142 Your bookmarks persist through IPython sessions, but they are
3143 Your bookmarks persist through IPython sessions, but they are
3143 associated with each profile."""
3144 associated with each profile."""
3144
3145
3145 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3146 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3146 if len(args) > 2:
3147 if len(args) > 2:
3147 raise UsageError("%bookmark: too many arguments")
3148 raise UsageError("%bookmark: too many arguments")
3148
3149
3149 bkms = self.db.get('bookmarks',{})
3150 bkms = self.db.get('bookmarks',{})
3150
3151
3151 if opts.has_key('d'):
3152 if opts.has_key('d'):
3152 try:
3153 try:
3153 todel = args[0]
3154 todel = args[0]
3154 except IndexError:
3155 except IndexError:
3155 raise UsageError(
3156 raise UsageError(
3156 "%bookmark -d: must provide a bookmark to delete")
3157 "%bookmark -d: must provide a bookmark to delete")
3157 else:
3158 else:
3158 try:
3159 try:
3159 del bkms[todel]
3160 del bkms[todel]
3160 except KeyError:
3161 except KeyError:
3161 raise UsageError(
3162 raise UsageError(
3162 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3163 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3163
3164
3164 elif opts.has_key('r'):
3165 elif opts.has_key('r'):
3165 bkms = {}
3166 bkms = {}
3166 elif opts.has_key('l'):
3167 elif opts.has_key('l'):
3167 bks = bkms.keys()
3168 bks = bkms.keys()
3168 bks.sort()
3169 bks.sort()
3169 if bks:
3170 if bks:
3170 size = max(map(len,bks))
3171 size = max(map(len,bks))
3171 else:
3172 else:
3172 size = 0
3173 size = 0
3173 fmt = '%-'+str(size)+'s -> %s'
3174 fmt = '%-'+str(size)+'s -> %s'
3174 print 'Current bookmarks:'
3175 print 'Current bookmarks:'
3175 for bk in bks:
3176 for bk in bks:
3176 print fmt % (bk,bkms[bk])
3177 print fmt % (bk,bkms[bk])
3177 else:
3178 else:
3178 if not args:
3179 if not args:
3179 raise UsageError("%bookmark: You must specify the bookmark name")
3180 raise UsageError("%bookmark: You must specify the bookmark name")
3180 elif len(args)==1:
3181 elif len(args)==1:
3181 bkms[args[0]] = os.getcwdu()
3182 bkms[args[0]] = os.getcwdu()
3182 elif len(args)==2:
3183 elif len(args)==2:
3183 bkms[args[0]] = args[1]
3184 bkms[args[0]] = args[1]
3184 self.db['bookmarks'] = bkms
3185 self.db['bookmarks'] = bkms
3185
3186
3186 def magic_pycat(self, parameter_s=''):
3187 def magic_pycat(self, parameter_s=''):
3187 """Show a syntax-highlighted file through a pager.
3188 """Show a syntax-highlighted file through a pager.
3188
3189
3189 This magic is similar to the cat utility, but it will assume the file
3190 This magic is similar to the cat utility, but it will assume the file
3190 to be Python source and will show it with syntax highlighting. """
3191 to be Python source and will show it with syntax highlighting. """
3191
3192
3192 try:
3193 try:
3193 filename = get_py_filename(parameter_s)
3194 filename = get_py_filename(parameter_s)
3194 cont = file_read(filename)
3195 cont = file_read(filename)
3195 except IOError:
3196 except IOError:
3196 try:
3197 try:
3197 cont = eval(parameter_s,self.user_ns)
3198 cont = eval(parameter_s,self.user_ns)
3198 except NameError:
3199 except NameError:
3199 cont = None
3200 cont = None
3200 if cont is None:
3201 if cont is None:
3201 print "Error: no such file or variable"
3202 print "Error: no such file or variable"
3202 return
3203 return
3203
3204
3204 page.page(self.shell.pycolorize(cont))
3205 page.page(self.shell.pycolorize(cont))
3205
3206
3206 def _rerun_pasted(self):
3207 def _rerun_pasted(self):
3207 """ Rerun a previously pasted command.
3208 """ Rerun a previously pasted command.
3208 """
3209 """
3209 b = self.user_ns.get('pasted_block', None)
3210 b = self.user_ns.get('pasted_block', None)
3210 if b is None:
3211 if b is None:
3211 raise UsageError('No previous pasted block available')
3212 raise UsageError('No previous pasted block available')
3212 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3213 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3213 exec b in self.user_ns
3214 exec b in self.user_ns
3214
3215
3215 def _get_pasted_lines(self, sentinel):
3216 def _get_pasted_lines(self, sentinel):
3216 """ Yield pasted lines until the user enters the given sentinel value.
3217 """ Yield pasted lines until the user enters the given sentinel value.
3217 """
3218 """
3218 from IPython.core import interactiveshell
3219 from IPython.core import interactiveshell
3219 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3220 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3220 while True:
3221 while True:
3221 try:
3222 try:
3222 l = self.shell.raw_input_original(':')
3223 l = self.shell.raw_input_original(':')
3223 if l == sentinel:
3224 if l == sentinel:
3224 return
3225 return
3225 else:
3226 else:
3226 yield l
3227 yield l
3227 except EOFError:
3228 except EOFError:
3228 print '<EOF>'
3229 print '<EOF>'
3229 return
3230 return
3230
3231
3231 def _strip_pasted_lines_for_code(self, raw_lines):
3232 def _strip_pasted_lines_for_code(self, raw_lines):
3232 """ Strip non-code parts of a sequence of lines to return a block of
3233 """ Strip non-code parts of a sequence of lines to return a block of
3233 code.
3234 code.
3234 """
3235 """
3235 # Regular expressions that declare text we strip from the input:
3236 # Regular expressions that declare text we strip from the input:
3236 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3237 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3237 r'^\s*(\s?>)+', # Python input prompt
3238 r'^\s*(\s?>)+', # Python input prompt
3238 r'^\s*\.{3,}', # Continuation prompts
3239 r'^\s*\.{3,}', # Continuation prompts
3239 r'^\++',
3240 r'^\++',
3240 ]
3241 ]
3241
3242
3242 strip_from_start = map(re.compile,strip_re)
3243 strip_from_start = map(re.compile,strip_re)
3243
3244
3244 lines = []
3245 lines = []
3245 for l in raw_lines:
3246 for l in raw_lines:
3246 for pat in strip_from_start:
3247 for pat in strip_from_start:
3247 l = pat.sub('',l)
3248 l = pat.sub('',l)
3248 lines.append(l)
3249 lines.append(l)
3249
3250
3250 block = "\n".join(lines) + '\n'
3251 block = "\n".join(lines) + '\n'
3251 #print "block:\n",block
3252 #print "block:\n",block
3252 return block
3253 return block
3253
3254
3254 def _execute_block(self, block, par):
3255 def _execute_block(self, block, par):
3255 """ Execute a block, or store it in a variable, per the user's request.
3256 """ Execute a block, or store it in a variable, per the user's request.
3256 """
3257 """
3257 if not par:
3258 if not par:
3258 b = textwrap.dedent(block)
3259 b = textwrap.dedent(block)
3259 self.user_ns['pasted_block'] = b
3260 self.user_ns['pasted_block'] = b
3260 self.run_cell(b)
3261 self.run_cell(b)
3261 else:
3262 else:
3262 self.user_ns[par] = SList(block.splitlines())
3263 self.user_ns[par] = SList(block.splitlines())
3263 print "Block assigned to '%s'" % par
3264 print "Block assigned to '%s'" % par
3264
3265
3265 def magic_quickref(self,arg):
3266 def magic_quickref(self,arg):
3266 """ Show a quick reference sheet """
3267 """ Show a quick reference sheet """
3267 import IPython.core.usage
3268 import IPython.core.usage
3268 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3269 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3269
3270
3270 page.page(qr)
3271 page.page(qr)
3271
3272
3272 def magic_doctest_mode(self,parameter_s=''):
3273 def magic_doctest_mode(self,parameter_s=''):
3273 """Toggle doctest mode on and off.
3274 """Toggle doctest mode on and off.
3274
3275
3275 This mode is intended to make IPython behave as much as possible like a
3276 This mode is intended to make IPython behave as much as possible like a
3276 plain Python shell, from the perspective of how its prompts, exceptions
3277 plain Python shell, from the perspective of how its prompts, exceptions
3277 and output look. This makes it easy to copy and paste parts of a
3278 and output look. This makes it easy to copy and paste parts of a
3278 session into doctests. It does so by:
3279 session into doctests. It does so by:
3279
3280
3280 - Changing the prompts to the classic ``>>>`` ones.
3281 - Changing the prompts to the classic ``>>>`` ones.
3281 - Changing the exception reporting mode to 'Plain'.
3282 - Changing the exception reporting mode to 'Plain'.
3282 - Disabling pretty-printing of output.
3283 - Disabling pretty-printing of output.
3283
3284
3284 Note that IPython also supports the pasting of code snippets that have
3285 Note that IPython also supports the pasting of code snippets that have
3285 leading '>>>' and '...' prompts in them. This means that you can paste
3286 leading '>>>' and '...' prompts in them. This means that you can paste
3286 doctests from files or docstrings (even if they have leading
3287 doctests from files or docstrings (even if they have leading
3287 whitespace), and the code will execute correctly. You can then use
3288 whitespace), and the code will execute correctly. You can then use
3288 '%history -t' to see the translated history; this will give you the
3289 '%history -t' to see the translated history; this will give you the
3289 input after removal of all the leading prompts and whitespace, which
3290 input after removal of all the leading prompts and whitespace, which
3290 can be pasted back into an editor.
3291 can be pasted back into an editor.
3291
3292
3292 With these features, you can switch into this mode easily whenever you
3293 With these features, you can switch into this mode easily whenever you
3293 need to do testing and changes to doctests, without having to leave
3294 need to do testing and changes to doctests, without having to leave
3294 your existing IPython session.
3295 your existing IPython session.
3295 """
3296 """
3296
3297
3297 from IPython.utils.ipstruct import Struct
3298 from IPython.utils.ipstruct import Struct
3298
3299
3299 # Shorthands
3300 # Shorthands
3300 shell = self.shell
3301 shell = self.shell
3301 oc = shell.displayhook
3302 oc = shell.displayhook
3302 meta = shell.meta
3303 meta = shell.meta
3303 disp_formatter = self.shell.display_formatter
3304 disp_formatter = self.shell.display_formatter
3304 ptformatter = disp_formatter.formatters['text/plain']
3305 ptformatter = disp_formatter.formatters['text/plain']
3305 # dstore is a data store kept in the instance metadata bag to track any
3306 # dstore is a data store kept in the instance metadata bag to track any
3306 # changes we make, so we can undo them later.
3307 # changes we make, so we can undo them later.
3307 dstore = meta.setdefault('doctest_mode',Struct())
3308 dstore = meta.setdefault('doctest_mode',Struct())
3308 save_dstore = dstore.setdefault
3309 save_dstore = dstore.setdefault
3309
3310
3310 # save a few values we'll need to recover later
3311 # save a few values we'll need to recover later
3311 mode = save_dstore('mode',False)
3312 mode = save_dstore('mode',False)
3312 save_dstore('rc_pprint',ptformatter.pprint)
3313 save_dstore('rc_pprint',ptformatter.pprint)
3313 save_dstore('xmode',shell.InteractiveTB.mode)
3314 save_dstore('xmode',shell.InteractiveTB.mode)
3314 save_dstore('rc_separate_out',shell.separate_out)
3315 save_dstore('rc_separate_out',shell.separate_out)
3315 save_dstore('rc_separate_out2',shell.separate_out2)
3316 save_dstore('rc_separate_out2',shell.separate_out2)
3316 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3317 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3317 save_dstore('rc_separate_in',shell.separate_in)
3318 save_dstore('rc_separate_in',shell.separate_in)
3318 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3319 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3319
3320
3320 if mode == False:
3321 if mode == False:
3321 # turn on
3322 # turn on
3322 oc.prompt1.p_template = '>>> '
3323 oc.prompt1.p_template = '>>> '
3323 oc.prompt2.p_template = '... '
3324 oc.prompt2.p_template = '... '
3324 oc.prompt_out.p_template = ''
3325 oc.prompt_out.p_template = ''
3325
3326
3326 # Prompt separators like plain python
3327 # Prompt separators like plain python
3327 oc.input_sep = oc.prompt1.sep = ''
3328 oc.input_sep = oc.prompt1.sep = ''
3328 oc.output_sep = ''
3329 oc.output_sep = ''
3329 oc.output_sep2 = ''
3330 oc.output_sep2 = ''
3330
3331
3331 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3332 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3332 oc.prompt_out.pad_left = False
3333 oc.prompt_out.pad_left = False
3333
3334
3334 ptformatter.pprint = False
3335 ptformatter.pprint = False
3335 disp_formatter.plain_text_only = True
3336 disp_formatter.plain_text_only = True
3336
3337
3337 shell.magic_xmode('Plain')
3338 shell.magic_xmode('Plain')
3338 else:
3339 else:
3339 # turn off
3340 # turn off
3340 oc.prompt1.p_template = shell.prompt_in1
3341 oc.prompt1.p_template = shell.prompt_in1
3341 oc.prompt2.p_template = shell.prompt_in2
3342 oc.prompt2.p_template = shell.prompt_in2
3342 oc.prompt_out.p_template = shell.prompt_out
3343 oc.prompt_out.p_template = shell.prompt_out
3343
3344
3344 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3345 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3345
3346
3346 oc.output_sep = dstore.rc_separate_out
3347 oc.output_sep = dstore.rc_separate_out
3347 oc.output_sep2 = dstore.rc_separate_out2
3348 oc.output_sep2 = dstore.rc_separate_out2
3348
3349
3349 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3350 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3350 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3351 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3351
3352
3352 ptformatter.pprint = dstore.rc_pprint
3353 ptformatter.pprint = dstore.rc_pprint
3353 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3354 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3354
3355
3355 shell.magic_xmode(dstore.xmode)
3356 shell.magic_xmode(dstore.xmode)
3356
3357
3357 # Store new mode and inform
3358 # Store new mode and inform
3358 dstore.mode = bool(1-int(mode))
3359 dstore.mode = bool(1-int(mode))
3359 mode_label = ['OFF','ON'][dstore.mode]
3360 mode_label = ['OFF','ON'][dstore.mode]
3360 print 'Doctest mode is:', mode_label
3361 print 'Doctest mode is:', mode_label
3361
3362
3362 def magic_gui(self, parameter_s=''):
3363 def magic_gui(self, parameter_s=''):
3363 """Enable or disable IPython GUI event loop integration.
3364 """Enable or disable IPython GUI event loop integration.
3364
3365
3365 %gui [GUINAME]
3366 %gui [GUINAME]
3366
3367
3367 This magic replaces IPython's threaded shells that were activated
3368 This magic replaces IPython's threaded shells that were activated
3368 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3369 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3369 can now be enabled, disabled and changed at runtime and keyboard
3370 can now be enabled, disabled and changed at runtime and keyboard
3370 interrupts should work without any problems. The following toolkits
3371 interrupts should work without any problems. The following toolkits
3371 are supported: wxPython, PyQt4, PyGTK, and Tk::
3372 are supported: wxPython, PyQt4, PyGTK, and Tk::
3372
3373
3373 %gui wx # enable wxPython event loop integration
3374 %gui wx # enable wxPython event loop integration
3374 %gui qt4|qt # enable PyQt4 event loop integration
3375 %gui qt4|qt # enable PyQt4 event loop integration
3375 %gui gtk # enable PyGTK event loop integration
3376 %gui gtk # enable PyGTK event loop integration
3376 %gui tk # enable Tk event loop integration
3377 %gui tk # enable Tk event loop integration
3377 %gui # disable all event loop integration
3378 %gui # disable all event loop integration
3378
3379
3379 WARNING: after any of these has been called you can simply create
3380 WARNING: after any of these has been called you can simply create
3380 an application object, but DO NOT start the event loop yourself, as
3381 an application object, but DO NOT start the event loop yourself, as
3381 we have already handled that.
3382 we have already handled that.
3382 """
3383 """
3383 from IPython.lib.inputhook import enable_gui
3384 from IPython.lib.inputhook import enable_gui
3384 opts, arg = self.parse_options(parameter_s, '')
3385 opts, arg = self.parse_options(parameter_s, '')
3385 if arg=='': arg = None
3386 if arg=='': arg = None
3386 return enable_gui(arg)
3387 return enable_gui(arg)
3387
3388
3388 def magic_load_ext(self, module_str):
3389 def magic_load_ext(self, module_str):
3389 """Load an IPython extension by its module name."""
3390 """Load an IPython extension by its module name."""
3390 return self.extension_manager.load_extension(module_str)
3391 return self.extension_manager.load_extension(module_str)
3391
3392
3392 def magic_unload_ext(self, module_str):
3393 def magic_unload_ext(self, module_str):
3393 """Unload an IPython extension by its module name."""
3394 """Unload an IPython extension by its module name."""
3394 self.extension_manager.unload_extension(module_str)
3395 self.extension_manager.unload_extension(module_str)
3395
3396
3396 def magic_reload_ext(self, module_str):
3397 def magic_reload_ext(self, module_str):
3397 """Reload an IPython extension by its module name."""
3398 """Reload an IPython extension by its module name."""
3398 self.extension_manager.reload_extension(module_str)
3399 self.extension_manager.reload_extension(module_str)
3399
3400
3400 @skip_doctest
3401 @skip_doctest
3401 def magic_install_profiles(self, s):
3402 def magic_install_profiles(self, s):
3402 """Install the default IPython profiles into the .ipython dir.
3403 """Install the default IPython profiles into the .ipython dir.
3403
3404
3404 If the default profiles have already been installed, they will not
3405 If the default profiles have already been installed, they will not
3405 be overwritten. You can force overwriting them by using the ``-o``
3406 be overwritten. You can force overwriting them by using the ``-o``
3406 option::
3407 option::
3407
3408
3408 In [1]: %install_profiles -o
3409 In [1]: %install_profiles -o
3409 """
3410 """
3410 if '-o' in s:
3411 if '-o' in s:
3411 overwrite = True
3412 overwrite = True
3412 else:
3413 else:
3413 overwrite = False
3414 overwrite = False
3414 from IPython.config import profile
3415 from IPython.config import profile
3415 profile_dir = os.path.dirname(profile.__file__)
3416 profile_dir = os.path.dirname(profile.__file__)
3416 ipython_dir = self.ipython_dir
3417 ipython_dir = self.ipython_dir
3417 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3418 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3418 for src in os.listdir(profile_dir):
3419 for src in os.listdir(profile_dir):
3419 if src.startswith('profile_'):
3420 if src.startswith('profile_'):
3420 name = src.replace('profile_', '')
3421 name = src.replace('profile_', '')
3421 print " %s"%name
3422 print " %s"%name
3422 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3423 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3423 pd.copy_config_file('ipython_config.py', path=src,
3424 pd.copy_config_file('ipython_config.py', path=src,
3424 overwrite=overwrite)
3425 overwrite=overwrite)
3425
3426
3426 @skip_doctest
3427 @skip_doctest
3427 def magic_install_default_config(self, s):
3428 def magic_install_default_config(self, s):
3428 """Install IPython's default config file into the .ipython dir.
3429 """Install IPython's default config file into the .ipython dir.
3429
3430
3430 If the default config file (:file:`ipython_config.py`) is already
3431 If the default config file (:file:`ipython_config.py`) is already
3431 installed, it will not be overwritten. You can force overwriting
3432 installed, it will not be overwritten. You can force overwriting
3432 by using the ``-o`` option::
3433 by using the ``-o`` option::
3433
3434
3434 In [1]: %install_default_config
3435 In [1]: %install_default_config
3435 """
3436 """
3436 if '-o' in s:
3437 if '-o' in s:
3437 overwrite = True
3438 overwrite = True
3438 else:
3439 else:
3439 overwrite = False
3440 overwrite = False
3440 pd = self.shell.profile_dir
3441 pd = self.shell.profile_dir
3441 print "Installing default config file in: %s" % pd.location
3442 print "Installing default config file in: %s" % pd.location
3442 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3443 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3443
3444
3444 # Pylab support: simple wrappers that activate pylab, load gui input
3445 # Pylab support: simple wrappers that activate pylab, load gui input
3445 # handling and modify slightly %run
3446 # handling and modify slightly %run
3446
3447
3447 @skip_doctest
3448 @skip_doctest
3448 def _pylab_magic_run(self, parameter_s=''):
3449 def _pylab_magic_run(self, parameter_s=''):
3449 Magic.magic_run(self, parameter_s,
3450 Magic.magic_run(self, parameter_s,
3450 runner=mpl_runner(self.shell.safe_execfile))
3451 runner=mpl_runner(self.shell.safe_execfile))
3451
3452
3452 _pylab_magic_run.__doc__ = magic_run.__doc__
3453 _pylab_magic_run.__doc__ = magic_run.__doc__
3453
3454
3454 @skip_doctest
3455 @skip_doctest
3455 def magic_pylab(self, s):
3456 def magic_pylab(self, s):
3456 """Load numpy and matplotlib to work interactively.
3457 """Load numpy and matplotlib to work interactively.
3457
3458
3458 %pylab [GUINAME]
3459 %pylab [GUINAME]
3459
3460
3460 This function lets you activate pylab (matplotlib, numpy and
3461 This function lets you activate pylab (matplotlib, numpy and
3461 interactive support) at any point during an IPython session.
3462 interactive support) at any point during an IPython session.
3462
3463
3463 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3464 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3464 pylab and mlab, as well as all names from numpy and pylab.
3465 pylab and mlab, as well as all names from numpy and pylab.
3465
3466
3466 If you are using the inline matplotlib backend for embedded figures,
3467 If you are using the inline matplotlib backend for embedded figures,
3467 you can adjust its behavior via the %config magic::
3468 you can adjust its behavior via the %config magic::
3468
3469
3469 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3470 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3470 In [1]: %config InlineBackend.figure_format = 'svg'
3471 In [1]: %config InlineBackend.figure_format = 'svg'
3471
3472
3472 # change the behavior of closing all figures at the end of each
3473 # change the behavior of closing all figures at the end of each
3473 # execution (cell), or allowing reuse of active figures across
3474 # execution (cell), or allowing reuse of active figures across
3474 # cells:
3475 # cells:
3475 In [2]: %config InlineBackend.close_figures = False
3476 In [2]: %config InlineBackend.close_figures = False
3476
3477
3477 Parameters
3478 Parameters
3478 ----------
3479 ----------
3479 guiname : optional
3480 guiname : optional
3480 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3481 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3481 'tk'). If given, the corresponding Matplotlib backend is used,
3482 'tk'). If given, the corresponding Matplotlib backend is used,
3482 otherwise matplotlib's default (which you can override in your
3483 otherwise matplotlib's default (which you can override in your
3483 matplotlib config file) is used.
3484 matplotlib config file) is used.
3484
3485
3485 Examples
3486 Examples
3486 --------
3487 --------
3487 In this case, where the MPL default is TkAgg::
3488 In this case, where the MPL default is TkAgg::
3488
3489
3489 In [2]: %pylab
3490 In [2]: %pylab
3490
3491
3491 Welcome to pylab, a matplotlib-based Python environment.
3492 Welcome to pylab, a matplotlib-based Python environment.
3492 Backend in use: TkAgg
3493 Backend in use: TkAgg
3493 For more information, type 'help(pylab)'.
3494 For more information, type 'help(pylab)'.
3494
3495
3495 But you can explicitly request a different backend::
3496 But you can explicitly request a different backend::
3496
3497
3497 In [3]: %pylab qt
3498 In [3]: %pylab qt
3498
3499
3499 Welcome to pylab, a matplotlib-based Python environment.
3500 Welcome to pylab, a matplotlib-based Python environment.
3500 Backend in use: Qt4Agg
3501 Backend in use: Qt4Agg
3501 For more information, type 'help(pylab)'.
3502 For more information, type 'help(pylab)'.
3502 """
3503 """
3503
3504
3504 if Application.initialized():
3505 if Application.initialized():
3505 app = Application.instance()
3506 app = Application.instance()
3506 try:
3507 try:
3507 import_all_status = app.pylab_import_all
3508 import_all_status = app.pylab_import_all
3508 except AttributeError:
3509 except AttributeError:
3509 import_all_status = True
3510 import_all_status = True
3510 else:
3511 else:
3511 import_all_status = True
3512 import_all_status = True
3512
3513
3513 self.shell.enable_pylab(s,import_all=import_all_status)
3514 self.shell.enable_pylab(s,import_all=import_all_status)
3514
3515
3515 def magic_tb(self, s):
3516 def magic_tb(self, s):
3516 """Print the last traceback with the currently active exception mode.
3517 """Print the last traceback with the currently active exception mode.
3517
3518
3518 See %xmode for changing exception reporting modes."""
3519 See %xmode for changing exception reporting modes."""
3519 self.shell.showtraceback()
3520 self.shell.showtraceback()
3520
3521
3521 @skip_doctest
3522 @skip_doctest
3522 def magic_precision(self, s=''):
3523 def magic_precision(self, s=''):
3523 """Set floating point precision for pretty printing.
3524 """Set floating point precision for pretty printing.
3524
3525
3525 Can set either integer precision or a format string.
3526 Can set either integer precision or a format string.
3526
3527
3527 If numpy has been imported and precision is an int,
3528 If numpy has been imported and precision is an int,
3528 numpy display precision will also be set, via ``numpy.set_printoptions``.
3529 numpy display precision will also be set, via ``numpy.set_printoptions``.
3529
3530
3530 If no argument is given, defaults will be restored.
3531 If no argument is given, defaults will be restored.
3531
3532
3532 Examples
3533 Examples
3533 --------
3534 --------
3534 ::
3535 ::
3535
3536
3536 In [1]: from math import pi
3537 In [1]: from math import pi
3537
3538
3538 In [2]: %precision 3
3539 In [2]: %precision 3
3539 Out[2]: u'%.3f'
3540 Out[2]: u'%.3f'
3540
3541
3541 In [3]: pi
3542 In [3]: pi
3542 Out[3]: 3.142
3543 Out[3]: 3.142
3543
3544
3544 In [4]: %precision %i
3545 In [4]: %precision %i
3545 Out[4]: u'%i'
3546 Out[4]: u'%i'
3546
3547
3547 In [5]: pi
3548 In [5]: pi
3548 Out[5]: 3
3549 Out[5]: 3
3549
3550
3550 In [6]: %precision %e
3551 In [6]: %precision %e
3551 Out[6]: u'%e'
3552 Out[6]: u'%e'
3552
3553
3553 In [7]: pi**10
3554 In [7]: pi**10
3554 Out[7]: 9.364805e+04
3555 Out[7]: 9.364805e+04
3555
3556
3556 In [8]: %precision
3557 In [8]: %precision
3557 Out[8]: u'%r'
3558 Out[8]: u'%r'
3558
3559
3559 In [9]: pi**10
3560 In [9]: pi**10
3560 Out[9]: 93648.047476082982
3561 Out[9]: 93648.047476082982
3561
3562
3562 """
3563 """
3563
3564
3564 ptformatter = self.shell.display_formatter.formatters['text/plain']
3565 ptformatter = self.shell.display_formatter.formatters['text/plain']
3565 ptformatter.float_precision = s
3566 ptformatter.float_precision = s
3566 return ptformatter.float_format
3567 return ptformatter.float_format
3567
3568
3568
3569
3569 @magic_arguments.magic_arguments()
3570 @magic_arguments.magic_arguments()
3570 @magic_arguments.argument(
3571 @magic_arguments.argument(
3571 '-e', '--export', action='store_true', default=False,
3572 '-e', '--export', action='store_true', default=False,
3572 help='Export IPython history as a notebook. The filename argument '
3573 help='Export IPython history as a notebook. The filename argument '
3573 'is used to specify the notebook name and format. For example '
3574 'is used to specify the notebook name and format. For example '
3574 'a filename of notebook.ipynb will result in a notebook name '
3575 'a filename of notebook.ipynb will result in a notebook name '
3575 'of "notebook" and a format of "xml". Likewise using a ".json" '
3576 'of "notebook" and a format of "xml". Likewise using a ".json" '
3576 'or ".py" file extension will write the notebook in the json '
3577 'or ".py" file extension will write the notebook in the json '
3577 'or py formats.'
3578 'or py formats.'
3578 )
3579 )
3579 @magic_arguments.argument(
3580 @magic_arguments.argument(
3580 '-f', '--format',
3581 '-f', '--format',
3581 help='Convert an existing IPython notebook to a new format. This option '
3582 help='Convert an existing IPython notebook to a new format. This option '
3582 'specifies the new format and can have the values: xml, json, py. '
3583 'specifies the new format and can have the values: xml, json, py. '
3583 'The target filename is choosen automatically based on the new '
3584 'The target filename is choosen automatically based on the new '
3584 'format. The filename argument gives the name of the source file.'
3585 'format. The filename argument gives the name of the source file.'
3585 )
3586 )
3586 @magic_arguments.argument(
3587 @magic_arguments.argument(
3587 'filename', type=unicode,
3588 'filename', type=unicode,
3588 help='Notebook name or filename'
3589 help='Notebook name or filename'
3589 )
3590 )
3590 def magic_notebook(self, s):
3591 def magic_notebook(self, s):
3591 """Export and convert IPython notebooks.
3592 """Export and convert IPython notebooks.
3592
3593
3593 This function can export the current IPython history to a notebook file
3594 This function can export the current IPython history to a notebook file
3594 or can convert an existing notebook file into a different format. For
3595 or can convert an existing notebook file into a different format. For
3595 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3596 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3596 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3597 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3597 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3598 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3598 formats include (json/ipynb, py).
3599 formats include (json/ipynb, py).
3599 """
3600 """
3600 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3601 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3601
3602
3602 from IPython.nbformat import current
3603 from IPython.nbformat import current
3603 args.filename = unquote_filename(args.filename)
3604 args.filename = unquote_filename(args.filename)
3604 if args.export:
3605 if args.export:
3605 fname, name, format = current.parse_filename(args.filename)
3606 fname, name, format = current.parse_filename(args.filename)
3606 cells = []
3607 cells = []
3607 hist = list(self.history_manager.get_range())
3608 hist = list(self.history_manager.get_range())
3608 for session, prompt_number, input in hist[:-1]:
3609 for session, prompt_number, input in hist[:-1]:
3609 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3610 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3610 worksheet = current.new_worksheet(cells=cells)
3611 worksheet = current.new_worksheet(cells=cells)
3611 nb = current.new_notebook(name=name,worksheets=[worksheet])
3612 nb = current.new_notebook(name=name,worksheets=[worksheet])
3612 with open(fname, 'w') as f:
3613 with open(fname, 'w') as f:
3613 current.write(nb, f, format);
3614 current.write(nb, f, format);
3614 elif args.format is not None:
3615 elif args.format is not None:
3615 old_fname, old_name, old_format = current.parse_filename(args.filename)
3616 old_fname, old_name, old_format = current.parse_filename(args.filename)
3616 new_format = args.format
3617 new_format = args.format
3617 if new_format == u'xml':
3618 if new_format == u'xml':
3618 raise ValueError('Notebooks cannot be written as xml.')
3619 raise ValueError('Notebooks cannot be written as xml.')
3619 elif new_format == u'ipynb' or new_format == u'json':
3620 elif new_format == u'ipynb' or new_format == u'json':
3620 new_fname = old_name + u'.ipynb'
3621 new_fname = old_name + u'.ipynb'
3621 new_format = u'json'
3622 new_format = u'json'
3622 elif new_format == u'py':
3623 elif new_format == u'py':
3623 new_fname = old_name + u'.py'
3624 new_fname = old_name + u'.py'
3624 else:
3625 else:
3625 raise ValueError('Invalid notebook format: %s' % new_format)
3626 raise ValueError('Invalid notebook format: %s' % new_format)
3626 with open(old_fname, 'r') as f:
3627 with open(old_fname, 'r') as f:
3627 s = f.read()
3628 s = f.read()
3628 try:
3629 try:
3629 nb = current.reads(s, old_format)
3630 nb = current.reads(s, old_format)
3630 except:
3631 except:
3631 nb = current.reads(s, u'xml')
3632 nb = current.reads(s, u'xml')
3632 with open(new_fname, 'w') as f:
3633 with open(new_fname, 'w') as f:
3633 current.write(nb, f, new_format)
3634 current.write(nb, f, new_format)
3634
3635
3635 def magic_config(self, s):
3636 def magic_config(self, s):
3636 """configure IPython
3637 """configure IPython
3637
3638
3638 %config Class[.trait=value]
3639 %config Class[.trait=value]
3639
3640
3640 This magic exposes most of the IPython config system. Any
3641 This magic exposes most of the IPython config system. Any
3641 Configurable class should be able to be configured with the simple
3642 Configurable class should be able to be configured with the simple
3642 line::
3643 line::
3643
3644
3644 %config Class.trait=value
3645 %config Class.trait=value
3645
3646
3646 Where `value` will be resolved in the user's namespace, if it is an
3647 Where `value` will be resolved in the user's namespace, if it is an
3647 expression or variable name.
3648 expression or variable name.
3648
3649
3649 Examples
3650 Examples
3650 --------
3651 --------
3651
3652
3652 To see what classes are availabe for config, pass no arguments::
3653 To see what classes are availabe for config, pass no arguments::
3653
3654
3654 In [1]: %config
3655 In [1]: %config
3655 Available objects for config:
3656 Available objects for config:
3656 TerminalInteractiveShell
3657 TerminalInteractiveShell
3657 HistoryManager
3658 HistoryManager
3658 PrefilterManager
3659 PrefilterManager
3659 AliasManager
3660 AliasManager
3660 IPCompleter
3661 IPCompleter
3661 DisplayFormatter
3662 DisplayFormatter
3662
3663
3663 To view what is configurable on a given class, just pass the class name::
3664 To view what is configurable on a given class, just pass the class name::
3664
3665
3665 In [2]: %config IPCompleter
3666 In [2]: %config IPCompleter
3666 IPCompleter options
3667 IPCompleter options
3667 -----------------
3668 -----------------
3668 IPCompleter.omit__names=<Enum>
3669 IPCompleter.omit__names=<Enum>
3669 Current: 2
3670 Current: 2
3670 Choices: (0, 1, 2)
3671 Choices: (0, 1, 2)
3671 Instruct the completer to omit private method names
3672 Instruct the completer to omit private method names
3672 Specifically, when completing on ``object.<tab>``.
3673 Specifically, when completing on ``object.<tab>``.
3673 When 2 [default]: all names that start with '_' will be excluded.
3674 When 2 [default]: all names that start with '_' will be excluded.
3674 When 1: all 'magic' names (``__foo__``) will be excluded.
3675 When 1: all 'magic' names (``__foo__``) will be excluded.
3675 When 0: nothing will be excluded.
3676 When 0: nothing will be excluded.
3676 IPCompleter.merge_completions=<CBool>
3677 IPCompleter.merge_completions=<CBool>
3677 Current: True
3678 Current: True
3678 Whether to merge completion results into a single list
3679 Whether to merge completion results into a single list
3679 If False, only the completion results from the first non-empty completer
3680 If False, only the completion results from the first non-empty completer
3680 will be returned.
3681 will be returned.
3681 IPCompleter.greedy=<CBool>
3682 IPCompleter.greedy=<CBool>
3682 Current: False
3683 Current: False
3683 Activate greedy completion
3684 Activate greedy completion
3684 This will enable completion on elements of lists, results of function calls,
3685 This will enable completion on elements of lists, results of function calls,
3685 etc., but can be unsafe because the code is actually evaluated on TAB.
3686 etc., but can be unsafe because the code is actually evaluated on TAB.
3686
3687
3687 but the real use is in setting values::
3688 but the real use is in setting values::
3688
3689
3689 In [3]: %config IPCompleter.greedy = True
3690 In [3]: %config IPCompleter.greedy = True
3690
3691
3691 and these values are read from the user_ns if they are variables::
3692 and these values are read from the user_ns if they are variables::
3692
3693
3693 In [4]: feeling_greedy=False
3694 In [4]: feeling_greedy=False
3694
3695
3695 In [5]: %config IPCompleter.greedy = feeling_greedy
3696 In [5]: %config IPCompleter.greedy = feeling_greedy
3696
3697
3697 """
3698 """
3698 from IPython.config.loader import Config
3699 from IPython.config.loader import Config
3699 # some IPython objects are Configurable, but do not yet have
3700 # some IPython objects are Configurable, but do not yet have
3700 # any configurable traits. Exclude them from the effects of
3701 # any configurable traits. Exclude them from the effects of
3701 # this magic, as their presence is just noise:
3702 # this magic, as their presence is just noise:
3702 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3703 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3703 classnames = [ c.__class__.__name__ for c in configurables ]
3704 classnames = [ c.__class__.__name__ for c in configurables ]
3704
3705
3705 line = s.strip()
3706 line = s.strip()
3706 if not line:
3707 if not line:
3707 # print available configurable names
3708 # print available configurable names
3708 print "Available objects for config:"
3709 print "Available objects for config:"
3709 for name in classnames:
3710 for name in classnames:
3710 print " ", name
3711 print " ", name
3711 return
3712 return
3712 elif line in classnames:
3713 elif line in classnames:
3713 # `%config TerminalInteractiveShell` will print trait info for
3714 # `%config TerminalInteractiveShell` will print trait info for
3714 # TerminalInteractiveShell
3715 # TerminalInteractiveShell
3715 c = configurables[classnames.index(line)]
3716 c = configurables[classnames.index(line)]
3716 cls = c.__class__
3717 cls = c.__class__
3717 help = cls.class_get_help(c)
3718 help = cls.class_get_help(c)
3718 # strip leading '--' from cl-args:
3719 # strip leading '--' from cl-args:
3719 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3720 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3720 print help
3721 print help
3721 return
3722 return
3722 elif '=' not in line:
3723 elif '=' not in line:
3723 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3724 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3724
3725
3725
3726
3726 # otherwise, assume we are setting configurables.
3727 # otherwise, assume we are setting configurables.
3727 # leave quotes on args when splitting, because we want
3728 # leave quotes on args when splitting, because we want
3728 # unquoted args to eval in user_ns
3729 # unquoted args to eval in user_ns
3729 cfg = Config()
3730 cfg = Config()
3730 exec "cfg."+line in locals(), self.user_ns
3731 exec "cfg."+line in locals(), self.user_ns
3731
3732
3732 for configurable in configurables:
3733 for configurable in configurables:
3733 try:
3734 try:
3734 configurable.update_config(cfg)
3735 configurable.update_config(cfg)
3735 except Exception as e:
3736 except Exception as e:
3736 error(e)
3737 error(e)
3737
3738
3738 # end Magic
3739 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now