##// END OF EJS Templates
Merge pull request #2124 from bfroehle/use_alias_magic...
Fernando Perez -
r8023:a5beb59f merge
parent child Browse files
Show More
@@ -1,3023 +1,3029 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 from __future__ import print_function
19 from __future__ import print_function
20
20
21 import __builtin__ as builtin_mod
21 import __builtin__ as builtin_mod
22 import __future__
22 import __future__
23 import abc
23 import abc
24 import ast
24 import ast
25 import atexit
25 import atexit
26 import os
26 import os
27 import re
27 import re
28 import runpy
28 import runpy
29 import sys
29 import sys
30 import tempfile
30 import tempfile
31 import types
31 import types
32
32
33 # We need to use nested to support python 2.6, once we move to >=2.7, we can
33 # We need to use nested to support python 2.6, once we move to >=2.7, we can
34 # use the with keyword's new builtin support for nested managers
34 # use the with keyword's new builtin support for nested managers
35 try:
35 try:
36 from contextlib import nested
36 from contextlib import nested
37 except:
37 except:
38 from IPython.utils.nested_context import nested
38 from IPython.utils.nested_context import nested
39
39
40 from IPython.config.configurable import SingletonConfigurable
40 from IPython.config.configurable import SingletonConfigurable
41 from IPython.core import debugger, oinspect
41 from IPython.core import debugger, oinspect
42 from IPython.core import history as ipcorehist
42 from IPython.core import history as ipcorehist
43 from IPython.core import magic
43 from IPython.core import magic
44 from IPython.core import page
44 from IPython.core import page
45 from IPython.core import prefilter
45 from IPython.core import prefilter
46 from IPython.core import shadowns
46 from IPython.core import shadowns
47 from IPython.core import ultratb
47 from IPython.core import ultratb
48 from IPython.core.alias import AliasManager, AliasError
48 from IPython.core.alias import AliasManager, AliasError
49 from IPython.core.autocall import ExitAutocall
49 from IPython.core.autocall import ExitAutocall
50 from IPython.core.builtin_trap import BuiltinTrap
50 from IPython.core.builtin_trap import BuiltinTrap
51 from IPython.core.compilerop import CachingCompiler
51 from IPython.core.compilerop import CachingCompiler
52 from IPython.core.display_trap import DisplayTrap
52 from IPython.core.display_trap import DisplayTrap
53 from IPython.core.displayhook import DisplayHook
53 from IPython.core.displayhook import DisplayHook
54 from IPython.core.displaypub import DisplayPublisher
54 from IPython.core.displaypub import DisplayPublisher
55 from IPython.core.error import UsageError
55 from IPython.core.error import UsageError
56 from IPython.core.extensions import ExtensionManager
56 from IPython.core.extensions import ExtensionManager
57 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
57 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
58 from IPython.core.formatters import DisplayFormatter
58 from IPython.core.formatters import DisplayFormatter
59 from IPython.core.history import HistoryManager
59 from IPython.core.history import HistoryManager
60 from IPython.core.inputsplitter import IPythonInputSplitter, ESC_MAGIC, ESC_MAGIC2
60 from IPython.core.inputsplitter import IPythonInputSplitter, ESC_MAGIC, ESC_MAGIC2
61 from IPython.core.logger import Logger
61 from IPython.core.logger import Logger
62 from IPython.core.macro import Macro
62 from IPython.core.macro import Macro
63 from IPython.core.payload import PayloadManager
63 from IPython.core.payload import PayloadManager
64 from IPython.core.plugin import PluginManager
64 from IPython.core.plugin import PluginManager
65 from IPython.core.prefilter import PrefilterManager
65 from IPython.core.prefilter import PrefilterManager
66 from IPython.core.profiledir import ProfileDir
66 from IPython.core.profiledir import ProfileDir
67 from IPython.core.pylabtools import pylab_activate
67 from IPython.core.pylabtools import pylab_activate
68 from IPython.core.prompts import PromptManager
68 from IPython.core.prompts import PromptManager
69 from IPython.lib.latextools import LaTeXTool
69 from IPython.lib.latextools import LaTeXTool
70 from IPython.utils import PyColorize
70 from IPython.utils import PyColorize
71 from IPython.utils import io
71 from IPython.utils import io
72 from IPython.utils import py3compat
72 from IPython.utils import py3compat
73 from IPython.utils import openpy
73 from IPython.utils import openpy
74 from IPython.utils.doctestreload import doctest_reload
74 from IPython.utils.doctestreload import doctest_reload
75 from IPython.utils.io import ask_yes_no
75 from IPython.utils.io import ask_yes_no
76 from IPython.utils.ipstruct import Struct
76 from IPython.utils.ipstruct import Struct
77 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
77 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
78 from IPython.utils.pickleshare import PickleShareDB
78 from IPython.utils.pickleshare import PickleShareDB
79 from IPython.utils.process import system, getoutput
79 from IPython.utils.process import system, getoutput
80 from IPython.utils.strdispatch import StrDispatch
80 from IPython.utils.strdispatch import StrDispatch
81 from IPython.utils.syspathcontext import prepended_to_syspath
81 from IPython.utils.syspathcontext import prepended_to_syspath
82 from IPython.utils.text import (format_screen, LSString, SList,
82 from IPython.utils.text import (format_screen, LSString, SList,
83 DollarFormatter)
83 DollarFormatter)
84 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
84 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
85 List, Unicode, Instance, Type)
85 List, Unicode, Instance, Type)
86 from IPython.utils.warn import warn, error
86 from IPython.utils.warn import warn, error
87 import IPython.core.hooks
87 import IPython.core.hooks
88
88
89 # FIXME: do this in a function to avoid circular dependencies
89 # FIXME: do this in a function to avoid circular dependencies
90 # A better solution is to remove IPython.parallel.error,
90 # A better solution is to remove IPython.parallel.error,
91 # and place those classes in IPython.core.error.
91 # and place those classes in IPython.core.error.
92
92
93 class RemoteError(Exception):
93 class RemoteError(Exception):
94 pass
94 pass
95
95
96 def _import_remote_error():
96 def _import_remote_error():
97 global RemoteError
97 global RemoteError
98 try:
98 try:
99 from IPython.parallel.error import RemoteError
99 from IPython.parallel.error import RemoteError
100 except:
100 except:
101 pass
101 pass
102
102
103 _import_remote_error()
103 _import_remote_error()
104
104
105 #-----------------------------------------------------------------------------
105 #-----------------------------------------------------------------------------
106 # Globals
106 # Globals
107 #-----------------------------------------------------------------------------
107 #-----------------------------------------------------------------------------
108
108
109 # compiled regexps for autoindent management
109 # compiled regexps for autoindent management
110 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
110 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
111
111
112 #-----------------------------------------------------------------------------
112 #-----------------------------------------------------------------------------
113 # Utilities
113 # Utilities
114 #-----------------------------------------------------------------------------
114 #-----------------------------------------------------------------------------
115
115
116 def softspace(file, newvalue):
116 def softspace(file, newvalue):
117 """Copied from code.py, to remove the dependency"""
117 """Copied from code.py, to remove the dependency"""
118
118
119 oldvalue = 0
119 oldvalue = 0
120 try:
120 try:
121 oldvalue = file.softspace
121 oldvalue = file.softspace
122 except AttributeError:
122 except AttributeError:
123 pass
123 pass
124 try:
124 try:
125 file.softspace = newvalue
125 file.softspace = newvalue
126 except (AttributeError, TypeError):
126 except (AttributeError, TypeError):
127 # "attribute-less object" or "read-only attributes"
127 # "attribute-less object" or "read-only attributes"
128 pass
128 pass
129 return oldvalue
129 return oldvalue
130
130
131
131
132 def no_op(*a, **kw): pass
132 def no_op(*a, **kw): pass
133
133
134 class NoOpContext(object):
134 class NoOpContext(object):
135 def __enter__(self): pass
135 def __enter__(self): pass
136 def __exit__(self, type, value, traceback): pass
136 def __exit__(self, type, value, traceback): pass
137 no_op_context = NoOpContext()
137 no_op_context = NoOpContext()
138
138
139 class SpaceInInput(Exception): pass
139 class SpaceInInput(Exception): pass
140
140
141 class Bunch: pass
141 class Bunch: pass
142
142
143
143
144 def get_default_colors():
144 def get_default_colors():
145 if sys.platform=='darwin':
145 if sys.platform=='darwin':
146 return "LightBG"
146 return "LightBG"
147 elif os.name=='nt':
147 elif os.name=='nt':
148 return 'Linux'
148 return 'Linux'
149 else:
149 else:
150 return 'Linux'
150 return 'Linux'
151
151
152
152
153 class SeparateUnicode(Unicode):
153 class SeparateUnicode(Unicode):
154 """A Unicode subclass to validate separate_in, separate_out, etc.
154 """A Unicode subclass to validate separate_in, separate_out, etc.
155
155
156 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
156 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
157 """
157 """
158
158
159 def validate(self, obj, value):
159 def validate(self, obj, value):
160 if value == '0': value = ''
160 if value == '0': value = ''
161 value = value.replace('\\n','\n')
161 value = value.replace('\\n','\n')
162 return super(SeparateUnicode, self).validate(obj, value)
162 return super(SeparateUnicode, self).validate(obj, value)
163
163
164
164
165 class ReadlineNoRecord(object):
165 class ReadlineNoRecord(object):
166 """Context manager to execute some code, then reload readline history
166 """Context manager to execute some code, then reload readline history
167 so that interactive input to the code doesn't appear when pressing up."""
167 so that interactive input to the code doesn't appear when pressing up."""
168 def __init__(self, shell):
168 def __init__(self, shell):
169 self.shell = shell
169 self.shell = shell
170 self._nested_level = 0
170 self._nested_level = 0
171
171
172 def __enter__(self):
172 def __enter__(self):
173 if self._nested_level == 0:
173 if self._nested_level == 0:
174 try:
174 try:
175 self.orig_length = self.current_length()
175 self.orig_length = self.current_length()
176 self.readline_tail = self.get_readline_tail()
176 self.readline_tail = self.get_readline_tail()
177 except (AttributeError, IndexError): # Can fail with pyreadline
177 except (AttributeError, IndexError): # Can fail with pyreadline
178 self.orig_length, self.readline_tail = 999999, []
178 self.orig_length, self.readline_tail = 999999, []
179 self._nested_level += 1
179 self._nested_level += 1
180
180
181 def __exit__(self, type, value, traceback):
181 def __exit__(self, type, value, traceback):
182 self._nested_level -= 1
182 self._nested_level -= 1
183 if self._nested_level == 0:
183 if self._nested_level == 0:
184 # Try clipping the end if it's got longer
184 # Try clipping the end if it's got longer
185 try:
185 try:
186 e = self.current_length() - self.orig_length
186 e = self.current_length() - self.orig_length
187 if e > 0:
187 if e > 0:
188 for _ in range(e):
188 for _ in range(e):
189 self.shell.readline.remove_history_item(self.orig_length)
189 self.shell.readline.remove_history_item(self.orig_length)
190
190
191 # If it still doesn't match, just reload readline history.
191 # If it still doesn't match, just reload readline history.
192 if self.current_length() != self.orig_length \
192 if self.current_length() != self.orig_length \
193 or self.get_readline_tail() != self.readline_tail:
193 or self.get_readline_tail() != self.readline_tail:
194 self.shell.refill_readline_hist()
194 self.shell.refill_readline_hist()
195 except (AttributeError, IndexError):
195 except (AttributeError, IndexError):
196 pass
196 pass
197 # Returning False will cause exceptions to propagate
197 # Returning False will cause exceptions to propagate
198 return False
198 return False
199
199
200 def current_length(self):
200 def current_length(self):
201 return self.shell.readline.get_current_history_length()
201 return self.shell.readline.get_current_history_length()
202
202
203 def get_readline_tail(self, n=10):
203 def get_readline_tail(self, n=10):
204 """Get the last n items in readline history."""
204 """Get the last n items in readline history."""
205 end = self.shell.readline.get_current_history_length() + 1
205 end = self.shell.readline.get_current_history_length() + 1
206 start = max(end-n, 1)
206 start = max(end-n, 1)
207 ghi = self.shell.readline.get_history_item
207 ghi = self.shell.readline.get_history_item
208 return [ghi(x) for x in range(start, end)]
208 return [ghi(x) for x in range(start, end)]
209
209
210 #-----------------------------------------------------------------------------
210 #-----------------------------------------------------------------------------
211 # Main IPython class
211 # Main IPython class
212 #-----------------------------------------------------------------------------
212 #-----------------------------------------------------------------------------
213
213
214 class InteractiveShell(SingletonConfigurable):
214 class InteractiveShell(SingletonConfigurable):
215 """An enhanced, interactive shell for Python."""
215 """An enhanced, interactive shell for Python."""
216
216
217 _instance = None
217 _instance = None
218
218
219 autocall = Enum((0,1,2), default_value=0, config=True, help=
219 autocall = Enum((0,1,2), default_value=0, config=True, help=
220 """
220 """
221 Make IPython automatically call any callable object even if you didn't
221 Make IPython automatically call any callable object even if you didn't
222 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
222 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
223 automatically. The value can be '0' to disable the feature, '1' for
223 automatically. The value can be '0' to disable the feature, '1' for
224 'smart' autocall, where it is not applied if there are no more
224 'smart' autocall, where it is not applied if there are no more
225 arguments on the line, and '2' for 'full' autocall, where all callable
225 arguments on the line, and '2' for 'full' autocall, where all callable
226 objects are automatically called (even if no arguments are present).
226 objects are automatically called (even if no arguments are present).
227 """
227 """
228 )
228 )
229 # TODO: remove all autoindent logic and put into frontends.
229 # TODO: remove all autoindent logic and put into frontends.
230 # We can't do this yet because even runlines uses the autoindent.
230 # We can't do this yet because even runlines uses the autoindent.
231 autoindent = CBool(True, config=True, help=
231 autoindent = CBool(True, config=True, help=
232 """
232 """
233 Autoindent IPython code entered interactively.
233 Autoindent IPython code entered interactively.
234 """
234 """
235 )
235 )
236 automagic = CBool(True, config=True, help=
236 automagic = CBool(True, config=True, help=
237 """
237 """
238 Enable magic commands to be called without the leading %.
238 Enable magic commands to be called without the leading %.
239 """
239 """
240 )
240 )
241 cache_size = Integer(1000, config=True, help=
241 cache_size = Integer(1000, config=True, help=
242 """
242 """
243 Set the size of the output cache. The default is 1000, you can
243 Set the size of the output cache. The default is 1000, you can
244 change it permanently in your config file. Setting it to 0 completely
244 change it permanently in your config file. Setting it to 0 completely
245 disables the caching system, and the minimum value accepted is 20 (if
245 disables the caching system, and the minimum value accepted is 20 (if
246 you provide a value less than 20, it is reset to 0 and a warning is
246 you provide a value less than 20, it is reset to 0 and a warning is
247 issued). This limit is defined because otherwise you'll spend more
247 issued). This limit is defined because otherwise you'll spend more
248 time re-flushing a too small cache than working
248 time re-flushing a too small cache than working
249 """
249 """
250 )
250 )
251 color_info = CBool(True, config=True, help=
251 color_info = CBool(True, config=True, help=
252 """
252 """
253 Use colors for displaying information about objects. Because this
253 Use colors for displaying information about objects. Because this
254 information is passed through a pager (like 'less'), and some pagers
254 information is passed through a pager (like 'less'), and some pagers
255 get confused with color codes, this capability can be turned off.
255 get confused with color codes, this capability can be turned off.
256 """
256 """
257 )
257 )
258 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
258 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
259 default_value=get_default_colors(), config=True,
259 default_value=get_default_colors(), config=True,
260 help="Set the color scheme (NoColor, Linux, or LightBG)."
260 help="Set the color scheme (NoColor, Linux, or LightBG)."
261 )
261 )
262 colors_force = CBool(False, help=
262 colors_force = CBool(False, help=
263 """
263 """
264 Force use of ANSI color codes, regardless of OS and readline
264 Force use of ANSI color codes, regardless of OS and readline
265 availability.
265 availability.
266 """
266 """
267 # FIXME: This is essentially a hack to allow ZMQShell to show colors
267 # FIXME: This is essentially a hack to allow ZMQShell to show colors
268 # without readline on Win32. When the ZMQ formatting system is
268 # without readline on Win32. When the ZMQ formatting system is
269 # refactored, this should be removed.
269 # refactored, this should be removed.
270 )
270 )
271 debug = CBool(False, config=True)
271 debug = CBool(False, config=True)
272 deep_reload = CBool(False, config=True, help=
272 deep_reload = CBool(False, config=True, help=
273 """
273 """
274 Enable deep (recursive) reloading by default. IPython can use the
274 Enable deep (recursive) reloading by default. IPython can use the
275 deep_reload module which reloads changes in modules recursively (it
275 deep_reload module which reloads changes in modules recursively (it
276 replaces the reload() function, so you don't need to change anything to
276 replaces the reload() function, so you don't need to change anything to
277 use it). deep_reload() forces a full reload of modules whose code may
277 use it). deep_reload() forces a full reload of modules whose code may
278 have changed, which the default reload() function does not. When
278 have changed, which the default reload() function does not. When
279 deep_reload is off, IPython will use the normal reload(), but
279 deep_reload is off, IPython will use the normal reload(), but
280 deep_reload will still be available as dreload().
280 deep_reload will still be available as dreload().
281 """
281 """
282 )
282 )
283 disable_failing_post_execute = CBool(False, config=True,
283 disable_failing_post_execute = CBool(False, config=True,
284 help="Don't call post-execute functions that have failed in the past."
284 help="Don't call post-execute functions that have failed in the past."
285 )
285 )
286 display_formatter = Instance(DisplayFormatter)
286 display_formatter = Instance(DisplayFormatter)
287 displayhook_class = Type(DisplayHook)
287 displayhook_class = Type(DisplayHook)
288 display_pub_class = Type(DisplayPublisher)
288 display_pub_class = Type(DisplayPublisher)
289
289
290 exit_now = CBool(False)
290 exit_now = CBool(False)
291 exiter = Instance(ExitAutocall)
291 exiter = Instance(ExitAutocall)
292 def _exiter_default(self):
292 def _exiter_default(self):
293 return ExitAutocall(self)
293 return ExitAutocall(self)
294 # Monotonically increasing execution counter
294 # Monotonically increasing execution counter
295 execution_count = Integer(1)
295 execution_count = Integer(1)
296 filename = Unicode("<ipython console>")
296 filename = Unicode("<ipython console>")
297 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
297 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
298
298
299 # Input splitter, to split entire cells of input into either individual
299 # Input splitter, to split entire cells of input into either individual
300 # interactive statements or whole blocks.
300 # interactive statements or whole blocks.
301 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
301 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
302 (), {})
302 (), {})
303 logstart = CBool(False, config=True, help=
303 logstart = CBool(False, config=True, help=
304 """
304 """
305 Start logging to the default log file.
305 Start logging to the default log file.
306 """
306 """
307 )
307 )
308 logfile = Unicode('', config=True, help=
308 logfile = Unicode('', config=True, help=
309 """
309 """
310 The name of the logfile to use.
310 The name of the logfile to use.
311 """
311 """
312 )
312 )
313 logappend = Unicode('', config=True, help=
313 logappend = Unicode('', config=True, help=
314 """
314 """
315 Start logging to the given file in append mode.
315 Start logging to the given file in append mode.
316 """
316 """
317 )
317 )
318 object_info_string_level = Enum((0,1,2), default_value=0,
318 object_info_string_level = Enum((0,1,2), default_value=0,
319 config=True)
319 config=True)
320 pdb = CBool(False, config=True, help=
320 pdb = CBool(False, config=True, help=
321 """
321 """
322 Automatically call the pdb debugger after every exception.
322 Automatically call the pdb debugger after every exception.
323 """
323 """
324 )
324 )
325 multiline_history = CBool(sys.platform != 'win32', config=True,
325 multiline_history = CBool(sys.platform != 'win32', config=True,
326 help="Save multi-line entries as one entry in readline history"
326 help="Save multi-line entries as one entry in readline history"
327 )
327 )
328
328
329 # deprecated prompt traits:
329 # deprecated prompt traits:
330
330
331 prompt_in1 = Unicode('In [\\#]: ', config=True,
331 prompt_in1 = Unicode('In [\\#]: ', config=True,
332 help="Deprecated, use PromptManager.in_template")
332 help="Deprecated, use PromptManager.in_template")
333 prompt_in2 = Unicode(' .\\D.: ', config=True,
333 prompt_in2 = Unicode(' .\\D.: ', config=True,
334 help="Deprecated, use PromptManager.in2_template")
334 help="Deprecated, use PromptManager.in2_template")
335 prompt_out = Unicode('Out[\\#]: ', config=True,
335 prompt_out = Unicode('Out[\\#]: ', config=True,
336 help="Deprecated, use PromptManager.out_template")
336 help="Deprecated, use PromptManager.out_template")
337 prompts_pad_left = CBool(True, config=True,
337 prompts_pad_left = CBool(True, config=True,
338 help="Deprecated, use PromptManager.justify")
338 help="Deprecated, use PromptManager.justify")
339
339
340 def _prompt_trait_changed(self, name, old, new):
340 def _prompt_trait_changed(self, name, old, new):
341 table = {
341 table = {
342 'prompt_in1' : 'in_template',
342 'prompt_in1' : 'in_template',
343 'prompt_in2' : 'in2_template',
343 'prompt_in2' : 'in2_template',
344 'prompt_out' : 'out_template',
344 'prompt_out' : 'out_template',
345 'prompts_pad_left' : 'justify',
345 'prompts_pad_left' : 'justify',
346 }
346 }
347 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
347 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
348 name=name, newname=table[name])
348 name=name, newname=table[name])
349 )
349 )
350 # protect against weird cases where self.config may not exist:
350 # protect against weird cases where self.config may not exist:
351 if self.config is not None:
351 if self.config is not None:
352 # propagate to corresponding PromptManager trait
352 # propagate to corresponding PromptManager trait
353 setattr(self.config.PromptManager, table[name], new)
353 setattr(self.config.PromptManager, table[name], new)
354
354
355 _prompt_in1_changed = _prompt_trait_changed
355 _prompt_in1_changed = _prompt_trait_changed
356 _prompt_in2_changed = _prompt_trait_changed
356 _prompt_in2_changed = _prompt_trait_changed
357 _prompt_out_changed = _prompt_trait_changed
357 _prompt_out_changed = _prompt_trait_changed
358 _prompt_pad_left_changed = _prompt_trait_changed
358 _prompt_pad_left_changed = _prompt_trait_changed
359
359
360 show_rewritten_input = CBool(True, config=True,
360 show_rewritten_input = CBool(True, config=True,
361 help="Show rewritten input, e.g. for autocall."
361 help="Show rewritten input, e.g. for autocall."
362 )
362 )
363
363
364 quiet = CBool(False, config=True)
364 quiet = CBool(False, config=True)
365
365
366 history_length = Integer(10000, config=True)
366 history_length = Integer(10000, config=True)
367
367
368 # The readline stuff will eventually be moved to the terminal subclass
368 # The readline stuff will eventually be moved to the terminal subclass
369 # but for now, we can't do that as readline is welded in everywhere.
369 # but for now, we can't do that as readline is welded in everywhere.
370 readline_use = CBool(True, config=True)
370 readline_use = CBool(True, config=True)
371 readline_remove_delims = Unicode('-/~', config=True)
371 readline_remove_delims = Unicode('-/~', config=True)
372 # don't use \M- bindings by default, because they
372 # don't use \M- bindings by default, because they
373 # conflict with 8-bit encodings. See gh-58,gh-88
373 # conflict with 8-bit encodings. See gh-58,gh-88
374 readline_parse_and_bind = List([
374 readline_parse_and_bind = List([
375 'tab: complete',
375 'tab: complete',
376 '"\C-l": clear-screen',
376 '"\C-l": clear-screen',
377 'set show-all-if-ambiguous on',
377 'set show-all-if-ambiguous on',
378 '"\C-o": tab-insert',
378 '"\C-o": tab-insert',
379 '"\C-r": reverse-search-history',
379 '"\C-r": reverse-search-history',
380 '"\C-s": forward-search-history',
380 '"\C-s": forward-search-history',
381 '"\C-p": history-search-backward',
381 '"\C-p": history-search-backward',
382 '"\C-n": history-search-forward',
382 '"\C-n": history-search-forward',
383 '"\e[A": history-search-backward',
383 '"\e[A": history-search-backward',
384 '"\e[B": history-search-forward',
384 '"\e[B": history-search-forward',
385 '"\C-k": kill-line',
385 '"\C-k": kill-line',
386 '"\C-u": unix-line-discard',
386 '"\C-u": unix-line-discard',
387 ], allow_none=False, config=True)
387 ], allow_none=False, config=True)
388
388
389 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none'],
389 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none'],
390 default_value='last_expr', config=True,
390 default_value='last_expr', config=True,
391 help="""
391 help="""
392 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
392 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
393 run interactively (displaying output from expressions).""")
393 run interactively (displaying output from expressions).""")
394
394
395 # TODO: this part of prompt management should be moved to the frontends.
395 # TODO: this part of prompt management should be moved to the frontends.
396 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
396 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
397 separate_in = SeparateUnicode('\n', config=True)
397 separate_in = SeparateUnicode('\n', config=True)
398 separate_out = SeparateUnicode('', config=True)
398 separate_out = SeparateUnicode('', config=True)
399 separate_out2 = SeparateUnicode('', config=True)
399 separate_out2 = SeparateUnicode('', config=True)
400 wildcards_case_sensitive = CBool(True, config=True)
400 wildcards_case_sensitive = CBool(True, config=True)
401 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
401 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
402 default_value='Context', config=True)
402 default_value='Context', config=True)
403
403
404 # Subcomponents of InteractiveShell
404 # Subcomponents of InteractiveShell
405 alias_manager = Instance('IPython.core.alias.AliasManager')
405 alias_manager = Instance('IPython.core.alias.AliasManager')
406 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
406 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
407 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
407 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
408 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
408 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
409 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
409 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
410 plugin_manager = Instance('IPython.core.plugin.PluginManager')
410 plugin_manager = Instance('IPython.core.plugin.PluginManager')
411 payload_manager = Instance('IPython.core.payload.PayloadManager')
411 payload_manager = Instance('IPython.core.payload.PayloadManager')
412 history_manager = Instance('IPython.core.history.HistoryManager')
412 history_manager = Instance('IPython.core.history.HistoryManager')
413 magics_manager = Instance('IPython.core.magic.MagicsManager')
413 magics_manager = Instance('IPython.core.magic.MagicsManager')
414
414
415 profile_dir = Instance('IPython.core.application.ProfileDir')
415 profile_dir = Instance('IPython.core.application.ProfileDir')
416 @property
416 @property
417 def profile(self):
417 def profile(self):
418 if self.profile_dir is not None:
418 if self.profile_dir is not None:
419 name = os.path.basename(self.profile_dir.location)
419 name = os.path.basename(self.profile_dir.location)
420 return name.replace('profile_','')
420 return name.replace('profile_','')
421
421
422
422
423 # Private interface
423 # Private interface
424 _post_execute = Instance(dict)
424 _post_execute = Instance(dict)
425
425
426 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
426 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
427 user_module=None, user_ns=None,
427 user_module=None, user_ns=None,
428 custom_exceptions=((), None)):
428 custom_exceptions=((), None)):
429
429
430 # This is where traits with a config_key argument are updated
430 # This is where traits with a config_key argument are updated
431 # from the values on config.
431 # from the values on config.
432 super(InteractiveShell, self).__init__(config=config)
432 super(InteractiveShell, self).__init__(config=config)
433 self.configurables = [self]
433 self.configurables = [self]
434
434
435 # These are relatively independent and stateless
435 # These are relatively independent and stateless
436 self.init_ipython_dir(ipython_dir)
436 self.init_ipython_dir(ipython_dir)
437 self.init_profile_dir(profile_dir)
437 self.init_profile_dir(profile_dir)
438 self.init_instance_attrs()
438 self.init_instance_attrs()
439 self.init_environment()
439 self.init_environment()
440
440
441 # Check if we're in a virtualenv, and set up sys.path.
441 # Check if we're in a virtualenv, and set up sys.path.
442 self.init_virtualenv()
442 self.init_virtualenv()
443
443
444 # Create namespaces (user_ns, user_global_ns, etc.)
444 # Create namespaces (user_ns, user_global_ns, etc.)
445 self.init_create_namespaces(user_module, user_ns)
445 self.init_create_namespaces(user_module, user_ns)
446 # This has to be done after init_create_namespaces because it uses
446 # This has to be done after init_create_namespaces because it uses
447 # something in self.user_ns, but before init_sys_modules, which
447 # something in self.user_ns, but before init_sys_modules, which
448 # is the first thing to modify sys.
448 # is the first thing to modify sys.
449 # TODO: When we override sys.stdout and sys.stderr before this class
449 # TODO: When we override sys.stdout and sys.stderr before this class
450 # is created, we are saving the overridden ones here. Not sure if this
450 # is created, we are saving the overridden ones here. Not sure if this
451 # is what we want to do.
451 # is what we want to do.
452 self.save_sys_module_state()
452 self.save_sys_module_state()
453 self.init_sys_modules()
453 self.init_sys_modules()
454
454
455 # While we're trying to have each part of the code directly access what
455 # While we're trying to have each part of the code directly access what
456 # it needs without keeping redundant references to objects, we have too
456 # it needs without keeping redundant references to objects, we have too
457 # much legacy code that expects ip.db to exist.
457 # much legacy code that expects ip.db to exist.
458 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
458 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
459
459
460 self.init_history()
460 self.init_history()
461 self.init_encoding()
461 self.init_encoding()
462 self.init_prefilter()
462 self.init_prefilter()
463
463
464 self.init_syntax_highlighting()
464 self.init_syntax_highlighting()
465 self.init_hooks()
465 self.init_hooks()
466 self.init_pushd_popd_magic()
466 self.init_pushd_popd_magic()
467 # self.init_traceback_handlers use to be here, but we moved it below
467 # self.init_traceback_handlers use to be here, but we moved it below
468 # because it and init_io have to come after init_readline.
468 # because it and init_io have to come after init_readline.
469 self.init_user_ns()
469 self.init_user_ns()
470 self.init_logger()
470 self.init_logger()
471 self.init_alias()
471 self.init_alias()
472 self.init_builtins()
472 self.init_builtins()
473
473
474 # The following was in post_config_initialization
474 # The following was in post_config_initialization
475 self.init_inspector()
475 self.init_inspector()
476 # init_readline() must come before init_io(), because init_io uses
476 # init_readline() must come before init_io(), because init_io uses
477 # readline related things.
477 # readline related things.
478 self.init_readline()
478 self.init_readline()
479 # We save this here in case user code replaces raw_input, but it needs
479 # We save this here in case user code replaces raw_input, but it needs
480 # to be after init_readline(), because PyPy's readline works by replacing
480 # to be after init_readline(), because PyPy's readline works by replacing
481 # raw_input.
481 # raw_input.
482 if py3compat.PY3:
482 if py3compat.PY3:
483 self.raw_input_original = input
483 self.raw_input_original = input
484 else:
484 else:
485 self.raw_input_original = raw_input
485 self.raw_input_original = raw_input
486 # init_completer must come after init_readline, because it needs to
486 # init_completer must come after init_readline, because it needs to
487 # know whether readline is present or not system-wide to configure the
487 # know whether readline is present or not system-wide to configure the
488 # completers, since the completion machinery can now operate
488 # completers, since the completion machinery can now operate
489 # independently of readline (e.g. over the network)
489 # independently of readline (e.g. over the network)
490 self.init_completer()
490 self.init_completer()
491 # TODO: init_io() needs to happen before init_traceback handlers
491 # TODO: init_io() needs to happen before init_traceback handlers
492 # because the traceback handlers hardcode the stdout/stderr streams.
492 # because the traceback handlers hardcode the stdout/stderr streams.
493 # This logic in in debugger.Pdb and should eventually be changed.
493 # This logic in in debugger.Pdb and should eventually be changed.
494 self.init_io()
494 self.init_io()
495 self.init_traceback_handlers(custom_exceptions)
495 self.init_traceback_handlers(custom_exceptions)
496 self.init_prompts()
496 self.init_prompts()
497 self.init_display_formatter()
497 self.init_display_formatter()
498 self.init_display_pub()
498 self.init_display_pub()
499 self.init_displayhook()
499 self.init_displayhook()
500 self.init_reload_doctest()
500 self.init_reload_doctest()
501 self.init_latextool()
501 self.init_latextool()
502 self.init_magics()
502 self.init_magics()
503 self.init_logstart()
503 self.init_logstart()
504 self.init_pdb()
504 self.init_pdb()
505 self.init_extension_manager()
505 self.init_extension_manager()
506 self.init_plugin_manager()
506 self.init_plugin_manager()
507 self.init_payload()
507 self.init_payload()
508 self.hooks.late_startup_hook()
508 self.hooks.late_startup_hook()
509 atexit.register(self.atexit_operations)
509 atexit.register(self.atexit_operations)
510
510
511 def get_ipython(self):
511 def get_ipython(self):
512 """Return the currently running IPython instance."""
512 """Return the currently running IPython instance."""
513 return self
513 return self
514
514
515 #-------------------------------------------------------------------------
515 #-------------------------------------------------------------------------
516 # Trait changed handlers
516 # Trait changed handlers
517 #-------------------------------------------------------------------------
517 #-------------------------------------------------------------------------
518
518
519 def _ipython_dir_changed(self, name, new):
519 def _ipython_dir_changed(self, name, new):
520 if not os.path.isdir(new):
520 if not os.path.isdir(new):
521 os.makedirs(new, mode = 0777)
521 os.makedirs(new, mode = 0777)
522
522
523 def set_autoindent(self,value=None):
523 def set_autoindent(self,value=None):
524 """Set the autoindent flag, checking for readline support.
524 """Set the autoindent flag, checking for readline support.
525
525
526 If called with no arguments, it acts as a toggle."""
526 If called with no arguments, it acts as a toggle."""
527
527
528 if value != 0 and not self.has_readline:
528 if value != 0 and not self.has_readline:
529 if os.name == 'posix':
529 if os.name == 'posix':
530 warn("The auto-indent feature requires the readline library")
530 warn("The auto-indent feature requires the readline library")
531 self.autoindent = 0
531 self.autoindent = 0
532 return
532 return
533 if value is None:
533 if value is None:
534 self.autoindent = not self.autoindent
534 self.autoindent = not self.autoindent
535 else:
535 else:
536 self.autoindent = value
536 self.autoindent = value
537
537
538 #-------------------------------------------------------------------------
538 #-------------------------------------------------------------------------
539 # init_* methods called by __init__
539 # init_* methods called by __init__
540 #-------------------------------------------------------------------------
540 #-------------------------------------------------------------------------
541
541
542 def init_ipython_dir(self, ipython_dir):
542 def init_ipython_dir(self, ipython_dir):
543 if ipython_dir is not None:
543 if ipython_dir is not None:
544 self.ipython_dir = ipython_dir
544 self.ipython_dir = ipython_dir
545 return
545 return
546
546
547 self.ipython_dir = get_ipython_dir()
547 self.ipython_dir = get_ipython_dir()
548
548
549 def init_profile_dir(self, profile_dir):
549 def init_profile_dir(self, profile_dir):
550 if profile_dir is not None:
550 if profile_dir is not None:
551 self.profile_dir = profile_dir
551 self.profile_dir = profile_dir
552 return
552 return
553 self.profile_dir =\
553 self.profile_dir =\
554 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
554 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
555
555
556 def init_instance_attrs(self):
556 def init_instance_attrs(self):
557 self.more = False
557 self.more = False
558
558
559 # command compiler
559 # command compiler
560 self.compile = CachingCompiler()
560 self.compile = CachingCompiler()
561
561
562 # Make an empty namespace, which extension writers can rely on both
562 # Make an empty namespace, which extension writers can rely on both
563 # existing and NEVER being used by ipython itself. This gives them a
563 # existing and NEVER being used by ipython itself. This gives them a
564 # convenient location for storing additional information and state
564 # convenient location for storing additional information and state
565 # their extensions may require, without fear of collisions with other
565 # their extensions may require, without fear of collisions with other
566 # ipython names that may develop later.
566 # ipython names that may develop later.
567 self.meta = Struct()
567 self.meta = Struct()
568
568
569 # Temporary files used for various purposes. Deleted at exit.
569 # Temporary files used for various purposes. Deleted at exit.
570 self.tempfiles = []
570 self.tempfiles = []
571
571
572 # Keep track of readline usage (later set by init_readline)
572 # Keep track of readline usage (later set by init_readline)
573 self.has_readline = False
573 self.has_readline = False
574
574
575 # keep track of where we started running (mainly for crash post-mortem)
575 # keep track of where we started running (mainly for crash post-mortem)
576 # This is not being used anywhere currently.
576 # This is not being used anywhere currently.
577 self.starting_dir = os.getcwdu()
577 self.starting_dir = os.getcwdu()
578
578
579 # Indentation management
579 # Indentation management
580 self.indent_current_nsp = 0
580 self.indent_current_nsp = 0
581
581
582 # Dict to track post-execution functions that have been registered
582 # Dict to track post-execution functions that have been registered
583 self._post_execute = {}
583 self._post_execute = {}
584
584
585 def init_environment(self):
585 def init_environment(self):
586 """Any changes we need to make to the user's environment."""
586 """Any changes we need to make to the user's environment."""
587 pass
587 pass
588
588
589 def init_encoding(self):
589 def init_encoding(self):
590 # Get system encoding at startup time. Certain terminals (like Emacs
590 # Get system encoding at startup time. Certain terminals (like Emacs
591 # under Win32 have it set to None, and we need to have a known valid
591 # under Win32 have it set to None, and we need to have a known valid
592 # encoding to use in the raw_input() method
592 # encoding to use in the raw_input() method
593 try:
593 try:
594 self.stdin_encoding = sys.stdin.encoding or 'ascii'
594 self.stdin_encoding = sys.stdin.encoding or 'ascii'
595 except AttributeError:
595 except AttributeError:
596 self.stdin_encoding = 'ascii'
596 self.stdin_encoding = 'ascii'
597
597
598 def init_syntax_highlighting(self):
598 def init_syntax_highlighting(self):
599 # Python source parser/formatter for syntax highlighting
599 # Python source parser/formatter for syntax highlighting
600 pyformat = PyColorize.Parser().format
600 pyformat = PyColorize.Parser().format
601 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
601 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
602
602
603 def init_pushd_popd_magic(self):
603 def init_pushd_popd_magic(self):
604 # for pushd/popd management
604 # for pushd/popd management
605 self.home_dir = get_home_dir()
605 self.home_dir = get_home_dir()
606
606
607 self.dir_stack = []
607 self.dir_stack = []
608
608
609 def init_logger(self):
609 def init_logger(self):
610 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
610 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
611 logmode='rotate')
611 logmode='rotate')
612
612
613 def init_logstart(self):
613 def init_logstart(self):
614 """Initialize logging in case it was requested at the command line.
614 """Initialize logging in case it was requested at the command line.
615 """
615 """
616 if self.logappend:
616 if self.logappend:
617 self.magic('logstart %s append' % self.logappend)
617 self.magic('logstart %s append' % self.logappend)
618 elif self.logfile:
618 elif self.logfile:
619 self.magic('logstart %s' % self.logfile)
619 self.magic('logstart %s' % self.logfile)
620 elif self.logstart:
620 elif self.logstart:
621 self.magic('logstart')
621 self.magic('logstart')
622
622
623 def init_builtins(self):
623 def init_builtins(self):
624 # A single, static flag that we set to True. Its presence indicates
624 # A single, static flag that we set to True. Its presence indicates
625 # that an IPython shell has been created, and we make no attempts at
625 # that an IPython shell has been created, and we make no attempts at
626 # removing on exit or representing the existence of more than one
626 # removing on exit or representing the existence of more than one
627 # IPython at a time.
627 # IPython at a time.
628 builtin_mod.__dict__['__IPYTHON__'] = True
628 builtin_mod.__dict__['__IPYTHON__'] = True
629
629
630 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
630 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
631 # manage on enter/exit, but with all our shells it's virtually
631 # manage on enter/exit, but with all our shells it's virtually
632 # impossible to get all the cases right. We're leaving the name in for
632 # impossible to get all the cases right. We're leaving the name in for
633 # those who adapted their codes to check for this flag, but will
633 # those who adapted their codes to check for this flag, but will
634 # eventually remove it after a few more releases.
634 # eventually remove it after a few more releases.
635 builtin_mod.__dict__['__IPYTHON__active'] = \
635 builtin_mod.__dict__['__IPYTHON__active'] = \
636 'Deprecated, check for __IPYTHON__'
636 'Deprecated, check for __IPYTHON__'
637
637
638 self.builtin_trap = BuiltinTrap(shell=self)
638 self.builtin_trap = BuiltinTrap(shell=self)
639
639
640 def init_inspector(self):
640 def init_inspector(self):
641 # Object inspector
641 # Object inspector
642 self.inspector = oinspect.Inspector(oinspect.InspectColors,
642 self.inspector = oinspect.Inspector(oinspect.InspectColors,
643 PyColorize.ANSICodeColors,
643 PyColorize.ANSICodeColors,
644 'NoColor',
644 'NoColor',
645 self.object_info_string_level)
645 self.object_info_string_level)
646
646
647 def init_io(self):
647 def init_io(self):
648 # This will just use sys.stdout and sys.stderr. If you want to
648 # This will just use sys.stdout and sys.stderr. If you want to
649 # override sys.stdout and sys.stderr themselves, you need to do that
649 # override sys.stdout and sys.stderr themselves, you need to do that
650 # *before* instantiating this class, because io holds onto
650 # *before* instantiating this class, because io holds onto
651 # references to the underlying streams.
651 # references to the underlying streams.
652 if sys.platform == 'win32' and self.has_readline:
652 if sys.platform == 'win32' and self.has_readline:
653 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
653 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
654 else:
654 else:
655 io.stdout = io.IOStream(sys.stdout)
655 io.stdout = io.IOStream(sys.stdout)
656 io.stderr = io.IOStream(sys.stderr)
656 io.stderr = io.IOStream(sys.stderr)
657
657
658 def init_prompts(self):
658 def init_prompts(self):
659 self.prompt_manager = PromptManager(shell=self, config=self.config)
659 self.prompt_manager = PromptManager(shell=self, config=self.config)
660 self.configurables.append(self.prompt_manager)
660 self.configurables.append(self.prompt_manager)
661 # Set system prompts, so that scripts can decide if they are running
661 # Set system prompts, so that scripts can decide if they are running
662 # interactively.
662 # interactively.
663 sys.ps1 = 'In : '
663 sys.ps1 = 'In : '
664 sys.ps2 = '...: '
664 sys.ps2 = '...: '
665 sys.ps3 = 'Out: '
665 sys.ps3 = 'Out: '
666
666
667 def init_display_formatter(self):
667 def init_display_formatter(self):
668 self.display_formatter = DisplayFormatter(config=self.config)
668 self.display_formatter = DisplayFormatter(config=self.config)
669 self.configurables.append(self.display_formatter)
669 self.configurables.append(self.display_formatter)
670
670
671 def init_display_pub(self):
671 def init_display_pub(self):
672 self.display_pub = self.display_pub_class(config=self.config)
672 self.display_pub = self.display_pub_class(config=self.config)
673 self.configurables.append(self.display_pub)
673 self.configurables.append(self.display_pub)
674
674
675 def init_displayhook(self):
675 def init_displayhook(self):
676 # Initialize displayhook, set in/out prompts and printing system
676 # Initialize displayhook, set in/out prompts and printing system
677 self.displayhook = self.displayhook_class(
677 self.displayhook = self.displayhook_class(
678 config=self.config,
678 config=self.config,
679 shell=self,
679 shell=self,
680 cache_size=self.cache_size,
680 cache_size=self.cache_size,
681 )
681 )
682 self.configurables.append(self.displayhook)
682 self.configurables.append(self.displayhook)
683 # This is a context manager that installs/revmoes the displayhook at
683 # This is a context manager that installs/revmoes the displayhook at
684 # the appropriate time.
684 # the appropriate time.
685 self.display_trap = DisplayTrap(hook=self.displayhook)
685 self.display_trap = DisplayTrap(hook=self.displayhook)
686
686
687 def init_reload_doctest(self):
687 def init_reload_doctest(self):
688 # Do a proper resetting of doctest, including the necessary displayhook
688 # Do a proper resetting of doctest, including the necessary displayhook
689 # monkeypatching
689 # monkeypatching
690 try:
690 try:
691 doctest_reload()
691 doctest_reload()
692 except ImportError:
692 except ImportError:
693 warn("doctest module does not exist.")
693 warn("doctest module does not exist.")
694
694
695 def init_latextool(self):
695 def init_latextool(self):
696 """Configure LaTeXTool."""
696 """Configure LaTeXTool."""
697 cfg = LaTeXTool.instance(config=self.config)
697 cfg = LaTeXTool.instance(config=self.config)
698 if cfg not in self.configurables:
698 if cfg not in self.configurables:
699 self.configurables.append(cfg)
699 self.configurables.append(cfg)
700
700
701 def init_virtualenv(self):
701 def init_virtualenv(self):
702 """Add a virtualenv to sys.path so the user can import modules from it.
702 """Add a virtualenv to sys.path so the user can import modules from it.
703 This isn't perfect: it doesn't use the Python interpreter with which the
703 This isn't perfect: it doesn't use the Python interpreter with which the
704 virtualenv was built, and it ignores the --no-site-packages option. A
704 virtualenv was built, and it ignores the --no-site-packages option. A
705 warning will appear suggesting the user installs IPython in the
705 warning will appear suggesting the user installs IPython in the
706 virtualenv, but for many cases, it probably works well enough.
706 virtualenv, but for many cases, it probably works well enough.
707
707
708 Adapted from code snippets online.
708 Adapted from code snippets online.
709
709
710 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
710 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
711 """
711 """
712 if 'VIRTUAL_ENV' not in os.environ:
712 if 'VIRTUAL_ENV' not in os.environ:
713 # Not in a virtualenv
713 # Not in a virtualenv
714 return
714 return
715
715
716 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
716 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
717 # Running properly in the virtualenv, don't need to do anything
717 # Running properly in the virtualenv, don't need to do anything
718 return
718 return
719
719
720 warn("Attempting to work in a virtualenv. If you encounter problems, please "
720 warn("Attempting to work in a virtualenv. If you encounter problems, please "
721 "install IPython inside the virtualenv.\n")
721 "install IPython inside the virtualenv.\n")
722 if sys.platform == "win32":
722 if sys.platform == "win32":
723 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
723 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
724 else:
724 else:
725 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
725 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
726 'python%d.%d' % sys.version_info[:2], 'site-packages')
726 'python%d.%d' % sys.version_info[:2], 'site-packages')
727
727
728 import site
728 import site
729 sys.path.insert(0, virtual_env)
729 sys.path.insert(0, virtual_env)
730 site.addsitedir(virtual_env)
730 site.addsitedir(virtual_env)
731
731
732 #-------------------------------------------------------------------------
732 #-------------------------------------------------------------------------
733 # Things related to injections into the sys module
733 # Things related to injections into the sys module
734 #-------------------------------------------------------------------------
734 #-------------------------------------------------------------------------
735
735
736 def save_sys_module_state(self):
736 def save_sys_module_state(self):
737 """Save the state of hooks in the sys module.
737 """Save the state of hooks in the sys module.
738
738
739 This has to be called after self.user_module is created.
739 This has to be called after self.user_module is created.
740 """
740 """
741 self._orig_sys_module_state = {}
741 self._orig_sys_module_state = {}
742 self._orig_sys_module_state['stdin'] = sys.stdin
742 self._orig_sys_module_state['stdin'] = sys.stdin
743 self._orig_sys_module_state['stdout'] = sys.stdout
743 self._orig_sys_module_state['stdout'] = sys.stdout
744 self._orig_sys_module_state['stderr'] = sys.stderr
744 self._orig_sys_module_state['stderr'] = sys.stderr
745 self._orig_sys_module_state['excepthook'] = sys.excepthook
745 self._orig_sys_module_state['excepthook'] = sys.excepthook
746 self._orig_sys_modules_main_name = self.user_module.__name__
746 self._orig_sys_modules_main_name = self.user_module.__name__
747 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
747 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
748
748
749 def restore_sys_module_state(self):
749 def restore_sys_module_state(self):
750 """Restore the state of the sys module."""
750 """Restore the state of the sys module."""
751 try:
751 try:
752 for k, v in self._orig_sys_module_state.iteritems():
752 for k, v in self._orig_sys_module_state.iteritems():
753 setattr(sys, k, v)
753 setattr(sys, k, v)
754 except AttributeError:
754 except AttributeError:
755 pass
755 pass
756 # Reset what what done in self.init_sys_modules
756 # Reset what what done in self.init_sys_modules
757 if self._orig_sys_modules_main_mod is not None:
757 if self._orig_sys_modules_main_mod is not None:
758 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
758 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
759
759
760 #-------------------------------------------------------------------------
760 #-------------------------------------------------------------------------
761 # Things related to hooks
761 # Things related to hooks
762 #-------------------------------------------------------------------------
762 #-------------------------------------------------------------------------
763
763
764 def init_hooks(self):
764 def init_hooks(self):
765 # hooks holds pointers used for user-side customizations
765 # hooks holds pointers used for user-side customizations
766 self.hooks = Struct()
766 self.hooks = Struct()
767
767
768 self.strdispatchers = {}
768 self.strdispatchers = {}
769
769
770 # Set all default hooks, defined in the IPython.hooks module.
770 # Set all default hooks, defined in the IPython.hooks module.
771 hooks = IPython.core.hooks
771 hooks = IPython.core.hooks
772 for hook_name in hooks.__all__:
772 for hook_name in hooks.__all__:
773 # default hooks have priority 100, i.e. low; user hooks should have
773 # default hooks have priority 100, i.e. low; user hooks should have
774 # 0-100 priority
774 # 0-100 priority
775 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
775 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
776
776
777 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
777 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
778 """set_hook(name,hook) -> sets an internal IPython hook.
778 """set_hook(name,hook) -> sets an internal IPython hook.
779
779
780 IPython exposes some of its internal API as user-modifiable hooks. By
780 IPython exposes some of its internal API as user-modifiable hooks. By
781 adding your function to one of these hooks, you can modify IPython's
781 adding your function to one of these hooks, you can modify IPython's
782 behavior to call at runtime your own routines."""
782 behavior to call at runtime your own routines."""
783
783
784 # At some point in the future, this should validate the hook before it
784 # At some point in the future, this should validate the hook before it
785 # accepts it. Probably at least check that the hook takes the number
785 # accepts it. Probably at least check that the hook takes the number
786 # of args it's supposed to.
786 # of args it's supposed to.
787
787
788 f = types.MethodType(hook,self)
788 f = types.MethodType(hook,self)
789
789
790 # check if the hook is for strdispatcher first
790 # check if the hook is for strdispatcher first
791 if str_key is not None:
791 if str_key is not None:
792 sdp = self.strdispatchers.get(name, StrDispatch())
792 sdp = self.strdispatchers.get(name, StrDispatch())
793 sdp.add_s(str_key, f, priority )
793 sdp.add_s(str_key, f, priority )
794 self.strdispatchers[name] = sdp
794 self.strdispatchers[name] = sdp
795 return
795 return
796 if re_key is not None:
796 if re_key is not None:
797 sdp = self.strdispatchers.get(name, StrDispatch())
797 sdp = self.strdispatchers.get(name, StrDispatch())
798 sdp.add_re(re.compile(re_key), f, priority )
798 sdp.add_re(re.compile(re_key), f, priority )
799 self.strdispatchers[name] = sdp
799 self.strdispatchers[name] = sdp
800 return
800 return
801
801
802 dp = getattr(self.hooks, name, None)
802 dp = getattr(self.hooks, name, None)
803 if name not in IPython.core.hooks.__all__:
803 if name not in IPython.core.hooks.__all__:
804 print("Warning! Hook '%s' is not one of %s" % \
804 print("Warning! Hook '%s' is not one of %s" % \
805 (name, IPython.core.hooks.__all__ ))
805 (name, IPython.core.hooks.__all__ ))
806 if not dp:
806 if not dp:
807 dp = IPython.core.hooks.CommandChainDispatcher()
807 dp = IPython.core.hooks.CommandChainDispatcher()
808
808
809 try:
809 try:
810 dp.add(f,priority)
810 dp.add(f,priority)
811 except AttributeError:
811 except AttributeError:
812 # it was not commandchain, plain old func - replace
812 # it was not commandchain, plain old func - replace
813 dp = f
813 dp = f
814
814
815 setattr(self.hooks,name, dp)
815 setattr(self.hooks,name, dp)
816
816
817 def register_post_execute(self, func):
817 def register_post_execute(self, func):
818 """Register a function for calling after code execution.
818 """Register a function for calling after code execution.
819 """
819 """
820 if not callable(func):
820 if not callable(func):
821 raise ValueError('argument %s must be callable' % func)
821 raise ValueError('argument %s must be callable' % func)
822 self._post_execute[func] = True
822 self._post_execute[func] = True
823
823
824 #-------------------------------------------------------------------------
824 #-------------------------------------------------------------------------
825 # Things related to the "main" module
825 # Things related to the "main" module
826 #-------------------------------------------------------------------------
826 #-------------------------------------------------------------------------
827
827
828 def new_main_mod(self,ns=None):
828 def new_main_mod(self,ns=None):
829 """Return a new 'main' module object for user code execution.
829 """Return a new 'main' module object for user code execution.
830 """
830 """
831 main_mod = self._user_main_module
831 main_mod = self._user_main_module
832 init_fakemod_dict(main_mod,ns)
832 init_fakemod_dict(main_mod,ns)
833 return main_mod
833 return main_mod
834
834
835 def cache_main_mod(self,ns,fname):
835 def cache_main_mod(self,ns,fname):
836 """Cache a main module's namespace.
836 """Cache a main module's namespace.
837
837
838 When scripts are executed via %run, we must keep a reference to the
838 When scripts are executed via %run, we must keep a reference to the
839 namespace of their __main__ module (a FakeModule instance) around so
839 namespace of their __main__ module (a FakeModule instance) around so
840 that Python doesn't clear it, rendering objects defined therein
840 that Python doesn't clear it, rendering objects defined therein
841 useless.
841 useless.
842
842
843 This method keeps said reference in a private dict, keyed by the
843 This method keeps said reference in a private dict, keyed by the
844 absolute path of the module object (which corresponds to the script
844 absolute path of the module object (which corresponds to the script
845 path). This way, for multiple executions of the same script we only
845 path). This way, for multiple executions of the same script we only
846 keep one copy of the namespace (the last one), thus preventing memory
846 keep one copy of the namespace (the last one), thus preventing memory
847 leaks from old references while allowing the objects from the last
847 leaks from old references while allowing the objects from the last
848 execution to be accessible.
848 execution to be accessible.
849
849
850 Note: we can not allow the actual FakeModule instances to be deleted,
850 Note: we can not allow the actual FakeModule instances to be deleted,
851 because of how Python tears down modules (it hard-sets all their
851 because of how Python tears down modules (it hard-sets all their
852 references to None without regard for reference counts). This method
852 references to None without regard for reference counts). This method
853 must therefore make a *copy* of the given namespace, to allow the
853 must therefore make a *copy* of the given namespace, to allow the
854 original module's __dict__ to be cleared and reused.
854 original module's __dict__ to be cleared and reused.
855
855
856
856
857 Parameters
857 Parameters
858 ----------
858 ----------
859 ns : a namespace (a dict, typically)
859 ns : a namespace (a dict, typically)
860
860
861 fname : str
861 fname : str
862 Filename associated with the namespace.
862 Filename associated with the namespace.
863
863
864 Examples
864 Examples
865 --------
865 --------
866
866
867 In [10]: import IPython
867 In [10]: import IPython
868
868
869 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
869 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
870
870
871 In [12]: IPython.__file__ in _ip._main_ns_cache
871 In [12]: IPython.__file__ in _ip._main_ns_cache
872 Out[12]: True
872 Out[12]: True
873 """
873 """
874 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
874 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
875
875
876 def clear_main_mod_cache(self):
876 def clear_main_mod_cache(self):
877 """Clear the cache of main modules.
877 """Clear the cache of main modules.
878
878
879 Mainly for use by utilities like %reset.
879 Mainly for use by utilities like %reset.
880
880
881 Examples
881 Examples
882 --------
882 --------
883
883
884 In [15]: import IPython
884 In [15]: import IPython
885
885
886 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
886 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
887
887
888 In [17]: len(_ip._main_ns_cache) > 0
888 In [17]: len(_ip._main_ns_cache) > 0
889 Out[17]: True
889 Out[17]: True
890
890
891 In [18]: _ip.clear_main_mod_cache()
891 In [18]: _ip.clear_main_mod_cache()
892
892
893 In [19]: len(_ip._main_ns_cache) == 0
893 In [19]: len(_ip._main_ns_cache) == 0
894 Out[19]: True
894 Out[19]: True
895 """
895 """
896 self._main_ns_cache.clear()
896 self._main_ns_cache.clear()
897
897
898 #-------------------------------------------------------------------------
898 #-------------------------------------------------------------------------
899 # Things related to debugging
899 # Things related to debugging
900 #-------------------------------------------------------------------------
900 #-------------------------------------------------------------------------
901
901
902 def init_pdb(self):
902 def init_pdb(self):
903 # Set calling of pdb on exceptions
903 # Set calling of pdb on exceptions
904 # self.call_pdb is a property
904 # self.call_pdb is a property
905 self.call_pdb = self.pdb
905 self.call_pdb = self.pdb
906
906
907 def _get_call_pdb(self):
907 def _get_call_pdb(self):
908 return self._call_pdb
908 return self._call_pdb
909
909
910 def _set_call_pdb(self,val):
910 def _set_call_pdb(self,val):
911
911
912 if val not in (0,1,False,True):
912 if val not in (0,1,False,True):
913 raise ValueError('new call_pdb value must be boolean')
913 raise ValueError('new call_pdb value must be boolean')
914
914
915 # store value in instance
915 # store value in instance
916 self._call_pdb = val
916 self._call_pdb = val
917
917
918 # notify the actual exception handlers
918 # notify the actual exception handlers
919 self.InteractiveTB.call_pdb = val
919 self.InteractiveTB.call_pdb = val
920
920
921 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
921 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
922 'Control auto-activation of pdb at exceptions')
922 'Control auto-activation of pdb at exceptions')
923
923
924 def debugger(self,force=False):
924 def debugger(self,force=False):
925 """Call the pydb/pdb debugger.
925 """Call the pydb/pdb debugger.
926
926
927 Keywords:
927 Keywords:
928
928
929 - force(False): by default, this routine checks the instance call_pdb
929 - force(False): by default, this routine checks the instance call_pdb
930 flag and does not actually invoke the debugger if the flag is false.
930 flag and does not actually invoke the debugger if the flag is false.
931 The 'force' option forces the debugger to activate even if the flag
931 The 'force' option forces the debugger to activate even if the flag
932 is false.
932 is false.
933 """
933 """
934
934
935 if not (force or self.call_pdb):
935 if not (force or self.call_pdb):
936 return
936 return
937
937
938 if not hasattr(sys,'last_traceback'):
938 if not hasattr(sys,'last_traceback'):
939 error('No traceback has been produced, nothing to debug.')
939 error('No traceback has been produced, nothing to debug.')
940 return
940 return
941
941
942 # use pydb if available
942 # use pydb if available
943 if debugger.has_pydb:
943 if debugger.has_pydb:
944 from pydb import pm
944 from pydb import pm
945 else:
945 else:
946 # fallback to our internal debugger
946 # fallback to our internal debugger
947 pm = lambda : self.InteractiveTB.debugger(force=True)
947 pm = lambda : self.InteractiveTB.debugger(force=True)
948
948
949 with self.readline_no_record:
949 with self.readline_no_record:
950 pm()
950 pm()
951
951
952 #-------------------------------------------------------------------------
952 #-------------------------------------------------------------------------
953 # Things related to IPython's various namespaces
953 # Things related to IPython's various namespaces
954 #-------------------------------------------------------------------------
954 #-------------------------------------------------------------------------
955 default_user_namespaces = True
955 default_user_namespaces = True
956
956
957 def init_create_namespaces(self, user_module=None, user_ns=None):
957 def init_create_namespaces(self, user_module=None, user_ns=None):
958 # Create the namespace where the user will operate. user_ns is
958 # Create the namespace where the user will operate. user_ns is
959 # normally the only one used, and it is passed to the exec calls as
959 # normally the only one used, and it is passed to the exec calls as
960 # the locals argument. But we do carry a user_global_ns namespace
960 # the locals argument. But we do carry a user_global_ns namespace
961 # given as the exec 'globals' argument, This is useful in embedding
961 # given as the exec 'globals' argument, This is useful in embedding
962 # situations where the ipython shell opens in a context where the
962 # situations where the ipython shell opens in a context where the
963 # distinction between locals and globals is meaningful. For
963 # distinction between locals and globals is meaningful. For
964 # non-embedded contexts, it is just the same object as the user_ns dict.
964 # non-embedded contexts, it is just the same object as the user_ns dict.
965
965
966 # FIXME. For some strange reason, __builtins__ is showing up at user
966 # FIXME. For some strange reason, __builtins__ is showing up at user
967 # level as a dict instead of a module. This is a manual fix, but I
967 # level as a dict instead of a module. This is a manual fix, but I
968 # should really track down where the problem is coming from. Alex
968 # should really track down where the problem is coming from. Alex
969 # Schmolck reported this problem first.
969 # Schmolck reported this problem first.
970
970
971 # A useful post by Alex Martelli on this topic:
971 # A useful post by Alex Martelli on this topic:
972 # Re: inconsistent value from __builtins__
972 # Re: inconsistent value from __builtins__
973 # Von: Alex Martelli <aleaxit@yahoo.com>
973 # Von: Alex Martelli <aleaxit@yahoo.com>
974 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
974 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
975 # Gruppen: comp.lang.python
975 # Gruppen: comp.lang.python
976
976
977 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
977 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
978 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
978 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
979 # > <type 'dict'>
979 # > <type 'dict'>
980 # > >>> print type(__builtins__)
980 # > >>> print type(__builtins__)
981 # > <type 'module'>
981 # > <type 'module'>
982 # > Is this difference in return value intentional?
982 # > Is this difference in return value intentional?
983
983
984 # Well, it's documented that '__builtins__' can be either a dictionary
984 # Well, it's documented that '__builtins__' can be either a dictionary
985 # or a module, and it's been that way for a long time. Whether it's
985 # or a module, and it's been that way for a long time. Whether it's
986 # intentional (or sensible), I don't know. In any case, the idea is
986 # intentional (or sensible), I don't know. In any case, the idea is
987 # that if you need to access the built-in namespace directly, you
987 # that if you need to access the built-in namespace directly, you
988 # should start with "import __builtin__" (note, no 's') which will
988 # should start with "import __builtin__" (note, no 's') which will
989 # definitely give you a module. Yeah, it's somewhat confusing:-(.
989 # definitely give you a module. Yeah, it's somewhat confusing:-(.
990
990
991 # These routines return a properly built module and dict as needed by
991 # These routines return a properly built module and dict as needed by
992 # the rest of the code, and can also be used by extension writers to
992 # the rest of the code, and can also be used by extension writers to
993 # generate properly initialized namespaces.
993 # generate properly initialized namespaces.
994 if (user_ns is not None) or (user_module is not None):
994 if (user_ns is not None) or (user_module is not None):
995 self.default_user_namespaces = False
995 self.default_user_namespaces = False
996 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
996 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
997
997
998 # A record of hidden variables we have added to the user namespace, so
998 # A record of hidden variables we have added to the user namespace, so
999 # we can list later only variables defined in actual interactive use.
999 # we can list later only variables defined in actual interactive use.
1000 self.user_ns_hidden = set()
1000 self.user_ns_hidden = set()
1001
1001
1002 # Now that FakeModule produces a real module, we've run into a nasty
1002 # Now that FakeModule produces a real module, we've run into a nasty
1003 # problem: after script execution (via %run), the module where the user
1003 # problem: after script execution (via %run), the module where the user
1004 # code ran is deleted. Now that this object is a true module (needed
1004 # code ran is deleted. Now that this object is a true module (needed
1005 # so docetst and other tools work correctly), the Python module
1005 # so docetst and other tools work correctly), the Python module
1006 # teardown mechanism runs over it, and sets to None every variable
1006 # teardown mechanism runs over it, and sets to None every variable
1007 # present in that module. Top-level references to objects from the
1007 # present in that module. Top-level references to objects from the
1008 # script survive, because the user_ns is updated with them. However,
1008 # script survive, because the user_ns is updated with them. However,
1009 # calling functions defined in the script that use other things from
1009 # calling functions defined in the script that use other things from
1010 # the script will fail, because the function's closure had references
1010 # the script will fail, because the function's closure had references
1011 # to the original objects, which are now all None. So we must protect
1011 # to the original objects, which are now all None. So we must protect
1012 # these modules from deletion by keeping a cache.
1012 # these modules from deletion by keeping a cache.
1013 #
1013 #
1014 # To avoid keeping stale modules around (we only need the one from the
1014 # To avoid keeping stale modules around (we only need the one from the
1015 # last run), we use a dict keyed with the full path to the script, so
1015 # last run), we use a dict keyed with the full path to the script, so
1016 # only the last version of the module is held in the cache. Note,
1016 # only the last version of the module is held in the cache. Note,
1017 # however, that we must cache the module *namespace contents* (their
1017 # however, that we must cache the module *namespace contents* (their
1018 # __dict__). Because if we try to cache the actual modules, old ones
1018 # __dict__). Because if we try to cache the actual modules, old ones
1019 # (uncached) could be destroyed while still holding references (such as
1019 # (uncached) could be destroyed while still holding references (such as
1020 # those held by GUI objects that tend to be long-lived)>
1020 # those held by GUI objects that tend to be long-lived)>
1021 #
1021 #
1022 # The %reset command will flush this cache. See the cache_main_mod()
1022 # The %reset command will flush this cache. See the cache_main_mod()
1023 # and clear_main_mod_cache() methods for details on use.
1023 # and clear_main_mod_cache() methods for details on use.
1024
1024
1025 # This is the cache used for 'main' namespaces
1025 # This is the cache used for 'main' namespaces
1026 self._main_ns_cache = {}
1026 self._main_ns_cache = {}
1027 # And this is the single instance of FakeModule whose __dict__ we keep
1027 # And this is the single instance of FakeModule whose __dict__ we keep
1028 # copying and clearing for reuse on each %run
1028 # copying and clearing for reuse on each %run
1029 self._user_main_module = FakeModule()
1029 self._user_main_module = FakeModule()
1030
1030
1031 # A table holding all the namespaces IPython deals with, so that
1031 # A table holding all the namespaces IPython deals with, so that
1032 # introspection facilities can search easily.
1032 # introspection facilities can search easily.
1033 self.ns_table = {'user_global':self.user_module.__dict__,
1033 self.ns_table = {'user_global':self.user_module.__dict__,
1034 'user_local':self.user_ns,
1034 'user_local':self.user_ns,
1035 'builtin':builtin_mod.__dict__
1035 'builtin':builtin_mod.__dict__
1036 }
1036 }
1037
1037
1038 @property
1038 @property
1039 def user_global_ns(self):
1039 def user_global_ns(self):
1040 return self.user_module.__dict__
1040 return self.user_module.__dict__
1041
1041
1042 def prepare_user_module(self, user_module=None, user_ns=None):
1042 def prepare_user_module(self, user_module=None, user_ns=None):
1043 """Prepare the module and namespace in which user code will be run.
1043 """Prepare the module and namespace in which user code will be run.
1044
1044
1045 When IPython is started normally, both parameters are None: a new module
1045 When IPython is started normally, both parameters are None: a new module
1046 is created automatically, and its __dict__ used as the namespace.
1046 is created automatically, and its __dict__ used as the namespace.
1047
1047
1048 If only user_module is provided, its __dict__ is used as the namespace.
1048 If only user_module is provided, its __dict__ is used as the namespace.
1049 If only user_ns is provided, a dummy module is created, and user_ns
1049 If only user_ns is provided, a dummy module is created, and user_ns
1050 becomes the global namespace. If both are provided (as they may be
1050 becomes the global namespace. If both are provided (as they may be
1051 when embedding), user_ns is the local namespace, and user_module
1051 when embedding), user_ns is the local namespace, and user_module
1052 provides the global namespace.
1052 provides the global namespace.
1053
1053
1054 Parameters
1054 Parameters
1055 ----------
1055 ----------
1056 user_module : module, optional
1056 user_module : module, optional
1057 The current user module in which IPython is being run. If None,
1057 The current user module in which IPython is being run. If None,
1058 a clean module will be created.
1058 a clean module will be created.
1059 user_ns : dict, optional
1059 user_ns : dict, optional
1060 A namespace in which to run interactive commands.
1060 A namespace in which to run interactive commands.
1061
1061
1062 Returns
1062 Returns
1063 -------
1063 -------
1064 A tuple of user_module and user_ns, each properly initialised.
1064 A tuple of user_module and user_ns, each properly initialised.
1065 """
1065 """
1066 if user_module is None and user_ns is not None:
1066 if user_module is None and user_ns is not None:
1067 user_ns.setdefault("__name__", "__main__")
1067 user_ns.setdefault("__name__", "__main__")
1068 class DummyMod(object):
1068 class DummyMod(object):
1069 "A dummy module used for IPython's interactive namespace."
1069 "A dummy module used for IPython's interactive namespace."
1070 pass
1070 pass
1071 user_module = DummyMod()
1071 user_module = DummyMod()
1072 user_module.__dict__ = user_ns
1072 user_module.__dict__ = user_ns
1073
1073
1074 if user_module is None:
1074 if user_module is None:
1075 user_module = types.ModuleType("__main__",
1075 user_module = types.ModuleType("__main__",
1076 doc="Automatically created module for IPython interactive environment")
1076 doc="Automatically created module for IPython interactive environment")
1077
1077
1078 # We must ensure that __builtin__ (without the final 's') is always
1078 # We must ensure that __builtin__ (without the final 's') is always
1079 # available and pointing to the __builtin__ *module*. For more details:
1079 # available and pointing to the __builtin__ *module*. For more details:
1080 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1080 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1081 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1081 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1082 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1082 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1083
1083
1084 if user_ns is None:
1084 if user_ns is None:
1085 user_ns = user_module.__dict__
1085 user_ns = user_module.__dict__
1086
1086
1087 return user_module, user_ns
1087 return user_module, user_ns
1088
1088
1089 def init_sys_modules(self):
1089 def init_sys_modules(self):
1090 # We need to insert into sys.modules something that looks like a
1090 # We need to insert into sys.modules something that looks like a
1091 # module but which accesses the IPython namespace, for shelve and
1091 # module but which accesses the IPython namespace, for shelve and
1092 # pickle to work interactively. Normally they rely on getting
1092 # pickle to work interactively. Normally they rely on getting
1093 # everything out of __main__, but for embedding purposes each IPython
1093 # everything out of __main__, but for embedding purposes each IPython
1094 # instance has its own private namespace, so we can't go shoving
1094 # instance has its own private namespace, so we can't go shoving
1095 # everything into __main__.
1095 # everything into __main__.
1096
1096
1097 # note, however, that we should only do this for non-embedded
1097 # note, however, that we should only do this for non-embedded
1098 # ipythons, which really mimic the __main__.__dict__ with their own
1098 # ipythons, which really mimic the __main__.__dict__ with their own
1099 # namespace. Embedded instances, on the other hand, should not do
1099 # namespace. Embedded instances, on the other hand, should not do
1100 # this because they need to manage the user local/global namespaces
1100 # this because they need to manage the user local/global namespaces
1101 # only, but they live within a 'normal' __main__ (meaning, they
1101 # only, but they live within a 'normal' __main__ (meaning, they
1102 # shouldn't overtake the execution environment of the script they're
1102 # shouldn't overtake the execution environment of the script they're
1103 # embedded in).
1103 # embedded in).
1104
1104
1105 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1105 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1106 main_name = self.user_module.__name__
1106 main_name = self.user_module.__name__
1107 sys.modules[main_name] = self.user_module
1107 sys.modules[main_name] = self.user_module
1108
1108
1109 def init_user_ns(self):
1109 def init_user_ns(self):
1110 """Initialize all user-visible namespaces to their minimum defaults.
1110 """Initialize all user-visible namespaces to their minimum defaults.
1111
1111
1112 Certain history lists are also initialized here, as they effectively
1112 Certain history lists are also initialized here, as they effectively
1113 act as user namespaces.
1113 act as user namespaces.
1114
1114
1115 Notes
1115 Notes
1116 -----
1116 -----
1117 All data structures here are only filled in, they are NOT reset by this
1117 All data structures here are only filled in, they are NOT reset by this
1118 method. If they were not empty before, data will simply be added to
1118 method. If they were not empty before, data will simply be added to
1119 therm.
1119 therm.
1120 """
1120 """
1121 # This function works in two parts: first we put a few things in
1121 # This function works in two parts: first we put a few things in
1122 # user_ns, and we sync that contents into user_ns_hidden so that these
1122 # user_ns, and we sync that contents into user_ns_hidden so that these
1123 # initial variables aren't shown by %who. After the sync, we add the
1123 # initial variables aren't shown by %who. After the sync, we add the
1124 # rest of what we *do* want the user to see with %who even on a new
1124 # rest of what we *do* want the user to see with %who even on a new
1125 # session (probably nothing, so theye really only see their own stuff)
1125 # session (probably nothing, so theye really only see their own stuff)
1126
1126
1127 # The user dict must *always* have a __builtin__ reference to the
1127 # The user dict must *always* have a __builtin__ reference to the
1128 # Python standard __builtin__ namespace, which must be imported.
1128 # Python standard __builtin__ namespace, which must be imported.
1129 # This is so that certain operations in prompt evaluation can be
1129 # This is so that certain operations in prompt evaluation can be
1130 # reliably executed with builtins. Note that we can NOT use
1130 # reliably executed with builtins. Note that we can NOT use
1131 # __builtins__ (note the 's'), because that can either be a dict or a
1131 # __builtins__ (note the 's'), because that can either be a dict or a
1132 # module, and can even mutate at runtime, depending on the context
1132 # module, and can even mutate at runtime, depending on the context
1133 # (Python makes no guarantees on it). In contrast, __builtin__ is
1133 # (Python makes no guarantees on it). In contrast, __builtin__ is
1134 # always a module object, though it must be explicitly imported.
1134 # always a module object, though it must be explicitly imported.
1135
1135
1136 # For more details:
1136 # For more details:
1137 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1137 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1138 ns = dict()
1138 ns = dict()
1139
1139
1140 # Put 'help' in the user namespace
1140 # Put 'help' in the user namespace
1141 try:
1141 try:
1142 from site import _Helper
1142 from site import _Helper
1143 ns['help'] = _Helper()
1143 ns['help'] = _Helper()
1144 except ImportError:
1144 except ImportError:
1145 warn('help() not available - check site.py')
1145 warn('help() not available - check site.py')
1146
1146
1147 # make global variables for user access to the histories
1147 # make global variables for user access to the histories
1148 ns['_ih'] = self.history_manager.input_hist_parsed
1148 ns['_ih'] = self.history_manager.input_hist_parsed
1149 ns['_oh'] = self.history_manager.output_hist
1149 ns['_oh'] = self.history_manager.output_hist
1150 ns['_dh'] = self.history_manager.dir_hist
1150 ns['_dh'] = self.history_manager.dir_hist
1151
1151
1152 ns['_sh'] = shadowns
1152 ns['_sh'] = shadowns
1153
1153
1154 # user aliases to input and output histories. These shouldn't show up
1154 # user aliases to input and output histories. These shouldn't show up
1155 # in %who, as they can have very large reprs.
1155 # in %who, as they can have very large reprs.
1156 ns['In'] = self.history_manager.input_hist_parsed
1156 ns['In'] = self.history_manager.input_hist_parsed
1157 ns['Out'] = self.history_manager.output_hist
1157 ns['Out'] = self.history_manager.output_hist
1158
1158
1159 # Store myself as the public api!!!
1159 # Store myself as the public api!!!
1160 ns['get_ipython'] = self.get_ipython
1160 ns['get_ipython'] = self.get_ipython
1161
1161
1162 ns['exit'] = self.exiter
1162 ns['exit'] = self.exiter
1163 ns['quit'] = self.exiter
1163 ns['quit'] = self.exiter
1164
1164
1165 # Sync what we've added so far to user_ns_hidden so these aren't seen
1165 # Sync what we've added so far to user_ns_hidden so these aren't seen
1166 # by %who
1166 # by %who
1167 self.user_ns_hidden.update(ns)
1167 self.user_ns_hidden.update(ns)
1168
1168
1169 # Anything put into ns now would show up in %who. Think twice before
1169 # Anything put into ns now would show up in %who. Think twice before
1170 # putting anything here, as we really want %who to show the user their
1170 # putting anything here, as we really want %who to show the user their
1171 # stuff, not our variables.
1171 # stuff, not our variables.
1172
1172
1173 # Finally, update the real user's namespace
1173 # Finally, update the real user's namespace
1174 self.user_ns.update(ns)
1174 self.user_ns.update(ns)
1175
1175
1176 @property
1176 @property
1177 def all_ns_refs(self):
1177 def all_ns_refs(self):
1178 """Get a list of references to all the namespace dictionaries in which
1178 """Get a list of references to all the namespace dictionaries in which
1179 IPython might store a user-created object.
1179 IPython might store a user-created object.
1180
1180
1181 Note that this does not include the displayhook, which also caches
1181 Note that this does not include the displayhook, which also caches
1182 objects from the output."""
1182 objects from the output."""
1183 return [self.user_ns, self.user_global_ns,
1183 return [self.user_ns, self.user_global_ns,
1184 self._user_main_module.__dict__] + self._main_ns_cache.values()
1184 self._user_main_module.__dict__] + self._main_ns_cache.values()
1185
1185
1186 def reset(self, new_session=True):
1186 def reset(self, new_session=True):
1187 """Clear all internal namespaces, and attempt to release references to
1187 """Clear all internal namespaces, and attempt to release references to
1188 user objects.
1188 user objects.
1189
1189
1190 If new_session is True, a new history session will be opened.
1190 If new_session is True, a new history session will be opened.
1191 """
1191 """
1192 # Clear histories
1192 # Clear histories
1193 self.history_manager.reset(new_session)
1193 self.history_manager.reset(new_session)
1194 # Reset counter used to index all histories
1194 # Reset counter used to index all histories
1195 if new_session:
1195 if new_session:
1196 self.execution_count = 1
1196 self.execution_count = 1
1197
1197
1198 # Flush cached output items
1198 # Flush cached output items
1199 if self.displayhook.do_full_cache:
1199 if self.displayhook.do_full_cache:
1200 self.displayhook.flush()
1200 self.displayhook.flush()
1201
1201
1202 # The main execution namespaces must be cleared very carefully,
1202 # The main execution namespaces must be cleared very carefully,
1203 # skipping the deletion of the builtin-related keys, because doing so
1203 # skipping the deletion of the builtin-related keys, because doing so
1204 # would cause errors in many object's __del__ methods.
1204 # would cause errors in many object's __del__ methods.
1205 if self.user_ns is not self.user_global_ns:
1205 if self.user_ns is not self.user_global_ns:
1206 self.user_ns.clear()
1206 self.user_ns.clear()
1207 ns = self.user_global_ns
1207 ns = self.user_global_ns
1208 drop_keys = set(ns.keys())
1208 drop_keys = set(ns.keys())
1209 drop_keys.discard('__builtin__')
1209 drop_keys.discard('__builtin__')
1210 drop_keys.discard('__builtins__')
1210 drop_keys.discard('__builtins__')
1211 drop_keys.discard('__name__')
1211 drop_keys.discard('__name__')
1212 for k in drop_keys:
1212 for k in drop_keys:
1213 del ns[k]
1213 del ns[k]
1214
1214
1215 self.user_ns_hidden.clear()
1215 self.user_ns_hidden.clear()
1216
1216
1217 # Restore the user namespaces to minimal usability
1217 # Restore the user namespaces to minimal usability
1218 self.init_user_ns()
1218 self.init_user_ns()
1219
1219
1220 # Restore the default and user aliases
1220 # Restore the default and user aliases
1221 self.alias_manager.clear_aliases()
1221 self.alias_manager.clear_aliases()
1222 self.alias_manager.init_aliases()
1222 self.alias_manager.init_aliases()
1223
1223
1224 # Flush the private list of module references kept for script
1224 # Flush the private list of module references kept for script
1225 # execution protection
1225 # execution protection
1226 self.clear_main_mod_cache()
1226 self.clear_main_mod_cache()
1227
1227
1228 # Clear out the namespace from the last %run
1228 # Clear out the namespace from the last %run
1229 self.new_main_mod()
1229 self.new_main_mod()
1230
1230
1231 def del_var(self, varname, by_name=False):
1231 def del_var(self, varname, by_name=False):
1232 """Delete a variable from the various namespaces, so that, as
1232 """Delete a variable from the various namespaces, so that, as
1233 far as possible, we're not keeping any hidden references to it.
1233 far as possible, we're not keeping any hidden references to it.
1234
1234
1235 Parameters
1235 Parameters
1236 ----------
1236 ----------
1237 varname : str
1237 varname : str
1238 The name of the variable to delete.
1238 The name of the variable to delete.
1239 by_name : bool
1239 by_name : bool
1240 If True, delete variables with the given name in each
1240 If True, delete variables with the given name in each
1241 namespace. If False (default), find the variable in the user
1241 namespace. If False (default), find the variable in the user
1242 namespace, and delete references to it.
1242 namespace, and delete references to it.
1243 """
1243 """
1244 if varname in ('__builtin__', '__builtins__'):
1244 if varname in ('__builtin__', '__builtins__'):
1245 raise ValueError("Refusing to delete %s" % varname)
1245 raise ValueError("Refusing to delete %s" % varname)
1246
1246
1247 ns_refs = self.all_ns_refs
1247 ns_refs = self.all_ns_refs
1248
1248
1249 if by_name: # Delete by name
1249 if by_name: # Delete by name
1250 for ns in ns_refs:
1250 for ns in ns_refs:
1251 try:
1251 try:
1252 del ns[varname]
1252 del ns[varname]
1253 except KeyError:
1253 except KeyError:
1254 pass
1254 pass
1255 else: # Delete by object
1255 else: # Delete by object
1256 try:
1256 try:
1257 obj = self.user_ns[varname]
1257 obj = self.user_ns[varname]
1258 except KeyError:
1258 except KeyError:
1259 raise NameError("name '%s' is not defined" % varname)
1259 raise NameError("name '%s' is not defined" % varname)
1260 # Also check in output history
1260 # Also check in output history
1261 ns_refs.append(self.history_manager.output_hist)
1261 ns_refs.append(self.history_manager.output_hist)
1262 for ns in ns_refs:
1262 for ns in ns_refs:
1263 to_delete = [n for n, o in ns.iteritems() if o is obj]
1263 to_delete = [n for n, o in ns.iteritems() if o is obj]
1264 for name in to_delete:
1264 for name in to_delete:
1265 del ns[name]
1265 del ns[name]
1266
1266
1267 # displayhook keeps extra references, but not in a dictionary
1267 # displayhook keeps extra references, but not in a dictionary
1268 for name in ('_', '__', '___'):
1268 for name in ('_', '__', '___'):
1269 if getattr(self.displayhook, name) is obj:
1269 if getattr(self.displayhook, name) is obj:
1270 setattr(self.displayhook, name, None)
1270 setattr(self.displayhook, name, None)
1271
1271
1272 def reset_selective(self, regex=None):
1272 def reset_selective(self, regex=None):
1273 """Clear selective variables from internal namespaces based on a
1273 """Clear selective variables from internal namespaces based on a
1274 specified regular expression.
1274 specified regular expression.
1275
1275
1276 Parameters
1276 Parameters
1277 ----------
1277 ----------
1278 regex : string or compiled pattern, optional
1278 regex : string or compiled pattern, optional
1279 A regular expression pattern that will be used in searching
1279 A regular expression pattern that will be used in searching
1280 variable names in the users namespaces.
1280 variable names in the users namespaces.
1281 """
1281 """
1282 if regex is not None:
1282 if regex is not None:
1283 try:
1283 try:
1284 m = re.compile(regex)
1284 m = re.compile(regex)
1285 except TypeError:
1285 except TypeError:
1286 raise TypeError('regex must be a string or compiled pattern')
1286 raise TypeError('regex must be a string or compiled pattern')
1287 # Search for keys in each namespace that match the given regex
1287 # Search for keys in each namespace that match the given regex
1288 # If a match is found, delete the key/value pair.
1288 # If a match is found, delete the key/value pair.
1289 for ns in self.all_ns_refs:
1289 for ns in self.all_ns_refs:
1290 for var in ns:
1290 for var in ns:
1291 if m.search(var):
1291 if m.search(var):
1292 del ns[var]
1292 del ns[var]
1293
1293
1294 def push(self, variables, interactive=True):
1294 def push(self, variables, interactive=True):
1295 """Inject a group of variables into the IPython user namespace.
1295 """Inject a group of variables into the IPython user namespace.
1296
1296
1297 Parameters
1297 Parameters
1298 ----------
1298 ----------
1299 variables : dict, str or list/tuple of str
1299 variables : dict, str or list/tuple of str
1300 The variables to inject into the user's namespace. If a dict, a
1300 The variables to inject into the user's namespace. If a dict, a
1301 simple update is done. If a str, the string is assumed to have
1301 simple update is done. If a str, the string is assumed to have
1302 variable names separated by spaces. A list/tuple of str can also
1302 variable names separated by spaces. A list/tuple of str can also
1303 be used to give the variable names. If just the variable names are
1303 be used to give the variable names. If just the variable names are
1304 give (list/tuple/str) then the variable values looked up in the
1304 give (list/tuple/str) then the variable values looked up in the
1305 callers frame.
1305 callers frame.
1306 interactive : bool
1306 interactive : bool
1307 If True (default), the variables will be listed with the ``who``
1307 If True (default), the variables will be listed with the ``who``
1308 magic.
1308 magic.
1309 """
1309 """
1310 vdict = None
1310 vdict = None
1311
1311
1312 # We need a dict of name/value pairs to do namespace updates.
1312 # We need a dict of name/value pairs to do namespace updates.
1313 if isinstance(variables, dict):
1313 if isinstance(variables, dict):
1314 vdict = variables
1314 vdict = variables
1315 elif isinstance(variables, (basestring, list, tuple)):
1315 elif isinstance(variables, (basestring, list, tuple)):
1316 if isinstance(variables, basestring):
1316 if isinstance(variables, basestring):
1317 vlist = variables.split()
1317 vlist = variables.split()
1318 else:
1318 else:
1319 vlist = variables
1319 vlist = variables
1320 vdict = {}
1320 vdict = {}
1321 cf = sys._getframe(1)
1321 cf = sys._getframe(1)
1322 for name in vlist:
1322 for name in vlist:
1323 try:
1323 try:
1324 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1324 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1325 except:
1325 except:
1326 print('Could not get variable %s from %s' %
1326 print('Could not get variable %s from %s' %
1327 (name,cf.f_code.co_name))
1327 (name,cf.f_code.co_name))
1328 else:
1328 else:
1329 raise ValueError('variables must be a dict/str/list/tuple')
1329 raise ValueError('variables must be a dict/str/list/tuple')
1330
1330
1331 # Propagate variables to user namespace
1331 # Propagate variables to user namespace
1332 self.user_ns.update(vdict)
1332 self.user_ns.update(vdict)
1333
1333
1334 # And configure interactive visibility
1334 # And configure interactive visibility
1335 user_ns_hidden = self.user_ns_hidden
1335 user_ns_hidden = self.user_ns_hidden
1336 if interactive:
1336 if interactive:
1337 user_ns_hidden.difference_update(vdict)
1337 user_ns_hidden.difference_update(vdict)
1338 else:
1338 else:
1339 user_ns_hidden.update(vdict)
1339 user_ns_hidden.update(vdict)
1340
1340
1341 def drop_by_id(self, variables):
1341 def drop_by_id(self, variables):
1342 """Remove a dict of variables from the user namespace, if they are the
1342 """Remove a dict of variables from the user namespace, if they are the
1343 same as the values in the dictionary.
1343 same as the values in the dictionary.
1344
1344
1345 This is intended for use by extensions: variables that they've added can
1345 This is intended for use by extensions: variables that they've added can
1346 be taken back out if they are unloaded, without removing any that the
1346 be taken back out if they are unloaded, without removing any that the
1347 user has overwritten.
1347 user has overwritten.
1348
1348
1349 Parameters
1349 Parameters
1350 ----------
1350 ----------
1351 variables : dict
1351 variables : dict
1352 A dictionary mapping object names (as strings) to the objects.
1352 A dictionary mapping object names (as strings) to the objects.
1353 """
1353 """
1354 for name, obj in variables.iteritems():
1354 for name, obj in variables.iteritems():
1355 if name in self.user_ns and self.user_ns[name] is obj:
1355 if name in self.user_ns and self.user_ns[name] is obj:
1356 del self.user_ns[name]
1356 del self.user_ns[name]
1357 self.user_ns_hidden.discard(name)
1357 self.user_ns_hidden.discard(name)
1358
1358
1359 #-------------------------------------------------------------------------
1359 #-------------------------------------------------------------------------
1360 # Things related to object introspection
1360 # Things related to object introspection
1361 #-------------------------------------------------------------------------
1361 #-------------------------------------------------------------------------
1362
1362
1363 def _ofind(self, oname, namespaces=None):
1363 def _ofind(self, oname, namespaces=None):
1364 """Find an object in the available namespaces.
1364 """Find an object in the available namespaces.
1365
1365
1366 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1366 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1367
1367
1368 Has special code to detect magic functions.
1368 Has special code to detect magic functions.
1369 """
1369 """
1370 oname = oname.strip()
1370 oname = oname.strip()
1371 #print '1- oname: <%r>' % oname # dbg
1371 #print '1- oname: <%r>' % oname # dbg
1372 if not oname.startswith(ESC_MAGIC) and \
1372 if not oname.startswith(ESC_MAGIC) and \
1373 not oname.startswith(ESC_MAGIC2) and \
1373 not oname.startswith(ESC_MAGIC2) and \
1374 not py3compat.isidentifier(oname, dotted=True):
1374 not py3compat.isidentifier(oname, dotted=True):
1375 return dict(found=False)
1375 return dict(found=False)
1376
1376
1377 alias_ns = None
1377 alias_ns = None
1378 if namespaces is None:
1378 if namespaces is None:
1379 # Namespaces to search in:
1379 # Namespaces to search in:
1380 # Put them in a list. The order is important so that we
1380 # Put them in a list. The order is important so that we
1381 # find things in the same order that Python finds them.
1381 # find things in the same order that Python finds them.
1382 namespaces = [ ('Interactive', self.user_ns),
1382 namespaces = [ ('Interactive', self.user_ns),
1383 ('Interactive (global)', self.user_global_ns),
1383 ('Interactive (global)', self.user_global_ns),
1384 ('Python builtin', builtin_mod.__dict__),
1384 ('Python builtin', builtin_mod.__dict__),
1385 ('Alias', self.alias_manager.alias_table),
1385 ('Alias', self.alias_manager.alias_table),
1386 ]
1386 ]
1387 alias_ns = self.alias_manager.alias_table
1387 alias_ns = self.alias_manager.alias_table
1388
1388
1389 # initialize results to 'null'
1389 # initialize results to 'null'
1390 found = False; obj = None; ospace = None; ds = None;
1390 found = False; obj = None; ospace = None; ds = None;
1391 ismagic = False; isalias = False; parent = None
1391 ismagic = False; isalias = False; parent = None
1392
1392
1393 # We need to special-case 'print', which as of python2.6 registers as a
1393 # We need to special-case 'print', which as of python2.6 registers as a
1394 # function but should only be treated as one if print_function was
1394 # function but should only be treated as one if print_function was
1395 # loaded with a future import. In this case, just bail.
1395 # loaded with a future import. In this case, just bail.
1396 if (oname == 'print' and not py3compat.PY3 and not \
1396 if (oname == 'print' and not py3compat.PY3 and not \
1397 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1397 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1398 return {'found':found, 'obj':obj, 'namespace':ospace,
1398 return {'found':found, 'obj':obj, 'namespace':ospace,
1399 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1399 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1400
1400
1401 # Look for the given name by splitting it in parts. If the head is
1401 # Look for the given name by splitting it in parts. If the head is
1402 # found, then we look for all the remaining parts as members, and only
1402 # found, then we look for all the remaining parts as members, and only
1403 # declare success if we can find them all.
1403 # declare success if we can find them all.
1404 oname_parts = oname.split('.')
1404 oname_parts = oname.split('.')
1405 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1405 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1406 for nsname,ns in namespaces:
1406 for nsname,ns in namespaces:
1407 try:
1407 try:
1408 obj = ns[oname_head]
1408 obj = ns[oname_head]
1409 except KeyError:
1409 except KeyError:
1410 continue
1410 continue
1411 else:
1411 else:
1412 #print 'oname_rest:', oname_rest # dbg
1412 #print 'oname_rest:', oname_rest # dbg
1413 for part in oname_rest:
1413 for part in oname_rest:
1414 try:
1414 try:
1415 parent = obj
1415 parent = obj
1416 obj = getattr(obj,part)
1416 obj = getattr(obj,part)
1417 except:
1417 except:
1418 # Blanket except b/c some badly implemented objects
1418 # Blanket except b/c some badly implemented objects
1419 # allow __getattr__ to raise exceptions other than
1419 # allow __getattr__ to raise exceptions other than
1420 # AttributeError, which then crashes IPython.
1420 # AttributeError, which then crashes IPython.
1421 break
1421 break
1422 else:
1422 else:
1423 # If we finish the for loop (no break), we got all members
1423 # If we finish the for loop (no break), we got all members
1424 found = True
1424 found = True
1425 ospace = nsname
1425 ospace = nsname
1426 if ns == alias_ns:
1426 if ns == alias_ns:
1427 isalias = True
1427 isalias = True
1428 break # namespace loop
1428 break # namespace loop
1429
1429
1430 # Try to see if it's magic
1430 # Try to see if it's magic
1431 if not found:
1431 if not found:
1432 obj = None
1432 obj = None
1433 if oname.startswith(ESC_MAGIC2):
1433 if oname.startswith(ESC_MAGIC2):
1434 oname = oname.lstrip(ESC_MAGIC2)
1434 oname = oname.lstrip(ESC_MAGIC2)
1435 obj = self.find_cell_magic(oname)
1435 obj = self.find_cell_magic(oname)
1436 elif oname.startswith(ESC_MAGIC):
1436 elif oname.startswith(ESC_MAGIC):
1437 oname = oname.lstrip(ESC_MAGIC)
1437 oname = oname.lstrip(ESC_MAGIC)
1438 obj = self.find_line_magic(oname)
1438 obj = self.find_line_magic(oname)
1439 else:
1439 else:
1440 # search without prefix, so run? will find %run?
1440 # search without prefix, so run? will find %run?
1441 obj = self.find_line_magic(oname)
1441 obj = self.find_line_magic(oname)
1442 if obj is None:
1442 if obj is None:
1443 obj = self.find_cell_magic(oname)
1443 obj = self.find_cell_magic(oname)
1444 if obj is not None:
1444 if obj is not None:
1445 found = True
1445 found = True
1446 ospace = 'IPython internal'
1446 ospace = 'IPython internal'
1447 ismagic = True
1447 ismagic = True
1448
1448
1449 # Last try: special-case some literals like '', [], {}, etc:
1449 # Last try: special-case some literals like '', [], {}, etc:
1450 if not found and oname_head in ["''",'""','[]','{}','()']:
1450 if not found and oname_head in ["''",'""','[]','{}','()']:
1451 obj = eval(oname_head)
1451 obj = eval(oname_head)
1452 found = True
1452 found = True
1453 ospace = 'Interactive'
1453 ospace = 'Interactive'
1454
1454
1455 return {'found':found, 'obj':obj, 'namespace':ospace,
1455 return {'found':found, 'obj':obj, 'namespace':ospace,
1456 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1456 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1457
1457
1458 def _ofind_property(self, oname, info):
1458 def _ofind_property(self, oname, info):
1459 """Second part of object finding, to look for property details."""
1459 """Second part of object finding, to look for property details."""
1460 if info.found:
1460 if info.found:
1461 # Get the docstring of the class property if it exists.
1461 # Get the docstring of the class property if it exists.
1462 path = oname.split('.')
1462 path = oname.split('.')
1463 root = '.'.join(path[:-1])
1463 root = '.'.join(path[:-1])
1464 if info.parent is not None:
1464 if info.parent is not None:
1465 try:
1465 try:
1466 target = getattr(info.parent, '__class__')
1466 target = getattr(info.parent, '__class__')
1467 # The object belongs to a class instance.
1467 # The object belongs to a class instance.
1468 try:
1468 try:
1469 target = getattr(target, path[-1])
1469 target = getattr(target, path[-1])
1470 # The class defines the object.
1470 # The class defines the object.
1471 if isinstance(target, property):
1471 if isinstance(target, property):
1472 oname = root + '.__class__.' + path[-1]
1472 oname = root + '.__class__.' + path[-1]
1473 info = Struct(self._ofind(oname))
1473 info = Struct(self._ofind(oname))
1474 except AttributeError: pass
1474 except AttributeError: pass
1475 except AttributeError: pass
1475 except AttributeError: pass
1476
1476
1477 # We return either the new info or the unmodified input if the object
1477 # We return either the new info or the unmodified input if the object
1478 # hadn't been found
1478 # hadn't been found
1479 return info
1479 return info
1480
1480
1481 def _object_find(self, oname, namespaces=None):
1481 def _object_find(self, oname, namespaces=None):
1482 """Find an object and return a struct with info about it."""
1482 """Find an object and return a struct with info about it."""
1483 inf = Struct(self._ofind(oname, namespaces))
1483 inf = Struct(self._ofind(oname, namespaces))
1484 return Struct(self._ofind_property(oname, inf))
1484 return Struct(self._ofind_property(oname, inf))
1485
1485
1486 def _inspect(self, meth, oname, namespaces=None, **kw):
1486 def _inspect(self, meth, oname, namespaces=None, **kw):
1487 """Generic interface to the inspector system.
1487 """Generic interface to the inspector system.
1488
1488
1489 This function is meant to be called by pdef, pdoc & friends."""
1489 This function is meant to be called by pdef, pdoc & friends."""
1490 info = self._object_find(oname, namespaces)
1490 info = self._object_find(oname, namespaces)
1491 if info.found:
1491 if info.found:
1492 pmethod = getattr(self.inspector, meth)
1492 pmethod = getattr(self.inspector, meth)
1493 formatter = format_screen if info.ismagic else None
1493 formatter = format_screen if info.ismagic else None
1494 if meth == 'pdoc':
1494 if meth == 'pdoc':
1495 pmethod(info.obj, oname, formatter)
1495 pmethod(info.obj, oname, formatter)
1496 elif meth == 'pinfo':
1496 elif meth == 'pinfo':
1497 pmethod(info.obj, oname, formatter, info, **kw)
1497 pmethod(info.obj, oname, formatter, info, **kw)
1498 else:
1498 else:
1499 pmethod(info.obj, oname)
1499 pmethod(info.obj, oname)
1500 else:
1500 else:
1501 print('Object `%s` not found.' % oname)
1501 print('Object `%s` not found.' % oname)
1502 return 'not found' # so callers can take other action
1502 return 'not found' # so callers can take other action
1503
1503
1504 def object_inspect(self, oname, detail_level=0):
1504 def object_inspect(self, oname, detail_level=0):
1505 with self.builtin_trap:
1505 with self.builtin_trap:
1506 info = self._object_find(oname)
1506 info = self._object_find(oname)
1507 if info.found:
1507 if info.found:
1508 return self.inspector.info(info.obj, oname, info=info,
1508 return self.inspector.info(info.obj, oname, info=info,
1509 detail_level=detail_level
1509 detail_level=detail_level
1510 )
1510 )
1511 else:
1511 else:
1512 return oinspect.object_info(name=oname, found=False)
1512 return oinspect.object_info(name=oname, found=False)
1513
1513
1514 #-------------------------------------------------------------------------
1514 #-------------------------------------------------------------------------
1515 # Things related to history management
1515 # Things related to history management
1516 #-------------------------------------------------------------------------
1516 #-------------------------------------------------------------------------
1517
1517
1518 def init_history(self):
1518 def init_history(self):
1519 """Sets up the command history, and starts regular autosaves."""
1519 """Sets up the command history, and starts regular autosaves."""
1520 self.history_manager = HistoryManager(shell=self, config=self.config)
1520 self.history_manager = HistoryManager(shell=self, config=self.config)
1521 self.configurables.append(self.history_manager)
1521 self.configurables.append(self.history_manager)
1522
1522
1523 #-------------------------------------------------------------------------
1523 #-------------------------------------------------------------------------
1524 # Things related to exception handling and tracebacks (not debugging)
1524 # Things related to exception handling and tracebacks (not debugging)
1525 #-------------------------------------------------------------------------
1525 #-------------------------------------------------------------------------
1526
1526
1527 def init_traceback_handlers(self, custom_exceptions):
1527 def init_traceback_handlers(self, custom_exceptions):
1528 # Syntax error handler.
1528 # Syntax error handler.
1529 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1529 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1530
1530
1531 # The interactive one is initialized with an offset, meaning we always
1531 # The interactive one is initialized with an offset, meaning we always
1532 # want to remove the topmost item in the traceback, which is our own
1532 # want to remove the topmost item in the traceback, which is our own
1533 # internal code. Valid modes: ['Plain','Context','Verbose']
1533 # internal code. Valid modes: ['Plain','Context','Verbose']
1534 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1534 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1535 color_scheme='NoColor',
1535 color_scheme='NoColor',
1536 tb_offset = 1,
1536 tb_offset = 1,
1537 check_cache=self.compile.check_cache)
1537 check_cache=self.compile.check_cache)
1538
1538
1539 # The instance will store a pointer to the system-wide exception hook,
1539 # The instance will store a pointer to the system-wide exception hook,
1540 # so that runtime code (such as magics) can access it. This is because
1540 # so that runtime code (such as magics) can access it. This is because
1541 # during the read-eval loop, it may get temporarily overwritten.
1541 # during the read-eval loop, it may get temporarily overwritten.
1542 self.sys_excepthook = sys.excepthook
1542 self.sys_excepthook = sys.excepthook
1543
1543
1544 # and add any custom exception handlers the user may have specified
1544 # and add any custom exception handlers the user may have specified
1545 self.set_custom_exc(*custom_exceptions)
1545 self.set_custom_exc(*custom_exceptions)
1546
1546
1547 # Set the exception mode
1547 # Set the exception mode
1548 self.InteractiveTB.set_mode(mode=self.xmode)
1548 self.InteractiveTB.set_mode(mode=self.xmode)
1549
1549
1550 def set_custom_exc(self, exc_tuple, handler):
1550 def set_custom_exc(self, exc_tuple, handler):
1551 """set_custom_exc(exc_tuple,handler)
1551 """set_custom_exc(exc_tuple,handler)
1552
1552
1553 Set a custom exception handler, which will be called if any of the
1553 Set a custom exception handler, which will be called if any of the
1554 exceptions in exc_tuple occur in the mainloop (specifically, in the
1554 exceptions in exc_tuple occur in the mainloop (specifically, in the
1555 run_code() method).
1555 run_code() method).
1556
1556
1557 Parameters
1557 Parameters
1558 ----------
1558 ----------
1559
1559
1560 exc_tuple : tuple of exception classes
1560 exc_tuple : tuple of exception classes
1561 A *tuple* of exception classes, for which to call the defined
1561 A *tuple* of exception classes, for which to call the defined
1562 handler. It is very important that you use a tuple, and NOT A
1562 handler. It is very important that you use a tuple, and NOT A
1563 LIST here, because of the way Python's except statement works. If
1563 LIST here, because of the way Python's except statement works. If
1564 you only want to trap a single exception, use a singleton tuple::
1564 you only want to trap a single exception, use a singleton tuple::
1565
1565
1566 exc_tuple == (MyCustomException,)
1566 exc_tuple == (MyCustomException,)
1567
1567
1568 handler : callable
1568 handler : callable
1569 handler must have the following signature::
1569 handler must have the following signature::
1570
1570
1571 def my_handler(self, etype, value, tb, tb_offset=None):
1571 def my_handler(self, etype, value, tb, tb_offset=None):
1572 ...
1572 ...
1573 return structured_traceback
1573 return structured_traceback
1574
1574
1575 Your handler must return a structured traceback (a list of strings),
1575 Your handler must return a structured traceback (a list of strings),
1576 or None.
1576 or None.
1577
1577
1578 This will be made into an instance method (via types.MethodType)
1578 This will be made into an instance method (via types.MethodType)
1579 of IPython itself, and it will be called if any of the exceptions
1579 of IPython itself, and it will be called if any of the exceptions
1580 listed in the exc_tuple are caught. If the handler is None, an
1580 listed in the exc_tuple are caught. If the handler is None, an
1581 internal basic one is used, which just prints basic info.
1581 internal basic one is used, which just prints basic info.
1582
1582
1583 To protect IPython from crashes, if your handler ever raises an
1583 To protect IPython from crashes, if your handler ever raises an
1584 exception or returns an invalid result, it will be immediately
1584 exception or returns an invalid result, it will be immediately
1585 disabled.
1585 disabled.
1586
1586
1587 WARNING: by putting in your own exception handler into IPython's main
1587 WARNING: by putting in your own exception handler into IPython's main
1588 execution loop, you run a very good chance of nasty crashes. This
1588 execution loop, you run a very good chance of nasty crashes. This
1589 facility should only be used if you really know what you are doing."""
1589 facility should only be used if you really know what you are doing."""
1590
1590
1591 assert type(exc_tuple)==type(()) , \
1591 assert type(exc_tuple)==type(()) , \
1592 "The custom exceptions must be given AS A TUPLE."
1592 "The custom exceptions must be given AS A TUPLE."
1593
1593
1594 def dummy_handler(self,etype,value,tb,tb_offset=None):
1594 def dummy_handler(self,etype,value,tb,tb_offset=None):
1595 print('*** Simple custom exception handler ***')
1595 print('*** Simple custom exception handler ***')
1596 print('Exception type :',etype)
1596 print('Exception type :',etype)
1597 print('Exception value:',value)
1597 print('Exception value:',value)
1598 print('Traceback :',tb)
1598 print('Traceback :',tb)
1599 #print 'Source code :','\n'.join(self.buffer)
1599 #print 'Source code :','\n'.join(self.buffer)
1600
1600
1601 def validate_stb(stb):
1601 def validate_stb(stb):
1602 """validate structured traceback return type
1602 """validate structured traceback return type
1603
1603
1604 return type of CustomTB *should* be a list of strings, but allow
1604 return type of CustomTB *should* be a list of strings, but allow
1605 single strings or None, which are harmless.
1605 single strings or None, which are harmless.
1606
1606
1607 This function will *always* return a list of strings,
1607 This function will *always* return a list of strings,
1608 and will raise a TypeError if stb is inappropriate.
1608 and will raise a TypeError if stb is inappropriate.
1609 """
1609 """
1610 msg = "CustomTB must return list of strings, not %r" % stb
1610 msg = "CustomTB must return list of strings, not %r" % stb
1611 if stb is None:
1611 if stb is None:
1612 return []
1612 return []
1613 elif isinstance(stb, basestring):
1613 elif isinstance(stb, basestring):
1614 return [stb]
1614 return [stb]
1615 elif not isinstance(stb, list):
1615 elif not isinstance(stb, list):
1616 raise TypeError(msg)
1616 raise TypeError(msg)
1617 # it's a list
1617 # it's a list
1618 for line in stb:
1618 for line in stb:
1619 # check every element
1619 # check every element
1620 if not isinstance(line, basestring):
1620 if not isinstance(line, basestring):
1621 raise TypeError(msg)
1621 raise TypeError(msg)
1622 return stb
1622 return stb
1623
1623
1624 if handler is None:
1624 if handler is None:
1625 wrapped = dummy_handler
1625 wrapped = dummy_handler
1626 else:
1626 else:
1627 def wrapped(self,etype,value,tb,tb_offset=None):
1627 def wrapped(self,etype,value,tb,tb_offset=None):
1628 """wrap CustomTB handler, to protect IPython from user code
1628 """wrap CustomTB handler, to protect IPython from user code
1629
1629
1630 This makes it harder (but not impossible) for custom exception
1630 This makes it harder (but not impossible) for custom exception
1631 handlers to crash IPython.
1631 handlers to crash IPython.
1632 """
1632 """
1633 try:
1633 try:
1634 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1634 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1635 return validate_stb(stb)
1635 return validate_stb(stb)
1636 except:
1636 except:
1637 # clear custom handler immediately
1637 # clear custom handler immediately
1638 self.set_custom_exc((), None)
1638 self.set_custom_exc((), None)
1639 print("Custom TB Handler failed, unregistering", file=io.stderr)
1639 print("Custom TB Handler failed, unregistering", file=io.stderr)
1640 # show the exception in handler first
1640 # show the exception in handler first
1641 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1641 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1642 print(self.InteractiveTB.stb2text(stb), file=io.stdout)
1642 print(self.InteractiveTB.stb2text(stb), file=io.stdout)
1643 print("The original exception:", file=io.stdout)
1643 print("The original exception:", file=io.stdout)
1644 stb = self.InteractiveTB.structured_traceback(
1644 stb = self.InteractiveTB.structured_traceback(
1645 (etype,value,tb), tb_offset=tb_offset
1645 (etype,value,tb), tb_offset=tb_offset
1646 )
1646 )
1647 return stb
1647 return stb
1648
1648
1649 self.CustomTB = types.MethodType(wrapped,self)
1649 self.CustomTB = types.MethodType(wrapped,self)
1650 self.custom_exceptions = exc_tuple
1650 self.custom_exceptions = exc_tuple
1651
1651
1652 def excepthook(self, etype, value, tb):
1652 def excepthook(self, etype, value, tb):
1653 """One more defense for GUI apps that call sys.excepthook.
1653 """One more defense for GUI apps that call sys.excepthook.
1654
1654
1655 GUI frameworks like wxPython trap exceptions and call
1655 GUI frameworks like wxPython trap exceptions and call
1656 sys.excepthook themselves. I guess this is a feature that
1656 sys.excepthook themselves. I guess this is a feature that
1657 enables them to keep running after exceptions that would
1657 enables them to keep running after exceptions that would
1658 otherwise kill their mainloop. This is a bother for IPython
1658 otherwise kill their mainloop. This is a bother for IPython
1659 which excepts to catch all of the program exceptions with a try:
1659 which excepts to catch all of the program exceptions with a try:
1660 except: statement.
1660 except: statement.
1661
1661
1662 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1662 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1663 any app directly invokes sys.excepthook, it will look to the user like
1663 any app directly invokes sys.excepthook, it will look to the user like
1664 IPython crashed. In order to work around this, we can disable the
1664 IPython crashed. In order to work around this, we can disable the
1665 CrashHandler and replace it with this excepthook instead, which prints a
1665 CrashHandler and replace it with this excepthook instead, which prints a
1666 regular traceback using our InteractiveTB. In this fashion, apps which
1666 regular traceback using our InteractiveTB. In this fashion, apps which
1667 call sys.excepthook will generate a regular-looking exception from
1667 call sys.excepthook will generate a regular-looking exception from
1668 IPython, and the CrashHandler will only be triggered by real IPython
1668 IPython, and the CrashHandler will only be triggered by real IPython
1669 crashes.
1669 crashes.
1670
1670
1671 This hook should be used sparingly, only in places which are not likely
1671 This hook should be used sparingly, only in places which are not likely
1672 to be true IPython errors.
1672 to be true IPython errors.
1673 """
1673 """
1674 self.showtraceback((etype,value,tb),tb_offset=0)
1674 self.showtraceback((etype,value,tb),tb_offset=0)
1675
1675
1676 def _get_exc_info(self, exc_tuple=None):
1676 def _get_exc_info(self, exc_tuple=None):
1677 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1677 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1678
1678
1679 Ensures sys.last_type,value,traceback hold the exc_info we found,
1679 Ensures sys.last_type,value,traceback hold the exc_info we found,
1680 from whichever source.
1680 from whichever source.
1681
1681
1682 raises ValueError if none of these contain any information
1682 raises ValueError if none of these contain any information
1683 """
1683 """
1684 if exc_tuple is None:
1684 if exc_tuple is None:
1685 etype, value, tb = sys.exc_info()
1685 etype, value, tb = sys.exc_info()
1686 else:
1686 else:
1687 etype, value, tb = exc_tuple
1687 etype, value, tb = exc_tuple
1688
1688
1689 if etype is None:
1689 if etype is None:
1690 if hasattr(sys, 'last_type'):
1690 if hasattr(sys, 'last_type'):
1691 etype, value, tb = sys.last_type, sys.last_value, \
1691 etype, value, tb = sys.last_type, sys.last_value, \
1692 sys.last_traceback
1692 sys.last_traceback
1693
1693
1694 if etype is None:
1694 if etype is None:
1695 raise ValueError("No exception to find")
1695 raise ValueError("No exception to find")
1696
1696
1697 # Now store the exception info in sys.last_type etc.
1697 # Now store the exception info in sys.last_type etc.
1698 # WARNING: these variables are somewhat deprecated and not
1698 # WARNING: these variables are somewhat deprecated and not
1699 # necessarily safe to use in a threaded environment, but tools
1699 # necessarily safe to use in a threaded environment, but tools
1700 # like pdb depend on their existence, so let's set them. If we
1700 # like pdb depend on their existence, so let's set them. If we
1701 # find problems in the field, we'll need to revisit their use.
1701 # find problems in the field, we'll need to revisit their use.
1702 sys.last_type = etype
1702 sys.last_type = etype
1703 sys.last_value = value
1703 sys.last_value = value
1704 sys.last_traceback = tb
1704 sys.last_traceback = tb
1705
1705
1706 return etype, value, tb
1706 return etype, value, tb
1707
1707
1708
1708
1709 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1709 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1710 exception_only=False):
1710 exception_only=False):
1711 """Display the exception that just occurred.
1711 """Display the exception that just occurred.
1712
1712
1713 If nothing is known about the exception, this is the method which
1713 If nothing is known about the exception, this is the method which
1714 should be used throughout the code for presenting user tracebacks,
1714 should be used throughout the code for presenting user tracebacks,
1715 rather than directly invoking the InteractiveTB object.
1715 rather than directly invoking the InteractiveTB object.
1716
1716
1717 A specific showsyntaxerror() also exists, but this method can take
1717 A specific showsyntaxerror() also exists, but this method can take
1718 care of calling it if needed, so unless you are explicitly catching a
1718 care of calling it if needed, so unless you are explicitly catching a
1719 SyntaxError exception, don't try to analyze the stack manually and
1719 SyntaxError exception, don't try to analyze the stack manually and
1720 simply call this method."""
1720 simply call this method."""
1721
1721
1722 try:
1722 try:
1723 try:
1723 try:
1724 etype, value, tb = self._get_exc_info(exc_tuple)
1724 etype, value, tb = self._get_exc_info(exc_tuple)
1725 except ValueError:
1725 except ValueError:
1726 self.write_err('No traceback available to show.\n')
1726 self.write_err('No traceback available to show.\n')
1727 return
1727 return
1728
1728
1729 if etype is SyntaxError:
1729 if etype is SyntaxError:
1730 # Though this won't be called by syntax errors in the input
1730 # Though this won't be called by syntax errors in the input
1731 # line, there may be SyntaxError cases with imported code.
1731 # line, there may be SyntaxError cases with imported code.
1732 self.showsyntaxerror(filename)
1732 self.showsyntaxerror(filename)
1733 elif etype is UsageError:
1733 elif etype is UsageError:
1734 self.write_err("UsageError: %s" % value)
1734 self.write_err("UsageError: %s" % value)
1735 elif issubclass(etype, RemoteError):
1735 elif issubclass(etype, RemoteError):
1736 # IPython.parallel remote exceptions.
1736 # IPython.parallel remote exceptions.
1737 # Draw the remote traceback, not the local one.
1737 # Draw the remote traceback, not the local one.
1738 self._showtraceback(etype, value, value.render_traceback())
1738 self._showtraceback(etype, value, value.render_traceback())
1739 else:
1739 else:
1740 if exception_only:
1740 if exception_only:
1741 stb = ['An exception has occurred, use %tb to see '
1741 stb = ['An exception has occurred, use %tb to see '
1742 'the full traceback.\n']
1742 'the full traceback.\n']
1743 stb.extend(self.InteractiveTB.get_exception_only(etype,
1743 stb.extend(self.InteractiveTB.get_exception_only(etype,
1744 value))
1744 value))
1745 else:
1745 else:
1746 stb = self.InteractiveTB.structured_traceback(etype,
1746 stb = self.InteractiveTB.structured_traceback(etype,
1747 value, tb, tb_offset=tb_offset)
1747 value, tb, tb_offset=tb_offset)
1748
1748
1749 self._showtraceback(etype, value, stb)
1749 self._showtraceback(etype, value, stb)
1750 if self.call_pdb:
1750 if self.call_pdb:
1751 # drop into debugger
1751 # drop into debugger
1752 self.debugger(force=True)
1752 self.debugger(force=True)
1753 return
1753 return
1754
1754
1755 # Actually show the traceback
1755 # Actually show the traceback
1756 self._showtraceback(etype, value, stb)
1756 self._showtraceback(etype, value, stb)
1757
1757
1758 except KeyboardInterrupt:
1758 except KeyboardInterrupt:
1759 self.write_err("\nKeyboardInterrupt\n")
1759 self.write_err("\nKeyboardInterrupt\n")
1760
1760
1761 def _showtraceback(self, etype, evalue, stb):
1761 def _showtraceback(self, etype, evalue, stb):
1762 """Actually show a traceback.
1762 """Actually show a traceback.
1763
1763
1764 Subclasses may override this method to put the traceback on a different
1764 Subclasses may override this method to put the traceback on a different
1765 place, like a side channel.
1765 place, like a side channel.
1766 """
1766 """
1767 print(self.InteractiveTB.stb2text(stb), file=io.stdout)
1767 print(self.InteractiveTB.stb2text(stb), file=io.stdout)
1768
1768
1769 def showsyntaxerror(self, filename=None):
1769 def showsyntaxerror(self, filename=None):
1770 """Display the syntax error that just occurred.
1770 """Display the syntax error that just occurred.
1771
1771
1772 This doesn't display a stack trace because there isn't one.
1772 This doesn't display a stack trace because there isn't one.
1773
1773
1774 If a filename is given, it is stuffed in the exception instead
1774 If a filename is given, it is stuffed in the exception instead
1775 of what was there before (because Python's parser always uses
1775 of what was there before (because Python's parser always uses
1776 "<string>" when reading from a string).
1776 "<string>" when reading from a string).
1777 """
1777 """
1778 etype, value, last_traceback = self._get_exc_info()
1778 etype, value, last_traceback = self._get_exc_info()
1779
1779
1780 if filename and etype is SyntaxError:
1780 if filename and etype is SyntaxError:
1781 try:
1781 try:
1782 value.filename = filename
1782 value.filename = filename
1783 except:
1783 except:
1784 # Not the format we expect; leave it alone
1784 # Not the format we expect; leave it alone
1785 pass
1785 pass
1786
1786
1787 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1787 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1788 self._showtraceback(etype, value, stb)
1788 self._showtraceback(etype, value, stb)
1789
1789
1790 # This is overridden in TerminalInteractiveShell to show a message about
1790 # This is overridden in TerminalInteractiveShell to show a message about
1791 # the %paste magic.
1791 # the %paste magic.
1792 def showindentationerror(self):
1792 def showindentationerror(self):
1793 """Called by run_cell when there's an IndentationError in code entered
1793 """Called by run_cell when there's an IndentationError in code entered
1794 at the prompt.
1794 at the prompt.
1795
1795
1796 This is overridden in TerminalInteractiveShell to show a message about
1796 This is overridden in TerminalInteractiveShell to show a message about
1797 the %paste magic."""
1797 the %paste magic."""
1798 self.showsyntaxerror()
1798 self.showsyntaxerror()
1799
1799
1800 #-------------------------------------------------------------------------
1800 #-------------------------------------------------------------------------
1801 # Things related to readline
1801 # Things related to readline
1802 #-------------------------------------------------------------------------
1802 #-------------------------------------------------------------------------
1803
1803
1804 def init_readline(self):
1804 def init_readline(self):
1805 """Command history completion/saving/reloading."""
1805 """Command history completion/saving/reloading."""
1806
1806
1807 if self.readline_use:
1807 if self.readline_use:
1808 import IPython.utils.rlineimpl as readline
1808 import IPython.utils.rlineimpl as readline
1809
1809
1810 self.rl_next_input = None
1810 self.rl_next_input = None
1811 self.rl_do_indent = False
1811 self.rl_do_indent = False
1812
1812
1813 if not self.readline_use or not readline.have_readline:
1813 if not self.readline_use or not readline.have_readline:
1814 self.has_readline = False
1814 self.has_readline = False
1815 self.readline = None
1815 self.readline = None
1816 # Set a number of methods that depend on readline to be no-op
1816 # Set a number of methods that depend on readline to be no-op
1817 self.readline_no_record = no_op_context
1817 self.readline_no_record = no_op_context
1818 self.set_readline_completer = no_op
1818 self.set_readline_completer = no_op
1819 self.set_custom_completer = no_op
1819 self.set_custom_completer = no_op
1820 if self.readline_use:
1820 if self.readline_use:
1821 warn('Readline services not available or not loaded.')
1821 warn('Readline services not available or not loaded.')
1822 else:
1822 else:
1823 self.has_readline = True
1823 self.has_readline = True
1824 self.readline = readline
1824 self.readline = readline
1825 sys.modules['readline'] = readline
1825 sys.modules['readline'] = readline
1826
1826
1827 # Platform-specific configuration
1827 # Platform-specific configuration
1828 if os.name == 'nt':
1828 if os.name == 'nt':
1829 # FIXME - check with Frederick to see if we can harmonize
1829 # FIXME - check with Frederick to see if we can harmonize
1830 # naming conventions with pyreadline to avoid this
1830 # naming conventions with pyreadline to avoid this
1831 # platform-dependent check
1831 # platform-dependent check
1832 self.readline_startup_hook = readline.set_pre_input_hook
1832 self.readline_startup_hook = readline.set_pre_input_hook
1833 else:
1833 else:
1834 self.readline_startup_hook = readline.set_startup_hook
1834 self.readline_startup_hook = readline.set_startup_hook
1835
1835
1836 # Load user's initrc file (readline config)
1836 # Load user's initrc file (readline config)
1837 # Or if libedit is used, load editrc.
1837 # Or if libedit is used, load editrc.
1838 inputrc_name = os.environ.get('INPUTRC')
1838 inputrc_name = os.environ.get('INPUTRC')
1839 if inputrc_name is None:
1839 if inputrc_name is None:
1840 inputrc_name = '.inputrc'
1840 inputrc_name = '.inputrc'
1841 if readline.uses_libedit:
1841 if readline.uses_libedit:
1842 inputrc_name = '.editrc'
1842 inputrc_name = '.editrc'
1843 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1843 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1844 if os.path.isfile(inputrc_name):
1844 if os.path.isfile(inputrc_name):
1845 try:
1845 try:
1846 readline.read_init_file(inputrc_name)
1846 readline.read_init_file(inputrc_name)
1847 except:
1847 except:
1848 warn('Problems reading readline initialization file <%s>'
1848 warn('Problems reading readline initialization file <%s>'
1849 % inputrc_name)
1849 % inputrc_name)
1850
1850
1851 # Configure readline according to user's prefs
1851 # Configure readline according to user's prefs
1852 # This is only done if GNU readline is being used. If libedit
1852 # This is only done if GNU readline is being used. If libedit
1853 # is being used (as on Leopard) the readline config is
1853 # is being used (as on Leopard) the readline config is
1854 # not run as the syntax for libedit is different.
1854 # not run as the syntax for libedit is different.
1855 if not readline.uses_libedit:
1855 if not readline.uses_libedit:
1856 for rlcommand in self.readline_parse_and_bind:
1856 for rlcommand in self.readline_parse_and_bind:
1857 #print "loading rl:",rlcommand # dbg
1857 #print "loading rl:",rlcommand # dbg
1858 readline.parse_and_bind(rlcommand)
1858 readline.parse_and_bind(rlcommand)
1859
1859
1860 # Remove some chars from the delimiters list. If we encounter
1860 # Remove some chars from the delimiters list. If we encounter
1861 # unicode chars, discard them.
1861 # unicode chars, discard them.
1862 delims = readline.get_completer_delims()
1862 delims = readline.get_completer_delims()
1863 if not py3compat.PY3:
1863 if not py3compat.PY3:
1864 delims = delims.encode("ascii", "ignore")
1864 delims = delims.encode("ascii", "ignore")
1865 for d in self.readline_remove_delims:
1865 for d in self.readline_remove_delims:
1866 delims = delims.replace(d, "")
1866 delims = delims.replace(d, "")
1867 delims = delims.replace(ESC_MAGIC, '')
1867 delims = delims.replace(ESC_MAGIC, '')
1868 readline.set_completer_delims(delims)
1868 readline.set_completer_delims(delims)
1869 # otherwise we end up with a monster history after a while:
1869 # otherwise we end up with a monster history after a while:
1870 readline.set_history_length(self.history_length)
1870 readline.set_history_length(self.history_length)
1871
1871
1872 self.refill_readline_hist()
1872 self.refill_readline_hist()
1873 self.readline_no_record = ReadlineNoRecord(self)
1873 self.readline_no_record = ReadlineNoRecord(self)
1874
1874
1875 # Configure auto-indent for all platforms
1875 # Configure auto-indent for all platforms
1876 self.set_autoindent(self.autoindent)
1876 self.set_autoindent(self.autoindent)
1877
1877
1878 def refill_readline_hist(self):
1878 def refill_readline_hist(self):
1879 # Load the last 1000 lines from history
1879 # Load the last 1000 lines from history
1880 self.readline.clear_history()
1880 self.readline.clear_history()
1881 stdin_encoding = sys.stdin.encoding or "utf-8"
1881 stdin_encoding = sys.stdin.encoding or "utf-8"
1882 last_cell = u""
1882 last_cell = u""
1883 for _, _, cell in self.history_manager.get_tail(1000,
1883 for _, _, cell in self.history_manager.get_tail(1000,
1884 include_latest=True):
1884 include_latest=True):
1885 # Ignore blank lines and consecutive duplicates
1885 # Ignore blank lines and consecutive duplicates
1886 cell = cell.rstrip()
1886 cell = cell.rstrip()
1887 if cell and (cell != last_cell):
1887 if cell and (cell != last_cell):
1888 if self.multiline_history:
1888 if self.multiline_history:
1889 self.readline.add_history(py3compat.unicode_to_str(cell,
1889 self.readline.add_history(py3compat.unicode_to_str(cell,
1890 stdin_encoding))
1890 stdin_encoding))
1891 else:
1891 else:
1892 for line in cell.splitlines():
1892 for line in cell.splitlines():
1893 self.readline.add_history(py3compat.unicode_to_str(line,
1893 self.readline.add_history(py3compat.unicode_to_str(line,
1894 stdin_encoding))
1894 stdin_encoding))
1895 last_cell = cell
1895 last_cell = cell
1896
1896
1897 def set_next_input(self, s):
1897 def set_next_input(self, s):
1898 """ Sets the 'default' input string for the next command line.
1898 """ Sets the 'default' input string for the next command line.
1899
1899
1900 Requires readline.
1900 Requires readline.
1901
1901
1902 Example:
1902 Example:
1903
1903
1904 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1904 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1905 [D:\ipython]|2> Hello Word_ # cursor is here
1905 [D:\ipython]|2> Hello Word_ # cursor is here
1906 """
1906 """
1907 self.rl_next_input = py3compat.cast_bytes_py2(s)
1907 self.rl_next_input = py3compat.cast_bytes_py2(s)
1908
1908
1909 # Maybe move this to the terminal subclass?
1909 # Maybe move this to the terminal subclass?
1910 def pre_readline(self):
1910 def pre_readline(self):
1911 """readline hook to be used at the start of each line.
1911 """readline hook to be used at the start of each line.
1912
1912
1913 Currently it handles auto-indent only."""
1913 Currently it handles auto-indent only."""
1914
1914
1915 if self.rl_do_indent:
1915 if self.rl_do_indent:
1916 self.readline.insert_text(self._indent_current_str())
1916 self.readline.insert_text(self._indent_current_str())
1917 if self.rl_next_input is not None:
1917 if self.rl_next_input is not None:
1918 self.readline.insert_text(self.rl_next_input)
1918 self.readline.insert_text(self.rl_next_input)
1919 self.rl_next_input = None
1919 self.rl_next_input = None
1920
1920
1921 def _indent_current_str(self):
1921 def _indent_current_str(self):
1922 """return the current level of indentation as a string"""
1922 """return the current level of indentation as a string"""
1923 return self.input_splitter.indent_spaces * ' '
1923 return self.input_splitter.indent_spaces * ' '
1924
1924
1925 #-------------------------------------------------------------------------
1925 #-------------------------------------------------------------------------
1926 # Things related to text completion
1926 # Things related to text completion
1927 #-------------------------------------------------------------------------
1927 #-------------------------------------------------------------------------
1928
1928
1929 def init_completer(self):
1929 def init_completer(self):
1930 """Initialize the completion machinery.
1930 """Initialize the completion machinery.
1931
1931
1932 This creates completion machinery that can be used by client code,
1932 This creates completion machinery that can be used by client code,
1933 either interactively in-process (typically triggered by the readline
1933 either interactively in-process (typically triggered by the readline
1934 library), programatically (such as in test suites) or out-of-prcess
1934 library), programatically (such as in test suites) or out-of-prcess
1935 (typically over the network by remote frontends).
1935 (typically over the network by remote frontends).
1936 """
1936 """
1937 from IPython.core.completer import IPCompleter
1937 from IPython.core.completer import IPCompleter
1938 from IPython.core.completerlib import (module_completer,
1938 from IPython.core.completerlib import (module_completer,
1939 magic_run_completer, cd_completer, reset_completer)
1939 magic_run_completer, cd_completer, reset_completer)
1940
1940
1941 self.Completer = IPCompleter(shell=self,
1941 self.Completer = IPCompleter(shell=self,
1942 namespace=self.user_ns,
1942 namespace=self.user_ns,
1943 global_namespace=self.user_global_ns,
1943 global_namespace=self.user_global_ns,
1944 alias_table=self.alias_manager.alias_table,
1944 alias_table=self.alias_manager.alias_table,
1945 use_readline=self.has_readline,
1945 use_readline=self.has_readline,
1946 config=self.config,
1946 config=self.config,
1947 )
1947 )
1948 self.configurables.append(self.Completer)
1948 self.configurables.append(self.Completer)
1949
1949
1950 # Add custom completers to the basic ones built into IPCompleter
1950 # Add custom completers to the basic ones built into IPCompleter
1951 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1951 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1952 self.strdispatchers['complete_command'] = sdisp
1952 self.strdispatchers['complete_command'] = sdisp
1953 self.Completer.custom_completers = sdisp
1953 self.Completer.custom_completers = sdisp
1954
1954
1955 self.set_hook('complete_command', module_completer, str_key = 'import')
1955 self.set_hook('complete_command', module_completer, str_key = 'import')
1956 self.set_hook('complete_command', module_completer, str_key = 'from')
1956 self.set_hook('complete_command', module_completer, str_key = 'from')
1957 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1957 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1958 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1958 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1959 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1959 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1960
1960
1961 # Only configure readline if we truly are using readline. IPython can
1961 # Only configure readline if we truly are using readline. IPython can
1962 # do tab-completion over the network, in GUIs, etc, where readline
1962 # do tab-completion over the network, in GUIs, etc, where readline
1963 # itself may be absent
1963 # itself may be absent
1964 if self.has_readline:
1964 if self.has_readline:
1965 self.set_readline_completer()
1965 self.set_readline_completer()
1966
1966
1967 def complete(self, text, line=None, cursor_pos=None):
1967 def complete(self, text, line=None, cursor_pos=None):
1968 """Return the completed text and a list of completions.
1968 """Return the completed text and a list of completions.
1969
1969
1970 Parameters
1970 Parameters
1971 ----------
1971 ----------
1972
1972
1973 text : string
1973 text : string
1974 A string of text to be completed on. It can be given as empty and
1974 A string of text to be completed on. It can be given as empty and
1975 instead a line/position pair are given. In this case, the
1975 instead a line/position pair are given. In this case, the
1976 completer itself will split the line like readline does.
1976 completer itself will split the line like readline does.
1977
1977
1978 line : string, optional
1978 line : string, optional
1979 The complete line that text is part of.
1979 The complete line that text is part of.
1980
1980
1981 cursor_pos : int, optional
1981 cursor_pos : int, optional
1982 The position of the cursor on the input line.
1982 The position of the cursor on the input line.
1983
1983
1984 Returns
1984 Returns
1985 -------
1985 -------
1986 text : string
1986 text : string
1987 The actual text that was completed.
1987 The actual text that was completed.
1988
1988
1989 matches : list
1989 matches : list
1990 A sorted list with all possible completions.
1990 A sorted list with all possible completions.
1991
1991
1992 The optional arguments allow the completion to take more context into
1992 The optional arguments allow the completion to take more context into
1993 account, and are part of the low-level completion API.
1993 account, and are part of the low-level completion API.
1994
1994
1995 This is a wrapper around the completion mechanism, similar to what
1995 This is a wrapper around the completion mechanism, similar to what
1996 readline does at the command line when the TAB key is hit. By
1996 readline does at the command line when the TAB key is hit. By
1997 exposing it as a method, it can be used by other non-readline
1997 exposing it as a method, it can be used by other non-readline
1998 environments (such as GUIs) for text completion.
1998 environments (such as GUIs) for text completion.
1999
1999
2000 Simple usage example:
2000 Simple usage example:
2001
2001
2002 In [1]: x = 'hello'
2002 In [1]: x = 'hello'
2003
2003
2004 In [2]: _ip.complete('x.l')
2004 In [2]: _ip.complete('x.l')
2005 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2005 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2006 """
2006 """
2007
2007
2008 # Inject names into __builtin__ so we can complete on the added names.
2008 # Inject names into __builtin__ so we can complete on the added names.
2009 with self.builtin_trap:
2009 with self.builtin_trap:
2010 return self.Completer.complete(text, line, cursor_pos)
2010 return self.Completer.complete(text, line, cursor_pos)
2011
2011
2012 def set_custom_completer(self, completer, pos=0):
2012 def set_custom_completer(self, completer, pos=0):
2013 """Adds a new custom completer function.
2013 """Adds a new custom completer function.
2014
2014
2015 The position argument (defaults to 0) is the index in the completers
2015 The position argument (defaults to 0) is the index in the completers
2016 list where you want the completer to be inserted."""
2016 list where you want the completer to be inserted."""
2017
2017
2018 newcomp = types.MethodType(completer,self.Completer)
2018 newcomp = types.MethodType(completer,self.Completer)
2019 self.Completer.matchers.insert(pos,newcomp)
2019 self.Completer.matchers.insert(pos,newcomp)
2020
2020
2021 def set_readline_completer(self):
2021 def set_readline_completer(self):
2022 """Reset readline's completer to be our own."""
2022 """Reset readline's completer to be our own."""
2023 self.readline.set_completer(self.Completer.rlcomplete)
2023 self.readline.set_completer(self.Completer.rlcomplete)
2024
2024
2025 def set_completer_frame(self, frame=None):
2025 def set_completer_frame(self, frame=None):
2026 """Set the frame of the completer."""
2026 """Set the frame of the completer."""
2027 if frame:
2027 if frame:
2028 self.Completer.namespace = frame.f_locals
2028 self.Completer.namespace = frame.f_locals
2029 self.Completer.global_namespace = frame.f_globals
2029 self.Completer.global_namespace = frame.f_globals
2030 else:
2030 else:
2031 self.Completer.namespace = self.user_ns
2031 self.Completer.namespace = self.user_ns
2032 self.Completer.global_namespace = self.user_global_ns
2032 self.Completer.global_namespace = self.user_global_ns
2033
2033
2034 #-------------------------------------------------------------------------
2034 #-------------------------------------------------------------------------
2035 # Things related to magics
2035 # Things related to magics
2036 #-------------------------------------------------------------------------
2036 #-------------------------------------------------------------------------
2037
2037
2038 def init_magics(self):
2038 def init_magics(self):
2039 from IPython.core import magics as m
2039 from IPython.core import magics as m
2040 self.magics_manager = magic.MagicsManager(shell=self,
2040 self.magics_manager = magic.MagicsManager(shell=self,
2041 confg=self.config,
2041 confg=self.config,
2042 user_magics=m.UserMagics(self))
2042 user_magics=m.UserMagics(self))
2043 self.configurables.append(self.magics_manager)
2043 self.configurables.append(self.magics_manager)
2044
2044
2045 # Expose as public API from the magics manager
2045 # Expose as public API from the magics manager
2046 self.register_magics = self.magics_manager.register
2046 self.register_magics = self.magics_manager.register
2047 self.register_magic_function = self.magics_manager.register_function
2047 self.register_magic_function = self.magics_manager.register_function
2048 self.define_magic = self.magics_manager.define_magic
2048 self.define_magic = self.magics_manager.define_magic
2049
2049
2050 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2050 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2051 m.ConfigMagics, m.DeprecatedMagics, m.DisplayMagics, m.ExecutionMagics,
2051 m.ConfigMagics, m.DeprecatedMagics, m.DisplayMagics, m.ExecutionMagics,
2052 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2052 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2053 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2053 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2054 )
2054 )
2055
2055
2056 # Register Magic Aliases
2057 mman = self.magics_manager
2058 mman.register_alias('ed', 'edit')
2059 mman.register_alias('hist', 'history')
2060 mman.register_alias('rep', 'recall')
2061
2056 # FIXME: Move the color initialization to the DisplayHook, which
2062 # FIXME: Move the color initialization to the DisplayHook, which
2057 # should be split into a prompt manager and displayhook. We probably
2063 # should be split into a prompt manager and displayhook. We probably
2058 # even need a centralize colors management object.
2064 # even need a centralize colors management object.
2059 self.magic('colors %s' % self.colors)
2065 self.magic('colors %s' % self.colors)
2060
2066
2061 def run_line_magic(self, magic_name, line):
2067 def run_line_magic(self, magic_name, line):
2062 """Execute the given line magic.
2068 """Execute the given line magic.
2063
2069
2064 Parameters
2070 Parameters
2065 ----------
2071 ----------
2066 magic_name : str
2072 magic_name : str
2067 Name of the desired magic function, without '%' prefix.
2073 Name of the desired magic function, without '%' prefix.
2068
2074
2069 line : str
2075 line : str
2070 The rest of the input line as a single string.
2076 The rest of the input line as a single string.
2071 """
2077 """
2072 fn = self.find_line_magic(magic_name)
2078 fn = self.find_line_magic(magic_name)
2073 if fn is None:
2079 if fn is None:
2074 cm = self.find_cell_magic(magic_name)
2080 cm = self.find_cell_magic(magic_name)
2075 etpl = "Line magic function `%%%s` not found%s."
2081 etpl = "Line magic function `%%%s` not found%s."
2076 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2082 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2077 'did you mean that instead?)' % magic_name )
2083 'did you mean that instead?)' % magic_name )
2078 error(etpl % (magic_name, extra))
2084 error(etpl % (magic_name, extra))
2079 else:
2085 else:
2080 # Note: this is the distance in the stack to the user's frame.
2086 # Note: this is the distance in the stack to the user's frame.
2081 # This will need to be updated if the internal calling logic gets
2087 # This will need to be updated if the internal calling logic gets
2082 # refactored, or else we'll be expanding the wrong variables.
2088 # refactored, or else we'll be expanding the wrong variables.
2083 stack_depth = 2
2089 stack_depth = 2
2084 magic_arg_s = self.var_expand(line, stack_depth)
2090 magic_arg_s = self.var_expand(line, stack_depth)
2085 # Put magic args in a list so we can call with f(*a) syntax
2091 # Put magic args in a list so we can call with f(*a) syntax
2086 args = [magic_arg_s]
2092 args = [magic_arg_s]
2087 # Grab local namespace if we need it:
2093 # Grab local namespace if we need it:
2088 if getattr(fn, "needs_local_scope", False):
2094 if getattr(fn, "needs_local_scope", False):
2089 args.append(sys._getframe(stack_depth).f_locals)
2095 args.append(sys._getframe(stack_depth).f_locals)
2090 with self.builtin_trap:
2096 with self.builtin_trap:
2091 result = fn(*args)
2097 result = fn(*args)
2092 return result
2098 return result
2093
2099
2094 def run_cell_magic(self, magic_name, line, cell):
2100 def run_cell_magic(self, magic_name, line, cell):
2095 """Execute the given cell magic.
2101 """Execute the given cell magic.
2096
2102
2097 Parameters
2103 Parameters
2098 ----------
2104 ----------
2099 magic_name : str
2105 magic_name : str
2100 Name of the desired magic function, without '%' prefix.
2106 Name of the desired magic function, without '%' prefix.
2101
2107
2102 line : str
2108 line : str
2103 The rest of the first input line as a single string.
2109 The rest of the first input line as a single string.
2104
2110
2105 cell : str
2111 cell : str
2106 The body of the cell as a (possibly multiline) string.
2112 The body of the cell as a (possibly multiline) string.
2107 """
2113 """
2108 fn = self.find_cell_magic(magic_name)
2114 fn = self.find_cell_magic(magic_name)
2109 if fn is None:
2115 if fn is None:
2110 lm = self.find_line_magic(magic_name)
2116 lm = self.find_line_magic(magic_name)
2111 etpl = "Cell magic function `%%%%%s` not found%s."
2117 etpl = "Cell magic function `%%%%%s` not found%s."
2112 extra = '' if lm is None else (' (But line magic `%%%s` exists, '
2118 extra = '' if lm is None else (' (But line magic `%%%s` exists, '
2113 'did you mean that instead?)' % magic_name )
2119 'did you mean that instead?)' % magic_name )
2114 error(etpl % (magic_name, extra))
2120 error(etpl % (magic_name, extra))
2115 else:
2121 else:
2116 # Note: this is the distance in the stack to the user's frame.
2122 # Note: this is the distance in the stack to the user's frame.
2117 # This will need to be updated if the internal calling logic gets
2123 # This will need to be updated if the internal calling logic gets
2118 # refactored, or else we'll be expanding the wrong variables.
2124 # refactored, or else we'll be expanding the wrong variables.
2119 stack_depth = 2
2125 stack_depth = 2
2120 magic_arg_s = self.var_expand(line, stack_depth)
2126 magic_arg_s = self.var_expand(line, stack_depth)
2121 with self.builtin_trap:
2127 with self.builtin_trap:
2122 result = fn(magic_arg_s, cell)
2128 result = fn(magic_arg_s, cell)
2123 return result
2129 return result
2124
2130
2125 def find_line_magic(self, magic_name):
2131 def find_line_magic(self, magic_name):
2126 """Find and return a line magic by name.
2132 """Find and return a line magic by name.
2127
2133
2128 Returns None if the magic isn't found."""
2134 Returns None if the magic isn't found."""
2129 return self.magics_manager.magics['line'].get(magic_name)
2135 return self.magics_manager.magics['line'].get(magic_name)
2130
2136
2131 def find_cell_magic(self, magic_name):
2137 def find_cell_magic(self, magic_name):
2132 """Find and return a cell magic by name.
2138 """Find and return a cell magic by name.
2133
2139
2134 Returns None if the magic isn't found."""
2140 Returns None if the magic isn't found."""
2135 return self.magics_manager.magics['cell'].get(magic_name)
2141 return self.magics_manager.magics['cell'].get(magic_name)
2136
2142
2137 def find_magic(self, magic_name, magic_kind='line'):
2143 def find_magic(self, magic_name, magic_kind='line'):
2138 """Find and return a magic of the given type by name.
2144 """Find and return a magic of the given type by name.
2139
2145
2140 Returns None if the magic isn't found."""
2146 Returns None if the magic isn't found."""
2141 return self.magics_manager.magics[magic_kind].get(magic_name)
2147 return self.magics_manager.magics[magic_kind].get(magic_name)
2142
2148
2143 def magic(self, arg_s):
2149 def magic(self, arg_s):
2144 """DEPRECATED. Use run_line_magic() instead.
2150 """DEPRECATED. Use run_line_magic() instead.
2145
2151
2146 Call a magic function by name.
2152 Call a magic function by name.
2147
2153
2148 Input: a string containing the name of the magic function to call and
2154 Input: a string containing the name of the magic function to call and
2149 any additional arguments to be passed to the magic.
2155 any additional arguments to be passed to the magic.
2150
2156
2151 magic('name -opt foo bar') is equivalent to typing at the ipython
2157 magic('name -opt foo bar') is equivalent to typing at the ipython
2152 prompt:
2158 prompt:
2153
2159
2154 In[1]: %name -opt foo bar
2160 In[1]: %name -opt foo bar
2155
2161
2156 To call a magic without arguments, simply use magic('name').
2162 To call a magic without arguments, simply use magic('name').
2157
2163
2158 This provides a proper Python function to call IPython's magics in any
2164 This provides a proper Python function to call IPython's magics in any
2159 valid Python code you can type at the interpreter, including loops and
2165 valid Python code you can type at the interpreter, including loops and
2160 compound statements.
2166 compound statements.
2161 """
2167 """
2162 # TODO: should we issue a loud deprecation warning here?
2168 # TODO: should we issue a loud deprecation warning here?
2163 magic_name, _, magic_arg_s = arg_s.partition(' ')
2169 magic_name, _, magic_arg_s = arg_s.partition(' ')
2164 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2170 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2165 return self.run_line_magic(magic_name, magic_arg_s)
2171 return self.run_line_magic(magic_name, magic_arg_s)
2166
2172
2167 #-------------------------------------------------------------------------
2173 #-------------------------------------------------------------------------
2168 # Things related to macros
2174 # Things related to macros
2169 #-------------------------------------------------------------------------
2175 #-------------------------------------------------------------------------
2170
2176
2171 def define_macro(self, name, themacro):
2177 def define_macro(self, name, themacro):
2172 """Define a new macro
2178 """Define a new macro
2173
2179
2174 Parameters
2180 Parameters
2175 ----------
2181 ----------
2176 name : str
2182 name : str
2177 The name of the macro.
2183 The name of the macro.
2178 themacro : str or Macro
2184 themacro : str or Macro
2179 The action to do upon invoking the macro. If a string, a new
2185 The action to do upon invoking the macro. If a string, a new
2180 Macro object is created by passing the string to it.
2186 Macro object is created by passing the string to it.
2181 """
2187 """
2182
2188
2183 from IPython.core import macro
2189 from IPython.core import macro
2184
2190
2185 if isinstance(themacro, basestring):
2191 if isinstance(themacro, basestring):
2186 themacro = macro.Macro(themacro)
2192 themacro = macro.Macro(themacro)
2187 if not isinstance(themacro, macro.Macro):
2193 if not isinstance(themacro, macro.Macro):
2188 raise ValueError('A macro must be a string or a Macro instance.')
2194 raise ValueError('A macro must be a string or a Macro instance.')
2189 self.user_ns[name] = themacro
2195 self.user_ns[name] = themacro
2190
2196
2191 #-------------------------------------------------------------------------
2197 #-------------------------------------------------------------------------
2192 # Things related to the running of system commands
2198 # Things related to the running of system commands
2193 #-------------------------------------------------------------------------
2199 #-------------------------------------------------------------------------
2194
2200
2195 def system_piped(self, cmd):
2201 def system_piped(self, cmd):
2196 """Call the given cmd in a subprocess, piping stdout/err
2202 """Call the given cmd in a subprocess, piping stdout/err
2197
2203
2198 Parameters
2204 Parameters
2199 ----------
2205 ----------
2200 cmd : str
2206 cmd : str
2201 Command to execute (can not end in '&', as background processes are
2207 Command to execute (can not end in '&', as background processes are
2202 not supported. Should not be a command that expects input
2208 not supported. Should not be a command that expects input
2203 other than simple text.
2209 other than simple text.
2204 """
2210 """
2205 if cmd.rstrip().endswith('&'):
2211 if cmd.rstrip().endswith('&'):
2206 # this is *far* from a rigorous test
2212 # this is *far* from a rigorous test
2207 # We do not support backgrounding processes because we either use
2213 # We do not support backgrounding processes because we either use
2208 # pexpect or pipes to read from. Users can always just call
2214 # pexpect or pipes to read from. Users can always just call
2209 # os.system() or use ip.system=ip.system_raw
2215 # os.system() or use ip.system=ip.system_raw
2210 # if they really want a background process.
2216 # if they really want a background process.
2211 raise OSError("Background processes not supported.")
2217 raise OSError("Background processes not supported.")
2212
2218
2213 # we explicitly do NOT return the subprocess status code, because
2219 # we explicitly do NOT return the subprocess status code, because
2214 # a non-None value would trigger :func:`sys.displayhook` calls.
2220 # a non-None value would trigger :func:`sys.displayhook` calls.
2215 # Instead, we store the exit_code in user_ns.
2221 # Instead, we store the exit_code in user_ns.
2216 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2222 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2217
2223
2218 def system_raw(self, cmd):
2224 def system_raw(self, cmd):
2219 """Call the given cmd in a subprocess using os.system
2225 """Call the given cmd in a subprocess using os.system
2220
2226
2221 Parameters
2227 Parameters
2222 ----------
2228 ----------
2223 cmd : str
2229 cmd : str
2224 Command to execute.
2230 Command to execute.
2225 """
2231 """
2226 cmd = self.var_expand(cmd, depth=1)
2232 cmd = self.var_expand(cmd, depth=1)
2227 # protect os.system from UNC paths on Windows, which it can't handle:
2233 # protect os.system from UNC paths on Windows, which it can't handle:
2228 if sys.platform == 'win32':
2234 if sys.platform == 'win32':
2229 from IPython.utils._process_win32 import AvoidUNCPath
2235 from IPython.utils._process_win32 import AvoidUNCPath
2230 with AvoidUNCPath() as path:
2236 with AvoidUNCPath() as path:
2231 if path is not None:
2237 if path is not None:
2232 cmd = '"pushd %s &&"%s' % (path, cmd)
2238 cmd = '"pushd %s &&"%s' % (path, cmd)
2233 cmd = py3compat.unicode_to_str(cmd)
2239 cmd = py3compat.unicode_to_str(cmd)
2234 ec = os.system(cmd)
2240 ec = os.system(cmd)
2235 else:
2241 else:
2236 cmd = py3compat.unicode_to_str(cmd)
2242 cmd = py3compat.unicode_to_str(cmd)
2237 ec = os.system(cmd)
2243 ec = os.system(cmd)
2238
2244
2239 # We explicitly do NOT return the subprocess status code, because
2245 # We explicitly do NOT return the subprocess status code, because
2240 # a non-None value would trigger :func:`sys.displayhook` calls.
2246 # a non-None value would trigger :func:`sys.displayhook` calls.
2241 # Instead, we store the exit_code in user_ns.
2247 # Instead, we store the exit_code in user_ns.
2242 self.user_ns['_exit_code'] = ec
2248 self.user_ns['_exit_code'] = ec
2243
2249
2244 # use piped system by default, because it is better behaved
2250 # use piped system by default, because it is better behaved
2245 system = system_piped
2251 system = system_piped
2246
2252
2247 def getoutput(self, cmd, split=True, depth=0):
2253 def getoutput(self, cmd, split=True, depth=0):
2248 """Get output (possibly including stderr) from a subprocess.
2254 """Get output (possibly including stderr) from a subprocess.
2249
2255
2250 Parameters
2256 Parameters
2251 ----------
2257 ----------
2252 cmd : str
2258 cmd : str
2253 Command to execute (can not end in '&', as background processes are
2259 Command to execute (can not end in '&', as background processes are
2254 not supported.
2260 not supported.
2255 split : bool, optional
2261 split : bool, optional
2256 If True, split the output into an IPython SList. Otherwise, an
2262 If True, split the output into an IPython SList. Otherwise, an
2257 IPython LSString is returned. These are objects similar to normal
2263 IPython LSString is returned. These are objects similar to normal
2258 lists and strings, with a few convenience attributes for easier
2264 lists and strings, with a few convenience attributes for easier
2259 manipulation of line-based output. You can use '?' on them for
2265 manipulation of line-based output. You can use '?' on them for
2260 details.
2266 details.
2261 depth : int, optional
2267 depth : int, optional
2262 How many frames above the caller are the local variables which should
2268 How many frames above the caller are the local variables which should
2263 be expanded in the command string? The default (0) assumes that the
2269 be expanded in the command string? The default (0) assumes that the
2264 expansion variables are in the stack frame calling this function.
2270 expansion variables are in the stack frame calling this function.
2265 """
2271 """
2266 if cmd.rstrip().endswith('&'):
2272 if cmd.rstrip().endswith('&'):
2267 # this is *far* from a rigorous test
2273 # this is *far* from a rigorous test
2268 raise OSError("Background processes not supported.")
2274 raise OSError("Background processes not supported.")
2269 out = getoutput(self.var_expand(cmd, depth=depth+1))
2275 out = getoutput(self.var_expand(cmd, depth=depth+1))
2270 if split:
2276 if split:
2271 out = SList(out.splitlines())
2277 out = SList(out.splitlines())
2272 else:
2278 else:
2273 out = LSString(out)
2279 out = LSString(out)
2274 return out
2280 return out
2275
2281
2276 #-------------------------------------------------------------------------
2282 #-------------------------------------------------------------------------
2277 # Things related to aliases
2283 # Things related to aliases
2278 #-------------------------------------------------------------------------
2284 #-------------------------------------------------------------------------
2279
2285
2280 def init_alias(self):
2286 def init_alias(self):
2281 self.alias_manager = AliasManager(shell=self, config=self.config)
2287 self.alias_manager = AliasManager(shell=self, config=self.config)
2282 self.configurables.append(self.alias_manager)
2288 self.configurables.append(self.alias_manager)
2283 self.ns_table['alias'] = self.alias_manager.alias_table,
2289 self.ns_table['alias'] = self.alias_manager.alias_table,
2284
2290
2285 #-------------------------------------------------------------------------
2291 #-------------------------------------------------------------------------
2286 # Things related to extensions and plugins
2292 # Things related to extensions and plugins
2287 #-------------------------------------------------------------------------
2293 #-------------------------------------------------------------------------
2288
2294
2289 def init_extension_manager(self):
2295 def init_extension_manager(self):
2290 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2296 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2291 self.configurables.append(self.extension_manager)
2297 self.configurables.append(self.extension_manager)
2292
2298
2293 def init_plugin_manager(self):
2299 def init_plugin_manager(self):
2294 self.plugin_manager = PluginManager(config=self.config)
2300 self.plugin_manager = PluginManager(config=self.config)
2295 self.configurables.append(self.plugin_manager)
2301 self.configurables.append(self.plugin_manager)
2296
2302
2297
2303
2298 #-------------------------------------------------------------------------
2304 #-------------------------------------------------------------------------
2299 # Things related to payloads
2305 # Things related to payloads
2300 #-------------------------------------------------------------------------
2306 #-------------------------------------------------------------------------
2301
2307
2302 def init_payload(self):
2308 def init_payload(self):
2303 self.payload_manager = PayloadManager(config=self.config)
2309 self.payload_manager = PayloadManager(config=self.config)
2304 self.configurables.append(self.payload_manager)
2310 self.configurables.append(self.payload_manager)
2305
2311
2306 #-------------------------------------------------------------------------
2312 #-------------------------------------------------------------------------
2307 # Things related to the prefilter
2313 # Things related to the prefilter
2308 #-------------------------------------------------------------------------
2314 #-------------------------------------------------------------------------
2309
2315
2310 def init_prefilter(self):
2316 def init_prefilter(self):
2311 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2317 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2312 self.configurables.append(self.prefilter_manager)
2318 self.configurables.append(self.prefilter_manager)
2313 # Ultimately this will be refactored in the new interpreter code, but
2319 # Ultimately this will be refactored in the new interpreter code, but
2314 # for now, we should expose the main prefilter method (there's legacy
2320 # for now, we should expose the main prefilter method (there's legacy
2315 # code out there that may rely on this).
2321 # code out there that may rely on this).
2316 self.prefilter = self.prefilter_manager.prefilter_lines
2322 self.prefilter = self.prefilter_manager.prefilter_lines
2317
2323
2318 def auto_rewrite_input(self, cmd):
2324 def auto_rewrite_input(self, cmd):
2319 """Print to the screen the rewritten form of the user's command.
2325 """Print to the screen the rewritten form of the user's command.
2320
2326
2321 This shows visual feedback by rewriting input lines that cause
2327 This shows visual feedback by rewriting input lines that cause
2322 automatic calling to kick in, like::
2328 automatic calling to kick in, like::
2323
2329
2324 /f x
2330 /f x
2325
2331
2326 into::
2332 into::
2327
2333
2328 ------> f(x)
2334 ------> f(x)
2329
2335
2330 after the user's input prompt. This helps the user understand that the
2336 after the user's input prompt. This helps the user understand that the
2331 input line was transformed automatically by IPython.
2337 input line was transformed automatically by IPython.
2332 """
2338 """
2333 if not self.show_rewritten_input:
2339 if not self.show_rewritten_input:
2334 return
2340 return
2335
2341
2336 rw = self.prompt_manager.render('rewrite') + cmd
2342 rw = self.prompt_manager.render('rewrite') + cmd
2337
2343
2338 try:
2344 try:
2339 # plain ascii works better w/ pyreadline, on some machines, so
2345 # plain ascii works better w/ pyreadline, on some machines, so
2340 # we use it and only print uncolored rewrite if we have unicode
2346 # we use it and only print uncolored rewrite if we have unicode
2341 rw = str(rw)
2347 rw = str(rw)
2342 print(rw, file=io.stdout)
2348 print(rw, file=io.stdout)
2343 except UnicodeEncodeError:
2349 except UnicodeEncodeError:
2344 print("------> " + cmd)
2350 print("------> " + cmd)
2345
2351
2346 #-------------------------------------------------------------------------
2352 #-------------------------------------------------------------------------
2347 # Things related to extracting values/expressions from kernel and user_ns
2353 # Things related to extracting values/expressions from kernel and user_ns
2348 #-------------------------------------------------------------------------
2354 #-------------------------------------------------------------------------
2349
2355
2350 def _simple_error(self):
2356 def _simple_error(self):
2351 etype, value = sys.exc_info()[:2]
2357 etype, value = sys.exc_info()[:2]
2352 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2358 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2353
2359
2354 def user_variables(self, names):
2360 def user_variables(self, names):
2355 """Get a list of variable names from the user's namespace.
2361 """Get a list of variable names from the user's namespace.
2356
2362
2357 Parameters
2363 Parameters
2358 ----------
2364 ----------
2359 names : list of strings
2365 names : list of strings
2360 A list of names of variables to be read from the user namespace.
2366 A list of names of variables to be read from the user namespace.
2361
2367
2362 Returns
2368 Returns
2363 -------
2369 -------
2364 A dict, keyed by the input names and with the repr() of each value.
2370 A dict, keyed by the input names and with the repr() of each value.
2365 """
2371 """
2366 out = {}
2372 out = {}
2367 user_ns = self.user_ns
2373 user_ns = self.user_ns
2368 for varname in names:
2374 for varname in names:
2369 try:
2375 try:
2370 value = repr(user_ns[varname])
2376 value = repr(user_ns[varname])
2371 except:
2377 except:
2372 value = self._simple_error()
2378 value = self._simple_error()
2373 out[varname] = value
2379 out[varname] = value
2374 return out
2380 return out
2375
2381
2376 def user_expressions(self, expressions):
2382 def user_expressions(self, expressions):
2377 """Evaluate a dict of expressions in the user's namespace.
2383 """Evaluate a dict of expressions in the user's namespace.
2378
2384
2379 Parameters
2385 Parameters
2380 ----------
2386 ----------
2381 expressions : dict
2387 expressions : dict
2382 A dict with string keys and string values. The expression values
2388 A dict with string keys and string values. The expression values
2383 should be valid Python expressions, each of which will be evaluated
2389 should be valid Python expressions, each of which will be evaluated
2384 in the user namespace.
2390 in the user namespace.
2385
2391
2386 Returns
2392 Returns
2387 -------
2393 -------
2388 A dict, keyed like the input expressions dict, with the repr() of each
2394 A dict, keyed like the input expressions dict, with the repr() of each
2389 value.
2395 value.
2390 """
2396 """
2391 out = {}
2397 out = {}
2392 user_ns = self.user_ns
2398 user_ns = self.user_ns
2393 global_ns = self.user_global_ns
2399 global_ns = self.user_global_ns
2394 for key, expr in expressions.iteritems():
2400 for key, expr in expressions.iteritems():
2395 try:
2401 try:
2396 value = repr(eval(expr, global_ns, user_ns))
2402 value = repr(eval(expr, global_ns, user_ns))
2397 except:
2403 except:
2398 value = self._simple_error()
2404 value = self._simple_error()
2399 out[key] = value
2405 out[key] = value
2400 return out
2406 return out
2401
2407
2402 #-------------------------------------------------------------------------
2408 #-------------------------------------------------------------------------
2403 # Things related to the running of code
2409 # Things related to the running of code
2404 #-------------------------------------------------------------------------
2410 #-------------------------------------------------------------------------
2405
2411
2406 def ex(self, cmd):
2412 def ex(self, cmd):
2407 """Execute a normal python statement in user namespace."""
2413 """Execute a normal python statement in user namespace."""
2408 with self.builtin_trap:
2414 with self.builtin_trap:
2409 exec cmd in self.user_global_ns, self.user_ns
2415 exec cmd in self.user_global_ns, self.user_ns
2410
2416
2411 def ev(self, expr):
2417 def ev(self, expr):
2412 """Evaluate python expression expr in user namespace.
2418 """Evaluate python expression expr in user namespace.
2413
2419
2414 Returns the result of evaluation
2420 Returns the result of evaluation
2415 """
2421 """
2416 with self.builtin_trap:
2422 with self.builtin_trap:
2417 return eval(expr, self.user_global_ns, self.user_ns)
2423 return eval(expr, self.user_global_ns, self.user_ns)
2418
2424
2419 def safe_execfile(self, fname, *where, **kw):
2425 def safe_execfile(self, fname, *where, **kw):
2420 """A safe version of the builtin execfile().
2426 """A safe version of the builtin execfile().
2421
2427
2422 This version will never throw an exception, but instead print
2428 This version will never throw an exception, but instead print
2423 helpful error messages to the screen. This only works on pure
2429 helpful error messages to the screen. This only works on pure
2424 Python files with the .py extension.
2430 Python files with the .py extension.
2425
2431
2426 Parameters
2432 Parameters
2427 ----------
2433 ----------
2428 fname : string
2434 fname : string
2429 The name of the file to be executed.
2435 The name of the file to be executed.
2430 where : tuple
2436 where : tuple
2431 One or two namespaces, passed to execfile() as (globals,locals).
2437 One or two namespaces, passed to execfile() as (globals,locals).
2432 If only one is given, it is passed as both.
2438 If only one is given, it is passed as both.
2433 exit_ignore : bool (False)
2439 exit_ignore : bool (False)
2434 If True, then silence SystemExit for non-zero status (it is always
2440 If True, then silence SystemExit for non-zero status (it is always
2435 silenced for zero status, as it is so common).
2441 silenced for zero status, as it is so common).
2436 raise_exceptions : bool (False)
2442 raise_exceptions : bool (False)
2437 If True raise exceptions everywhere. Meant for testing.
2443 If True raise exceptions everywhere. Meant for testing.
2438
2444
2439 """
2445 """
2440 kw.setdefault('exit_ignore', False)
2446 kw.setdefault('exit_ignore', False)
2441 kw.setdefault('raise_exceptions', False)
2447 kw.setdefault('raise_exceptions', False)
2442
2448
2443 fname = os.path.abspath(os.path.expanduser(fname))
2449 fname = os.path.abspath(os.path.expanduser(fname))
2444
2450
2445 # Make sure we can open the file
2451 # Make sure we can open the file
2446 try:
2452 try:
2447 with open(fname) as thefile:
2453 with open(fname) as thefile:
2448 pass
2454 pass
2449 except:
2455 except:
2450 warn('Could not open file <%s> for safe execution.' % fname)
2456 warn('Could not open file <%s> for safe execution.' % fname)
2451 return
2457 return
2452
2458
2453 # Find things also in current directory. This is needed to mimic the
2459 # Find things also in current directory. This is needed to mimic the
2454 # behavior of running a script from the system command line, where
2460 # behavior of running a script from the system command line, where
2455 # Python inserts the script's directory into sys.path
2461 # Python inserts the script's directory into sys.path
2456 dname = os.path.dirname(fname)
2462 dname = os.path.dirname(fname)
2457
2463
2458 with prepended_to_syspath(dname):
2464 with prepended_to_syspath(dname):
2459 # Ensure that __file__ is always defined to match Python behavior
2465 # Ensure that __file__ is always defined to match Python behavior
2460 save_fname = self.user_ns.get('__file__',None)
2466 save_fname = self.user_ns.get('__file__',None)
2461 self.user_ns['__file__'] = fname
2467 self.user_ns['__file__'] = fname
2462 try:
2468 try:
2463 py3compat.execfile(fname,*where)
2469 py3compat.execfile(fname,*where)
2464 except SystemExit as status:
2470 except SystemExit as status:
2465 # If the call was made with 0 or None exit status (sys.exit(0)
2471 # If the call was made with 0 or None exit status (sys.exit(0)
2466 # or sys.exit() ), don't bother showing a traceback, as both of
2472 # or sys.exit() ), don't bother showing a traceback, as both of
2467 # these are considered normal by the OS:
2473 # these are considered normal by the OS:
2468 # > python -c'import sys;sys.exit(0)'; echo $?
2474 # > python -c'import sys;sys.exit(0)'; echo $?
2469 # 0
2475 # 0
2470 # > python -c'import sys;sys.exit()'; echo $?
2476 # > python -c'import sys;sys.exit()'; echo $?
2471 # 0
2477 # 0
2472 # For other exit status, we show the exception unless
2478 # For other exit status, we show the exception unless
2473 # explicitly silenced, but only in short form.
2479 # explicitly silenced, but only in short form.
2474 if kw['raise_exceptions']:
2480 if kw['raise_exceptions']:
2475 raise
2481 raise
2476 if status.code not in (0, None) and not kw['exit_ignore']:
2482 if status.code not in (0, None) and not kw['exit_ignore']:
2477 self.showtraceback(exception_only=True)
2483 self.showtraceback(exception_only=True)
2478 except:
2484 except:
2479 if kw['raise_exceptions']:
2485 if kw['raise_exceptions']:
2480 raise
2486 raise
2481 self.showtraceback()
2487 self.showtraceback()
2482 finally:
2488 finally:
2483 self.user_ns['__file__'] = save_fname
2489 self.user_ns['__file__'] = save_fname
2484
2490
2485 def safe_execfile_ipy(self, fname):
2491 def safe_execfile_ipy(self, fname):
2486 """Like safe_execfile, but for .ipy files with IPython syntax.
2492 """Like safe_execfile, but for .ipy files with IPython syntax.
2487
2493
2488 Parameters
2494 Parameters
2489 ----------
2495 ----------
2490 fname : str
2496 fname : str
2491 The name of the file to execute. The filename must have a
2497 The name of the file to execute. The filename must have a
2492 .ipy extension.
2498 .ipy extension.
2493 """
2499 """
2494 fname = os.path.abspath(os.path.expanduser(fname))
2500 fname = os.path.abspath(os.path.expanduser(fname))
2495
2501
2496 # Make sure we can open the file
2502 # Make sure we can open the file
2497 try:
2503 try:
2498 with open(fname) as thefile:
2504 with open(fname) as thefile:
2499 pass
2505 pass
2500 except:
2506 except:
2501 warn('Could not open file <%s> for safe execution.' % fname)
2507 warn('Could not open file <%s> for safe execution.' % fname)
2502 return
2508 return
2503
2509
2504 # Find things also in current directory. This is needed to mimic the
2510 # Find things also in current directory. This is needed to mimic the
2505 # behavior of running a script from the system command line, where
2511 # behavior of running a script from the system command line, where
2506 # Python inserts the script's directory into sys.path
2512 # Python inserts the script's directory into sys.path
2507 dname = os.path.dirname(fname)
2513 dname = os.path.dirname(fname)
2508
2514
2509 with prepended_to_syspath(dname):
2515 with prepended_to_syspath(dname):
2510 # Ensure that __file__ is always defined to match Python behavior
2516 # Ensure that __file__ is always defined to match Python behavior
2511 save_fname = self.user_ns.get('__file__',None)
2517 save_fname = self.user_ns.get('__file__',None)
2512 self.user_ns['__file__'] = fname
2518 self.user_ns['__file__'] = fname
2513 try:
2519 try:
2514 with open(fname) as thefile:
2520 with open(fname) as thefile:
2515 # self.run_cell currently captures all exceptions
2521 # self.run_cell currently captures all exceptions
2516 # raised in user code. It would be nice if there were
2522 # raised in user code. It would be nice if there were
2517 # versions of runlines, execfile that did raise, so
2523 # versions of runlines, execfile that did raise, so
2518 # we could catch the errors.
2524 # we could catch the errors.
2519 self.run_cell(thefile.read(), store_history=False)
2525 self.run_cell(thefile.read(), store_history=False)
2520 except:
2526 except:
2521 self.showtraceback()
2527 self.showtraceback()
2522 warn('Unknown failure executing file: <%s>' % fname)
2528 warn('Unknown failure executing file: <%s>' % fname)
2523 finally:
2529 finally:
2524 self.user_ns['__file__'] = save_fname
2530 self.user_ns['__file__'] = save_fname
2525
2531
2526 def safe_run_module(self, mod_name, where):
2532 def safe_run_module(self, mod_name, where):
2527 """A safe version of runpy.run_module().
2533 """A safe version of runpy.run_module().
2528
2534
2529 This version will never throw an exception, but instead print
2535 This version will never throw an exception, but instead print
2530 helpful error messages to the screen.
2536 helpful error messages to the screen.
2531
2537
2532 Parameters
2538 Parameters
2533 ----------
2539 ----------
2534 mod_name : string
2540 mod_name : string
2535 The name of the module to be executed.
2541 The name of the module to be executed.
2536 where : dict
2542 where : dict
2537 The globals namespace.
2543 The globals namespace.
2538 """
2544 """
2539 try:
2545 try:
2540 where.update(
2546 where.update(
2541 runpy.run_module(str(mod_name), run_name="__main__",
2547 runpy.run_module(str(mod_name), run_name="__main__",
2542 alter_sys=True)
2548 alter_sys=True)
2543 )
2549 )
2544 except:
2550 except:
2545 self.showtraceback()
2551 self.showtraceback()
2546 warn('Unknown failure executing module: <%s>' % mod_name)
2552 warn('Unknown failure executing module: <%s>' % mod_name)
2547
2553
2548 def _run_cached_cell_magic(self, magic_name, line):
2554 def _run_cached_cell_magic(self, magic_name, line):
2549 """Special method to call a cell magic with the data stored in self.
2555 """Special method to call a cell magic with the data stored in self.
2550 """
2556 """
2551 cell = self._current_cell_magic_body
2557 cell = self._current_cell_magic_body
2552 self._current_cell_magic_body = None
2558 self._current_cell_magic_body = None
2553 return self.run_cell_magic(magic_name, line, cell)
2559 return self.run_cell_magic(magic_name, line, cell)
2554
2560
2555 def run_cell(self, raw_cell, store_history=False, silent=False):
2561 def run_cell(self, raw_cell, store_history=False, silent=False):
2556 """Run a complete IPython cell.
2562 """Run a complete IPython cell.
2557
2563
2558 Parameters
2564 Parameters
2559 ----------
2565 ----------
2560 raw_cell : str
2566 raw_cell : str
2561 The code (including IPython code such as %magic functions) to run.
2567 The code (including IPython code such as %magic functions) to run.
2562 store_history : bool
2568 store_history : bool
2563 If True, the raw and translated cell will be stored in IPython's
2569 If True, the raw and translated cell will be stored in IPython's
2564 history. For user code calling back into IPython's machinery, this
2570 history. For user code calling back into IPython's machinery, this
2565 should be set to False.
2571 should be set to False.
2566 silent : bool
2572 silent : bool
2567 If True, avoid side-effets, such as implicit displayhooks, history,
2573 If True, avoid side-effets, such as implicit displayhooks, history,
2568 and logging. silent=True forces store_history=False.
2574 and logging. silent=True forces store_history=False.
2569 """
2575 """
2570 if (not raw_cell) or raw_cell.isspace():
2576 if (not raw_cell) or raw_cell.isspace():
2571 return
2577 return
2572
2578
2573 if silent:
2579 if silent:
2574 store_history = False
2580 store_history = False
2575
2581
2576 self.input_splitter.push(raw_cell)
2582 self.input_splitter.push(raw_cell)
2577
2583
2578 # Check for cell magics, which leave state behind. This interface is
2584 # Check for cell magics, which leave state behind. This interface is
2579 # ugly, we need to do something cleaner later... Now the logic is
2585 # ugly, we need to do something cleaner later... Now the logic is
2580 # simply that the input_splitter remembers if there was a cell magic,
2586 # simply that the input_splitter remembers if there was a cell magic,
2581 # and in that case we grab the cell body.
2587 # and in that case we grab the cell body.
2582 if self.input_splitter.cell_magic_parts:
2588 if self.input_splitter.cell_magic_parts:
2583 self._current_cell_magic_body = \
2589 self._current_cell_magic_body = \
2584 ''.join(self.input_splitter.cell_magic_parts)
2590 ''.join(self.input_splitter.cell_magic_parts)
2585 cell = self.input_splitter.source_reset()
2591 cell = self.input_splitter.source_reset()
2586
2592
2587 with self.builtin_trap:
2593 with self.builtin_trap:
2588 prefilter_failed = False
2594 prefilter_failed = False
2589 if len(cell.splitlines()) == 1:
2595 if len(cell.splitlines()) == 1:
2590 try:
2596 try:
2591 # use prefilter_lines to handle trailing newlines
2597 # use prefilter_lines to handle trailing newlines
2592 # restore trailing newline for ast.parse
2598 # restore trailing newline for ast.parse
2593 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2599 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2594 except AliasError as e:
2600 except AliasError as e:
2595 error(e)
2601 error(e)
2596 prefilter_failed = True
2602 prefilter_failed = True
2597 except Exception:
2603 except Exception:
2598 # don't allow prefilter errors to crash IPython
2604 # don't allow prefilter errors to crash IPython
2599 self.showtraceback()
2605 self.showtraceback()
2600 prefilter_failed = True
2606 prefilter_failed = True
2601
2607
2602 # Store raw and processed history
2608 # Store raw and processed history
2603 if store_history:
2609 if store_history:
2604 self.history_manager.store_inputs(self.execution_count,
2610 self.history_manager.store_inputs(self.execution_count,
2605 cell, raw_cell)
2611 cell, raw_cell)
2606 if not silent:
2612 if not silent:
2607 self.logger.log(cell, raw_cell)
2613 self.logger.log(cell, raw_cell)
2608
2614
2609 if not prefilter_failed:
2615 if not prefilter_failed:
2610 # don't run if prefilter failed
2616 # don't run if prefilter failed
2611 cell_name = self.compile.cache(cell, self.execution_count)
2617 cell_name = self.compile.cache(cell, self.execution_count)
2612
2618
2613 with self.display_trap:
2619 with self.display_trap:
2614 try:
2620 try:
2615 code_ast = self.compile.ast_parse(cell,
2621 code_ast = self.compile.ast_parse(cell,
2616 filename=cell_name)
2622 filename=cell_name)
2617 except IndentationError:
2623 except IndentationError:
2618 self.showindentationerror()
2624 self.showindentationerror()
2619 if store_history:
2625 if store_history:
2620 self.execution_count += 1
2626 self.execution_count += 1
2621 return None
2627 return None
2622 except (OverflowError, SyntaxError, ValueError, TypeError,
2628 except (OverflowError, SyntaxError, ValueError, TypeError,
2623 MemoryError):
2629 MemoryError):
2624 self.showsyntaxerror()
2630 self.showsyntaxerror()
2625 if store_history:
2631 if store_history:
2626 self.execution_count += 1
2632 self.execution_count += 1
2627 return None
2633 return None
2628
2634
2629 interactivity = "none" if silent else self.ast_node_interactivity
2635 interactivity = "none" if silent else self.ast_node_interactivity
2630 self.run_ast_nodes(code_ast.body, cell_name,
2636 self.run_ast_nodes(code_ast.body, cell_name,
2631 interactivity=interactivity)
2637 interactivity=interactivity)
2632
2638
2633 # Execute any registered post-execution functions.
2639 # Execute any registered post-execution functions.
2634 # unless we are silent
2640 # unless we are silent
2635 post_exec = [] if silent else self._post_execute.iteritems()
2641 post_exec = [] if silent else self._post_execute.iteritems()
2636
2642
2637 for func, status in post_exec:
2643 for func, status in post_exec:
2638 if self.disable_failing_post_execute and not status:
2644 if self.disable_failing_post_execute and not status:
2639 continue
2645 continue
2640 try:
2646 try:
2641 func()
2647 func()
2642 except KeyboardInterrupt:
2648 except KeyboardInterrupt:
2643 print("\nKeyboardInterrupt", file=io.stderr)
2649 print("\nKeyboardInterrupt", file=io.stderr)
2644 except Exception:
2650 except Exception:
2645 # register as failing:
2651 # register as failing:
2646 self._post_execute[func] = False
2652 self._post_execute[func] = False
2647 self.showtraceback()
2653 self.showtraceback()
2648 print('\n'.join([
2654 print('\n'.join([
2649 "post-execution function %r produced an error." % func,
2655 "post-execution function %r produced an error." % func,
2650 "If this problem persists, you can disable failing post-exec functions with:",
2656 "If this problem persists, you can disable failing post-exec functions with:",
2651 "",
2657 "",
2652 " get_ipython().disable_failing_post_execute = True"
2658 " get_ipython().disable_failing_post_execute = True"
2653 ]), file=io.stderr)
2659 ]), file=io.stderr)
2654
2660
2655 if store_history:
2661 if store_history:
2656 # Write output to the database. Does nothing unless
2662 # Write output to the database. Does nothing unless
2657 # history output logging is enabled.
2663 # history output logging is enabled.
2658 self.history_manager.store_output(self.execution_count)
2664 self.history_manager.store_output(self.execution_count)
2659 # Each cell is a *single* input, regardless of how many lines it has
2665 # Each cell is a *single* input, regardless of how many lines it has
2660 self.execution_count += 1
2666 self.execution_count += 1
2661
2667
2662 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2668 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2663 """Run a sequence of AST nodes. The execution mode depends on the
2669 """Run a sequence of AST nodes. The execution mode depends on the
2664 interactivity parameter.
2670 interactivity parameter.
2665
2671
2666 Parameters
2672 Parameters
2667 ----------
2673 ----------
2668 nodelist : list
2674 nodelist : list
2669 A sequence of AST nodes to run.
2675 A sequence of AST nodes to run.
2670 cell_name : str
2676 cell_name : str
2671 Will be passed to the compiler as the filename of the cell. Typically
2677 Will be passed to the compiler as the filename of the cell. Typically
2672 the value returned by ip.compile.cache(cell).
2678 the value returned by ip.compile.cache(cell).
2673 interactivity : str
2679 interactivity : str
2674 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2680 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2675 run interactively (displaying output from expressions). 'last_expr'
2681 run interactively (displaying output from expressions). 'last_expr'
2676 will run the last node interactively only if it is an expression (i.e.
2682 will run the last node interactively only if it is an expression (i.e.
2677 expressions in loops or other blocks are not displayed. Other values
2683 expressions in loops or other blocks are not displayed. Other values
2678 for this parameter will raise a ValueError.
2684 for this parameter will raise a ValueError.
2679 """
2685 """
2680 if not nodelist:
2686 if not nodelist:
2681 return
2687 return
2682
2688
2683 if interactivity == 'last_expr':
2689 if interactivity == 'last_expr':
2684 if isinstance(nodelist[-1], ast.Expr):
2690 if isinstance(nodelist[-1], ast.Expr):
2685 interactivity = "last"
2691 interactivity = "last"
2686 else:
2692 else:
2687 interactivity = "none"
2693 interactivity = "none"
2688
2694
2689 if interactivity == 'none':
2695 if interactivity == 'none':
2690 to_run_exec, to_run_interactive = nodelist, []
2696 to_run_exec, to_run_interactive = nodelist, []
2691 elif interactivity == 'last':
2697 elif interactivity == 'last':
2692 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2698 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2693 elif interactivity == 'all':
2699 elif interactivity == 'all':
2694 to_run_exec, to_run_interactive = [], nodelist
2700 to_run_exec, to_run_interactive = [], nodelist
2695 else:
2701 else:
2696 raise ValueError("Interactivity was %r" % interactivity)
2702 raise ValueError("Interactivity was %r" % interactivity)
2697
2703
2698 exec_count = self.execution_count
2704 exec_count = self.execution_count
2699
2705
2700 try:
2706 try:
2701 for i, node in enumerate(to_run_exec):
2707 for i, node in enumerate(to_run_exec):
2702 mod = ast.Module([node])
2708 mod = ast.Module([node])
2703 code = self.compile(mod, cell_name, "exec")
2709 code = self.compile(mod, cell_name, "exec")
2704 if self.run_code(code):
2710 if self.run_code(code):
2705 return True
2711 return True
2706
2712
2707 for i, node in enumerate(to_run_interactive):
2713 for i, node in enumerate(to_run_interactive):
2708 mod = ast.Interactive([node])
2714 mod = ast.Interactive([node])
2709 code = self.compile(mod, cell_name, "single")
2715 code = self.compile(mod, cell_name, "single")
2710 if self.run_code(code):
2716 if self.run_code(code):
2711 return True
2717 return True
2712
2718
2713 # Flush softspace
2719 # Flush softspace
2714 if softspace(sys.stdout, 0):
2720 if softspace(sys.stdout, 0):
2715 print()
2721 print()
2716
2722
2717 except:
2723 except:
2718 # It's possible to have exceptions raised here, typically by
2724 # It's possible to have exceptions raised here, typically by
2719 # compilation of odd code (such as a naked 'return' outside a
2725 # compilation of odd code (such as a naked 'return' outside a
2720 # function) that did parse but isn't valid. Typically the exception
2726 # function) that did parse but isn't valid. Typically the exception
2721 # is a SyntaxError, but it's safest just to catch anything and show
2727 # is a SyntaxError, but it's safest just to catch anything and show
2722 # the user a traceback.
2728 # the user a traceback.
2723
2729
2724 # We do only one try/except outside the loop to minimize the impact
2730 # We do only one try/except outside the loop to minimize the impact
2725 # on runtime, and also because if any node in the node list is
2731 # on runtime, and also because if any node in the node list is
2726 # broken, we should stop execution completely.
2732 # broken, we should stop execution completely.
2727 self.showtraceback()
2733 self.showtraceback()
2728
2734
2729 return False
2735 return False
2730
2736
2731 def run_code(self, code_obj):
2737 def run_code(self, code_obj):
2732 """Execute a code object.
2738 """Execute a code object.
2733
2739
2734 When an exception occurs, self.showtraceback() is called to display a
2740 When an exception occurs, self.showtraceback() is called to display a
2735 traceback.
2741 traceback.
2736
2742
2737 Parameters
2743 Parameters
2738 ----------
2744 ----------
2739 code_obj : code object
2745 code_obj : code object
2740 A compiled code object, to be executed
2746 A compiled code object, to be executed
2741
2747
2742 Returns
2748 Returns
2743 -------
2749 -------
2744 False : successful execution.
2750 False : successful execution.
2745 True : an error occurred.
2751 True : an error occurred.
2746 """
2752 """
2747
2753
2748 # Set our own excepthook in case the user code tries to call it
2754 # Set our own excepthook in case the user code tries to call it
2749 # directly, so that the IPython crash handler doesn't get triggered
2755 # directly, so that the IPython crash handler doesn't get triggered
2750 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2756 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2751
2757
2752 # we save the original sys.excepthook in the instance, in case config
2758 # we save the original sys.excepthook in the instance, in case config
2753 # code (such as magics) needs access to it.
2759 # code (such as magics) needs access to it.
2754 self.sys_excepthook = old_excepthook
2760 self.sys_excepthook = old_excepthook
2755 outflag = 1 # happens in more places, so it's easier as default
2761 outflag = 1 # happens in more places, so it's easier as default
2756 try:
2762 try:
2757 try:
2763 try:
2758 self.hooks.pre_run_code_hook()
2764 self.hooks.pre_run_code_hook()
2759 #rprint('Running code', repr(code_obj)) # dbg
2765 #rprint('Running code', repr(code_obj)) # dbg
2760 exec code_obj in self.user_global_ns, self.user_ns
2766 exec code_obj in self.user_global_ns, self.user_ns
2761 finally:
2767 finally:
2762 # Reset our crash handler in place
2768 # Reset our crash handler in place
2763 sys.excepthook = old_excepthook
2769 sys.excepthook = old_excepthook
2764 except SystemExit:
2770 except SystemExit:
2765 self.showtraceback(exception_only=True)
2771 self.showtraceback(exception_only=True)
2766 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2772 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2767 except self.custom_exceptions:
2773 except self.custom_exceptions:
2768 etype,value,tb = sys.exc_info()
2774 etype,value,tb = sys.exc_info()
2769 self.CustomTB(etype,value,tb)
2775 self.CustomTB(etype,value,tb)
2770 except:
2776 except:
2771 self.showtraceback()
2777 self.showtraceback()
2772 else:
2778 else:
2773 outflag = 0
2779 outflag = 0
2774 return outflag
2780 return outflag
2775
2781
2776 # For backwards compatibility
2782 # For backwards compatibility
2777 runcode = run_code
2783 runcode = run_code
2778
2784
2779 #-------------------------------------------------------------------------
2785 #-------------------------------------------------------------------------
2780 # Things related to GUI support and pylab
2786 # Things related to GUI support and pylab
2781 #-------------------------------------------------------------------------
2787 #-------------------------------------------------------------------------
2782
2788
2783 def enable_gui(self, gui=None):
2789 def enable_gui(self, gui=None):
2784 raise NotImplementedError('Implement enable_gui in a subclass')
2790 raise NotImplementedError('Implement enable_gui in a subclass')
2785
2791
2786 def enable_pylab(self, gui=None, import_all=True):
2792 def enable_pylab(self, gui=None, import_all=True):
2787 """Activate pylab support at runtime.
2793 """Activate pylab support at runtime.
2788
2794
2789 This turns on support for matplotlib, preloads into the interactive
2795 This turns on support for matplotlib, preloads into the interactive
2790 namespace all of numpy and pylab, and configures IPython to correctly
2796 namespace all of numpy and pylab, and configures IPython to correctly
2791 interact with the GUI event loop. The GUI backend to be used can be
2797 interact with the GUI event loop. The GUI backend to be used can be
2792 optionally selected with the optional :param:`gui` argument.
2798 optionally selected with the optional :param:`gui` argument.
2793
2799
2794 Parameters
2800 Parameters
2795 ----------
2801 ----------
2796 gui : optional, string
2802 gui : optional, string
2797
2803
2798 If given, dictates the choice of matplotlib GUI backend to use
2804 If given, dictates the choice of matplotlib GUI backend to use
2799 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2805 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2800 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2806 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2801 matplotlib (as dictated by the matplotlib build-time options plus the
2807 matplotlib (as dictated by the matplotlib build-time options plus the
2802 user's matplotlibrc configuration file). Note that not all backends
2808 user's matplotlibrc configuration file). Note that not all backends
2803 make sense in all contexts, for example a terminal ipython can't
2809 make sense in all contexts, for example a terminal ipython can't
2804 display figures inline.
2810 display figures inline.
2805 """
2811 """
2806 from IPython.core.pylabtools import mpl_runner
2812 from IPython.core.pylabtools import mpl_runner
2807 # We want to prevent the loading of pylab to pollute the user's
2813 # We want to prevent the loading of pylab to pollute the user's
2808 # namespace as shown by the %who* magics, so we execute the activation
2814 # namespace as shown by the %who* magics, so we execute the activation
2809 # code in an empty namespace, and we update *both* user_ns and
2815 # code in an empty namespace, and we update *both* user_ns and
2810 # user_ns_hidden with this information.
2816 # user_ns_hidden with this information.
2811 ns = {}
2817 ns = {}
2812 try:
2818 try:
2813 gui = pylab_activate(ns, gui, import_all, self)
2819 gui = pylab_activate(ns, gui, import_all, self)
2814 except KeyError:
2820 except KeyError:
2815 error("Backend %r not supported" % gui)
2821 error("Backend %r not supported" % gui)
2816 return
2822 return
2817 self.user_ns.update(ns)
2823 self.user_ns.update(ns)
2818 self.user_ns_hidden.update(ns)
2824 self.user_ns_hidden.update(ns)
2819 # Now we must activate the gui pylab wants to use, and fix %run to take
2825 # Now we must activate the gui pylab wants to use, and fix %run to take
2820 # plot updates into account
2826 # plot updates into account
2821 self.enable_gui(gui)
2827 self.enable_gui(gui)
2822 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2828 self.magics_manager.registry['ExecutionMagics'].default_runner = \
2823 mpl_runner(self.safe_execfile)
2829 mpl_runner(self.safe_execfile)
2824
2830
2825 #-------------------------------------------------------------------------
2831 #-------------------------------------------------------------------------
2826 # Utilities
2832 # Utilities
2827 #-------------------------------------------------------------------------
2833 #-------------------------------------------------------------------------
2828
2834
2829 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2835 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2830 """Expand python variables in a string.
2836 """Expand python variables in a string.
2831
2837
2832 The depth argument indicates how many frames above the caller should
2838 The depth argument indicates how many frames above the caller should
2833 be walked to look for the local namespace where to expand variables.
2839 be walked to look for the local namespace where to expand variables.
2834
2840
2835 The global namespace for expansion is always the user's interactive
2841 The global namespace for expansion is always the user's interactive
2836 namespace.
2842 namespace.
2837 """
2843 """
2838 ns = self.user_ns.copy()
2844 ns = self.user_ns.copy()
2839 ns.update(sys._getframe(depth+1).f_locals)
2845 ns.update(sys._getframe(depth+1).f_locals)
2840 ns.pop('self', None)
2846 ns.pop('self', None)
2841 try:
2847 try:
2842 cmd = formatter.format(cmd, **ns)
2848 cmd = formatter.format(cmd, **ns)
2843 except Exception:
2849 except Exception:
2844 # if formatter couldn't format, just let it go untransformed
2850 # if formatter couldn't format, just let it go untransformed
2845 pass
2851 pass
2846 return cmd
2852 return cmd
2847
2853
2848 def mktempfile(self, data=None, prefix='ipython_edit_'):
2854 def mktempfile(self, data=None, prefix='ipython_edit_'):
2849 """Make a new tempfile and return its filename.
2855 """Make a new tempfile and return its filename.
2850
2856
2851 This makes a call to tempfile.mktemp, but it registers the created
2857 This makes a call to tempfile.mktemp, but it registers the created
2852 filename internally so ipython cleans it up at exit time.
2858 filename internally so ipython cleans it up at exit time.
2853
2859
2854 Optional inputs:
2860 Optional inputs:
2855
2861
2856 - data(None): if data is given, it gets written out to the temp file
2862 - data(None): if data is given, it gets written out to the temp file
2857 immediately, and the file is closed again."""
2863 immediately, and the file is closed again."""
2858
2864
2859 filename = tempfile.mktemp('.py', prefix)
2865 filename = tempfile.mktemp('.py', prefix)
2860 self.tempfiles.append(filename)
2866 self.tempfiles.append(filename)
2861
2867
2862 if data:
2868 if data:
2863 tmp_file = open(filename,'w')
2869 tmp_file = open(filename,'w')
2864 tmp_file.write(data)
2870 tmp_file.write(data)
2865 tmp_file.close()
2871 tmp_file.close()
2866 return filename
2872 return filename
2867
2873
2868 # TODO: This should be removed when Term is refactored.
2874 # TODO: This should be removed when Term is refactored.
2869 def write(self,data):
2875 def write(self,data):
2870 """Write a string to the default output"""
2876 """Write a string to the default output"""
2871 io.stdout.write(data)
2877 io.stdout.write(data)
2872
2878
2873 # TODO: This should be removed when Term is refactored.
2879 # TODO: This should be removed when Term is refactored.
2874 def write_err(self,data):
2880 def write_err(self,data):
2875 """Write a string to the default error output"""
2881 """Write a string to the default error output"""
2876 io.stderr.write(data)
2882 io.stderr.write(data)
2877
2883
2878 def ask_yes_no(self, prompt, default=None):
2884 def ask_yes_no(self, prompt, default=None):
2879 if self.quiet:
2885 if self.quiet:
2880 return True
2886 return True
2881 return ask_yes_no(prompt,default)
2887 return ask_yes_no(prompt,default)
2882
2888
2883 def show_usage(self):
2889 def show_usage(self):
2884 """Show a usage message"""
2890 """Show a usage message"""
2885 page.page(IPython.core.usage.interactive_usage)
2891 page.page(IPython.core.usage.interactive_usage)
2886
2892
2887 def extract_input_lines(self, range_str, raw=False):
2893 def extract_input_lines(self, range_str, raw=False):
2888 """Return as a string a set of input history slices.
2894 """Return as a string a set of input history slices.
2889
2895
2890 Parameters
2896 Parameters
2891 ----------
2897 ----------
2892 range_str : string
2898 range_str : string
2893 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2899 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2894 since this function is for use by magic functions which get their
2900 since this function is for use by magic functions which get their
2895 arguments as strings. The number before the / is the session
2901 arguments as strings. The number before the / is the session
2896 number: ~n goes n back from the current session.
2902 number: ~n goes n back from the current session.
2897
2903
2898 Optional Parameters:
2904 Optional Parameters:
2899 - raw(False): by default, the processed input is used. If this is
2905 - raw(False): by default, the processed input is used. If this is
2900 true, the raw input history is used instead.
2906 true, the raw input history is used instead.
2901
2907
2902 Note that slices can be called with two notations:
2908 Note that slices can be called with two notations:
2903
2909
2904 N:M -> standard python form, means including items N...(M-1).
2910 N:M -> standard python form, means including items N...(M-1).
2905
2911
2906 N-M -> include items N..M (closed endpoint)."""
2912 N-M -> include items N..M (closed endpoint)."""
2907 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2913 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2908 return "\n".join(x for _, _, x in lines)
2914 return "\n".join(x for _, _, x in lines)
2909
2915
2910 def find_user_code(self, target, raw=True, py_only=False):
2916 def find_user_code(self, target, raw=True, py_only=False):
2911 """Get a code string from history, file, url, or a string or macro.
2917 """Get a code string from history, file, url, or a string or macro.
2912
2918
2913 This is mainly used by magic functions.
2919 This is mainly used by magic functions.
2914
2920
2915 Parameters
2921 Parameters
2916 ----------
2922 ----------
2917
2923
2918 target : str
2924 target : str
2919
2925
2920 A string specifying code to retrieve. This will be tried respectively
2926 A string specifying code to retrieve. This will be tried respectively
2921 as: ranges of input history (see %history for syntax), url,
2927 as: ranges of input history (see %history for syntax), url,
2922 correspnding .py file, filename, or an expression evaluating to a
2928 correspnding .py file, filename, or an expression evaluating to a
2923 string or Macro in the user namespace.
2929 string or Macro in the user namespace.
2924
2930
2925 raw : bool
2931 raw : bool
2926 If true (default), retrieve raw history. Has no effect on the other
2932 If true (default), retrieve raw history. Has no effect on the other
2927 retrieval mechanisms.
2933 retrieval mechanisms.
2928
2934
2929 py_only : bool (default False)
2935 py_only : bool (default False)
2930 Only try to fetch python code, do not try alternative methods to decode file
2936 Only try to fetch python code, do not try alternative methods to decode file
2931 if unicode fails.
2937 if unicode fails.
2932
2938
2933 Returns
2939 Returns
2934 -------
2940 -------
2935 A string of code.
2941 A string of code.
2936
2942
2937 ValueError is raised if nothing is found, and TypeError if it evaluates
2943 ValueError is raised if nothing is found, and TypeError if it evaluates
2938 to an object of another type. In each case, .args[0] is a printable
2944 to an object of another type. In each case, .args[0] is a printable
2939 message.
2945 message.
2940 """
2946 """
2941 code = self.extract_input_lines(target, raw=raw) # Grab history
2947 code = self.extract_input_lines(target, raw=raw) # Grab history
2942 if code:
2948 if code:
2943 return code
2949 return code
2944 utarget = unquote_filename(target)
2950 utarget = unquote_filename(target)
2945 try:
2951 try:
2946 if utarget.startswith(('http://', 'https://')):
2952 if utarget.startswith(('http://', 'https://')):
2947 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2953 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2948 except UnicodeDecodeError:
2954 except UnicodeDecodeError:
2949 if not py_only :
2955 if not py_only :
2950 response = urllib.urlopen(target)
2956 response = urllib.urlopen(target)
2951 return response.read().decode('latin1')
2957 return response.read().decode('latin1')
2952 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2958 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2953
2959
2954 potential_target = [target]
2960 potential_target = [target]
2955 try :
2961 try :
2956 potential_target.insert(0,get_py_filename(target))
2962 potential_target.insert(0,get_py_filename(target))
2957 except IOError:
2963 except IOError:
2958 pass
2964 pass
2959
2965
2960 for tgt in potential_target :
2966 for tgt in potential_target :
2961 if os.path.isfile(tgt): # Read file
2967 if os.path.isfile(tgt): # Read file
2962 try :
2968 try :
2963 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2969 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2964 except UnicodeDecodeError :
2970 except UnicodeDecodeError :
2965 if not py_only :
2971 if not py_only :
2966 with io_open(tgt,'r', encoding='latin1') as f :
2972 with io_open(tgt,'r', encoding='latin1') as f :
2967 return f.read()
2973 return f.read()
2968 raise ValueError(("'%s' seem to be unreadable.") % target)
2974 raise ValueError(("'%s' seem to be unreadable.") % target)
2969
2975
2970 try: # User namespace
2976 try: # User namespace
2971 codeobj = eval(target, self.user_ns)
2977 codeobj = eval(target, self.user_ns)
2972 except Exception:
2978 except Exception:
2973 raise ValueError(("'%s' was not found in history, as a file, url, "
2979 raise ValueError(("'%s' was not found in history, as a file, url, "
2974 "nor in the user namespace.") % target)
2980 "nor in the user namespace.") % target)
2975 if isinstance(codeobj, basestring):
2981 if isinstance(codeobj, basestring):
2976 return codeobj
2982 return codeobj
2977 elif isinstance(codeobj, Macro):
2983 elif isinstance(codeobj, Macro):
2978 return codeobj.value
2984 return codeobj.value
2979
2985
2980 raise TypeError("%s is neither a string nor a macro." % target,
2986 raise TypeError("%s is neither a string nor a macro." % target,
2981 codeobj)
2987 codeobj)
2982
2988
2983 #-------------------------------------------------------------------------
2989 #-------------------------------------------------------------------------
2984 # Things related to IPython exiting
2990 # Things related to IPython exiting
2985 #-------------------------------------------------------------------------
2991 #-------------------------------------------------------------------------
2986 def atexit_operations(self):
2992 def atexit_operations(self):
2987 """This will be executed at the time of exit.
2993 """This will be executed at the time of exit.
2988
2994
2989 Cleanup operations and saving of persistent data that is done
2995 Cleanup operations and saving of persistent data that is done
2990 unconditionally by IPython should be performed here.
2996 unconditionally by IPython should be performed here.
2991
2997
2992 For things that may depend on startup flags or platform specifics (such
2998 For things that may depend on startup flags or platform specifics (such
2993 as having readline or not), register a separate atexit function in the
2999 as having readline or not), register a separate atexit function in the
2994 code that has the appropriate information, rather than trying to
3000 code that has the appropriate information, rather than trying to
2995 clutter
3001 clutter
2996 """
3002 """
2997 # Close the history session (this stores the end time and line count)
3003 # Close the history session (this stores the end time and line count)
2998 # this must be *before* the tempfile cleanup, in case of temporary
3004 # this must be *before* the tempfile cleanup, in case of temporary
2999 # history db
3005 # history db
3000 self.history_manager.end_session()
3006 self.history_manager.end_session()
3001
3007
3002 # Cleanup all tempfiles left around
3008 # Cleanup all tempfiles left around
3003 for tfile in self.tempfiles:
3009 for tfile in self.tempfiles:
3004 try:
3010 try:
3005 os.unlink(tfile)
3011 os.unlink(tfile)
3006 except OSError:
3012 except OSError:
3007 pass
3013 pass
3008
3014
3009 # Clear all user namespaces to release all references cleanly.
3015 # Clear all user namespaces to release all references cleanly.
3010 self.reset(new_session=False)
3016 self.reset(new_session=False)
3011
3017
3012 # Run user hooks
3018 # Run user hooks
3013 self.hooks.shutdown_hook()
3019 self.hooks.shutdown_hook()
3014
3020
3015 def cleanup(self):
3021 def cleanup(self):
3016 self.restore_sys_module_state()
3022 self.restore_sys_module_state()
3017
3023
3018
3024
3019 class InteractiveShellABC(object):
3025 class InteractiveShellABC(object):
3020 """An abstract base class for InteractiveShell."""
3026 """An abstract base class for InteractiveShell."""
3021 __metaclass__ = abc.ABCMeta
3027 __metaclass__ = abc.ABCMeta
3022
3028
3023 InteractiveShellABC.register(InteractiveShell)
3029 InteractiveShellABC.register(InteractiveShell)
@@ -1,617 +1,689 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 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2008 The IPython Development Team
8 # Copyright (C) 2008 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 # Stdlib
17 # Stdlib
18 import os
18 import os
19 import re
19 import re
20 import sys
20 import sys
21 import types
21 import types
22 from getopt import getopt, GetoptError
22 from getopt import getopt, GetoptError
23
23
24 # Our own
24 # Our own
25 from IPython.config.configurable import Configurable
25 from IPython.config.configurable import Configurable
26 from IPython.core import oinspect
26 from IPython.core import oinspect
27 from IPython.core.error import UsageError
27 from IPython.core.error import UsageError
28 from IPython.core.inputsplitter import ESC_MAGIC, ESC_MAGIC2
28 from IPython.core.inputsplitter import ESC_MAGIC, ESC_MAGIC2
29 from IPython.external.decorator import decorator
29 from IPython.external.decorator import decorator
30 from IPython.utils.ipstruct import Struct
30 from IPython.utils.ipstruct import Struct
31 from IPython.utils.process import arg_split
31 from IPython.utils.process import arg_split
32 from IPython.utils.text import dedent
32 from IPython.utils.text import dedent
33 from IPython.utils.traitlets import Bool, Dict, Instance, MetaHasTraits
33 from IPython.utils.traitlets import Bool, Dict, Instance, MetaHasTraits
34 from IPython.utils.warn import error, warn
34 from IPython.utils.warn import error, warn
35
35
36 #-----------------------------------------------------------------------------
36 #-----------------------------------------------------------------------------
37 # Globals
37 # Globals
38 #-----------------------------------------------------------------------------
38 #-----------------------------------------------------------------------------
39
39
40 # A dict we'll use for each class that has magics, used as temporary storage to
40 # A dict we'll use for each class that has magics, used as temporary storage to
41 # pass information between the @line/cell_magic method decorators and the
41 # pass information between the @line/cell_magic method decorators and the
42 # @magics_class class decorator, because the method decorators have no
42 # @magics_class class decorator, because the method decorators have no
43 # access to the class when they run. See for more details:
43 # access to the class when they run. See for more details:
44 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
44 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
45
45
46 magics = dict(line={}, cell={})
46 magics = dict(line={}, cell={})
47
47
48 magic_kinds = ('line', 'cell')
48 magic_kinds = ('line', 'cell')
49 magic_spec = ('line', 'cell', 'line_cell')
49 magic_spec = ('line', 'cell', 'line_cell')
50 magic_escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC2)
50 magic_escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC2)
51
51
52 #-----------------------------------------------------------------------------
52 #-----------------------------------------------------------------------------
53 # Utility classes and functions
53 # Utility classes and functions
54 #-----------------------------------------------------------------------------
54 #-----------------------------------------------------------------------------
55
55
56 class Bunch: pass
56 class Bunch: pass
57
57
58
58
59 def on_off(tag):
59 def on_off(tag):
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 return ['OFF','ON'][tag]
61 return ['OFF','ON'][tag]
62
62
63
63
64 def compress_dhist(dh):
64 def compress_dhist(dh):
65 """Compress a directory history into a new one with at most 20 entries.
65 """Compress a directory history into a new one with at most 20 entries.
66
66
67 Return a new list made from the first and last 10 elements of dhist after
67 Return a new list made from the first and last 10 elements of dhist after
68 removal of duplicates.
68 removal of duplicates.
69 """
69 """
70 head, tail = dh[:-10], dh[-10:]
70 head, tail = dh[:-10], dh[-10:]
71
71
72 newhead = []
72 newhead = []
73 done = set()
73 done = set()
74 for h in head:
74 for h in head:
75 if h in done:
75 if h in done:
76 continue
76 continue
77 newhead.append(h)
77 newhead.append(h)
78 done.add(h)
78 done.add(h)
79
79
80 return newhead + tail
80 return newhead + tail
81
81
82
82
83 def needs_local_scope(func):
83 def needs_local_scope(func):
84 """Decorator to mark magic functions which need to local scope to run."""
84 """Decorator to mark magic functions which need to local scope to run."""
85 func.needs_local_scope = True
85 func.needs_local_scope = True
86 return func
86 return func
87
87
88 #-----------------------------------------------------------------------------
88 #-----------------------------------------------------------------------------
89 # Class and method decorators for registering magics
89 # Class and method decorators for registering magics
90 #-----------------------------------------------------------------------------
90 #-----------------------------------------------------------------------------
91
91
92 def magics_class(cls):
92 def magics_class(cls):
93 """Class decorator for all subclasses of the main Magics class.
93 """Class decorator for all subclasses of the main Magics class.
94
94
95 Any class that subclasses Magics *must* also apply this decorator, to
95 Any class that subclasses Magics *must* also apply this decorator, to
96 ensure that all the methods that have been decorated as line/cell magics
96 ensure that all the methods that have been decorated as line/cell magics
97 get correctly registered in the class instance. This is necessary because
97 get correctly registered in the class instance. This is necessary because
98 when method decorators run, the class does not exist yet, so they
98 when method decorators run, the class does not exist yet, so they
99 temporarily store their information into a module global. Application of
99 temporarily store their information into a module global. Application of
100 this class decorator copies that global data to the class instance and
100 this class decorator copies that global data to the class instance and
101 clears the global.
101 clears the global.
102
102
103 Obviously, this mechanism is not thread-safe, which means that the
103 Obviously, this mechanism is not thread-safe, which means that the
104 *creation* of subclasses of Magic should only be done in a single-thread
104 *creation* of subclasses of Magic should only be done in a single-thread
105 context. Instantiation of the classes has no restrictions. Given that
105 context. Instantiation of the classes has no restrictions. Given that
106 these classes are typically created at IPython startup time and before user
106 these classes are typically created at IPython startup time and before user
107 application code becomes active, in practice this should not pose any
107 application code becomes active, in practice this should not pose any
108 problems.
108 problems.
109 """
109 """
110 cls.registered = True
110 cls.registered = True
111 cls.magics = dict(line = magics['line'],
111 cls.magics = dict(line = magics['line'],
112 cell = magics['cell'])
112 cell = magics['cell'])
113 magics['line'] = {}
113 magics['line'] = {}
114 magics['cell'] = {}
114 magics['cell'] = {}
115 return cls
115 return cls
116
116
117
117
118 def record_magic(dct, magic_kind, magic_name, func):
118 def record_magic(dct, magic_kind, magic_name, func):
119 """Utility function to store a function as a magic of a specific kind.
119 """Utility function to store a function as a magic of a specific kind.
120
120
121 Parameters
121 Parameters
122 ----------
122 ----------
123 dct : dict
123 dct : dict
124 A dictionary with 'line' and 'cell' subdicts.
124 A dictionary with 'line' and 'cell' subdicts.
125
125
126 magic_kind : str
126 magic_kind : str
127 Kind of magic to be stored.
127 Kind of magic to be stored.
128
128
129 magic_name : str
129 magic_name : str
130 Key to store the magic as.
130 Key to store the magic as.
131
131
132 func : function
132 func : function
133 Callable object to store.
133 Callable object to store.
134 """
134 """
135 if magic_kind == 'line_cell':
135 if magic_kind == 'line_cell':
136 dct['line'][magic_name] = dct['cell'][magic_name] = func
136 dct['line'][magic_name] = dct['cell'][magic_name] = func
137 else:
137 else:
138 dct[magic_kind][magic_name] = func
138 dct[magic_kind][magic_name] = func
139
139
140
140
141 def validate_type(magic_kind):
141 def validate_type(magic_kind):
142 """Ensure that the given magic_kind is valid.
142 """Ensure that the given magic_kind is valid.
143
143
144 Check that the given magic_kind is one of the accepted spec types (stored
144 Check that the given magic_kind is one of the accepted spec types (stored
145 in the global `magic_spec`), raise ValueError otherwise.
145 in the global `magic_spec`), raise ValueError otherwise.
146 """
146 """
147 if magic_kind not in magic_spec:
147 if magic_kind not in magic_spec:
148 raise ValueError('magic_kind must be one of %s, %s given' %
148 raise ValueError('magic_kind must be one of %s, %s given' %
149 magic_kinds, magic_kind)
149 magic_kinds, magic_kind)
150
150
151
151
152 # The docstrings for the decorator below will be fairly similar for the two
152 # The docstrings for the decorator below will be fairly similar for the two
153 # types (method and function), so we generate them here once and reuse the
153 # types (method and function), so we generate them here once and reuse the
154 # templates below.
154 # templates below.
155 _docstring_template = \
155 _docstring_template = \
156 """Decorate the given {0} as {1} magic.
156 """Decorate the given {0} as {1} magic.
157
157
158 The decorator can be used with or without arguments, as follows.
158 The decorator can be used with or without arguments, as follows.
159
159
160 i) without arguments: it will create a {1} magic named as the {0} being
160 i) without arguments: it will create a {1} magic named as the {0} being
161 decorated::
161 decorated::
162
162
163 @deco
163 @deco
164 def foo(...)
164 def foo(...)
165
165
166 will create a {1} magic named `foo`.
166 will create a {1} magic named `foo`.
167
167
168 ii) with one string argument: which will be used as the actual name of the
168 ii) with one string argument: which will be used as the actual name of the
169 resulting magic::
169 resulting magic::
170
170
171 @deco('bar')
171 @deco('bar')
172 def foo(...)
172 def foo(...)
173
173
174 will create a {1} magic named `bar`.
174 will create a {1} magic named `bar`.
175 """
175 """
176
176
177 # These two are decorator factories. While they are conceptually very similar,
177 # These two are decorator factories. While they are conceptually very similar,
178 # there are enough differences in the details that it's simpler to have them
178 # there are enough differences in the details that it's simpler to have them
179 # written as completely standalone functions rather than trying to share code
179 # written as completely standalone functions rather than trying to share code
180 # and make a single one with convoluted logic.
180 # and make a single one with convoluted logic.
181
181
182 def _method_magic_marker(magic_kind):
182 def _method_magic_marker(magic_kind):
183 """Decorator factory for methods in Magics subclasses.
183 """Decorator factory for methods in Magics subclasses.
184 """
184 """
185
185
186 validate_type(magic_kind)
186 validate_type(magic_kind)
187
187
188 # This is a closure to capture the magic_kind. We could also use a class,
188 # This is a closure to capture the magic_kind. We could also use a class,
189 # but it's overkill for just that one bit of state.
189 # but it's overkill for just that one bit of state.
190 def magic_deco(arg):
190 def magic_deco(arg):
191 call = lambda f, *a, **k: f(*a, **k)
191 call = lambda f, *a, **k: f(*a, **k)
192
192
193 if callable(arg):
193 if callable(arg):
194 # "Naked" decorator call (just @foo, no args)
194 # "Naked" decorator call (just @foo, no args)
195 func = arg
195 func = arg
196 name = func.func_name
196 name = func.func_name
197 retval = decorator(call, func)
197 retval = decorator(call, func)
198 record_magic(magics, magic_kind, name, name)
198 record_magic(magics, magic_kind, name, name)
199 elif isinstance(arg, basestring):
199 elif isinstance(arg, basestring):
200 # Decorator called with arguments (@foo('bar'))
200 # Decorator called with arguments (@foo('bar'))
201 name = arg
201 name = arg
202 def mark(func, *a, **kw):
202 def mark(func, *a, **kw):
203 record_magic(magics, magic_kind, name, func.func_name)
203 record_magic(magics, magic_kind, name, func.func_name)
204 return decorator(call, func)
204 return decorator(call, func)
205 retval = mark
205 retval = mark
206 else:
206 else:
207 raise TypeError("Decorator can only be called with "
207 raise TypeError("Decorator can only be called with "
208 "string or function")
208 "string or function")
209 return retval
209 return retval
210
210
211 # Ensure the resulting decorator has a usable docstring
211 # Ensure the resulting decorator has a usable docstring
212 magic_deco.__doc__ = _docstring_template.format('method', magic_kind)
212 magic_deco.__doc__ = _docstring_template.format('method', magic_kind)
213 return magic_deco
213 return magic_deco
214
214
215
215
216 def _function_magic_marker(magic_kind):
216 def _function_magic_marker(magic_kind):
217 """Decorator factory for standalone functions.
217 """Decorator factory for standalone functions.
218 """
218 """
219 validate_type(magic_kind)
219 validate_type(magic_kind)
220
220
221 # This is a closure to capture the magic_kind. We could also use a class,
221 # This is a closure to capture the magic_kind. We could also use a class,
222 # but it's overkill for just that one bit of state.
222 # but it's overkill for just that one bit of state.
223 def magic_deco(arg):
223 def magic_deco(arg):
224 call = lambda f, *a, **k: f(*a, **k)
224 call = lambda f, *a, **k: f(*a, **k)
225
225
226 # Find get_ipython() in the caller's namespace
226 # Find get_ipython() in the caller's namespace
227 caller = sys._getframe(1)
227 caller = sys._getframe(1)
228 for ns in ['f_locals', 'f_globals', 'f_builtins']:
228 for ns in ['f_locals', 'f_globals', 'f_builtins']:
229 get_ipython = getattr(caller, ns).get('get_ipython')
229 get_ipython = getattr(caller, ns).get('get_ipython')
230 if get_ipython is not None:
230 if get_ipython is not None:
231 break
231 break
232 else:
232 else:
233 raise NameError('Decorator can only run in context where '
233 raise NameError('Decorator can only run in context where '
234 '`get_ipython` exists')
234 '`get_ipython` exists')
235
235
236 ip = get_ipython()
236 ip = get_ipython()
237
237
238 if callable(arg):
238 if callable(arg):
239 # "Naked" decorator call (just @foo, no args)
239 # "Naked" decorator call (just @foo, no args)
240 func = arg
240 func = arg
241 name = func.func_name
241 name = func.func_name
242 ip.register_magic_function(func, magic_kind, name)
242 ip.register_magic_function(func, magic_kind, name)
243 retval = decorator(call, func)
243 retval = decorator(call, func)
244 elif isinstance(arg, basestring):
244 elif isinstance(arg, basestring):
245 # Decorator called with arguments (@foo('bar'))
245 # Decorator called with arguments (@foo('bar'))
246 name = arg
246 name = arg
247 def mark(func, *a, **kw):
247 def mark(func, *a, **kw):
248 ip.register_magic_function(func, magic_kind, name)
248 ip.register_magic_function(func, magic_kind, name)
249 return decorator(call, func)
249 return decorator(call, func)
250 retval = mark
250 retval = mark
251 else:
251 else:
252 raise TypeError("Decorator can only be called with "
252 raise TypeError("Decorator can only be called with "
253 "string or function")
253 "string or function")
254 return retval
254 return retval
255
255
256 # Ensure the resulting decorator has a usable docstring
256 # Ensure the resulting decorator has a usable docstring
257 ds = _docstring_template.format('function', magic_kind)
257 ds = _docstring_template.format('function', magic_kind)
258
258
259 ds += dedent("""
259 ds += dedent("""
260 Note: this decorator can only be used in a context where IPython is already
260 Note: this decorator can only be used in a context where IPython is already
261 active, so that the `get_ipython()` call succeeds. You can therefore use
261 active, so that the `get_ipython()` call succeeds. You can therefore use
262 it in your startup files loaded after IPython initializes, but *not* in the
262 it in your startup files loaded after IPython initializes, but *not* in the
263 IPython configuration file itself, which is executed before IPython is
263 IPython configuration file itself, which is executed before IPython is
264 fully up and running. Any file located in the `startup` subdirectory of
264 fully up and running. Any file located in the `startup` subdirectory of
265 your configuration profile will be OK in this sense.
265 your configuration profile will be OK in this sense.
266 """)
266 """)
267
267
268 magic_deco.__doc__ = ds
268 magic_deco.__doc__ = ds
269 return magic_deco
269 return magic_deco
270
270
271
271
272 # Create the actual decorators for public use
272 # Create the actual decorators for public use
273
273
274 # These three are used to decorate methods in class definitions
274 # These three are used to decorate methods in class definitions
275 line_magic = _method_magic_marker('line')
275 line_magic = _method_magic_marker('line')
276 cell_magic = _method_magic_marker('cell')
276 cell_magic = _method_magic_marker('cell')
277 line_cell_magic = _method_magic_marker('line_cell')
277 line_cell_magic = _method_magic_marker('line_cell')
278
278
279 # These three decorate standalone functions and perform the decoration
279 # These three decorate standalone functions and perform the decoration
280 # immediately. They can only run where get_ipython() works
280 # immediately. They can only run where get_ipython() works
281 register_line_magic = _function_magic_marker('line')
281 register_line_magic = _function_magic_marker('line')
282 register_cell_magic = _function_magic_marker('cell')
282 register_cell_magic = _function_magic_marker('cell')
283 register_line_cell_magic = _function_magic_marker('line_cell')
283 register_line_cell_magic = _function_magic_marker('line_cell')
284
284
285 #-----------------------------------------------------------------------------
285 #-----------------------------------------------------------------------------
286 # Core Magic classes
286 # Core Magic classes
287 #-----------------------------------------------------------------------------
287 #-----------------------------------------------------------------------------
288
288
289 class MagicsManager(Configurable):
289 class MagicsManager(Configurable):
290 """Object that handles all magic-related functionality for IPython.
290 """Object that handles all magic-related functionality for IPython.
291 """
291 """
292 # Non-configurable class attributes
292 # Non-configurable class attributes
293
293
294 # A two-level dict, first keyed by magic type, then by magic function, and
294 # A two-level dict, first keyed by magic type, then by magic function, and
295 # holding the actual callable object as value. This is the dict used for
295 # holding the actual callable object as value. This is the dict used for
296 # magic function dispatch
296 # magic function dispatch
297 magics = Dict
297 magics = Dict
298
298
299 # A registry of the original objects that we've been given holding magics.
299 # A registry of the original objects that we've been given holding magics.
300 registry = Dict
300 registry = Dict
301
301
302 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
302 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
303
303
304 auto_magic = Bool(True, config=True, help=
304 auto_magic = Bool(True, config=True, help=
305 "Automatically call line magics without requiring explicit % prefix")
305 "Automatically call line magics without requiring explicit % prefix")
306
306
307 _auto_status = [
307 _auto_status = [
308 'Automagic is OFF, % prefix IS needed for line magics.',
308 'Automagic is OFF, % prefix IS needed for line magics.',
309 'Automagic is ON, % prefix IS NOT needed for line magics.']
309 'Automagic is ON, % prefix IS NOT needed for line magics.']
310
310
311 user_magics = Instance('IPython.core.magics.UserMagics')
311 user_magics = Instance('IPython.core.magics.UserMagics')
312
312
313 def __init__(self, shell=None, config=None, user_magics=None, **traits):
313 def __init__(self, shell=None, config=None, user_magics=None, **traits):
314
314
315 super(MagicsManager, self).__init__(shell=shell, config=config,
315 super(MagicsManager, self).__init__(shell=shell, config=config,
316 user_magics=user_magics, **traits)
316 user_magics=user_magics, **traits)
317 self.magics = dict(line={}, cell={})
317 self.magics = dict(line={}, cell={})
318 # Let's add the user_magics to the registry for uniformity, so *all*
318 # Let's add the user_magics to the registry for uniformity, so *all*
319 # registered magic containers can be found there.
319 # registered magic containers can be found there.
320 self.registry[user_magics.__class__.__name__] = user_magics
320 self.registry[user_magics.__class__.__name__] = user_magics
321
321
322 def auto_status(self):
322 def auto_status(self):
323 """Return descriptive string with automagic status."""
323 """Return descriptive string with automagic status."""
324 return self._auto_status[self.auto_magic]
324 return self._auto_status[self.auto_magic]
325
325
326 def lsmagic_info(self):
326 def lsmagic_info(self):
327 magic_list = []
327 magic_list = []
328 for m_type in self.magics :
328 for m_type in self.magics :
329 for m_name,mgc in self.magics[m_type].items():
329 for m_name,mgc in self.magics[m_type].items():
330 try :
330 try :
331 magic_list.append({'name':m_name,'type':m_type,'class':mgc.im_class.__name__})
331 magic_list.append({'name':m_name,'type':m_type,'class':mgc.im_class.__name__})
332 except AttributeError :
332 except AttributeError :
333 magic_list.append({'name':m_name,'type':m_type,'class':'Other'})
333 magic_list.append({'name':m_name,'type':m_type,'class':'Other'})
334 return magic_list
334 return magic_list
335
335
336 def lsmagic(self):
336 def lsmagic(self):
337 """Return a dict of currently available magic functions.
337 """Return a dict of currently available magic functions.
338
338
339 The return dict has the keys 'line' and 'cell', corresponding to the
339 The return dict has the keys 'line' and 'cell', corresponding to the
340 two types of magics we support. Each value is a list of names.
340 two types of magics we support. Each value is a list of names.
341 """
341 """
342 return self.magics
342 return self.magics
343
343
344 def lsmagic_docs(self, brief=False, missing=''):
344 def lsmagic_docs(self, brief=False, missing=''):
345 """Return dict of documentation of magic functions.
345 """Return dict of documentation of magic functions.
346
346
347 The return dict has the keys 'line' and 'cell', corresponding to the
347 The return dict has the keys 'line' and 'cell', corresponding to the
348 two types of magics we support. Each value is a dict keyed by magic
348 two types of magics we support. Each value is a dict keyed by magic
349 name whose value is the function docstring. If a docstring is
349 name whose value is the function docstring. If a docstring is
350 unavailable, the value of `missing` is used instead.
350 unavailable, the value of `missing` is used instead.
351
351
352 If brief is True, only the first line of each docstring will be returned.
352 If brief is True, only the first line of each docstring will be returned.
353 """
353 """
354 docs = {}
354 docs = {}
355 for m_type in self.magics:
355 for m_type in self.magics:
356 m_docs = {}
356 m_docs = {}
357 for m_name, m_func in self.magics[m_type].iteritems():
357 for m_name, m_func in self.magics[m_type].iteritems():
358 if m_func.__doc__:
358 if m_func.__doc__:
359 if brief:
359 if brief:
360 m_docs[m_name] = m_func.__doc__.split('\n', 1)[0]
360 m_docs[m_name] = m_func.__doc__.split('\n', 1)[0]
361 else:
361 else:
362 m_docs[m_name] = m_func.__doc__.rstrip()
362 m_docs[m_name] = m_func.__doc__.rstrip()
363 else:
363 else:
364 m_docs[m_name] = missing
364 m_docs[m_name] = missing
365 docs[m_type] = m_docs
365 docs[m_type] = m_docs
366 return docs
366 return docs
367
367
368 def register(self, *magic_objects):
368 def register(self, *magic_objects):
369 """Register one or more instances of Magics.
369 """Register one or more instances of Magics.
370
370
371 Take one or more classes or instances of classes that subclass the main
371 Take one or more classes or instances of classes that subclass the main
372 `core.Magic` class, and register them with IPython to use the magic
372 `core.Magic` class, and register them with IPython to use the magic
373 functions they provide. The registration process will then ensure that
373 functions they provide. The registration process will then ensure that
374 any methods that have decorated to provide line and/or cell magics will
374 any methods that have decorated to provide line and/or cell magics will
375 be recognized with the `%x`/`%%x` syntax as a line/cell magic
375 be recognized with the `%x`/`%%x` syntax as a line/cell magic
376 respectively.
376 respectively.
377
377
378 If classes are given, they will be instantiated with the default
378 If classes are given, they will be instantiated with the default
379 constructor. If your classes need a custom constructor, you should
379 constructor. If your classes need a custom constructor, you should
380 instanitate them first and pass the instance.
380 instanitate them first and pass the instance.
381
381
382 The provided arguments can be an arbitrary mix of classes and instances.
382 The provided arguments can be an arbitrary mix of classes and instances.
383
383
384 Parameters
384 Parameters
385 ----------
385 ----------
386 magic_objects : one or more classes or instances
386 magic_objects : one or more classes or instances
387 """
387 """
388 # Start by validating them to ensure they have all had their magic
388 # Start by validating them to ensure they have all had their magic
389 # methods registered at the instance level
389 # methods registered at the instance level
390 for m in magic_objects:
390 for m in magic_objects:
391 if not m.registered:
391 if not m.registered:
392 raise ValueError("Class of magics %r was constructed without "
392 raise ValueError("Class of magics %r was constructed without "
393 "the @register_magics class decorator")
393 "the @register_magics class decorator")
394 if type(m) in (type, MetaHasTraits):
394 if type(m) in (type, MetaHasTraits):
395 # If we're given an uninstantiated class
395 # If we're given an uninstantiated class
396 m = m(shell=self.shell)
396 m = m(shell=self.shell)
397
397
398 # Now that we have an instance, we can register it and update the
398 # Now that we have an instance, we can register it and update the
399 # table of callables
399 # table of callables
400 self.registry[m.__class__.__name__] = m
400 self.registry[m.__class__.__name__] = m
401 for mtype in magic_kinds:
401 for mtype in magic_kinds:
402 self.magics[mtype].update(m.magics[mtype])
402 self.magics[mtype].update(m.magics[mtype])
403
403
404 def register_function(self, func, magic_kind='line', magic_name=None):
404 def register_function(self, func, magic_kind='line', magic_name=None):
405 """Expose a standalone function as magic function for IPython.
405 """Expose a standalone function as magic function for IPython.
406
406
407 This will create an IPython magic (line, cell or both) from a
407 This will create an IPython magic (line, cell or both) from a
408 standalone function. The functions should have the following
408 standalone function. The functions should have the following
409 signatures:
409 signatures:
410
410
411 * For line magics: `def f(line)`
411 * For line magics: `def f(line)`
412 * For cell magics: `def f(line, cell)`
412 * For cell magics: `def f(line, cell)`
413 * For a function that does both: `def f(line, cell=None)`
413 * For a function that does both: `def f(line, cell=None)`
414
414
415 In the latter case, the function will be called with `cell==None` when
415 In the latter case, the function will be called with `cell==None` when
416 invoked as `%f`, and with cell as a string when invoked as `%%f`.
416 invoked as `%f`, and with cell as a string when invoked as `%%f`.
417
417
418 Parameters
418 Parameters
419 ----------
419 ----------
420 func : callable
420 func : callable
421 Function to be registered as a magic.
421 Function to be registered as a magic.
422
422
423 magic_kind : str
423 magic_kind : str
424 Kind of magic, one of 'line', 'cell' or 'line_cell'
424 Kind of magic, one of 'line', 'cell' or 'line_cell'
425
425
426 magic_name : optional str
426 magic_name : optional str
427 If given, the name the magic will have in the IPython namespace. By
427 If given, the name the magic will have in the IPython namespace. By
428 default, the name of the function itself is used.
428 default, the name of the function itself is used.
429 """
429 """
430
430
431 # Create the new method in the user_magics and register it in the
431 # Create the new method in the user_magics and register it in the
432 # global table
432 # global table
433 validate_type(magic_kind)
433 validate_type(magic_kind)
434 magic_name = func.func_name if magic_name is None else magic_name
434 magic_name = func.func_name if magic_name is None else magic_name
435 setattr(self.user_magics, magic_name, func)
435 setattr(self.user_magics, magic_name, func)
436 record_magic(self.magics, magic_kind, magic_name, func)
436 record_magic(self.magics, magic_kind, magic_name, func)
437
437
438 def define_magic(self, name, func):
438 def define_magic(self, name, func):
439 """[Deprecated] Expose own function as magic function for IPython.
439 """[Deprecated] Expose own function as magic function for IPython.
440
440
441 Example::
441 Example::
442
442
443 def foo_impl(self, parameter_s=''):
443 def foo_impl(self, parameter_s=''):
444 'My very own magic!. (Use docstrings, IPython reads them).'
444 'My very own magic!. (Use docstrings, IPython reads them).'
445 print 'Magic function. Passed parameter is between < >:'
445 print 'Magic function. Passed parameter is between < >:'
446 print '<%s>' % parameter_s
446 print '<%s>' % parameter_s
447 print 'The self object is:', self
447 print 'The self object is:', self
448
448
449 ip.define_magic('foo',foo_impl)
449 ip.define_magic('foo',foo_impl)
450 """
450 """
451 meth = types.MethodType(func, self.user_magics)
451 meth = types.MethodType(func, self.user_magics)
452 setattr(self.user_magics, name, meth)
452 setattr(self.user_magics, name, meth)
453 record_magic(self.magics, 'line', name, meth)
453 record_magic(self.magics, 'line', name, meth)
454
454
455 def register_alias(self, alias_name, magic_name, magic_kind='line'):
456 """Register an alias to a magic function.
457
458 The alias is an instance of :class:`MagicAlias`, which holds the
459 name and kind of the magic it should call. Binding is done at
460 call time, so if the underlying magic function is changed the alias
461 will call the new function.
462
463 Parameters
464 ----------
465 alias_name : str
466 The name of the magic to be registered.
467
468 magic_name : str
469 The name of an existing magic.
470
471 magic_kind : str
472 Kind of magic, one of 'line' or 'cell'
473 """
474
475 # `validate_type` is too permissive, as it allows 'line_cell'
476 # which we do not handle.
477 if magic_kind not in magic_kinds:
478 raise ValueError('magic_kind must be one of %s, %s given' %
479 magic_kinds, magic_kind)
480
481 alias = MagicAlias(self.shell, magic_name, magic_kind)
482 setattr(self.user_magics, alias_name, alias)
483 record_magic(self.magics, magic_kind, alias_name, alias)
484
455 # Key base class that provides the central functionality for magics.
485 # Key base class that provides the central functionality for magics.
456
486
457 class Magics(object):
487 class Magics(object):
458 """Base class for implementing magic functions.
488 """Base class for implementing magic functions.
459
489
460 Shell functions which can be reached as %function_name. All magic
490 Shell functions which can be reached as %function_name. All magic
461 functions should accept a string, which they can parse for their own
491 functions should accept a string, which they can parse for their own
462 needs. This can make some functions easier to type, eg `%cd ../`
492 needs. This can make some functions easier to type, eg `%cd ../`
463 vs. `%cd("../")`
493 vs. `%cd("../")`
464
494
465 Classes providing magic functions need to subclass this class, and they
495 Classes providing magic functions need to subclass this class, and they
466 MUST:
496 MUST:
467
497
468 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
498 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
469 individual methods as magic functions, AND
499 individual methods as magic functions, AND
470
500
471 - Use the class decorator `@magics_class` to ensure that the magic
501 - Use the class decorator `@magics_class` to ensure that the magic
472 methods are properly registered at the instance level upon instance
502 methods are properly registered at the instance level upon instance
473 initialization.
503 initialization.
474
504
475 See :mod:`magic_functions` for examples of actual implementation classes.
505 See :mod:`magic_functions` for examples of actual implementation classes.
476 """
506 """
477 # Dict holding all command-line options for each magic.
507 # Dict holding all command-line options for each magic.
478 options_table = None
508 options_table = None
479 # Dict for the mapping of magic names to methods, set by class decorator
509 # Dict for the mapping of magic names to methods, set by class decorator
480 magics = None
510 magics = None
481 # Flag to check that the class decorator was properly applied
511 # Flag to check that the class decorator was properly applied
482 registered = False
512 registered = False
483 # Instance of IPython shell
513 # Instance of IPython shell
484 shell = None
514 shell = None
485
515
486 def __init__(self, shell):
516 def __init__(self, shell):
487 if not(self.__class__.registered):
517 if not(self.__class__.registered):
488 raise ValueError('Magics subclass without registration - '
518 raise ValueError('Magics subclass without registration - '
489 'did you forget to apply @magics_class?')
519 'did you forget to apply @magics_class?')
490 self.shell = shell
520 self.shell = shell
491 self.options_table = {}
521 self.options_table = {}
492 # The method decorators are run when the instance doesn't exist yet, so
522 # The method decorators are run when the instance doesn't exist yet, so
493 # they can only record the names of the methods they are supposed to
523 # they can only record the names of the methods they are supposed to
494 # grab. Only now, that the instance exists, can we create the proper
524 # grab. Only now, that the instance exists, can we create the proper
495 # mapping to bound methods. So we read the info off the original names
525 # mapping to bound methods. So we read the info off the original names
496 # table and replace each method name by the actual bound method.
526 # table and replace each method name by the actual bound method.
497 # But we mustn't clobber the *class* mapping, in case of multiple instances.
527 # But we mustn't clobber the *class* mapping, in case of multiple instances.
498 class_magics = self.magics
528 class_magics = self.magics
499 self.magics = {}
529 self.magics = {}
500 for mtype in magic_kinds:
530 for mtype in magic_kinds:
501 tab = self.magics[mtype] = {}
531 tab = self.magics[mtype] = {}
502 cls_tab = class_magics[mtype]
532 cls_tab = class_magics[mtype]
503 for magic_name, meth_name in cls_tab.iteritems():
533 for magic_name, meth_name in cls_tab.iteritems():
504 if isinstance(meth_name, basestring):
534 if isinstance(meth_name, basestring):
505 # it's a method name, grab it
535 # it's a method name, grab it
506 tab[magic_name] = getattr(self, meth_name)
536 tab[magic_name] = getattr(self, meth_name)
507 else:
537 else:
508 # it's the real thing
538 # it's the real thing
509 tab[magic_name] = meth_name
539 tab[magic_name] = meth_name
510
540
511 def arg_err(self,func):
541 def arg_err(self,func):
512 """Print docstring if incorrect arguments were passed"""
542 """Print docstring if incorrect arguments were passed"""
513 print 'Error in arguments:'
543 print 'Error in arguments:'
514 print oinspect.getdoc(func)
544 print oinspect.getdoc(func)
515
545
516 def format_latex(self, strng):
546 def format_latex(self, strng):
517 """Format a string for latex inclusion."""
547 """Format a string for latex inclusion."""
518
548
519 # Characters that need to be escaped for latex:
549 # Characters that need to be escaped for latex:
520 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
550 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
521 # Magic command names as headers:
551 # Magic command names as headers:
522 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
552 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
523 re.MULTILINE)
553 re.MULTILINE)
524 # Magic commands
554 # Magic commands
525 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
555 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
526 re.MULTILINE)
556 re.MULTILINE)
527 # Paragraph continue
557 # Paragraph continue
528 par_re = re.compile(r'\\$',re.MULTILINE)
558 par_re = re.compile(r'\\$',re.MULTILINE)
529
559
530 # The "\n" symbol
560 # The "\n" symbol
531 newline_re = re.compile(r'\\n')
561 newline_re = re.compile(r'\\n')
532
562
533 # Now build the string for output:
563 # Now build the string for output:
534 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
564 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
535 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
565 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
536 strng)
566 strng)
537 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
567 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
538 strng = par_re.sub(r'\\\\',strng)
568 strng = par_re.sub(r'\\\\',strng)
539 strng = escape_re.sub(r'\\\1',strng)
569 strng = escape_re.sub(r'\\\1',strng)
540 strng = newline_re.sub(r'\\textbackslash{}n',strng)
570 strng = newline_re.sub(r'\\textbackslash{}n',strng)
541 return strng
571 return strng
542
572
543 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
573 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
544 """Parse options passed to an argument string.
574 """Parse options passed to an argument string.
545
575
546 The interface is similar to that of getopt(), but it returns back a
576 The interface is similar to that of getopt(), but it returns back a
547 Struct with the options as keys and the stripped argument string still
577 Struct with the options as keys and the stripped argument string still
548 as a string.
578 as a string.
549
579
550 arg_str is quoted as a true sys.argv vector by using shlex.split.
580 arg_str is quoted as a true sys.argv vector by using shlex.split.
551 This allows us to easily expand variables, glob files, quote
581 This allows us to easily expand variables, glob files, quote
552 arguments, etc.
582 arguments, etc.
553
583
554 Options:
584 Options:
555 -mode: default 'string'. If given as 'list', the argument string is
585 -mode: default 'string'. If given as 'list', the argument string is
556 returned as a list (split on whitespace) instead of a string.
586 returned as a list (split on whitespace) instead of a string.
557
587
558 -list_all: put all option values in lists. Normally only options
588 -list_all: put all option values in lists. Normally only options
559 appearing more than once are put in a list.
589 appearing more than once are put in a list.
560
590
561 -posix (True): whether to split the input line in POSIX mode or not,
591 -posix (True): whether to split the input line in POSIX mode or not,
562 as per the conventions outlined in the shlex module from the
592 as per the conventions outlined in the shlex module from the
563 standard library."""
593 standard library."""
564
594
565 # inject default options at the beginning of the input line
595 # inject default options at the beginning of the input line
566 caller = sys._getframe(1).f_code.co_name
596 caller = sys._getframe(1).f_code.co_name
567 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
597 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
568
598
569 mode = kw.get('mode','string')
599 mode = kw.get('mode','string')
570 if mode not in ['string','list']:
600 if mode not in ['string','list']:
571 raise ValueError('incorrect mode given: %s' % mode)
601 raise ValueError('incorrect mode given: %s' % mode)
572 # Get options
602 # Get options
573 list_all = kw.get('list_all',0)
603 list_all = kw.get('list_all',0)
574 posix = kw.get('posix', os.name == 'posix')
604 posix = kw.get('posix', os.name == 'posix')
575 strict = kw.get('strict', True)
605 strict = kw.get('strict', True)
576
606
577 # Check if we have more than one argument to warrant extra processing:
607 # Check if we have more than one argument to warrant extra processing:
578 odict = {} # Dictionary with options
608 odict = {} # Dictionary with options
579 args = arg_str.split()
609 args = arg_str.split()
580 if len(args) >= 1:
610 if len(args) >= 1:
581 # If the list of inputs only has 0 or 1 thing in it, there's no
611 # If the list of inputs only has 0 or 1 thing in it, there's no
582 # need to look for options
612 # need to look for options
583 argv = arg_split(arg_str, posix, strict)
613 argv = arg_split(arg_str, posix, strict)
584 # Do regular option processing
614 # Do regular option processing
585 try:
615 try:
586 opts,args = getopt(argv, opt_str, long_opts)
616 opts,args = getopt(argv, opt_str, long_opts)
587 except GetoptError as e:
617 except GetoptError as e:
588 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
618 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
589 " ".join(long_opts)))
619 " ".join(long_opts)))
590 for o,a in opts:
620 for o,a in opts:
591 if o.startswith('--'):
621 if o.startswith('--'):
592 o = o[2:]
622 o = o[2:]
593 else:
623 else:
594 o = o[1:]
624 o = o[1:]
595 try:
625 try:
596 odict[o].append(a)
626 odict[o].append(a)
597 except AttributeError:
627 except AttributeError:
598 odict[o] = [odict[o],a]
628 odict[o] = [odict[o],a]
599 except KeyError:
629 except KeyError:
600 if list_all:
630 if list_all:
601 odict[o] = [a]
631 odict[o] = [a]
602 else:
632 else:
603 odict[o] = a
633 odict[o] = a
604
634
605 # Prepare opts,args for return
635 # Prepare opts,args for return
606 opts = Struct(odict)
636 opts = Struct(odict)
607 if mode == 'string':
637 if mode == 'string':
608 args = ' '.join(args)
638 args = ' '.join(args)
609
639
610 return opts,args
640 return opts,args
611
641
612 def default_option(self, fn, optstr):
642 def default_option(self, fn, optstr):
613 """Make an entry in the options_table for fn, with value optstr"""
643 """Make an entry in the options_table for fn, with value optstr"""
614
644
615 if fn not in self.lsmagic():
645 if fn not in self.lsmagic():
616 error("%s is not a magic function" % fn)
646 error("%s is not a magic function" % fn)
617 self.options_table[fn] = optstr
647 self.options_table[fn] = optstr
648
649 class MagicAlias(object):
650 """Store a magic alias.
651
652 An alias is determined by its magic name and magic kind. Lookup
653 is done at call time, so if the underlying magic changes the alias
654 will call the new function.
655
656 Use the :meth:`MagicsManager.register_alias` method or the
657 `%alias_magic` magic function to create and register a new alias.
658 """
659 def __init__(self, shell, magic_name, magic_kind):
660 self.shell = shell
661 self.magic_name = magic_name
662 self.magic_kind = magic_kind
663
664 self._in_call = False
665
666 @property
667 def pretty_target(self):
668 """A formatted version of the target of the alias."""
669 return '%s%s' % (magic_escapes[self.magic_kind], self.magic_name)
670
671 @property
672 def __doc__(self):
673 return "Alias for `%s`." % self.pretty_target
674
675 def __call__(self, *args, **kwargs):
676 """Call the magic alias."""
677 fn = self.shell.find_magic(self.magic_name, self.magic_kind)
678 if fn is None:
679 raise UsageError("Magic `%s` not found." % self.pretty_target)
680
681 # Protect against infinite recursion.
682 if self._in_call:
683 raise UsageError("Infinite recursion detected; "
684 "magic aliases cannot call themselves.")
685 self._in_call = True
686 try:
687 return fn(*args, **kwargs)
688 finally:
689 self._in_call = False
@@ -1,610 +1,612 b''
1 """Implementation of basic magic functions.
1 """Implementation of basic magic functions.
2 """
2 """
3 #-----------------------------------------------------------------------------
3 #-----------------------------------------------------------------------------
4 # Copyright (c) 2012 The IPython Development Team.
4 # Copyright (c) 2012 The IPython Development Team.
5 #
5 #
6 # Distributed under the terms of the Modified BSD License.
6 # Distributed under the terms of the Modified BSD License.
7 #
7 #
8 # The full license is in the file COPYING.txt, distributed with this software.
8 # The full license is in the file COPYING.txt, distributed with this software.
9 #-----------------------------------------------------------------------------
9 #-----------------------------------------------------------------------------
10
10
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 # Imports
12 # Imports
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 from __future__ import print_function
14 from __future__ import print_function
15
15
16 # Stdlib
16 # Stdlib
17 import io
17 import io
18 import sys
18 import sys
19 from pprint import pformat
19 from pprint import pformat
20
20
21 # Our own packages
21 # Our own packages
22 from IPython.core import magic_arguments
22 from IPython.core import magic_arguments
23 from IPython.core.error import UsageError
23 from IPython.core.error import UsageError
24 from IPython.core.magic import Magics, magics_class, line_magic, magic_escapes
24 from IPython.core.magic import Magics, magics_class, line_magic, magic_escapes
25 from IPython.utils.text import format_screen, dedent, indent
25 from IPython.utils.text import format_screen, dedent, indent
26 from IPython.core import magic_arguments, page
26 from IPython.core import magic_arguments, page
27 from IPython.testing.skipdoctest import skip_doctest
27 from IPython.testing.skipdoctest import skip_doctest
28 from IPython.utils.ipstruct import Struct
28 from IPython.utils.ipstruct import Struct
29 from IPython.utils.path import unquote_filename
29 from IPython.utils.path import unquote_filename
30 from IPython.utils.warn import warn, error
30 from IPython.utils.warn import warn, error
31
31
32 #-----------------------------------------------------------------------------
32 #-----------------------------------------------------------------------------
33 # Magics class implementation
33 # Magics class implementation
34 #-----------------------------------------------------------------------------
34 #-----------------------------------------------------------------------------
35
35
36 @magics_class
36 @magics_class
37 class BasicMagics(Magics):
37 class BasicMagics(Magics):
38 """Magics that provide central IPython functionality.
38 """Magics that provide central IPython functionality.
39
39
40 These are various magics that don't fit into specific categories but that
40 These are various magics that don't fit into specific categories but that
41 are all part of the base 'IPython experience'."""
41 are all part of the base 'IPython experience'."""
42
42
43 @magic_arguments.magic_arguments()
43 @magic_arguments.magic_arguments()
44 @magic_arguments.argument(
44 @magic_arguments.argument(
45 '-l', '--line', action='store_true',
45 '-l', '--line', action='store_true',
46 help="""Create a line magic alias."""
46 help="""Create a line magic alias."""
47 )
47 )
48 @magic_arguments.argument(
48 @magic_arguments.argument(
49 '-c', '--cell', action='store_true',
49 '-c', '--cell', action='store_true',
50 help="""Create a cell magic alias."""
50 help="""Create a cell magic alias."""
51 )
51 )
52 @magic_arguments.argument(
52 @magic_arguments.argument(
53 'name',
53 'name',
54 help="""Name of the magic to be created."""
54 help="""Name of the magic to be created."""
55 )
55 )
56 @magic_arguments.argument(
56 @magic_arguments.argument(
57 'target',
57 'target',
58 help="""Name of the existing line or cell magic."""
58 help="""Name of the existing line or cell magic."""
59 )
59 )
60 @line_magic
60 @line_magic
61 def alias_magic(self, line=''):
61 def alias_magic(self, line=''):
62 """Create an alias for an existing line or cell magic.
62 """Create an alias for an existing line or cell magic.
63
63
64 Examples
64 Examples
65 --------
65 --------
66 ::
66 ::
67 In [1]: %alias_magic t timeit
67 In [1]: %alias_magic t timeit
68 Created `%t` as an alias for `%timeit`.
69 Created `%%t` as an alias for `%%timeit`.
68
70
69 In [2]: %t -n1 pass
71 In [2]: %t -n1 pass
70 1 loops, best of 3: 954 ns per loop
72 1 loops, best of 3: 954 ns per loop
71
73
72 In [3]: %%t -n1
74 In [3]: %%t -n1
73 ...: pass
75 ...: pass
74 ...:
76 ...:
75 1 loops, best of 3: 954 ns per loop
77 1 loops, best of 3: 954 ns per loop
76
78
77 In [4]: %alias_magic --cell whereami pwd
79 In [4]: %alias_magic --cell whereami pwd
78 UsageError: Cell magic function `%%pwd` not found.
80 UsageError: Cell magic function `%%pwd` not found.
79 In [5]: %alias_magic --line whereami pwd
81 In [5]: %alias_magic --line whereami pwd
82 Created `%whereami` as an alias for `%pwd`.
80
83
81 In [6]: %whereami
84 In [6]: %whereami
82 Out[6]: u'/home/testuser'
85 Out[6]: u'/home/testuser'
83 """
86 """
84 args = magic_arguments.parse_argstring(self.alias_magic, line)
87 args = magic_arguments.parse_argstring(self.alias_magic, line)
85 shell = self.shell
88 shell = self.shell
89 mman = self.shell.magics_manager
86 escs = ''.join(magic_escapes.values())
90 escs = ''.join(magic_escapes.values())
87
91
88 target = args.target.lstrip(escs)
92 target = args.target.lstrip(escs)
89 name = args.name.lstrip(escs)
93 name = args.name.lstrip(escs)
90
94
91 # Find the requested magics.
95 # Find the requested magics.
92 m_line = shell.find_magic(target, 'line')
96 m_line = shell.find_magic(target, 'line')
93 m_cell = shell.find_magic(target, 'cell')
97 m_cell = shell.find_magic(target, 'cell')
94 if args.line and m_line is None:
98 if args.line and m_line is None:
95 raise UsageError('Line magic function `%s%s` not found.' %
99 raise UsageError('Line magic function `%s%s` not found.' %
96 (magic_escapes['line'], target))
100 (magic_escapes['line'], target))
97 if args.cell and m_cell is None:
101 if args.cell and m_cell is None:
98 raise UsageError('Cell magic function `%s%s` not found.' %
102 raise UsageError('Cell magic function `%s%s` not found.' %
99 (magic_escapes['cell'], target))
103 (magic_escapes['cell'], target))
100
104
101 # If --line and --cell are not specified, default to the ones
105 # If --line and --cell are not specified, default to the ones
102 # that are available.
106 # that are available.
103 if not args.line and not args.cell:
107 if not args.line and not args.cell:
104 if not m_line and not m_cell:
108 if not m_line and not m_cell:
105 raise UsageError(
109 raise UsageError(
106 'No line or cell magic with name `%s` found.' % target
110 'No line or cell magic with name `%s` found.' % target
107 )
111 )
108 args.line = bool(m_line)
112 args.line = bool(m_line)
109 args.cell = bool(m_cell)
113 args.cell = bool(m_cell)
110
114
111 if args.line:
115 if args.line:
112 def wrapper(line): return m_line(line)
116 mman.register_alias(name, target, 'line')
113 wrapper.__name__ = str(name)
117 print('Created `%s%s` as an alias for `%s%s`.' % (
114 wrapper.__doc__ = "Alias for `%s%s`." % \
118 magic_escapes['line'], name,
115 (magic_escapes['line'], target)
119 magic_escapes['line'], target))
116 shell.register_magic_function(wrapper, 'line', name)
117
120
118 if args.cell:
121 if args.cell:
119 def wrapper(line, cell): return m_cell(line, cell)
122 mman.register_alias(name, target, 'cell')
120 wrapper.__name__ = str(name)
123 print('Created `%s%s` as an alias for `%s%s`.' % (
121 wrapper.__doc__ = "Alias for `%s%s`." % \
124 magic_escapes['cell'], name,
122 (magic_escapes['cell'], target)
125 magic_escapes['cell'], target))
123 shell.register_magic_function(wrapper, 'cell', name)
124
126
125 def _lsmagic(self):
127 def _lsmagic(self):
126 mesc = magic_escapes['line']
128 mesc = magic_escapes['line']
127 cesc = magic_escapes['cell']
129 cesc = magic_escapes['cell']
128 mman = self.shell.magics_manager
130 mman = self.shell.magics_manager
129 magics = mman.lsmagic()
131 magics = mman.lsmagic()
130 out = ['Available line magics:',
132 out = ['Available line magics:',
131 mesc + (' '+mesc).join(sorted(magics['line'])),
133 mesc + (' '+mesc).join(sorted(magics['line'])),
132 '',
134 '',
133 'Available cell magics:',
135 'Available cell magics:',
134 cesc + (' '+cesc).join(sorted(magics['cell'])),
136 cesc + (' '+cesc).join(sorted(magics['cell'])),
135 '',
137 '',
136 mman.auto_status()]
138 mman.auto_status()]
137 return '\n'.join(out)
139 return '\n'.join(out)
138
140
139 @line_magic
141 @line_magic
140 def lsmagic(self, parameter_s=''):
142 def lsmagic(self, parameter_s=''):
141 """List currently available magic functions."""
143 """List currently available magic functions."""
142 print(self._lsmagic())
144 print(self._lsmagic())
143
145
144 def _magic_docs(self, brief=False, rest=False):
146 def _magic_docs(self, brief=False, rest=False):
145 """Return docstrings from magic functions."""
147 """Return docstrings from magic functions."""
146 mman = self.shell.magics_manager
148 mman = self.shell.magics_manager
147 docs = mman.lsmagic_docs(brief, missing='No documentation')
149 docs = mman.lsmagic_docs(brief, missing='No documentation')
148
150
149 if rest:
151 if rest:
150 format_string = '**%s%s**::\n\n%s\n\n'
152 format_string = '**%s%s**::\n\n%s\n\n'
151 else:
153 else:
152 format_string = '%s%s:\n%s\n'
154 format_string = '%s%s:\n%s\n'
153
155
154 return ''.join(
156 return ''.join(
155 [format_string % (magic_escapes['line'], fname,
157 [format_string % (magic_escapes['line'], fname,
156 indent(dedent(fndoc)))
158 indent(dedent(fndoc)))
157 for fname, fndoc in sorted(docs['line'].items())]
159 for fname, fndoc in sorted(docs['line'].items())]
158 +
160 +
159 [format_string % (magic_escapes['cell'], fname,
161 [format_string % (magic_escapes['cell'], fname,
160 indent(dedent(fndoc)))
162 indent(dedent(fndoc)))
161 for fname, fndoc in sorted(docs['cell'].items())]
163 for fname, fndoc in sorted(docs['cell'].items())]
162 )
164 )
163
165
164 @line_magic
166 @line_magic
165 def magic(self, parameter_s=''):
167 def magic(self, parameter_s=''):
166 """Print information about the magic function system.
168 """Print information about the magic function system.
167
169
168 Supported formats: -latex, -brief, -rest
170 Supported formats: -latex, -brief, -rest
169 """
171 """
170
172
171 mode = ''
173 mode = ''
172 try:
174 try:
173 mode = parameter_s.split()[0][1:]
175 mode = parameter_s.split()[0][1:]
174 if mode == 'rest':
176 if mode == 'rest':
175 rest_docs = []
177 rest_docs = []
176 except IndexError:
178 except IndexError:
177 pass
179 pass
178
180
179 brief = (mode == 'brief')
181 brief = (mode == 'brief')
180 rest = (mode == 'rest')
182 rest = (mode == 'rest')
181 magic_docs = self._magic_docs(brief, rest)
183 magic_docs = self._magic_docs(brief, rest)
182
184
183 if mode == 'latex':
185 if mode == 'latex':
184 print(self.format_latex(magic_docs))
186 print(self.format_latex(magic_docs))
185 return
187 return
186 else:
188 else:
187 magic_docs = format_screen(magic_docs)
189 magic_docs = format_screen(magic_docs)
188
190
189 out = ["""
191 out = ["""
190 IPython's 'magic' functions
192 IPython's 'magic' functions
191 ===========================
193 ===========================
192
194
193 The magic function system provides a series of functions which allow you to
195 The magic function system provides a series of functions which allow you to
194 control the behavior of IPython itself, plus a lot of system-type
196 control the behavior of IPython itself, plus a lot of system-type
195 features. There are two kinds of magics, line-oriented and cell-oriented.
197 features. There are two kinds of magics, line-oriented and cell-oriented.
196
198
197 Line magics are prefixed with the % character and work much like OS
199 Line magics are prefixed with the % character and work much like OS
198 command-line calls: they get as an argument the rest of the line, where
200 command-line calls: they get as an argument the rest of the line, where
199 arguments are passed without parentheses or quotes. For example, this will
201 arguments are passed without parentheses or quotes. For example, this will
200 time the given statement::
202 time the given statement::
201
203
202 %timeit range(1000)
204 %timeit range(1000)
203
205
204 Cell magics are prefixed with a double %%, and they are functions that get as
206 Cell magics are prefixed with a double %%, and they are functions that get as
205 an argument not only the rest of the line, but also the lines below it in a
207 an argument not only the rest of the line, but also the lines below it in a
206 separate argument. These magics are called with two arguments: the rest of the
208 separate argument. These magics are called with two arguments: the rest of the
207 call line and the body of the cell, consisting of the lines below the first.
209 call line and the body of the cell, consisting of the lines below the first.
208 For example::
210 For example::
209
211
210 %%timeit x = numpy.random.randn((100, 100))
212 %%timeit x = numpy.random.randn((100, 100))
211 numpy.linalg.svd(x)
213 numpy.linalg.svd(x)
212
214
213 will time the execution of the numpy svd routine, running the assignment of x
215 will time the execution of the numpy svd routine, running the assignment of x
214 as part of the setup phase, which is not timed.
216 as part of the setup phase, which is not timed.
215
217
216 In a line-oriented client (the terminal or Qt console IPython), starting a new
218 In a line-oriented client (the terminal or Qt console IPython), starting a new
217 input with %% will automatically enter cell mode, and IPython will continue
219 input with %% will automatically enter cell mode, and IPython will continue
218 reading input until a blank line is given. In the notebook, simply type the
220 reading input until a blank line is given. In the notebook, simply type the
219 whole cell as one entity, but keep in mind that the %% escape can only be at
221 whole cell as one entity, but keep in mind that the %% escape can only be at
220 the very start of the cell.
222 the very start of the cell.
221
223
222 NOTE: If you have 'automagic' enabled (via the command line option or with the
224 NOTE: If you have 'automagic' enabled (via the command line option or with the
223 %automagic function), you don't need to type in the % explicitly for line
225 %automagic function), you don't need to type in the % explicitly for line
224 magics; cell magics always require an explicit '%%' escape. By default,
226 magics; cell magics always require an explicit '%%' escape. By default,
225 IPython ships with automagic on, so you should only rarely need the % escape.
227 IPython ships with automagic on, so you should only rarely need the % escape.
226
228
227 Example: typing '%cd mydir' (without the quotes) changes you working directory
229 Example: typing '%cd mydir' (without the quotes) changes you working directory
228 to 'mydir', if it exists.
230 to 'mydir', if it exists.
229
231
230 For a list of the available magic functions, use %lsmagic. For a description
232 For a list of the available magic functions, use %lsmagic. For a description
231 of any of them, type %magic_name?, e.g. '%cd?'.
233 of any of them, type %magic_name?, e.g. '%cd?'.
232
234
233 Currently the magic system has the following functions:""",
235 Currently the magic system has the following functions:""",
234 magic_docs,
236 magic_docs,
235 "Summary of magic functions (from %slsmagic):" % magic_escapes['line'],
237 "Summary of magic functions (from %slsmagic):" % magic_escapes['line'],
236 self._lsmagic(),
238 self._lsmagic(),
237 ]
239 ]
238 page.page('\n'.join(out))
240 page.page('\n'.join(out))
239
241
240
242
241 @line_magic
243 @line_magic
242 def page(self, parameter_s=''):
244 def page(self, parameter_s=''):
243 """Pretty print the object and display it through a pager.
245 """Pretty print the object and display it through a pager.
244
246
245 %page [options] OBJECT
247 %page [options] OBJECT
246
248
247 If no object is given, use _ (last output).
249 If no object is given, use _ (last output).
248
250
249 Options:
251 Options:
250
252
251 -r: page str(object), don't pretty-print it."""
253 -r: page str(object), don't pretty-print it."""
252
254
253 # After a function contributed by Olivier Aubert, slightly modified.
255 # After a function contributed by Olivier Aubert, slightly modified.
254
256
255 # Process options/args
257 # Process options/args
256 opts, args = self.parse_options(parameter_s, 'r')
258 opts, args = self.parse_options(parameter_s, 'r')
257 raw = 'r' in opts
259 raw = 'r' in opts
258
260
259 oname = args and args or '_'
261 oname = args and args or '_'
260 info = self.shell._ofind(oname)
262 info = self.shell._ofind(oname)
261 if info['found']:
263 if info['found']:
262 txt = (raw and str or pformat)( info['obj'] )
264 txt = (raw and str or pformat)( info['obj'] )
263 page.page(txt)
265 page.page(txt)
264 else:
266 else:
265 print('Object `%s` not found' % oname)
267 print('Object `%s` not found' % oname)
266
268
267 @line_magic
269 @line_magic
268 def profile(self, parameter_s=''):
270 def profile(self, parameter_s=''):
269 """Print your currently active IPython profile."""
271 """Print your currently active IPython profile."""
270 from IPython.core.application import BaseIPythonApplication
272 from IPython.core.application import BaseIPythonApplication
271 if BaseIPythonApplication.initialized():
273 if BaseIPythonApplication.initialized():
272 print(BaseIPythonApplication.instance().profile)
274 print(BaseIPythonApplication.instance().profile)
273 else:
275 else:
274 error("profile is an application-level value, but you don't appear to be in an IPython application")
276 error("profile is an application-level value, but you don't appear to be in an IPython application")
275
277
276 @line_magic
278 @line_magic
277 def pprint(self, parameter_s=''):
279 def pprint(self, parameter_s=''):
278 """Toggle pretty printing on/off."""
280 """Toggle pretty printing on/off."""
279 ptformatter = self.shell.display_formatter.formatters['text/plain']
281 ptformatter = self.shell.display_formatter.formatters['text/plain']
280 ptformatter.pprint = bool(1 - ptformatter.pprint)
282 ptformatter.pprint = bool(1 - ptformatter.pprint)
281 print('Pretty printing has been turned',
283 print('Pretty printing has been turned',
282 ['OFF','ON'][ptformatter.pprint])
284 ['OFF','ON'][ptformatter.pprint])
283
285
284 @line_magic
286 @line_magic
285 def colors(self, parameter_s=''):
287 def colors(self, parameter_s=''):
286 """Switch color scheme for prompts, info system and exception handlers.
288 """Switch color scheme for prompts, info system and exception handlers.
287
289
288 Currently implemented schemes: NoColor, Linux, LightBG.
290 Currently implemented schemes: NoColor, Linux, LightBG.
289
291
290 Color scheme names are not case-sensitive.
292 Color scheme names are not case-sensitive.
291
293
292 Examples
294 Examples
293 --------
295 --------
294 To get a plain black and white terminal::
296 To get a plain black and white terminal::
295
297
296 %colors nocolor
298 %colors nocolor
297 """
299 """
298 def color_switch_err(name):
300 def color_switch_err(name):
299 warn('Error changing %s color schemes.\n%s' %
301 warn('Error changing %s color schemes.\n%s' %
300 (name, sys.exc_info()[1]))
302 (name, sys.exc_info()[1]))
301
303
302
304
303 new_scheme = parameter_s.strip()
305 new_scheme = parameter_s.strip()
304 if not new_scheme:
306 if not new_scheme:
305 raise UsageError(
307 raise UsageError(
306 "%colors: you must specify a color scheme. See '%colors?'")
308 "%colors: you must specify a color scheme. See '%colors?'")
307 return
309 return
308 # local shortcut
310 # local shortcut
309 shell = self.shell
311 shell = self.shell
310
312
311 import IPython.utils.rlineimpl as readline
313 import IPython.utils.rlineimpl as readline
312
314
313 if not shell.colors_force and \
315 if not shell.colors_force and \
314 not readline.have_readline and sys.platform == "win32":
316 not readline.have_readline and sys.platform == "win32":
315 msg = """\
317 msg = """\
316 Proper color support under MS Windows requires the pyreadline library.
318 Proper color support under MS Windows requires the pyreadline library.
317 You can find it at:
319 You can find it at:
318 http://ipython.org/pyreadline.html
320 http://ipython.org/pyreadline.html
319 Gary's readline needs the ctypes module, from:
321 Gary's readline needs the ctypes module, from:
320 http://starship.python.net/crew/theller/ctypes
322 http://starship.python.net/crew/theller/ctypes
321 (Note that ctypes is already part of Python versions 2.5 and newer).
323 (Note that ctypes is already part of Python versions 2.5 and newer).
322
324
323 Defaulting color scheme to 'NoColor'"""
325 Defaulting color scheme to 'NoColor'"""
324 new_scheme = 'NoColor'
326 new_scheme = 'NoColor'
325 warn(msg)
327 warn(msg)
326
328
327 # readline option is 0
329 # readline option is 0
328 if not shell.colors_force and not shell.has_readline:
330 if not shell.colors_force and not shell.has_readline:
329 new_scheme = 'NoColor'
331 new_scheme = 'NoColor'
330
332
331 # Set prompt colors
333 # Set prompt colors
332 try:
334 try:
333 shell.prompt_manager.color_scheme = new_scheme
335 shell.prompt_manager.color_scheme = new_scheme
334 except:
336 except:
335 color_switch_err('prompt')
337 color_switch_err('prompt')
336 else:
338 else:
337 shell.colors = \
339 shell.colors = \
338 shell.prompt_manager.color_scheme_table.active_scheme_name
340 shell.prompt_manager.color_scheme_table.active_scheme_name
339 # Set exception colors
341 # Set exception colors
340 try:
342 try:
341 shell.InteractiveTB.set_colors(scheme = new_scheme)
343 shell.InteractiveTB.set_colors(scheme = new_scheme)
342 shell.SyntaxTB.set_colors(scheme = new_scheme)
344 shell.SyntaxTB.set_colors(scheme = new_scheme)
343 except:
345 except:
344 color_switch_err('exception')
346 color_switch_err('exception')
345
347
346 # Set info (for 'object?') colors
348 # Set info (for 'object?') colors
347 if shell.color_info:
349 if shell.color_info:
348 try:
350 try:
349 shell.inspector.set_active_scheme(new_scheme)
351 shell.inspector.set_active_scheme(new_scheme)
350 except:
352 except:
351 color_switch_err('object inspector')
353 color_switch_err('object inspector')
352 else:
354 else:
353 shell.inspector.set_active_scheme('NoColor')
355 shell.inspector.set_active_scheme('NoColor')
354
356
355 @line_magic
357 @line_magic
356 def xmode(self, parameter_s=''):
358 def xmode(self, parameter_s=''):
357 """Switch modes for the exception handlers.
359 """Switch modes for the exception handlers.
358
360
359 Valid modes: Plain, Context and Verbose.
361 Valid modes: Plain, Context and Verbose.
360
362
361 If called without arguments, acts as a toggle."""
363 If called without arguments, acts as a toggle."""
362
364
363 def xmode_switch_err(name):
365 def xmode_switch_err(name):
364 warn('Error changing %s exception modes.\n%s' %
366 warn('Error changing %s exception modes.\n%s' %
365 (name,sys.exc_info()[1]))
367 (name,sys.exc_info()[1]))
366
368
367 shell = self.shell
369 shell = self.shell
368 new_mode = parameter_s.strip().capitalize()
370 new_mode = parameter_s.strip().capitalize()
369 try:
371 try:
370 shell.InteractiveTB.set_mode(mode=new_mode)
372 shell.InteractiveTB.set_mode(mode=new_mode)
371 print('Exception reporting mode:',shell.InteractiveTB.mode)
373 print('Exception reporting mode:',shell.InteractiveTB.mode)
372 except:
374 except:
373 xmode_switch_err('user')
375 xmode_switch_err('user')
374
376
375 @line_magic
377 @line_magic
376 def quickref(self,arg):
378 def quickref(self,arg):
377 """ Show a quick reference sheet """
379 """ Show a quick reference sheet """
378 from IPython.core.usage import quick_reference
380 from IPython.core.usage import quick_reference
379 qr = quick_reference + self._magic_docs(brief=True)
381 qr = quick_reference + self._magic_docs(brief=True)
380 page.page(qr)
382 page.page(qr)
381
383
382 @line_magic
384 @line_magic
383 def doctest_mode(self, parameter_s=''):
385 def doctest_mode(self, parameter_s=''):
384 """Toggle doctest mode on and off.
386 """Toggle doctest mode on and off.
385
387
386 This mode is intended to make IPython behave as much as possible like a
388 This mode is intended to make IPython behave as much as possible like a
387 plain Python shell, from the perspective of how its prompts, exceptions
389 plain Python shell, from the perspective of how its prompts, exceptions
388 and output look. This makes it easy to copy and paste parts of a
390 and output look. This makes it easy to copy and paste parts of a
389 session into doctests. It does so by:
391 session into doctests. It does so by:
390
392
391 - Changing the prompts to the classic ``>>>`` ones.
393 - Changing the prompts to the classic ``>>>`` ones.
392 - Changing the exception reporting mode to 'Plain'.
394 - Changing the exception reporting mode to 'Plain'.
393 - Disabling pretty-printing of output.
395 - Disabling pretty-printing of output.
394
396
395 Note that IPython also supports the pasting of code snippets that have
397 Note that IPython also supports the pasting of code snippets that have
396 leading '>>>' and '...' prompts in them. This means that you can paste
398 leading '>>>' and '...' prompts in them. This means that you can paste
397 doctests from files or docstrings (even if they have leading
399 doctests from files or docstrings (even if they have leading
398 whitespace), and the code will execute correctly. You can then use
400 whitespace), and the code will execute correctly. You can then use
399 '%history -t' to see the translated history; this will give you the
401 '%history -t' to see the translated history; this will give you the
400 input after removal of all the leading prompts and whitespace, which
402 input after removal of all the leading prompts and whitespace, which
401 can be pasted back into an editor.
403 can be pasted back into an editor.
402
404
403 With these features, you can switch into this mode easily whenever you
405 With these features, you can switch into this mode easily whenever you
404 need to do testing and changes to doctests, without having to leave
406 need to do testing and changes to doctests, without having to leave
405 your existing IPython session.
407 your existing IPython session.
406 """
408 """
407
409
408 # Shorthands
410 # Shorthands
409 shell = self.shell
411 shell = self.shell
410 pm = shell.prompt_manager
412 pm = shell.prompt_manager
411 meta = shell.meta
413 meta = shell.meta
412 disp_formatter = self.shell.display_formatter
414 disp_formatter = self.shell.display_formatter
413 ptformatter = disp_formatter.formatters['text/plain']
415 ptformatter = disp_formatter.formatters['text/plain']
414 # dstore is a data store kept in the instance metadata bag to track any
416 # dstore is a data store kept in the instance metadata bag to track any
415 # changes we make, so we can undo them later.
417 # changes we make, so we can undo them later.
416 dstore = meta.setdefault('doctest_mode',Struct())
418 dstore = meta.setdefault('doctest_mode',Struct())
417 save_dstore = dstore.setdefault
419 save_dstore = dstore.setdefault
418
420
419 # save a few values we'll need to recover later
421 # save a few values we'll need to recover later
420 mode = save_dstore('mode',False)
422 mode = save_dstore('mode',False)
421 save_dstore('rc_pprint',ptformatter.pprint)
423 save_dstore('rc_pprint',ptformatter.pprint)
422 save_dstore('xmode',shell.InteractiveTB.mode)
424 save_dstore('xmode',shell.InteractiveTB.mode)
423 save_dstore('rc_separate_out',shell.separate_out)
425 save_dstore('rc_separate_out',shell.separate_out)
424 save_dstore('rc_separate_out2',shell.separate_out2)
426 save_dstore('rc_separate_out2',shell.separate_out2)
425 save_dstore('rc_prompts_pad_left',pm.justify)
427 save_dstore('rc_prompts_pad_left',pm.justify)
426 save_dstore('rc_separate_in',shell.separate_in)
428 save_dstore('rc_separate_in',shell.separate_in)
427 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
429 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
428 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
430 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
429
431
430 if mode == False:
432 if mode == False:
431 # turn on
433 # turn on
432 pm.in_template = '>>> '
434 pm.in_template = '>>> '
433 pm.in2_template = '... '
435 pm.in2_template = '... '
434 pm.out_template = ''
436 pm.out_template = ''
435
437
436 # Prompt separators like plain python
438 # Prompt separators like plain python
437 shell.separate_in = ''
439 shell.separate_in = ''
438 shell.separate_out = ''
440 shell.separate_out = ''
439 shell.separate_out2 = ''
441 shell.separate_out2 = ''
440
442
441 pm.justify = False
443 pm.justify = False
442
444
443 ptformatter.pprint = False
445 ptformatter.pprint = False
444 disp_formatter.plain_text_only = True
446 disp_formatter.plain_text_only = True
445
447
446 shell.magic('xmode Plain')
448 shell.magic('xmode Plain')
447 else:
449 else:
448 # turn off
450 # turn off
449 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
451 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
450
452
451 shell.separate_in = dstore.rc_separate_in
453 shell.separate_in = dstore.rc_separate_in
452
454
453 shell.separate_out = dstore.rc_separate_out
455 shell.separate_out = dstore.rc_separate_out
454 shell.separate_out2 = dstore.rc_separate_out2
456 shell.separate_out2 = dstore.rc_separate_out2
455
457
456 pm.justify = dstore.rc_prompts_pad_left
458 pm.justify = dstore.rc_prompts_pad_left
457
459
458 ptformatter.pprint = dstore.rc_pprint
460 ptformatter.pprint = dstore.rc_pprint
459 disp_formatter.plain_text_only = dstore.rc_plain_text_only
461 disp_formatter.plain_text_only = dstore.rc_plain_text_only
460
462
461 shell.magic('xmode ' + dstore.xmode)
463 shell.magic('xmode ' + dstore.xmode)
462
464
463 # Store new mode and inform
465 # Store new mode and inform
464 dstore.mode = bool(1-int(mode))
466 dstore.mode = bool(1-int(mode))
465 mode_label = ['OFF','ON'][dstore.mode]
467 mode_label = ['OFF','ON'][dstore.mode]
466 print('Doctest mode is:', mode_label)
468 print('Doctest mode is:', mode_label)
467
469
468 @line_magic
470 @line_magic
469 def gui(self, parameter_s=''):
471 def gui(self, parameter_s=''):
470 """Enable or disable IPython GUI event loop integration.
472 """Enable or disable IPython GUI event loop integration.
471
473
472 %gui [GUINAME]
474 %gui [GUINAME]
473
475
474 This magic replaces IPython's threaded shells that were activated
476 This magic replaces IPython's threaded shells that were activated
475 using the (pylab/wthread/etc.) command line flags. GUI toolkits
477 using the (pylab/wthread/etc.) command line flags. GUI toolkits
476 can now be enabled at runtime and keyboard
478 can now be enabled at runtime and keyboard
477 interrupts should work without any problems. The following toolkits
479 interrupts should work without any problems. The following toolkits
478 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
480 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
479
481
480 %gui wx # enable wxPython event loop integration
482 %gui wx # enable wxPython event loop integration
481 %gui qt4|qt # enable PyQt4 event loop integration
483 %gui qt4|qt # enable PyQt4 event loop integration
482 %gui gtk # enable PyGTK event loop integration
484 %gui gtk # enable PyGTK event loop integration
483 %gui gtk3 # enable Gtk3 event loop integration
485 %gui gtk3 # enable Gtk3 event loop integration
484 %gui tk # enable Tk event loop integration
486 %gui tk # enable Tk event loop integration
485 %gui osx # enable Cocoa event loop integration
487 %gui osx # enable Cocoa event loop integration
486 # (requires %matplotlib 1.1)
488 # (requires %matplotlib 1.1)
487 %gui # disable all event loop integration
489 %gui # disable all event loop integration
488
490
489 WARNING: after any of these has been called you can simply create
491 WARNING: after any of these has been called you can simply create
490 an application object, but DO NOT start the event loop yourself, as
492 an application object, but DO NOT start the event loop yourself, as
491 we have already handled that.
493 we have already handled that.
492 """
494 """
493 opts, arg = self.parse_options(parameter_s, '')
495 opts, arg = self.parse_options(parameter_s, '')
494 if arg=='': arg = None
496 if arg=='': arg = None
495 try:
497 try:
496 return self.shell.enable_gui(arg)
498 return self.shell.enable_gui(arg)
497 except Exception as e:
499 except Exception as e:
498 # print simple error message, rather than traceback if we can't
500 # print simple error message, rather than traceback if we can't
499 # hook up the GUI
501 # hook up the GUI
500 error(str(e))
502 error(str(e))
501
503
502 @skip_doctest
504 @skip_doctest
503 @line_magic
505 @line_magic
504 def precision(self, s=''):
506 def precision(self, s=''):
505 """Set floating point precision for pretty printing.
507 """Set floating point precision for pretty printing.
506
508
507 Can set either integer precision or a format string.
509 Can set either integer precision or a format string.
508
510
509 If numpy has been imported and precision is an int,
511 If numpy has been imported and precision is an int,
510 numpy display precision will also be set, via ``numpy.set_printoptions``.
512 numpy display precision will also be set, via ``numpy.set_printoptions``.
511
513
512 If no argument is given, defaults will be restored.
514 If no argument is given, defaults will be restored.
513
515
514 Examples
516 Examples
515 --------
517 --------
516 ::
518 ::
517
519
518 In [1]: from math import pi
520 In [1]: from math import pi
519
521
520 In [2]: %precision 3
522 In [2]: %precision 3
521 Out[2]: u'%.3f'
523 Out[2]: u'%.3f'
522
524
523 In [3]: pi
525 In [3]: pi
524 Out[3]: 3.142
526 Out[3]: 3.142
525
527
526 In [4]: %precision %i
528 In [4]: %precision %i
527 Out[4]: u'%i'
529 Out[4]: u'%i'
528
530
529 In [5]: pi
531 In [5]: pi
530 Out[5]: 3
532 Out[5]: 3
531
533
532 In [6]: %precision %e
534 In [6]: %precision %e
533 Out[6]: u'%e'
535 Out[6]: u'%e'
534
536
535 In [7]: pi**10
537 In [7]: pi**10
536 Out[7]: 9.364805e+04
538 Out[7]: 9.364805e+04
537
539
538 In [8]: %precision
540 In [8]: %precision
539 Out[8]: u'%r'
541 Out[8]: u'%r'
540
542
541 In [9]: pi**10
543 In [9]: pi**10
542 Out[9]: 93648.047476082982
544 Out[9]: 93648.047476082982
543 """
545 """
544 ptformatter = self.shell.display_formatter.formatters['text/plain']
546 ptformatter = self.shell.display_formatter.formatters['text/plain']
545 ptformatter.float_precision = s
547 ptformatter.float_precision = s
546 return ptformatter.float_format
548 return ptformatter.float_format
547
549
548 @magic_arguments.magic_arguments()
550 @magic_arguments.magic_arguments()
549 @magic_arguments.argument(
551 @magic_arguments.argument(
550 '-e', '--export', action='store_true', default=False,
552 '-e', '--export', action='store_true', default=False,
551 help='Export IPython history as a notebook. The filename argument '
553 help='Export IPython history as a notebook. The filename argument '
552 'is used to specify the notebook name and format. For example '
554 'is used to specify the notebook name and format. For example '
553 'a filename of notebook.ipynb will result in a notebook name '
555 'a filename of notebook.ipynb will result in a notebook name '
554 'of "notebook" and a format of "xml". Likewise using a ".json" '
556 'of "notebook" and a format of "xml". Likewise using a ".json" '
555 'or ".py" file extension will write the notebook in the json '
557 'or ".py" file extension will write the notebook in the json '
556 'or py formats.'
558 'or py formats.'
557 )
559 )
558 @magic_arguments.argument(
560 @magic_arguments.argument(
559 '-f', '--format',
561 '-f', '--format',
560 help='Convert an existing IPython notebook to a new format. This option '
562 help='Convert an existing IPython notebook to a new format. This option '
561 'specifies the new format and can have the values: xml, json, py. '
563 'specifies the new format and can have the values: xml, json, py. '
562 'The target filename is chosen automatically based on the new '
564 'The target filename is chosen automatically based on the new '
563 'format. The filename argument gives the name of the source file.'
565 'format. The filename argument gives the name of the source file.'
564 )
566 )
565 @magic_arguments.argument(
567 @magic_arguments.argument(
566 'filename', type=unicode,
568 'filename', type=unicode,
567 help='Notebook name or filename'
569 help='Notebook name or filename'
568 )
570 )
569 @line_magic
571 @line_magic
570 def notebook(self, s):
572 def notebook(self, s):
571 """Export and convert IPython notebooks.
573 """Export and convert IPython notebooks.
572
574
573 This function can export the current IPython history to a notebook file
575 This function can export the current IPython history to a notebook file
574 or can convert an existing notebook file into a different format. For
576 or can convert an existing notebook file into a different format. For
575 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
577 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
576 To export the history to "foo.py" do "%notebook -e foo.py". To convert
578 To export the history to "foo.py" do "%notebook -e foo.py". To convert
577 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
579 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
578 formats include (json/ipynb, py).
580 formats include (json/ipynb, py).
579 """
581 """
580 args = magic_arguments.parse_argstring(self.notebook, s)
582 args = magic_arguments.parse_argstring(self.notebook, s)
581
583
582 from IPython.nbformat import current
584 from IPython.nbformat import current
583 args.filename = unquote_filename(args.filename)
585 args.filename = unquote_filename(args.filename)
584 if args.export:
586 if args.export:
585 fname, name, format = current.parse_filename(args.filename)
587 fname, name, format = current.parse_filename(args.filename)
586 cells = []
588 cells = []
587 hist = list(self.shell.history_manager.get_range())
589 hist = list(self.shell.history_manager.get_range())
588 for session, prompt_number, input in hist[:-1]:
590 for session, prompt_number, input in hist[:-1]:
589 cells.append(current.new_code_cell(prompt_number=prompt_number,
591 cells.append(current.new_code_cell(prompt_number=prompt_number,
590 input=input))
592 input=input))
591 worksheet = current.new_worksheet(cells=cells)
593 worksheet = current.new_worksheet(cells=cells)
592 nb = current.new_notebook(name=name,worksheets=[worksheet])
594 nb = current.new_notebook(name=name,worksheets=[worksheet])
593 with io.open(fname, 'w', encoding='utf-8') as f:
595 with io.open(fname, 'w', encoding='utf-8') as f:
594 current.write(nb, f, format);
596 current.write(nb, f, format);
595 elif args.format is not None:
597 elif args.format is not None:
596 old_fname, old_name, old_format = current.parse_filename(args.filename)
598 old_fname, old_name, old_format = current.parse_filename(args.filename)
597 new_format = args.format
599 new_format = args.format
598 if new_format == u'xml':
600 if new_format == u'xml':
599 raise ValueError('Notebooks cannot be written as xml.')
601 raise ValueError('Notebooks cannot be written as xml.')
600 elif new_format == u'ipynb' or new_format == u'json':
602 elif new_format == u'ipynb' or new_format == u'json':
601 new_fname = old_name + u'.ipynb'
603 new_fname = old_name + u'.ipynb'
602 new_format = u'json'
604 new_format = u'json'
603 elif new_format == u'py':
605 elif new_format == u'py':
604 new_fname = old_name + u'.py'
606 new_fname = old_name + u'.py'
605 else:
607 else:
606 raise ValueError('Invalid notebook format: %s' % new_format)
608 raise ValueError('Invalid notebook format: %s' % new_format)
607 with io.open(old_fname, 'r', encoding='utf-8') as f:
609 with io.open(old_fname, 'r', encoding='utf-8') as f:
608 nb = current.read(f, old_format)
610 nb = current.read(f, old_format)
609 with io.open(new_fname, 'w', encoding='utf-8') as f:
611 with io.open(new_fname, 'w', encoding='utf-8') as f:
610 current.write(nb, f, new_format)
612 current.write(nb, f, new_format)
@@ -1,531 +1,526 b''
1 """Implementation of code management magic functions.
1 """Implementation of code management magic functions.
2 """
2 """
3 #-----------------------------------------------------------------------------
3 #-----------------------------------------------------------------------------
4 # Copyright (c) 2012 The IPython Development Team.
4 # Copyright (c) 2012 The IPython Development Team.
5 #
5 #
6 # Distributed under the terms of the Modified BSD License.
6 # Distributed under the terms of the Modified BSD License.
7 #
7 #
8 # The full license is in the file COPYING.txt, distributed with this software.
8 # The full license is in the file COPYING.txt, distributed with this software.
9 #-----------------------------------------------------------------------------
9 #-----------------------------------------------------------------------------
10
10
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 # Imports
12 # Imports
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14
14
15 # Stdlib
15 # Stdlib
16 import inspect
16 import inspect
17 import io
17 import io
18 import json
18 import json
19 import os
19 import os
20 import sys
20 import sys
21 from urllib2 import urlopen
21 from urllib2 import urlopen
22
22
23 # Our own packages
23 # Our own packages
24 from IPython.core.error import TryNext, StdinNotImplementedError
24 from IPython.core.error import TryNext, StdinNotImplementedError
25 from IPython.core.macro import Macro
25 from IPython.core.macro import Macro
26 from IPython.core.magic import Magics, magics_class, line_magic
26 from IPython.core.magic import Magics, magics_class, line_magic
27 from IPython.core.oinspect import find_file, find_source_lines
27 from IPython.core.oinspect import find_file, find_source_lines
28 from IPython.testing.skipdoctest import skip_doctest
28 from IPython.testing.skipdoctest import skip_doctest
29 from IPython.utils import openpy
29 from IPython.utils import openpy
30 from IPython.utils import py3compat
30 from IPython.utils import py3compat
31 from IPython.utils.io import file_read
31 from IPython.utils.io import file_read
32 from IPython.utils.path import get_py_filename, unquote_filename
32 from IPython.utils.path import get_py_filename, unquote_filename
33 from IPython.utils.warn import warn
33 from IPython.utils.warn import warn
34
34
35 #-----------------------------------------------------------------------------
35 #-----------------------------------------------------------------------------
36 # Magic implementation classes
36 # Magic implementation classes
37 #-----------------------------------------------------------------------------
37 #-----------------------------------------------------------------------------
38
38
39 # Used for exception handling in magic_edit
39 # Used for exception handling in magic_edit
40 class MacroToEdit(ValueError): pass
40 class MacroToEdit(ValueError): pass
41
41
42
42
43 @magics_class
43 @magics_class
44 class CodeMagics(Magics):
44 class CodeMagics(Magics):
45 """Magics related to code management (loading, saving, editing, ...)."""
45 """Magics related to code management (loading, saving, editing, ...)."""
46
46
47 @line_magic
47 @line_magic
48 def save(self, parameter_s=''):
48 def save(self, parameter_s=''):
49 """Save a set of lines or a macro to a given filename.
49 """Save a set of lines or a macro to a given filename.
50
50
51 Usage:\\
51 Usage:\\
52 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
52 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
53
53
54 Options:
54 Options:
55
55
56 -r: use 'raw' input. By default, the 'processed' history is used,
56 -r: use 'raw' input. By default, the 'processed' history is used,
57 so that magics are loaded in their transformed version to valid
57 so that magics are loaded in their transformed version to valid
58 Python. If this option is given, the raw input as typed as the
58 Python. If this option is given, the raw input as typed as the
59 command line is used instead.
59 command line is used instead.
60
60
61 -f: force overwrite. If file exists, %save will prompt for overwrite
61 -f: force overwrite. If file exists, %save will prompt for overwrite
62 unless -f is given.
62 unless -f is given.
63
63
64 -a: append to the file instead of overwriting it.
64 -a: append to the file instead of overwriting it.
65
65
66 This function uses the same syntax as %history for input ranges,
66 This function uses the same syntax as %history for input ranges,
67 then saves the lines to the filename you specify.
67 then saves the lines to the filename you specify.
68
68
69 It adds a '.py' extension to the file if you don't do so yourself, and
69 It adds a '.py' extension to the file if you don't do so yourself, and
70 it asks for confirmation before overwriting existing files.
70 it asks for confirmation before overwriting existing files.
71
71
72 If `-r` option is used, the default extension is `.ipy`.
72 If `-r` option is used, the default extension is `.ipy`.
73 """
73 """
74
74
75 opts,args = self.parse_options(parameter_s,'fra',mode='list')
75 opts,args = self.parse_options(parameter_s,'fra',mode='list')
76 raw = 'r' in opts
76 raw = 'r' in opts
77 force = 'f' in opts
77 force = 'f' in opts
78 append = 'a' in opts
78 append = 'a' in opts
79 mode = 'a' if append else 'w'
79 mode = 'a' if append else 'w'
80 ext = u'.ipy' if raw else u'.py'
80 ext = u'.ipy' if raw else u'.py'
81 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
81 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
82 if not fname.endswith((u'.py',u'.ipy')):
82 if not fname.endswith((u'.py',u'.ipy')):
83 fname += ext
83 fname += ext
84 file_exists = os.path.isfile(fname)
84 file_exists = os.path.isfile(fname)
85 if file_exists and not force and not append:
85 if file_exists and not force and not append:
86 try:
86 try:
87 overwrite = self.shell.ask_yes_no('File `%s` exists. Overwrite (y/[N])? ' % fname, default='n')
87 overwrite = self.shell.ask_yes_no('File `%s` exists. Overwrite (y/[N])? ' % fname, default='n')
88 except StdinNotImplementedError:
88 except StdinNotImplementedError:
89 print "File `%s` exists. Use `%%save -f %s` to force overwrite" % (fname, parameter_s)
89 print "File `%s` exists. Use `%%save -f %s` to force overwrite" % (fname, parameter_s)
90 return
90 return
91 if not overwrite :
91 if not overwrite :
92 print 'Operation cancelled.'
92 print 'Operation cancelled.'
93 return
93 return
94 try:
94 try:
95 cmds = self.shell.find_user_code(codefrom,raw)
95 cmds = self.shell.find_user_code(codefrom,raw)
96 except (TypeError, ValueError) as e:
96 except (TypeError, ValueError) as e:
97 print e.args[0]
97 print e.args[0]
98 return
98 return
99 out = py3compat.cast_unicode(cmds)
99 out = py3compat.cast_unicode(cmds)
100 with io.open(fname, mode, encoding="utf-8") as f:
100 with io.open(fname, mode, encoding="utf-8") as f:
101 if not file_exists or not append:
101 if not file_exists or not append:
102 f.write(u"# coding: utf-8\n")
102 f.write(u"# coding: utf-8\n")
103 f.write(out)
103 f.write(out)
104 # make sure we end on a newline
104 # make sure we end on a newline
105 if not out.endswith(u'\n'):
105 if not out.endswith(u'\n'):
106 f.write(u'\n')
106 f.write(u'\n')
107 print 'The following commands were written to file `%s`:' % fname
107 print 'The following commands were written to file `%s`:' % fname
108 print cmds
108 print cmds
109
109
110 @line_magic
110 @line_magic
111 def pastebin(self, parameter_s=''):
111 def pastebin(self, parameter_s=''):
112 """Upload code to Github's Gist paste bin, returning the URL.
112 """Upload code to Github's Gist paste bin, returning the URL.
113
113
114 Usage:\\
114 Usage:\\
115 %pastebin [-d "Custom description"] 1-7
115 %pastebin [-d "Custom description"] 1-7
116
116
117 The argument can be an input history range, a filename, or the name of a
117 The argument can be an input history range, a filename, or the name of a
118 string or macro.
118 string or macro.
119
119
120 Options:
120 Options:
121
121
122 -d: Pass a custom description for the gist. The default will say
122 -d: Pass a custom description for the gist. The default will say
123 "Pasted from IPython".
123 "Pasted from IPython".
124 """
124 """
125 opts, args = self.parse_options(parameter_s, 'd:')
125 opts, args = self.parse_options(parameter_s, 'd:')
126
126
127 try:
127 try:
128 code = self.shell.find_user_code(args)
128 code = self.shell.find_user_code(args)
129 except (ValueError, TypeError) as e:
129 except (ValueError, TypeError) as e:
130 print e.args[0]
130 print e.args[0]
131 return
131 return
132
132
133 post_data = json.dumps({
133 post_data = json.dumps({
134 "description": opts.get('d', "Pasted from IPython"),
134 "description": opts.get('d', "Pasted from IPython"),
135 "public": True,
135 "public": True,
136 "files": {
136 "files": {
137 "file1.py": {
137 "file1.py": {
138 "content": code
138 "content": code
139 }
139 }
140 }
140 }
141 }).encode('utf-8')
141 }).encode('utf-8')
142
142
143 response = urlopen("https://api.github.com/gists", post_data)
143 response = urlopen("https://api.github.com/gists", post_data)
144 response_data = json.loads(response.read().decode('utf-8'))
144 response_data = json.loads(response.read().decode('utf-8'))
145 return response_data['html_url']
145 return response_data['html_url']
146
146
147 @line_magic
147 @line_magic
148 def loadpy(self, arg_s):
148 def loadpy(self, arg_s):
149 """Alias of `%load`
149 """Alias of `%load`
150
150
151 `%loadpy` has gained some flexibility and droped the requirement of a `.py`
151 `%loadpy` has gained some flexibility and droped the requirement of a `.py`
152 extension. So it has been renamed simply into %load. You can look at
152 extension. So it has been renamed simply into %load. You can look at
153 `%load`'s docstring for more info.
153 `%load`'s docstring for more info.
154 """
154 """
155 self.load(arg_s)
155 self.load(arg_s)
156
156
157 @line_magic
157 @line_magic
158 def load(self, arg_s):
158 def load(self, arg_s):
159 """Load code into the current frontend.
159 """Load code into the current frontend.
160
160
161 Usage:\\
161 Usage:\\
162 %load [options] source
162 %load [options] source
163
163
164 where source can be a filename, URL, input history range or macro
164 where source can be a filename, URL, input history range or macro
165
165
166 Options:
166 Options:
167 --------
167 --------
168 -y : Don't ask confirmation for loading source above 200 000 characters.
168 -y : Don't ask confirmation for loading source above 200 000 characters.
169
169
170 This magic command can either take a local filename, a URL, an history
170 This magic command can either take a local filename, a URL, an history
171 range (see %history) or a macro as argument, it will prompt for
171 range (see %history) or a macro as argument, it will prompt for
172 confirmation before loading source with more than 200 000 characters, unless
172 confirmation before loading source with more than 200 000 characters, unless
173 -y flag is passed or if the frontend does not support raw_input::
173 -y flag is passed or if the frontend does not support raw_input::
174
174
175 %load myscript.py
175 %load myscript.py
176 %load 7-27
176 %load 7-27
177 %load myMacro
177 %load myMacro
178 %load http://www.example.com/myscript.py
178 %load http://www.example.com/myscript.py
179 """
179 """
180 opts,args = self.parse_options(arg_s,'y')
180 opts,args = self.parse_options(arg_s,'y')
181
181
182 contents = self.shell.find_user_code(args)
182 contents = self.shell.find_user_code(args)
183 l = len(contents)
183 l = len(contents)
184
184
185 # 200 000 is ~ 2500 full 80 caracter lines
185 # 200 000 is ~ 2500 full 80 caracter lines
186 # so in average, more than 5000 lines
186 # so in average, more than 5000 lines
187 if l > 200000 and 'y' not in opts:
187 if l > 200000 and 'y' not in opts:
188 try:
188 try:
189 ans = self.shell.ask_yes_no(("The text you're trying to load seems pretty big"\
189 ans = self.shell.ask_yes_no(("The text you're trying to load seems pretty big"\
190 " (%d characters). Continue (y/[N]) ?" % l), default='n' )
190 " (%d characters). Continue (y/[N]) ?" % l), default='n' )
191 except StdinNotImplementedError:
191 except StdinNotImplementedError:
192 #asume yes if raw input not implemented
192 #asume yes if raw input not implemented
193 ans = True
193 ans = True
194
194
195 if ans is False :
195 if ans is False :
196 print 'Operation cancelled.'
196 print 'Operation cancelled.'
197 return
197 return
198
198
199 self.shell.set_next_input(contents)
199 self.shell.set_next_input(contents)
200
200
201 @staticmethod
201 @staticmethod
202 def _find_edit_target(shell, args, opts, last_call):
202 def _find_edit_target(shell, args, opts, last_call):
203 """Utility method used by magic_edit to find what to edit."""
203 """Utility method used by magic_edit to find what to edit."""
204
204
205 def make_filename(arg):
205 def make_filename(arg):
206 "Make a filename from the given args"
206 "Make a filename from the given args"
207 arg = unquote_filename(arg)
207 arg = unquote_filename(arg)
208 try:
208 try:
209 filename = get_py_filename(arg)
209 filename = get_py_filename(arg)
210 except IOError:
210 except IOError:
211 # If it ends with .py but doesn't already exist, assume we want
211 # If it ends with .py but doesn't already exist, assume we want
212 # a new file.
212 # a new file.
213 if arg.endswith('.py'):
213 if arg.endswith('.py'):
214 filename = arg
214 filename = arg
215 else:
215 else:
216 filename = None
216 filename = None
217 return filename
217 return filename
218
218
219 # Set a few locals from the options for convenience:
219 # Set a few locals from the options for convenience:
220 opts_prev = 'p' in opts
220 opts_prev = 'p' in opts
221 opts_raw = 'r' in opts
221 opts_raw = 'r' in opts
222
222
223 # custom exceptions
223 # custom exceptions
224 class DataIsObject(Exception): pass
224 class DataIsObject(Exception): pass
225
225
226 # Default line number value
226 # Default line number value
227 lineno = opts.get('n',None)
227 lineno = opts.get('n',None)
228
228
229 if opts_prev:
229 if opts_prev:
230 args = '_%s' % last_call[0]
230 args = '_%s' % last_call[0]
231 if args not in shell.user_ns:
231 if args not in shell.user_ns:
232 args = last_call[1]
232 args = last_call[1]
233
233
234 # use last_call to remember the state of the previous call, but don't
234 # use last_call to remember the state of the previous call, but don't
235 # let it be clobbered by successive '-p' calls.
235 # let it be clobbered by successive '-p' calls.
236 try:
236 try:
237 last_call[0] = shell.displayhook.prompt_count
237 last_call[0] = shell.displayhook.prompt_count
238 if not opts_prev:
238 if not opts_prev:
239 last_call[1] = args
239 last_call[1] = args
240 except:
240 except:
241 pass
241 pass
242
242
243 # by default this is done with temp files, except when the given
243 # by default this is done with temp files, except when the given
244 # arg is a filename
244 # arg is a filename
245 use_temp = True
245 use_temp = True
246
246
247 data = ''
247 data = ''
248
248
249 # First, see if the arguments should be a filename.
249 # First, see if the arguments should be a filename.
250 filename = make_filename(args)
250 filename = make_filename(args)
251 if filename:
251 if filename:
252 use_temp = False
252 use_temp = False
253 elif args:
253 elif args:
254 # Mode where user specifies ranges of lines, like in %macro.
254 # Mode where user specifies ranges of lines, like in %macro.
255 data = shell.extract_input_lines(args, opts_raw)
255 data = shell.extract_input_lines(args, opts_raw)
256 if not data:
256 if not data:
257 try:
257 try:
258 # Load the parameter given as a variable. If not a string,
258 # Load the parameter given as a variable. If not a string,
259 # process it as an object instead (below)
259 # process it as an object instead (below)
260
260
261 #print '*** args',args,'type',type(args) # dbg
261 #print '*** args',args,'type',type(args) # dbg
262 data = eval(args, shell.user_ns)
262 data = eval(args, shell.user_ns)
263 if not isinstance(data, basestring):
263 if not isinstance(data, basestring):
264 raise DataIsObject
264 raise DataIsObject
265
265
266 except (NameError,SyntaxError):
266 except (NameError,SyntaxError):
267 # given argument is not a variable, try as a filename
267 # given argument is not a variable, try as a filename
268 filename = make_filename(args)
268 filename = make_filename(args)
269 if filename is None:
269 if filename is None:
270 warn("Argument given (%s) can't be found as a variable "
270 warn("Argument given (%s) can't be found as a variable "
271 "or as a filename." % args)
271 "or as a filename." % args)
272 return
272 return
273 use_temp = False
273 use_temp = False
274
274
275 except DataIsObject:
275 except DataIsObject:
276 # macros have a special edit function
276 # macros have a special edit function
277 if isinstance(data, Macro):
277 if isinstance(data, Macro):
278 raise MacroToEdit(data)
278 raise MacroToEdit(data)
279
279
280 # For objects, try to edit the file where they are defined
280 # For objects, try to edit the file where they are defined
281 filename = find_file(data)
281 filename = find_file(data)
282 if filename:
282 if filename:
283 if 'fakemodule' in filename.lower() and \
283 if 'fakemodule' in filename.lower() and \
284 inspect.isclass(data):
284 inspect.isclass(data):
285 # class created by %edit? Try to find source
285 # class created by %edit? Try to find source
286 # by looking for method definitions instead, the
286 # by looking for method definitions instead, the
287 # __module__ in those classes is FakeModule.
287 # __module__ in those classes is FakeModule.
288 attrs = [getattr(data, aname) for aname in dir(data)]
288 attrs = [getattr(data, aname) for aname in dir(data)]
289 for attr in attrs:
289 for attr in attrs:
290 if not inspect.ismethod(attr):
290 if not inspect.ismethod(attr):
291 continue
291 continue
292 filename = find_file(attr)
292 filename = find_file(attr)
293 if filename and \
293 if filename and \
294 'fakemodule' not in filename.lower():
294 'fakemodule' not in filename.lower():
295 # change the attribute to be the edit
295 # change the attribute to be the edit
296 # target instead
296 # target instead
297 data = attr
297 data = attr
298 break
298 break
299
299
300 datafile = 1
300 datafile = 1
301 if filename is None:
301 if filename is None:
302 filename = make_filename(args)
302 filename = make_filename(args)
303 datafile = 1
303 datafile = 1
304 warn('Could not find file where `%s` is defined.\n'
304 warn('Could not find file where `%s` is defined.\n'
305 'Opening a file named `%s`' % (args, filename))
305 'Opening a file named `%s`' % (args, filename))
306 # Now, make sure we can actually read the source (if it was
306 # Now, make sure we can actually read the source (if it was
307 # in a temp file it's gone by now).
307 # in a temp file it's gone by now).
308 if datafile:
308 if datafile:
309 if lineno is None:
309 if lineno is None:
310 lineno = find_source_lines(data)
310 lineno = find_source_lines(data)
311 if lineno is None:
311 if lineno is None:
312 filename = make_filename(args)
312 filename = make_filename(args)
313 if filename is None:
313 if filename is None:
314 warn('The file `%s` where `%s` was defined '
314 warn('The file `%s` where `%s` was defined '
315 'cannot be read.' % (filename, data))
315 'cannot be read.' % (filename, data))
316 return
316 return
317 use_temp = False
317 use_temp = False
318
318
319 if use_temp:
319 if use_temp:
320 filename = shell.mktempfile(data)
320 filename = shell.mktempfile(data)
321 print 'IPython will make a temporary file named:',filename
321 print 'IPython will make a temporary file named:',filename
322
322
323 return filename, lineno, use_temp
323 return filename, lineno, use_temp
324
324
325 def _edit_macro(self,mname,macro):
325 def _edit_macro(self,mname,macro):
326 """open an editor with the macro data in a file"""
326 """open an editor with the macro data in a file"""
327 filename = self.shell.mktempfile(macro.value)
327 filename = self.shell.mktempfile(macro.value)
328 self.shell.hooks.editor(filename)
328 self.shell.hooks.editor(filename)
329
329
330 # and make a new macro object, to replace the old one
330 # and make a new macro object, to replace the old one
331 mfile = open(filename)
331 mfile = open(filename)
332 mvalue = mfile.read()
332 mvalue = mfile.read()
333 mfile.close()
333 mfile.close()
334 self.shell.user_ns[mname] = Macro(mvalue)
334 self.shell.user_ns[mname] = Macro(mvalue)
335
335
336 @line_magic
337 def ed(self, parameter_s=''):
338 """Alias to %edit."""
339 return self.edit(parameter_s)
340
341 @skip_doctest
336 @skip_doctest
342 @line_magic
337 @line_magic
343 def edit(self, parameter_s='',last_call=['','']):
338 def edit(self, parameter_s='',last_call=['','']):
344 """Bring up an editor and execute the resulting code.
339 """Bring up an editor and execute the resulting code.
345
340
346 Usage:
341 Usage:
347 %edit [options] [args]
342 %edit [options] [args]
348
343
349 %edit runs IPython's editor hook. The default version of this hook is
344 %edit runs IPython's editor hook. The default version of this hook is
350 set to call the editor specified by your $EDITOR environment variable.
345 set to call the editor specified by your $EDITOR environment variable.
351 If this isn't found, it will default to vi under Linux/Unix and to
346 If this isn't found, it will default to vi under Linux/Unix and to
352 notepad under Windows. See the end of this docstring for how to change
347 notepad under Windows. See the end of this docstring for how to change
353 the editor hook.
348 the editor hook.
354
349
355 You can also set the value of this editor via the
350 You can also set the value of this editor via the
356 ``TerminalInteractiveShell.editor`` option in your configuration file.
351 ``TerminalInteractiveShell.editor`` option in your configuration file.
357 This is useful if you wish to use a different editor from your typical
352 This is useful if you wish to use a different editor from your typical
358 default with IPython (and for Windows users who typically don't set
353 default with IPython (and for Windows users who typically don't set
359 environment variables).
354 environment variables).
360
355
361 This command allows you to conveniently edit multi-line code right in
356 This command allows you to conveniently edit multi-line code right in
362 your IPython session.
357 your IPython session.
363
358
364 If called without arguments, %edit opens up an empty editor with a
359 If called without arguments, %edit opens up an empty editor with a
365 temporary file and will execute the contents of this file when you
360 temporary file and will execute the contents of this file when you
366 close it (don't forget to save it!).
361 close it (don't forget to save it!).
367
362
368
363
369 Options:
364 Options:
370
365
371 -n <number>: open the editor at a specified line number. By default,
366 -n <number>: open the editor at a specified line number. By default,
372 the IPython editor hook uses the unix syntax 'editor +N filename', but
367 the IPython editor hook uses the unix syntax 'editor +N filename', but
373 you can configure this by providing your own modified hook if your
368 you can configure this by providing your own modified hook if your
374 favorite editor supports line-number specifications with a different
369 favorite editor supports line-number specifications with a different
375 syntax.
370 syntax.
376
371
377 -p: this will call the editor with the same data as the previous time
372 -p: this will call the editor with the same data as the previous time
378 it was used, regardless of how long ago (in your current session) it
373 it was used, regardless of how long ago (in your current session) it
379 was.
374 was.
380
375
381 -r: use 'raw' input. This option only applies to input taken from the
376 -r: use 'raw' input. This option only applies to input taken from the
382 user's history. By default, the 'processed' history is used, so that
377 user's history. By default, the 'processed' history is used, so that
383 magics are loaded in their transformed version to valid Python. If
378 magics are loaded in their transformed version to valid Python. If
384 this option is given, the raw input as typed as the command line is
379 this option is given, the raw input as typed as the command line is
385 used instead. When you exit the editor, it will be executed by
380 used instead. When you exit the editor, it will be executed by
386 IPython's own processor.
381 IPython's own processor.
387
382
388 -x: do not execute the edited code immediately upon exit. This is
383 -x: do not execute the edited code immediately upon exit. This is
389 mainly useful if you are editing programs which need to be called with
384 mainly useful if you are editing programs which need to be called with
390 command line arguments, which you can then do using %run.
385 command line arguments, which you can then do using %run.
391
386
392
387
393 Arguments:
388 Arguments:
394
389
395 If arguments are given, the following possibilities exist:
390 If arguments are given, the following possibilities exist:
396
391
397 - If the argument is a filename, IPython will load that into the
392 - If the argument is a filename, IPython will load that into the
398 editor. It will execute its contents with execfile() when you exit,
393 editor. It will execute its contents with execfile() when you exit,
399 loading any code in the file into your interactive namespace.
394 loading any code in the file into your interactive namespace.
400
395
401 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
396 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
402 The syntax is the same as in the %history magic.
397 The syntax is the same as in the %history magic.
403
398
404 - If the argument is a string variable, its contents are loaded
399 - If the argument is a string variable, its contents are loaded
405 into the editor. You can thus edit any string which contains
400 into the editor. You can thus edit any string which contains
406 python code (including the result of previous edits).
401 python code (including the result of previous edits).
407
402
408 - If the argument is the name of an object (other than a string),
403 - If the argument is the name of an object (other than a string),
409 IPython will try to locate the file where it was defined and open the
404 IPython will try to locate the file where it was defined and open the
410 editor at the point where it is defined. You can use `%edit function`
405 editor at the point where it is defined. You can use `%edit function`
411 to load an editor exactly at the point where 'function' is defined,
406 to load an editor exactly at the point where 'function' is defined,
412 edit it and have the file be executed automatically.
407 edit it and have the file be executed automatically.
413
408
414 - If the object is a macro (see %macro for details), this opens up your
409 - If the object is a macro (see %macro for details), this opens up your
415 specified editor with a temporary file containing the macro's data.
410 specified editor with a temporary file containing the macro's data.
416 Upon exit, the macro is reloaded with the contents of the file.
411 Upon exit, the macro is reloaded with the contents of the file.
417
412
418 Note: opening at an exact line is only supported under Unix, and some
413 Note: opening at an exact line is only supported under Unix, and some
419 editors (like kedit and gedit up to Gnome 2.8) do not understand the
414 editors (like kedit and gedit up to Gnome 2.8) do not understand the
420 '+NUMBER' parameter necessary for this feature. Good editors like
415 '+NUMBER' parameter necessary for this feature. Good editors like
421 (X)Emacs, vi, jed, pico and joe all do.
416 (X)Emacs, vi, jed, pico and joe all do.
422
417
423 After executing your code, %edit will return as output the code you
418 After executing your code, %edit will return as output the code you
424 typed in the editor (except when it was an existing file). This way
419 typed in the editor (except when it was an existing file). This way
425 you can reload the code in further invocations of %edit as a variable,
420 you can reload the code in further invocations of %edit as a variable,
426 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
421 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
427 the output.
422 the output.
428
423
429 Note that %edit is also available through the alias %ed.
424 Note that %edit is also available through the alias %ed.
430
425
431 This is an example of creating a simple function inside the editor and
426 This is an example of creating a simple function inside the editor and
432 then modifying it. First, start up the editor::
427 then modifying it. First, start up the editor::
433
428
434 In [1]: ed
429 In [1]: edit
435 Editing... done. Executing edited code...
430 Editing... done. Executing edited code...
436 Out[1]: 'def foo():\\n print "foo() was defined in an editing
431 Out[1]: 'def foo():\\n print "foo() was defined in an editing
437 session"\\n'
432 session"\\n'
438
433
439 We can then call the function foo()::
434 We can then call the function foo()::
440
435
441 In [2]: foo()
436 In [2]: foo()
442 foo() was defined in an editing session
437 foo() was defined in an editing session
443
438
444 Now we edit foo. IPython automatically loads the editor with the
439 Now we edit foo. IPython automatically loads the editor with the
445 (temporary) file where foo() was previously defined::
440 (temporary) file where foo() was previously defined::
446
441
447 In [3]: ed foo
442 In [3]: edit foo
448 Editing... done. Executing edited code...
443 Editing... done. Executing edited code...
449
444
450 And if we call foo() again we get the modified version::
445 And if we call foo() again we get the modified version::
451
446
452 In [4]: foo()
447 In [4]: foo()
453 foo() has now been changed!
448 foo() has now been changed!
454
449
455 Here is an example of how to edit a code snippet successive
450 Here is an example of how to edit a code snippet successive
456 times. First we call the editor::
451 times. First we call the editor::
457
452
458 In [5]: ed
453 In [5]: edit
459 Editing... done. Executing edited code...
454 Editing... done. Executing edited code...
460 hello
455 hello
461 Out[5]: "print 'hello'\\n"
456 Out[5]: "print 'hello'\\n"
462
457
463 Now we call it again with the previous output (stored in _)::
458 Now we call it again with the previous output (stored in _)::
464
459
465 In [6]: ed _
460 In [6]: edit _
466 Editing... done. Executing edited code...
461 Editing... done. Executing edited code...
467 hello world
462 hello world
468 Out[6]: "print 'hello world'\\n"
463 Out[6]: "print 'hello world'\\n"
469
464
470 Now we call it with the output #8 (stored in _8, also as Out[8])::
465 Now we call it with the output #8 (stored in _8, also as Out[8])::
471
466
472 In [7]: ed _8
467 In [7]: edit _8
473 Editing... done. Executing edited code...
468 Editing... done. Executing edited code...
474 hello again
469 hello again
475 Out[7]: "print 'hello again'\\n"
470 Out[7]: "print 'hello again'\\n"
476
471
477
472
478 Changing the default editor hook:
473 Changing the default editor hook:
479
474
480 If you wish to write your own editor hook, you can put it in a
475 If you wish to write your own editor hook, you can put it in a
481 configuration file which you load at startup time. The default hook
476 configuration file which you load at startup time. The default hook
482 is defined in the IPython.core.hooks module, and you can use that as a
477 is defined in the IPython.core.hooks module, and you can use that as a
483 starting example for further modifications. That file also has
478 starting example for further modifications. That file also has
484 general instructions on how to set a new hook for use once you've
479 general instructions on how to set a new hook for use once you've
485 defined it."""
480 defined it."""
486 opts,args = self.parse_options(parameter_s,'prxn:')
481 opts,args = self.parse_options(parameter_s,'prxn:')
487
482
488 try:
483 try:
489 filename, lineno, is_temp = self._find_edit_target(self.shell,
484 filename, lineno, is_temp = self._find_edit_target(self.shell,
490 args, opts, last_call)
485 args, opts, last_call)
491 except MacroToEdit as e:
486 except MacroToEdit as e:
492 self._edit_macro(args, e.args[0])
487 self._edit_macro(args, e.args[0])
493 return
488 return
494
489
495 # do actual editing here
490 # do actual editing here
496 print 'Editing...',
491 print 'Editing...',
497 sys.stdout.flush()
492 sys.stdout.flush()
498 try:
493 try:
499 # Quote filenames that may have spaces in them
494 # Quote filenames that may have spaces in them
500 if ' ' in filename:
495 if ' ' in filename:
501 filename = "'%s'" % filename
496 filename = "'%s'" % filename
502 self.shell.hooks.editor(filename,lineno)
497 self.shell.hooks.editor(filename,lineno)
503 except TryNext:
498 except TryNext:
504 warn('Could not open editor')
499 warn('Could not open editor')
505 return
500 return
506
501
507 # XXX TODO: should this be generalized for all string vars?
502 # XXX TODO: should this be generalized for all string vars?
508 # For now, this is special-cased to blocks created by cpaste
503 # For now, this is special-cased to blocks created by cpaste
509 if args.strip() == 'pasted_block':
504 if args.strip() == 'pasted_block':
510 self.shell.user_ns['pasted_block'] = file_read(filename)
505 self.shell.user_ns['pasted_block'] = file_read(filename)
511
506
512 if 'x' in opts: # -x prevents actual execution
507 if 'x' in opts: # -x prevents actual execution
513 print
508 print
514 else:
509 else:
515 print 'done. Executing edited code...'
510 print 'done. Executing edited code...'
516 if 'r' in opts: # Untranslated IPython code
511 if 'r' in opts: # Untranslated IPython code
517 self.shell.run_cell(file_read(filename),
512 self.shell.run_cell(file_read(filename),
518 store_history=False)
513 store_history=False)
519 else:
514 else:
520 self.shell.safe_execfile(filename, self.shell.user_ns,
515 self.shell.safe_execfile(filename, self.shell.user_ns,
521 self.shell.user_ns)
516 self.shell.user_ns)
522
517
523 if is_temp:
518 if is_temp:
524 try:
519 try:
525 return open(filename).read()
520 return open(filename).read()
526 except IOError as msg:
521 except IOError as msg:
527 if msg.filename == filename:
522 if msg.filename == filename:
528 warn('File not found. Did you forget to save?')
523 warn('File not found. Did you forget to save?')
529 return
524 return
530 else:
525 else:
531 self.shell.showtraceback()
526 self.shell.showtraceback()
@@ -1,301 +1,287 b''
1 """Implementation of magic functions related to History.
1 """Implementation of magic functions related to History.
2 """
2 """
3 #-----------------------------------------------------------------------------
3 #-----------------------------------------------------------------------------
4 # Copyright (c) 2012, IPython Development Team.
4 # Copyright (c) 2012, IPython Development Team.
5 #
5 #
6 # Distributed under the terms of the Modified BSD License.
6 # Distributed under the terms of the Modified BSD License.
7 #
7 #
8 # The full license is in the file COPYING.txt, distributed with this software.
8 # The full license is in the file COPYING.txt, distributed with this software.
9 #-----------------------------------------------------------------------------
9 #-----------------------------------------------------------------------------
10
10
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 # Imports
12 # Imports
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 from __future__ import print_function
14 from __future__ import print_function
15
15
16 # Stdlib
16 # Stdlib
17 import os
17 import os
18 from io import open as io_open
18 from io import open as io_open
19
19
20 # Our own packages
20 # Our own packages
21 from IPython.core.error import StdinNotImplementedError
21 from IPython.core.error import StdinNotImplementedError
22 from IPython.core.magic import Magics, magics_class, line_magic
22 from IPython.core.magic import Magics, magics_class, line_magic
23 from IPython.testing.skipdoctest import skip_doctest
23 from IPython.testing.skipdoctest import skip_doctest
24 from IPython.utils import io
24 from IPython.utils import io
25
25
26 #-----------------------------------------------------------------------------
26 #-----------------------------------------------------------------------------
27 # Magics class implementation
27 # Magics class implementation
28 #-----------------------------------------------------------------------------
28 #-----------------------------------------------------------------------------
29
29
30 @magics_class
30 @magics_class
31 class HistoryMagics(Magics):
31 class HistoryMagics(Magics):
32
32
33 @skip_doctest
33 @skip_doctest
34 @line_magic
34 @line_magic
35 def history(self, parameter_s = ''):
35 def history(self, parameter_s = ''):
36 """Print input history (_i<n> variables), with most recent last.
36 """Print input history (_i<n> variables), with most recent last.
37
37
38 %history [-o -p -t -n] [-f filename] [range | -g pattern | -l number]
38 %history [-o -p -t -n] [-f filename] [range | -g pattern | -l number]
39
39
40 By default, input history is printed without line numbers so it can be
40 By default, input history is printed without line numbers so it can be
41 directly pasted into an editor. Use -n to show them.
41 directly pasted into an editor. Use -n to show them.
42
42
43 By default, all input history from the current session is displayed.
43 By default, all input history from the current session is displayed.
44 Ranges of history can be indicated using the syntax:
44 Ranges of history can be indicated using the syntax:
45 4 : Line 4, current session
45 4 : Line 4, current session
46 4-6 : Lines 4-6, current session
46 4-6 : Lines 4-6, current session
47 243/1-5: Lines 1-5, session 243
47 243/1-5: Lines 1-5, session 243
48 ~2/7 : Line 7, session 2 before current
48 ~2/7 : Line 7, session 2 before current
49 ~8/1-~6/5 : From the first line of 8 sessions ago, to the fifth line
49 ~8/1-~6/5 : From the first line of 8 sessions ago, to the fifth line
50 of 6 sessions ago.
50 of 6 sessions ago.
51 Multiple ranges can be entered, separated by spaces
51 Multiple ranges can be entered, separated by spaces
52
52
53 The same syntax is used by %macro, %save, %edit, %rerun
53 The same syntax is used by %macro, %save, %edit, %rerun
54
54
55 Options:
55 Options:
56
56
57 -n: print line numbers for each input.
57 -n: print line numbers for each input.
58 This feature is only available if numbered prompts are in use.
58 This feature is only available if numbered prompts are in use.
59
59
60 -o: also print outputs for each input.
60 -o: also print outputs for each input.
61
61
62 -p: print classic '>>>' python prompts before each input. This is
62 -p: print classic '>>>' python prompts before each input. This is
63 useful for making documentation, and in conjunction with -o, for
63 useful for making documentation, and in conjunction with -o, for
64 producing doctest-ready output.
64 producing doctest-ready output.
65
65
66 -r: (default) print the 'raw' history, i.e. the actual commands you
66 -r: (default) print the 'raw' history, i.e. the actual commands you
67 typed.
67 typed.
68
68
69 -t: print the 'translated' history, as IPython understands it.
69 -t: print the 'translated' history, as IPython understands it.
70 IPython filters your input and converts it all into valid Python
70 IPython filters your input and converts it all into valid Python
71 source before executing it (things like magics or aliases are turned
71 source before executing it (things like magics or aliases are turned
72 into function calls, for example). With this option, you'll see the
72 into function calls, for example). With this option, you'll see the
73 native history instead of the user-entered version: '%cd /' will be
73 native history instead of the user-entered version: '%cd /' will be
74 seen as 'get_ipython().magic("%cd /")' instead of '%cd /'.
74 seen as 'get_ipython().magic("%cd /")' instead of '%cd /'.
75
75
76 -g: treat the arg as a pattern to grep for in (full) history.
76 -g: treat the arg as a pattern to grep for in (full) history.
77 This includes the saved history (almost all commands ever written).
77 This includes the saved history (almost all commands ever written).
78 Use '%hist -g' to show full saved history (may be very long).
78 Use '%hist -g' to show full saved history (may be very long).
79
79
80 -l: get the last n lines from all sessions. Specify n as a single
80 -l: get the last n lines from all sessions. Specify n as a single
81 arg, or the default is the last 10 lines.
81 arg, or the default is the last 10 lines.
82
82
83 -f FILENAME: instead of printing the output to the screen, redirect
83 -f FILENAME: instead of printing the output to the screen, redirect
84 it to the given file. The file is always overwritten, though *when
84 it to the given file. The file is always overwritten, though *when
85 it can*, IPython asks for confirmation first. In particular, running
85 it can*, IPython asks for confirmation first. In particular, running
86 the command 'history -f FILENAME' from the IPython Notebook
86 the command 'history -f FILENAME' from the IPython Notebook
87 interface will replace FILENAME even if it already exists *without*
87 interface will replace FILENAME even if it already exists *without*
88 confirmation.
88 confirmation.
89
89
90 Examples
90 Examples
91 --------
91 --------
92 ::
92 ::
93
93
94 In [6]: %hist -n 4-6
94 In [6]: %history -n 4-6
95 4:a = 12
95 4:a = 12
96 5:print a**2
96 5:print a**2
97 6:%hist -n 4-6
97 6:%history -n 4-6
98
98
99 """
99 """
100
100
101 if not self.shell.displayhook.do_full_cache:
101 if not self.shell.displayhook.do_full_cache:
102 print('This feature is only available if numbered prompts '
102 print('This feature is only available if numbered prompts '
103 'are in use.')
103 'are in use.')
104 return
104 return
105 opts,args = self.parse_options(parameter_s,'noprtglf:',mode='string')
105 opts,args = self.parse_options(parameter_s,'noprtglf:',mode='string')
106
106
107 # For brevity
107 # For brevity
108 history_manager = self.shell.history_manager
108 history_manager = self.shell.history_manager
109
109
110 def _format_lineno(session, line):
110 def _format_lineno(session, line):
111 """Helper function to format line numbers properly."""
111 """Helper function to format line numbers properly."""
112 if session in (0, history_manager.session_number):
112 if session in (0, history_manager.session_number):
113 return str(line)
113 return str(line)
114 return "%s/%s" % (session, line)
114 return "%s/%s" % (session, line)
115
115
116 # Check if output to specific file was requested.
116 # Check if output to specific file was requested.
117 try:
117 try:
118 outfname = opts['f']
118 outfname = opts['f']
119 except KeyError:
119 except KeyError:
120 outfile = io.stdout # default
120 outfile = io.stdout # default
121 # We don't want to close stdout at the end!
121 # We don't want to close stdout at the end!
122 close_at_end = False
122 close_at_end = False
123 else:
123 else:
124 if os.path.exists(outfname):
124 if os.path.exists(outfname):
125 try:
125 try:
126 ans = io.ask_yes_no("File %r exists. Overwrite?" % outfname)
126 ans = io.ask_yes_no("File %r exists. Overwrite?" % outfname)
127 except StdinNotImplementedError:
127 except StdinNotImplementedError:
128 ans = True
128 ans = True
129 if not ans:
129 if not ans:
130 print('Aborting.')
130 print('Aborting.')
131 return
131 return
132 print("Overwriting file.")
132 print("Overwriting file.")
133 outfile = io_open(outfname, 'w', encoding='utf-8')
133 outfile = io_open(outfname, 'w', encoding='utf-8')
134 close_at_end = True
134 close_at_end = True
135
135
136 print_nums = 'n' in opts
136 print_nums = 'n' in opts
137 get_output = 'o' in opts
137 get_output = 'o' in opts
138 pyprompts = 'p' in opts
138 pyprompts = 'p' in opts
139 # Raw history is the default
139 # Raw history is the default
140 raw = not('t' in opts)
140 raw = not('t' in opts)
141
141
142 pattern = None
142 pattern = None
143
143
144 if 'g' in opts: # Glob search
144 if 'g' in opts: # Glob search
145 pattern = "*" + args + "*" if args else "*"
145 pattern = "*" + args + "*" if args else "*"
146 hist = history_manager.search(pattern, raw=raw, output=get_output)
146 hist = history_manager.search(pattern, raw=raw, output=get_output)
147 print_nums = True
147 print_nums = True
148 elif 'l' in opts: # Get 'tail'
148 elif 'l' in opts: # Get 'tail'
149 try:
149 try:
150 n = int(args)
150 n = int(args)
151 except (ValueError, IndexError):
151 except (ValueError, IndexError):
152 n = 10
152 n = 10
153 hist = history_manager.get_tail(n, raw=raw, output=get_output)
153 hist = history_manager.get_tail(n, raw=raw, output=get_output)
154 else:
154 else:
155 if args: # Get history by ranges
155 if args: # Get history by ranges
156 hist = history_manager.get_range_by_str(args, raw, get_output)
156 hist = history_manager.get_range_by_str(args, raw, get_output)
157 else: # Just get history for the current session
157 else: # Just get history for the current session
158 hist = history_manager.get_range(raw=raw, output=get_output)
158 hist = history_manager.get_range(raw=raw, output=get_output)
159
159
160 # We could be displaying the entire history, so let's not try to pull
160 # We could be displaying the entire history, so let's not try to pull
161 # it into a list in memory. Anything that needs more space will just
161 # it into a list in memory. Anything that needs more space will just
162 # misalign.
162 # misalign.
163 width = 4
163 width = 4
164
164
165 for session, lineno, inline in hist:
165 for session, lineno, inline in hist:
166 # Print user history with tabs expanded to 4 spaces. The GUI
166 # Print user history with tabs expanded to 4 spaces. The GUI
167 # clients use hard tabs for easier usability in auto-indented code,
167 # clients use hard tabs for easier usability in auto-indented code,
168 # but we want to produce PEP-8 compliant history for safe pasting
168 # but we want to produce PEP-8 compliant history for safe pasting
169 # into an editor.
169 # into an editor.
170 if get_output:
170 if get_output:
171 inline, output = inline
171 inline, output = inline
172 inline = inline.expandtabs(4).rstrip()
172 inline = inline.expandtabs(4).rstrip()
173
173
174 multiline = "\n" in inline
174 multiline = "\n" in inline
175 line_sep = '\n' if multiline else ' '
175 line_sep = '\n' if multiline else ' '
176 if print_nums:
176 if print_nums:
177 print(u'%s:%s' % (_format_lineno(session, lineno).rjust(width),
177 print(u'%s:%s' % (_format_lineno(session, lineno).rjust(width),
178 line_sep), file=outfile, end=u'')
178 line_sep), file=outfile, end=u'')
179 if pyprompts:
179 if pyprompts:
180 print(u">>> ", end=u"", file=outfile)
180 print(u">>> ", end=u"", file=outfile)
181 if multiline:
181 if multiline:
182 inline = "\n... ".join(inline.splitlines()) + "\n..."
182 inline = "\n... ".join(inline.splitlines()) + "\n..."
183 print(inline, file=outfile)
183 print(inline, file=outfile)
184 if get_output and output:
184 if get_output and output:
185 print(output, file=outfile)
185 print(output, file=outfile)
186
186
187 if close_at_end:
187 if close_at_end:
188 outfile.close()
188 outfile.close()
189
189
190 # For a long time we've had %hist as well as %history
191 @line_magic
190 @line_magic
192 def hist(self, arg):
191 def recall(self, arg):
193 return self.history(arg)
194
195 hist.__doc__ = history.__doc__
196
197 @line_magic
198 def rep(self, arg):
199 r"""Repeat a command, or get command to input line for editing.
192 r"""Repeat a command, or get command to input line for editing.
200
193
201 %recall and %rep are equivalent.
194 %recall and %rep are equivalent.
202
195
203 - %recall (no arguments):
196 - %recall (no arguments):
204
197
205 Place a string version of last computation result (stored in the
198 Place a string version of last computation result (stored in the
206 special '_' variable) to the next input prompt. Allows you to create
199 special '_' variable) to the next input prompt. Allows you to create
207 elaborate command lines without using copy-paste::
200 elaborate command lines without using copy-paste::
208
201
209 In[1]: l = ["hei", "vaan"]
202 In[1]: l = ["hei", "vaan"]
210 In[2]: "".join(l)
203 In[2]: "".join(l)
211 Out[2]: heivaan
204 Out[2]: heivaan
212 In[3]: %rep
205 In[3]: %recall
213 In[4]: heivaan_ <== cursor blinking
206 In[4]: heivaan_ <== cursor blinking
214
207
215 %recall 45
208 %recall 45
216
209
217 Place history line 45 on the next input prompt. Use %hist to find
210 Place history line 45 on the next input prompt. Use %hist to find
218 out the number.
211 out the number.
219
212
220 %recall 1-4
213 %recall 1-4
221
214
222 Combine the specified lines into one cell, and place it on the next
215 Combine the specified lines into one cell, and place it on the next
223 input prompt. See %history for the slice syntax.
216 input prompt. See %history for the slice syntax.
224
217
225 %recall foo+bar
218 %recall foo+bar
226
219
227 If foo+bar can be evaluated in the user namespace, the result is
220 If foo+bar can be evaluated in the user namespace, the result is
228 placed at the next input prompt. Otherwise, the history is searched
221 placed at the next input prompt. Otherwise, the history is searched
229 for lines which contain that substring, and the most recent one is
222 for lines which contain that substring, and the most recent one is
230 placed at the next input prompt.
223 placed at the next input prompt.
231 """
224 """
232 if not arg: # Last output
225 if not arg: # Last output
233 self.shell.set_next_input(str(self.shell.user_ns["_"]))
226 self.shell.set_next_input(str(self.shell.user_ns["_"]))
234 return
227 return
235 # Get history range
228 # Get history range
236 histlines = self.shell.history_manager.get_range_by_str(arg)
229 histlines = self.shell.history_manager.get_range_by_str(arg)
237 cmd = "\n".join(x[2] for x in histlines)
230 cmd = "\n".join(x[2] for x in histlines)
238 if cmd:
231 if cmd:
239 self.shell.set_next_input(cmd.rstrip())
232 self.shell.set_next_input(cmd.rstrip())
240 return
233 return
241
234
242 try: # Variable in user namespace
235 try: # Variable in user namespace
243 cmd = str(eval(arg, self.shell.user_ns))
236 cmd = str(eval(arg, self.shell.user_ns))
244 except Exception: # Search for term in history
237 except Exception: # Search for term in history
245 histlines = self.shell.history_manager.search("*"+arg+"*")
238 histlines = self.shell.history_manager.search("*"+arg+"*")
246 for h in reversed([x[2] for x in histlines]):
239 for h in reversed([x[2] for x in histlines]):
247 if 'rep' in h:
240 if 'recall' in h or 'rep' in h:
248 continue
241 continue
249 self.shell.set_next_input(h.rstrip())
242 self.shell.set_next_input(h.rstrip())
250 return
243 return
251 else:
244 else:
252 self.shell.set_next_input(cmd.rstrip())
245 self.shell.set_next_input(cmd.rstrip())
253 print("Couldn't evaluate or find in history:", arg)
246 print("Couldn't evaluate or find in history:", arg)
254
247
255 @line_magic
248 @line_magic
256 def rerun(self, parameter_s=''):
249 def rerun(self, parameter_s=''):
257 """Re-run previous input
250 """Re-run previous input
258
251
259 By default, you can specify ranges of input history to be repeated
252 By default, you can specify ranges of input history to be repeated
260 (as with %history). With no arguments, it will repeat the last line.
253 (as with %history). With no arguments, it will repeat the last line.
261
254
262 Options:
255 Options:
263
256
264 -l <n> : Repeat the last n lines of input, not including the
257 -l <n> : Repeat the last n lines of input, not including the
265 current command.
258 current command.
266
259
267 -g foo : Repeat the most recent line which contains foo
260 -g foo : Repeat the most recent line which contains foo
268 """
261 """
269 opts, args = self.parse_options(parameter_s, 'l:g:', mode='string')
262 opts, args = self.parse_options(parameter_s, 'l:g:', mode='string')
270 if "l" in opts: # Last n lines
263 if "l" in opts: # Last n lines
271 n = int(opts['l'])
264 n = int(opts['l'])
272 hist = self.shell.history_manager.get_tail(n)
265 hist = self.shell.history_manager.get_tail(n)
273 elif "g" in opts: # Search
266 elif "g" in opts: # Search
274 p = "*"+opts['g']+"*"
267 p = "*"+opts['g']+"*"
275 hist = list(self.shell.history_manager.search(p))
268 hist = list(self.shell.history_manager.search(p))
276 for l in reversed(hist):
269 for l in reversed(hist):
277 if "rerun" not in l[2]:
270 if "rerun" not in l[2]:
278 hist = [l] # The last match which isn't a %rerun
271 hist = [l] # The last match which isn't a %rerun
279 break
272 break
280 else:
273 else:
281 hist = [] # No matches except %rerun
274 hist = [] # No matches except %rerun
282 elif args: # Specify history ranges
275 elif args: # Specify history ranges
283 hist = self.shell.history_manager.get_range_by_str(args)
276 hist = self.shell.history_manager.get_range_by_str(args)
284 else: # Last line
277 else: # Last line
285 hist = self.shell.history_manager.get_tail(1)
278 hist = self.shell.history_manager.get_tail(1)
286 hist = [x[2] for x in hist]
279 hist = [x[2] for x in hist]
287 if not hist:
280 if not hist:
288 print("No lines in history match specification")
281 print("No lines in history match specification")
289 return
282 return
290 histlines = "\n".join(hist)
283 histlines = "\n".join(hist)
291 print("=== Executing: ===")
284 print("=== Executing: ===")
292 print(histlines)
285 print(histlines)
293 print("=== Output: ===")
286 print("=== Output: ===")
294 self.shell.run_cell("\n".join(hist), store_history=False)
287 self.shell.run_cell("\n".join(hist), store_history=False)
295
296 @line_magic
297 def recall(self,arg):
298 self.rep(arg)
299
300 recall.__doc__ = rep.__doc__
301
@@ -1,582 +1,582 b''
1 """A ZMQ-based subclass of InteractiveShell.
1 """A ZMQ-based subclass of InteractiveShell.
2
2
3 This code is meant to ease the refactoring of the base InteractiveShell into
3 This code is meant to ease the refactoring of the base InteractiveShell into
4 something with a cleaner architecture for 2-process use, without actually
4 something with a cleaner architecture for 2-process use, without actually
5 breaking InteractiveShell itself. So we're doing something a bit ugly, where
5 breaking InteractiveShell itself. So we're doing something a bit ugly, where
6 we subclass and override what we want to fix. Once this is working well, we
6 we subclass and override what we want to fix. Once this is working well, we
7 can go back to the base class and refactor the code for a cleaner inheritance
7 can go back to the base class and refactor the code for a cleaner inheritance
8 implementation that doesn't rely on so much monkeypatching.
8 implementation that doesn't rely on so much monkeypatching.
9
9
10 But this lets us maintain a fully working IPython as we develop the new
10 But this lets us maintain a fully working IPython as we develop the new
11 machinery. This should thus be thought of as scaffolding.
11 machinery. This should thus be thought of as scaffolding.
12 """
12 """
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Imports
14 # Imports
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16 from __future__ import print_function
16 from __future__ import print_function
17
17
18 # Stdlib
18 # Stdlib
19 import os
19 import os
20 import sys
20 import sys
21 import time
21 import time
22
22
23 # System library imports
23 # System library imports
24 from zmq.eventloop import ioloop
24 from zmq.eventloop import ioloop
25
25
26 # Our own
26 # Our own
27 from IPython.core.interactiveshell import (
27 from IPython.core.interactiveshell import (
28 InteractiveShell, InteractiveShellABC
28 InteractiveShell, InteractiveShellABC
29 )
29 )
30 from IPython.core import page
30 from IPython.core import page
31 from IPython.core.autocall import ZMQExitAutocall
31 from IPython.core.autocall import ZMQExitAutocall
32 from IPython.core.displaypub import DisplayPublisher
32 from IPython.core.displaypub import DisplayPublisher
33 from IPython.core.magics import MacroToEdit, CodeMagics
33 from IPython.core.magics import MacroToEdit, CodeMagics
34 from IPython.core.magic import magics_class, line_magic, Magics
34 from IPython.core.magic import magics_class, line_magic, Magics
35 from IPython.core.payloadpage import install_payload_page
35 from IPython.core.payloadpage import install_payload_page
36 from IPython.lib.kernel import (
36 from IPython.lib.kernel import (
37 get_connection_file, get_connection_info, connect_qtconsole
37 get_connection_file, get_connection_info, connect_qtconsole
38 )
38 )
39 from IPython.testing.skipdoctest import skip_doctest
39 from IPython.testing.skipdoctest import skip_doctest
40 from IPython.utils import io
40 from IPython.utils import io
41 from IPython.utils.jsonutil import json_clean, encode_images
41 from IPython.utils.jsonutil import json_clean, encode_images
42 from IPython.utils.process import arg_split
42 from IPython.utils.process import arg_split
43 from IPython.utils import py3compat
43 from IPython.utils import py3compat
44 from IPython.utils.traitlets import Instance, Type, Dict, CBool, CBytes
44 from IPython.utils.traitlets import Instance, Type, Dict, CBool, CBytes
45 from IPython.utils.warn import warn, error
45 from IPython.utils.warn import warn, error
46 from IPython.zmq.displayhook import ZMQShellDisplayHook
46 from IPython.zmq.displayhook import ZMQShellDisplayHook
47 from IPython.zmq.session import extract_header
47 from IPython.zmq.session import extract_header
48 from session import Session
48 from session import Session
49
49
50 #-----------------------------------------------------------------------------
50 #-----------------------------------------------------------------------------
51 # Functions and classes
51 # Functions and classes
52 #-----------------------------------------------------------------------------
52 #-----------------------------------------------------------------------------
53
53
54 class ZMQDisplayPublisher(DisplayPublisher):
54 class ZMQDisplayPublisher(DisplayPublisher):
55 """A display publisher that publishes data using a ZeroMQ PUB socket."""
55 """A display publisher that publishes data using a ZeroMQ PUB socket."""
56
56
57 session = Instance(Session)
57 session = Instance(Session)
58 pub_socket = Instance('zmq.Socket')
58 pub_socket = Instance('zmq.Socket')
59 parent_header = Dict({})
59 parent_header = Dict({})
60 topic = CBytes(b'displaypub')
60 topic = CBytes(b'displaypub')
61
61
62 def set_parent(self, parent):
62 def set_parent(self, parent):
63 """Set the parent for outbound messages."""
63 """Set the parent for outbound messages."""
64 self.parent_header = extract_header(parent)
64 self.parent_header = extract_header(parent)
65
65
66 def _flush_streams(self):
66 def _flush_streams(self):
67 """flush IO Streams prior to display"""
67 """flush IO Streams prior to display"""
68 sys.stdout.flush()
68 sys.stdout.flush()
69 sys.stderr.flush()
69 sys.stderr.flush()
70
70
71 def publish(self, source, data, metadata=None):
71 def publish(self, source, data, metadata=None):
72 self._flush_streams()
72 self._flush_streams()
73 if metadata is None:
73 if metadata is None:
74 metadata = {}
74 metadata = {}
75 self._validate_data(source, data, metadata)
75 self._validate_data(source, data, metadata)
76 content = {}
76 content = {}
77 content['source'] = source
77 content['source'] = source
78 content['data'] = encode_images(data)
78 content['data'] = encode_images(data)
79 content['metadata'] = metadata
79 content['metadata'] = metadata
80 self.session.send(
80 self.session.send(
81 self.pub_socket, u'display_data', json_clean(content),
81 self.pub_socket, u'display_data', json_clean(content),
82 parent=self.parent_header, ident=self.topic,
82 parent=self.parent_header, ident=self.topic,
83 )
83 )
84
84
85 def clear_output(self, stdout=True, stderr=True, other=True):
85 def clear_output(self, stdout=True, stderr=True, other=True):
86 content = dict(stdout=stdout, stderr=stderr, other=other)
86 content = dict(stdout=stdout, stderr=stderr, other=other)
87
87
88 if stdout:
88 if stdout:
89 print('\r', file=sys.stdout, end='')
89 print('\r', file=sys.stdout, end='')
90 if stderr:
90 if stderr:
91 print('\r', file=sys.stderr, end='')
91 print('\r', file=sys.stderr, end='')
92
92
93 self._flush_streams()
93 self._flush_streams()
94
94
95 self.session.send(
95 self.session.send(
96 self.pub_socket, u'clear_output', content,
96 self.pub_socket, u'clear_output', content,
97 parent=self.parent_header, ident=self.topic,
97 parent=self.parent_header, ident=self.topic,
98 )
98 )
99
99
100 @magics_class
100 @magics_class
101 class KernelMagics(Magics):
101 class KernelMagics(Magics):
102 #------------------------------------------------------------------------
102 #------------------------------------------------------------------------
103 # Magic overrides
103 # Magic overrides
104 #------------------------------------------------------------------------
104 #------------------------------------------------------------------------
105 # Once the base class stops inheriting from magic, this code needs to be
105 # Once the base class stops inheriting from magic, this code needs to be
106 # moved into a separate machinery as well. For now, at least isolate here
106 # moved into a separate machinery as well. For now, at least isolate here
107 # the magics which this class needs to implement differently from the base
107 # the magics which this class needs to implement differently from the base
108 # class, or that are unique to it.
108 # class, or that are unique to it.
109
109
110 @line_magic
110 @line_magic
111 def doctest_mode(self, parameter_s=''):
111 def doctest_mode(self, parameter_s=''):
112 """Toggle doctest mode on and off.
112 """Toggle doctest mode on and off.
113
113
114 This mode is intended to make IPython behave as much as possible like a
114 This mode is intended to make IPython behave as much as possible like a
115 plain Python shell, from the perspective of how its prompts, exceptions
115 plain Python shell, from the perspective of how its prompts, exceptions
116 and output look. This makes it easy to copy and paste parts of a
116 and output look. This makes it easy to copy and paste parts of a
117 session into doctests. It does so by:
117 session into doctests. It does so by:
118
118
119 - Changing the prompts to the classic ``>>>`` ones.
119 - Changing the prompts to the classic ``>>>`` ones.
120 - Changing the exception reporting mode to 'Plain'.
120 - Changing the exception reporting mode to 'Plain'.
121 - Disabling pretty-printing of output.
121 - Disabling pretty-printing of output.
122
122
123 Note that IPython also supports the pasting of code snippets that have
123 Note that IPython also supports the pasting of code snippets that have
124 leading '>>>' and '...' prompts in them. This means that you can paste
124 leading '>>>' and '...' prompts in them. This means that you can paste
125 doctests from files or docstrings (even if they have leading
125 doctests from files or docstrings (even if they have leading
126 whitespace), and the code will execute correctly. You can then use
126 whitespace), and the code will execute correctly. You can then use
127 '%history -t' to see the translated history; this will give you the
127 '%history -t' to see the translated history; this will give you the
128 input after removal of all the leading prompts and whitespace, which
128 input after removal of all the leading prompts and whitespace, which
129 can be pasted back into an editor.
129 can be pasted back into an editor.
130
130
131 With these features, you can switch into this mode easily whenever you
131 With these features, you can switch into this mode easily whenever you
132 need to do testing and changes to doctests, without having to leave
132 need to do testing and changes to doctests, without having to leave
133 your existing IPython session.
133 your existing IPython session.
134 """
134 """
135
135
136 from IPython.utils.ipstruct import Struct
136 from IPython.utils.ipstruct import Struct
137
137
138 # Shorthands
138 # Shorthands
139 shell = self.shell
139 shell = self.shell
140 disp_formatter = self.shell.display_formatter
140 disp_formatter = self.shell.display_formatter
141 ptformatter = disp_formatter.formatters['text/plain']
141 ptformatter = disp_formatter.formatters['text/plain']
142 # dstore is a data store kept in the instance metadata bag to track any
142 # dstore is a data store kept in the instance metadata bag to track any
143 # changes we make, so we can undo them later.
143 # changes we make, so we can undo them later.
144 dstore = shell.meta.setdefault('doctest_mode', Struct())
144 dstore = shell.meta.setdefault('doctest_mode', Struct())
145 save_dstore = dstore.setdefault
145 save_dstore = dstore.setdefault
146
146
147 # save a few values we'll need to recover later
147 # save a few values we'll need to recover later
148 mode = save_dstore('mode', False)
148 mode = save_dstore('mode', False)
149 save_dstore('rc_pprint', ptformatter.pprint)
149 save_dstore('rc_pprint', ptformatter.pprint)
150 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
150 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
151 save_dstore('xmode', shell.InteractiveTB.mode)
151 save_dstore('xmode', shell.InteractiveTB.mode)
152
152
153 if mode == False:
153 if mode == False:
154 # turn on
154 # turn on
155 ptformatter.pprint = False
155 ptformatter.pprint = False
156 disp_formatter.plain_text_only = True
156 disp_formatter.plain_text_only = True
157 shell.magic('xmode Plain')
157 shell.magic('xmode Plain')
158 else:
158 else:
159 # turn off
159 # turn off
160 ptformatter.pprint = dstore.rc_pprint
160 ptformatter.pprint = dstore.rc_pprint
161 disp_formatter.plain_text_only = dstore.rc_plain_text_only
161 disp_formatter.plain_text_only = dstore.rc_plain_text_only
162 shell.magic("xmode " + dstore.xmode)
162 shell.magic("xmode " + dstore.xmode)
163
163
164 # Store new mode and inform on console
164 # Store new mode and inform on console
165 dstore.mode = bool(1-int(mode))
165 dstore.mode = bool(1-int(mode))
166 mode_label = ['OFF','ON'][dstore.mode]
166 mode_label = ['OFF','ON'][dstore.mode]
167 print('Doctest mode is:', mode_label)
167 print('Doctest mode is:', mode_label)
168
168
169 # Send the payload back so that clients can modify their prompt display
169 # Send the payload back so that clients can modify their prompt display
170 payload = dict(
170 payload = dict(
171 source='IPython.zmq.zmqshell.ZMQInteractiveShell.doctest_mode',
171 source='IPython.zmq.zmqshell.ZMQInteractiveShell.doctest_mode',
172 mode=dstore.mode)
172 mode=dstore.mode)
173 shell.payload_manager.write_payload(payload)
173 shell.payload_manager.write_payload(payload)
174
174
175
175
176 _find_edit_target = CodeMagics._find_edit_target
176 _find_edit_target = CodeMagics._find_edit_target
177
177
178 @skip_doctest
178 @skip_doctest
179 @line_magic
179 @line_magic
180 def edit(self, parameter_s='', last_call=['','']):
180 def edit(self, parameter_s='', last_call=['','']):
181 """Bring up an editor and execute the resulting code.
181 """Bring up an editor and execute the resulting code.
182
182
183 Usage:
183 Usage:
184 %edit [options] [args]
184 %edit [options] [args]
185
185
186 %edit runs an external text editor. You will need to set the command for
186 %edit runs an external text editor. You will need to set the command for
187 this editor via the ``TerminalInteractiveShell.editor`` option in your
187 this editor via the ``TerminalInteractiveShell.editor`` option in your
188 configuration file before it will work.
188 configuration file before it will work.
189
189
190 This command allows you to conveniently edit multi-line code right in
190 This command allows you to conveniently edit multi-line code right in
191 your IPython session.
191 your IPython session.
192
192
193 If called without arguments, %edit opens up an empty editor with a
193 If called without arguments, %edit opens up an empty editor with a
194 temporary file and will execute the contents of this file when you
194 temporary file and will execute the contents of this file when you
195 close it (don't forget to save it!).
195 close it (don't forget to save it!).
196
196
197
197
198 Options:
198 Options:
199
199
200 -n <number>: open the editor at a specified line number. By default,
200 -n <number>: open the editor at a specified line number. By default,
201 the IPython editor hook uses the unix syntax 'editor +N filename', but
201 the IPython editor hook uses the unix syntax 'editor +N filename', but
202 you can configure this by providing your own modified hook if your
202 you can configure this by providing your own modified hook if your
203 favorite editor supports line-number specifications with a different
203 favorite editor supports line-number specifications with a different
204 syntax.
204 syntax.
205
205
206 -p: this will call the editor with the same data as the previous time
206 -p: this will call the editor with the same data as the previous time
207 it was used, regardless of how long ago (in your current session) it
207 it was used, regardless of how long ago (in your current session) it
208 was.
208 was.
209
209
210 -r: use 'raw' input. This option only applies to input taken from the
210 -r: use 'raw' input. This option only applies to input taken from the
211 user's history. By default, the 'processed' history is used, so that
211 user's history. By default, the 'processed' history is used, so that
212 magics are loaded in their transformed version to valid Python. If
212 magics are loaded in their transformed version to valid Python. If
213 this option is given, the raw input as typed as the command line is
213 this option is given, the raw input as typed as the command line is
214 used instead. When you exit the editor, it will be executed by
214 used instead. When you exit the editor, it will be executed by
215 IPython's own processor.
215 IPython's own processor.
216
216
217 -x: do not execute the edited code immediately upon exit. This is
217 -x: do not execute the edited code immediately upon exit. This is
218 mainly useful if you are editing programs which need to be called with
218 mainly useful if you are editing programs which need to be called with
219 command line arguments, which you can then do using %run.
219 command line arguments, which you can then do using %run.
220
220
221
221
222 Arguments:
222 Arguments:
223
223
224 If arguments are given, the following possibilites exist:
224 If arguments are given, the following possibilites exist:
225
225
226 - The arguments are numbers or pairs of colon-separated numbers (like
226 - The arguments are numbers or pairs of colon-separated numbers (like
227 1 4:8 9). These are interpreted as lines of previous input to be
227 1 4:8 9). These are interpreted as lines of previous input to be
228 loaded into the editor. The syntax is the same of the %macro command.
228 loaded into the editor. The syntax is the same of the %macro command.
229
229
230 - If the argument doesn't start with a number, it is evaluated as a
230 - If the argument doesn't start with a number, it is evaluated as a
231 variable and its contents loaded into the editor. You can thus edit
231 variable and its contents loaded into the editor. You can thus edit
232 any string which contains python code (including the result of
232 any string which contains python code (including the result of
233 previous edits).
233 previous edits).
234
234
235 - If the argument is the name of an object (other than a string),
235 - If the argument is the name of an object (other than a string),
236 IPython will try to locate the file where it was defined and open the
236 IPython will try to locate the file where it was defined and open the
237 editor at the point where it is defined. You can use `%edit function`
237 editor at the point where it is defined. You can use `%edit function`
238 to load an editor exactly at the point where 'function' is defined,
238 to load an editor exactly at the point where 'function' is defined,
239 edit it and have the file be executed automatically.
239 edit it and have the file be executed automatically.
240
240
241 If the object is a macro (see %macro for details), this opens up your
241 If the object is a macro (see %macro for details), this opens up your
242 specified editor with a temporary file containing the macro's data.
242 specified editor with a temporary file containing the macro's data.
243 Upon exit, the macro is reloaded with the contents of the file.
243 Upon exit, the macro is reloaded with the contents of the file.
244
244
245 Note: opening at an exact line is only supported under Unix, and some
245 Note: opening at an exact line is only supported under Unix, and some
246 editors (like kedit and gedit up to Gnome 2.8) do not understand the
246 editors (like kedit and gedit up to Gnome 2.8) do not understand the
247 '+NUMBER' parameter necessary for this feature. Good editors like
247 '+NUMBER' parameter necessary for this feature. Good editors like
248 (X)Emacs, vi, jed, pico and joe all do.
248 (X)Emacs, vi, jed, pico and joe all do.
249
249
250 - If the argument is not found as a variable, IPython will look for a
250 - If the argument is not found as a variable, IPython will look for a
251 file with that name (adding .py if necessary) and load it into the
251 file with that name (adding .py if necessary) and load it into the
252 editor. It will execute its contents with execfile() when you exit,
252 editor. It will execute its contents with execfile() when you exit,
253 loading any code in the file into your interactive namespace.
253 loading any code in the file into your interactive namespace.
254
254
255 After executing your code, %edit will return as output the code you
255 After executing your code, %edit will return as output the code you
256 typed in the editor (except when it was an existing file). This way
256 typed in the editor (except when it was an existing file). This way
257 you can reload the code in further invocations of %edit as a variable,
257 you can reload the code in further invocations of %edit as a variable,
258 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
258 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
259 the output.
259 the output.
260
260
261 Note that %edit is also available through the alias %ed.
261 Note that %edit is also available through the alias %ed.
262
262
263 This is an example of creating a simple function inside the editor and
263 This is an example of creating a simple function inside the editor and
264 then modifying it. First, start up the editor:
264 then modifying it. First, start up the editor:
265
265
266 In [1]: ed
266 In [1]: ed
267 Editing... done. Executing edited code...
267 Editing... done. Executing edited code...
268 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
268 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
269
269
270 We can then call the function foo():
270 We can then call the function foo():
271
271
272 In [2]: foo()
272 In [2]: foo()
273 foo() was defined in an editing session
273 foo() was defined in an editing session
274
274
275 Now we edit foo. IPython automatically loads the editor with the
275 Now we edit foo. IPython automatically loads the editor with the
276 (temporary) file where foo() was previously defined:
276 (temporary) file where foo() was previously defined:
277
277
278 In [3]: ed foo
278 In [3]: ed foo
279 Editing... done. Executing edited code...
279 Editing... done. Executing edited code...
280
280
281 And if we call foo() again we get the modified version:
281 And if we call foo() again we get the modified version:
282
282
283 In [4]: foo()
283 In [4]: foo()
284 foo() has now been changed!
284 foo() has now been changed!
285
285
286 Here is an example of how to edit a code snippet successive
286 Here is an example of how to edit a code snippet successive
287 times. First we call the editor:
287 times. First we call the editor:
288
288
289 In [5]: ed
289 In [5]: ed
290 Editing... done. Executing edited code...
290 Editing... done. Executing edited code...
291 hello
291 hello
292 Out[5]: "print 'hello'n"
292 Out[5]: "print 'hello'n"
293
293
294 Now we call it again with the previous output (stored in _):
294 Now we call it again with the previous output (stored in _):
295
295
296 In [6]: ed _
296 In [6]: ed _
297 Editing... done. Executing edited code...
297 Editing... done. Executing edited code...
298 hello world
298 hello world
299 Out[6]: "print 'hello world'n"
299 Out[6]: "print 'hello world'n"
300
300
301 Now we call it with the output #8 (stored in _8, also as Out[8]):
301 Now we call it with the output #8 (stored in _8, also as Out[8]):
302
302
303 In [7]: ed _8
303 In [7]: ed _8
304 Editing... done. Executing edited code...
304 Editing... done. Executing edited code...
305 hello again
305 hello again
306 Out[7]: "print 'hello again'n"
306 Out[7]: "print 'hello again'n"
307 """
307 """
308
308
309 opts,args = self.parse_options(parameter_s,'prn:')
309 opts,args = self.parse_options(parameter_s,'prn:')
310
310
311 try:
311 try:
312 filename, lineno, _ = CodeMagics._find_edit_target(self.shell, args, opts, last_call)
312 filename, lineno, _ = CodeMagics._find_edit_target(self.shell, args, opts, last_call)
313 except MacroToEdit as e:
313 except MacroToEdit as e:
314 # TODO: Implement macro editing over 2 processes.
314 # TODO: Implement macro editing over 2 processes.
315 print("Macro editing not yet implemented in 2-process model.")
315 print("Macro editing not yet implemented in 2-process model.")
316 return
316 return
317
317
318 # Make sure we send to the client an absolute path, in case the working
318 # Make sure we send to the client an absolute path, in case the working
319 # directory of client and kernel don't match
319 # directory of client and kernel don't match
320 filename = os.path.abspath(filename)
320 filename = os.path.abspath(filename)
321
321
322 payload = {
322 payload = {
323 'source' : 'IPython.zmq.zmqshell.ZMQInteractiveShell.edit_magic',
323 'source' : 'IPython.zmq.zmqshell.ZMQInteractiveShell.edit_magic',
324 'filename' : filename,
324 'filename' : filename,
325 'line_number' : lineno
325 'line_number' : lineno
326 }
326 }
327 self.shell.payload_manager.write_payload(payload)
327 self.shell.payload_manager.write_payload(payload)
328
328
329 # A few magics that are adapted to the specifics of using pexpect and a
329 # A few magics that are adapted to the specifics of using pexpect and a
330 # remote terminal
330 # remote terminal
331
331
332 @line_magic
332 @line_magic
333 def clear(self, arg_s):
333 def clear(self, arg_s):
334 """Clear the terminal."""
334 """Clear the terminal."""
335 if os.name == 'posix':
335 if os.name == 'posix':
336 self.shell.system("clear")
336 self.shell.system("clear")
337 else:
337 else:
338 self.shell.system("cls")
338 self.shell.system("cls")
339
339
340 if os.name == 'nt':
340 if os.name == 'nt':
341 # This is the usual name in windows
341 # This is the usual name in windows
342 cls = line_magic('cls')(clear)
342 cls = line_magic('cls')(clear)
343
343
344 # Terminal pagers won't work over pexpect, but we do have our own pager
344 # Terminal pagers won't work over pexpect, but we do have our own pager
345
345
346 @line_magic
346 @line_magic
347 def less(self, arg_s):
347 def less(self, arg_s):
348 """Show a file through the pager.
348 """Show a file through the pager.
349
349
350 Files ending in .py are syntax-highlighted."""
350 Files ending in .py are syntax-highlighted."""
351 cont = open(arg_s).read()
351 cont = open(arg_s).read()
352 if arg_s.endswith('.py'):
352 if arg_s.endswith('.py'):
353 cont = self.shell.pycolorize(cont)
353 cont = self.shell.pycolorize(cont)
354 page.page(cont)
354 page.page(cont)
355
355
356 more = line_magic('more')(less)
356 more = line_magic('more')(less)
357
357
358 # Man calls a pager, so we also need to redefine it
358 # Man calls a pager, so we also need to redefine it
359 if os.name == 'posix':
359 if os.name == 'posix':
360 @line_magic
360 @line_magic
361 def man(self, arg_s):
361 def man(self, arg_s):
362 """Find the man page for the given command and display in pager."""
362 """Find the man page for the given command and display in pager."""
363 page.page(self.shell.getoutput('man %s | col -b' % arg_s,
363 page.page(self.shell.getoutput('man %s | col -b' % arg_s,
364 split=False))
364 split=False))
365
365
366 @line_magic
366 @line_magic
367 def connect_info(self, arg_s):
367 def connect_info(self, arg_s):
368 """Print information for connecting other clients to this kernel
368 """Print information for connecting other clients to this kernel
369
369
370 It will print the contents of this session's connection file, as well as
370 It will print the contents of this session's connection file, as well as
371 shortcuts for local clients.
371 shortcuts for local clients.
372
372
373 In the simplest case, when called from the most recently launched kernel,
373 In the simplest case, when called from the most recently launched kernel,
374 secondary clients can be connected, simply with:
374 secondary clients can be connected, simply with:
375
375
376 $> ipython <app> --existing
376 $> ipython <app> --existing
377
377
378 """
378 """
379
379
380 from IPython.core.application import BaseIPythonApplication as BaseIPApp
380 from IPython.core.application import BaseIPythonApplication as BaseIPApp
381
381
382 if BaseIPApp.initialized():
382 if BaseIPApp.initialized():
383 app = BaseIPApp.instance()
383 app = BaseIPApp.instance()
384 security_dir = app.profile_dir.security_dir
384 security_dir = app.profile_dir.security_dir
385 profile = app.profile
385 profile = app.profile
386 else:
386 else:
387 profile = 'default'
387 profile = 'default'
388 security_dir = ''
388 security_dir = ''
389
389
390 try:
390 try:
391 connection_file = get_connection_file()
391 connection_file = get_connection_file()
392 info = get_connection_info(unpack=False)
392 info = get_connection_info(unpack=False)
393 except Exception as e:
393 except Exception as e:
394 error("Could not get connection info: %r" % e)
394 error("Could not get connection info: %r" % e)
395 return
395 return
396
396
397 # add profile flag for non-default profile
397 # add profile flag for non-default profile
398 profile_flag = "--profile %s" % profile if profile != 'default' else ""
398 profile_flag = "--profile %s" % profile if profile != 'default' else ""
399
399
400 # if it's in the security dir, truncate to basename
400 # if it's in the security dir, truncate to basename
401 if security_dir == os.path.dirname(connection_file):
401 if security_dir == os.path.dirname(connection_file):
402 connection_file = os.path.basename(connection_file)
402 connection_file = os.path.basename(connection_file)
403
403
404
404
405 print (info + '\n')
405 print (info + '\n')
406 print ("Paste the above JSON into a file, and connect with:\n"
406 print ("Paste the above JSON into a file, and connect with:\n"
407 " $> ipython <app> --existing <file>\n"
407 " $> ipython <app> --existing <file>\n"
408 "or, if you are local, you can connect with just:\n"
408 "or, if you are local, you can connect with just:\n"
409 " $> ipython <app> --existing {0} {1}\n"
409 " $> ipython <app> --existing {0} {1}\n"
410 "or even just:\n"
410 "or even just:\n"
411 " $> ipython <app> --existing {1}\n"
411 " $> ipython <app> --existing {1}\n"
412 "if this is the most recent IPython session you have started.".format(
412 "if this is the most recent IPython session you have started.".format(
413 connection_file, profile_flag
413 connection_file, profile_flag
414 )
414 )
415 )
415 )
416
416
417 @line_magic
417 @line_magic
418 def qtconsole(self, arg_s):
418 def qtconsole(self, arg_s):
419 """Open a qtconsole connected to this kernel.
419 """Open a qtconsole connected to this kernel.
420
420
421 Useful for connecting a qtconsole to running notebooks, for better
421 Useful for connecting a qtconsole to running notebooks, for better
422 debugging.
422 debugging.
423 """
423 """
424
424
425 # %qtconsole should imply bind_kernel for engines:
425 # %qtconsole should imply bind_kernel for engines:
426 try:
426 try:
427 from IPython.parallel import bind_kernel
427 from IPython.parallel import bind_kernel
428 except ImportError:
428 except ImportError:
429 # technically possible, because parallel has higher pyzmq min-version
429 # technically possible, because parallel has higher pyzmq min-version
430 pass
430 pass
431 else:
431 else:
432 bind_kernel()
432 bind_kernel()
433
433
434 try:
434 try:
435 p = connect_qtconsole(argv=arg_split(arg_s, os.name=='posix'))
435 p = connect_qtconsole(argv=arg_split(arg_s, os.name=='posix'))
436 except Exception as e:
436 except Exception as e:
437 error("Could not start qtconsole: %r" % e)
437 error("Could not start qtconsole: %r" % e)
438 return
438 return
439
439
440 def safe_unicode(e):
440 def safe_unicode(e):
441 """unicode(e) with various fallbacks. Used for exceptions, which may not be
441 """unicode(e) with various fallbacks. Used for exceptions, which may not be
442 safe to call unicode() on.
442 safe to call unicode() on.
443 """
443 """
444 try:
444 try:
445 return unicode(e)
445 return unicode(e)
446 except UnicodeError:
446 except UnicodeError:
447 pass
447 pass
448
448
449 try:
449 try:
450 return py3compat.str_to_unicode(str(e))
450 return py3compat.str_to_unicode(str(e))
451 except UnicodeError:
451 except UnicodeError:
452 pass
452 pass
453
453
454 try:
454 try:
455 return py3compat.str_to_unicode(repr(e))
455 return py3compat.str_to_unicode(repr(e))
456 except UnicodeError:
456 except UnicodeError:
457 pass
457 pass
458
458
459 return u'Unrecoverably corrupt evalue'
459 return u'Unrecoverably corrupt evalue'
460
460
461
461
462 class ZMQInteractiveShell(InteractiveShell):
462 class ZMQInteractiveShell(InteractiveShell):
463 """A subclass of InteractiveShell for ZMQ."""
463 """A subclass of InteractiveShell for ZMQ."""
464
464
465 displayhook_class = Type(ZMQShellDisplayHook)
465 displayhook_class = Type(ZMQShellDisplayHook)
466 display_pub_class = Type(ZMQDisplayPublisher)
466 display_pub_class = Type(ZMQDisplayPublisher)
467
467
468 # Override the traitlet in the parent class, because there's no point using
468 # Override the traitlet in the parent class, because there's no point using
469 # readline for the kernel. Can be removed when the readline code is moved
469 # readline for the kernel. Can be removed when the readline code is moved
470 # to the terminal frontend.
470 # to the terminal frontend.
471 colors_force = CBool(True)
471 colors_force = CBool(True)
472 readline_use = CBool(False)
472 readline_use = CBool(False)
473 # autoindent has no meaning in a zmqshell, and attempting to enable it
473 # autoindent has no meaning in a zmqshell, and attempting to enable it
474 # will print a warning in the absence of readline.
474 # will print a warning in the absence of readline.
475 autoindent = CBool(False)
475 autoindent = CBool(False)
476
476
477 exiter = Instance(ZMQExitAutocall)
477 exiter = Instance(ZMQExitAutocall)
478 def _exiter_default(self):
478 def _exiter_default(self):
479 return ZMQExitAutocall(self)
479 return ZMQExitAutocall(self)
480
480
481 def _exit_now_changed(self, name, old, new):
481 def _exit_now_changed(self, name, old, new):
482 """stop eventloop when exit_now fires"""
482 """stop eventloop when exit_now fires"""
483 if new:
483 if new:
484 loop = ioloop.IOLoop.instance()
484 loop = ioloop.IOLoop.instance()
485 loop.add_timeout(time.time()+0.1, loop.stop)
485 loop.add_timeout(time.time()+0.1, loop.stop)
486
486
487 keepkernel_on_exit = None
487 keepkernel_on_exit = None
488
488
489 # Over ZeroMQ, GUI control isn't done with PyOS_InputHook as there is no
489 # Over ZeroMQ, GUI control isn't done with PyOS_InputHook as there is no
490 # interactive input being read; we provide event loop support in ipkernel
490 # interactive input being read; we provide event loop support in ipkernel
491 from .eventloops import enable_gui
491 from .eventloops import enable_gui
492 enable_gui = staticmethod(enable_gui)
492 enable_gui = staticmethod(enable_gui)
493
493
494 def init_environment(self):
494 def init_environment(self):
495 """Configure the user's environment.
495 """Configure the user's environment.
496
496
497 """
497 """
498 env = os.environ
498 env = os.environ
499 # These two ensure 'ls' produces nice coloring on BSD-derived systems
499 # These two ensure 'ls' produces nice coloring on BSD-derived systems
500 env['TERM'] = 'xterm-color'
500 env['TERM'] = 'xterm-color'
501 env['CLICOLOR'] = '1'
501 env['CLICOLOR'] = '1'
502 # Since normal pagers don't work at all (over pexpect we don't have
502 # Since normal pagers don't work at all (over pexpect we don't have
503 # single-key control of the subprocess), try to disable paging in
503 # single-key control of the subprocess), try to disable paging in
504 # subprocesses as much as possible.
504 # subprocesses as much as possible.
505 env['PAGER'] = 'cat'
505 env['PAGER'] = 'cat'
506 env['GIT_PAGER'] = 'cat'
506 env['GIT_PAGER'] = 'cat'
507
507
508 # And install the payload version of page.
508 # And install the payload version of page.
509 install_payload_page()
509 install_payload_page()
510
510
511 def auto_rewrite_input(self, cmd):
511 def auto_rewrite_input(self, cmd):
512 """Called to show the auto-rewritten input for autocall and friends.
512 """Called to show the auto-rewritten input for autocall and friends.
513
513
514 FIXME: this payload is currently not correctly processed by the
514 FIXME: this payload is currently not correctly processed by the
515 frontend.
515 frontend.
516 """
516 """
517 new = self.prompt_manager.render('rewrite') + cmd
517 new = self.prompt_manager.render('rewrite') + cmd
518 payload = dict(
518 payload = dict(
519 source='IPython.zmq.zmqshell.ZMQInteractiveShell.auto_rewrite_input',
519 source='IPython.zmq.zmqshell.ZMQInteractiveShell.auto_rewrite_input',
520 transformed_input=new,
520 transformed_input=new,
521 )
521 )
522 self.payload_manager.write_payload(payload)
522 self.payload_manager.write_payload(payload)
523
523
524 def ask_exit(self):
524 def ask_exit(self):
525 """Engage the exit actions."""
525 """Engage the exit actions."""
526 self.exit_now = True
526 self.exit_now = True
527 payload = dict(
527 payload = dict(
528 source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit',
528 source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit',
529 exit=True,
529 exit=True,
530 keepkernel=self.keepkernel_on_exit,
530 keepkernel=self.keepkernel_on_exit,
531 )
531 )
532 self.payload_manager.write_payload(payload)
532 self.payload_manager.write_payload(payload)
533
533
534 def _showtraceback(self, etype, evalue, stb):
534 def _showtraceback(self, etype, evalue, stb):
535
535
536 exc_content = {
536 exc_content = {
537 u'traceback' : stb,
537 u'traceback' : stb,
538 u'ename' : unicode(etype.__name__),
538 u'ename' : unicode(etype.__name__),
539 u'evalue' : safe_unicode(evalue)
539 u'evalue' : safe_unicode(evalue)
540 }
540 }
541
541
542 dh = self.displayhook
542 dh = self.displayhook
543 # Send exception info over pub socket for other clients than the caller
543 # Send exception info over pub socket for other clients than the caller
544 # to pick up
544 # to pick up
545 topic = None
545 topic = None
546 if dh.topic:
546 if dh.topic:
547 topic = dh.topic.replace(b'pyout', b'pyerr')
547 topic = dh.topic.replace(b'pyout', b'pyerr')
548
548
549 exc_msg = dh.session.send(dh.pub_socket, u'pyerr', json_clean(exc_content), dh.parent_header, ident=topic)
549 exc_msg = dh.session.send(dh.pub_socket, u'pyerr', json_clean(exc_content), dh.parent_header, ident=topic)
550
550
551 # FIXME - Hack: store exception info in shell object. Right now, the
551 # FIXME - Hack: store exception info in shell object. Right now, the
552 # caller is reading this info after the fact, we need to fix this logic
552 # caller is reading this info after the fact, we need to fix this logic
553 # to remove this hack. Even uglier, we need to store the error status
553 # to remove this hack. Even uglier, we need to store the error status
554 # here, because in the main loop, the logic that sets it is being
554 # here, because in the main loop, the logic that sets it is being
555 # skipped because runlines swallows the exceptions.
555 # skipped because runlines swallows the exceptions.
556 exc_content[u'status'] = u'error'
556 exc_content[u'status'] = u'error'
557 self._reply_content = exc_content
557 self._reply_content = exc_content
558 # /FIXME
558 # /FIXME
559
559
560 return exc_content
560 return exc_content
561
561
562 def set_next_input(self, text):
562 def set_next_input(self, text):
563 """Send the specified text to the frontend to be presented at the next
563 """Send the specified text to the frontend to be presented at the next
564 input cell."""
564 input cell."""
565 payload = dict(
565 payload = dict(
566 source='IPython.zmq.zmqshell.ZMQInteractiveShell.set_next_input',
566 source='IPython.zmq.zmqshell.ZMQInteractiveShell.set_next_input',
567 text=text
567 text=text
568 )
568 )
569 self.payload_manager.write_payload(payload)
569 self.payload_manager.write_payload(payload)
570
570
571 #-------------------------------------------------------------------------
571 #-------------------------------------------------------------------------
572 # Things related to magics
572 # Things related to magics
573 #-------------------------------------------------------------------------
573 #-------------------------------------------------------------------------
574
574
575 def init_magics(self):
575 def init_magics(self):
576 super(ZMQInteractiveShell, self).init_magics()
576 super(ZMQInteractiveShell, self).init_magics()
577 self.register_magics(KernelMagics)
577 self.register_magics(KernelMagics)
578 self.run_line_magic('alias_magic', 'ed edit')
578 self.magics_manager.register_alias('ed', 'edit')
579
579
580
580
581
581
582 InteractiveShellABC.register(ZMQInteractiveShell)
582 InteractiveShellABC.register(ZMQInteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now