##// END OF EJS Templates
fix UnboundLocalError
Matthias Bussonnier -
Show More
@@ -1,3561 +1,3562 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 import abc
14 import abc
15 import ast
15 import ast
16 import asyncio
16 import asyncio
17 import atexit
17 import atexit
18 import builtins as builtin_mod
18 import builtins as builtin_mod
19 import functools
19 import functools
20 import os
20 import os
21 import re
21 import re
22 import runpy
22 import runpy
23 import sys
23 import sys
24 import tempfile
24 import tempfile
25 import traceback
25 import traceback
26 import types
26 import types
27 import subprocess
27 import subprocess
28 import warnings
28 import warnings
29 from io import open as io_open
29 from io import open as io_open
30
30
31 from pickleshare import PickleShareDB
31 from pickleshare import PickleShareDB
32
32
33 from traitlets.config.configurable import SingletonConfigurable
33 from traitlets.config.configurable import SingletonConfigurable
34 from traitlets.utils.importstring import import_item
34 from traitlets.utils.importstring import import_item
35 from IPython.core import oinspect
35 from IPython.core import oinspect
36 from IPython.core import magic
36 from IPython.core import magic
37 from IPython.core import page
37 from IPython.core import page
38 from IPython.core import prefilter
38 from IPython.core import prefilter
39 from IPython.core import ultratb
39 from IPython.core import ultratb
40 from IPython.core.alias import Alias, AliasManager
40 from IPython.core.alias import Alias, AliasManager
41 from IPython.core.autocall import ExitAutocall
41 from IPython.core.autocall import ExitAutocall
42 from IPython.core.builtin_trap import BuiltinTrap
42 from IPython.core.builtin_trap import BuiltinTrap
43 from IPython.core.events import EventManager, available_events
43 from IPython.core.events import EventManager, available_events
44 from IPython.core.compilerop import CachingCompiler, check_linecache_ipython
44 from IPython.core.compilerop import CachingCompiler, check_linecache_ipython
45 from IPython.core.debugger import Pdb
45 from IPython.core.debugger import Pdb
46 from IPython.core.display_trap import DisplayTrap
46 from IPython.core.display_trap import DisplayTrap
47 from IPython.core.displayhook import DisplayHook
47 from IPython.core.displayhook import DisplayHook
48 from IPython.core.displaypub import DisplayPublisher
48 from IPython.core.displaypub import DisplayPublisher
49 from IPython.core.error import InputRejected, UsageError
49 from IPython.core.error import InputRejected, UsageError
50 from IPython.core.extensions import ExtensionManager
50 from IPython.core.extensions import ExtensionManager
51 from IPython.core.formatters import DisplayFormatter
51 from IPython.core.formatters import DisplayFormatter
52 from IPython.core.history import HistoryManager
52 from IPython.core.history import HistoryManager
53 from IPython.core.inputsplitter import ESC_MAGIC, ESC_MAGIC2
53 from IPython.core.inputsplitter import ESC_MAGIC, ESC_MAGIC2
54 from IPython.core.logger import Logger
54 from IPython.core.logger import Logger
55 from IPython.core.macro import Macro
55 from IPython.core.macro import Macro
56 from IPython.core.payload import PayloadManager
56 from IPython.core.payload import PayloadManager
57 from IPython.core.prefilter import PrefilterManager
57 from IPython.core.prefilter import PrefilterManager
58 from IPython.core.profiledir import ProfileDir
58 from IPython.core.profiledir import ProfileDir
59 from IPython.core.usage import default_banner
59 from IPython.core.usage import default_banner
60 from IPython.display import display
60 from IPython.display import display
61 from IPython.testing.skipdoctest import skip_doctest
61 from IPython.testing.skipdoctest import skip_doctest
62 from IPython.utils import PyColorize
62 from IPython.utils import PyColorize
63 from IPython.utils import io
63 from IPython.utils import io
64 from IPython.utils import py3compat
64 from IPython.utils import py3compat
65 from IPython.utils import openpy
65 from IPython.utils import openpy
66 from IPython.utils.decorators import undoc
66 from IPython.utils.decorators import undoc
67 from IPython.utils.io import ask_yes_no
67 from IPython.utils.io import ask_yes_no
68 from IPython.utils.ipstruct import Struct
68 from IPython.utils.ipstruct import Struct
69 from IPython.paths import get_ipython_dir
69 from IPython.paths import get_ipython_dir
70 from IPython.utils.path import get_home_dir, get_py_filename, ensure_dir_exists
70 from IPython.utils.path import get_home_dir, get_py_filename, ensure_dir_exists
71 from IPython.utils.process import system, getoutput
71 from IPython.utils.process import system, getoutput
72 from IPython.utils.strdispatch import StrDispatch
72 from IPython.utils.strdispatch import StrDispatch
73 from IPython.utils.syspathcontext import prepended_to_syspath
73 from IPython.utils.syspathcontext import prepended_to_syspath
74 from IPython.utils.text import format_screen, LSString, SList, DollarFormatter
74 from IPython.utils.text import format_screen, LSString, SList, DollarFormatter
75 from IPython.utils.tempdir import TemporaryDirectory
75 from IPython.utils.tempdir import TemporaryDirectory
76 from traitlets import (
76 from traitlets import (
77 Integer, Bool, CaselessStrEnum, Enum, List, Dict, Unicode, Instance, Type,
77 Integer, Bool, CaselessStrEnum, Enum, List, Dict, Unicode, Instance, Type,
78 observe, default, validate, Any
78 observe, default, validate, Any
79 )
79 )
80 from warnings import warn
80 from warnings import warn
81 from logging import error
81 from logging import error
82 import IPython.core.hooks
82 import IPython.core.hooks
83
83
84 from typing import List as ListType
84 from typing import List as ListType
85 from ast import AST
85 from ast import AST
86
86
87 # NoOpContext is deprecated, but ipykernel imports it from here.
87 # NoOpContext is deprecated, but ipykernel imports it from here.
88 # See https://github.com/ipython/ipykernel/issues/157
88 # See https://github.com/ipython/ipykernel/issues/157
89 from IPython.utils.contexts import NoOpContext
89 from IPython.utils.contexts import NoOpContext
90
90
91 try:
91 try:
92 import docrepr.sphinxify as sphx
92 import docrepr.sphinxify as sphx
93
93
94 def sphinxify(doc):
94 def sphinxify(doc):
95 with TemporaryDirectory() as dirname:
95 with TemporaryDirectory() as dirname:
96 return {
96 return {
97 'text/html': sphx.sphinxify(doc, dirname),
97 'text/html': sphx.sphinxify(doc, dirname),
98 'text/plain': doc
98 'text/plain': doc
99 }
99 }
100 except ImportError:
100 except ImportError:
101 sphinxify = None
101 sphinxify = None
102
102
103
103
104 class ProvisionalWarning(DeprecationWarning):
104 class ProvisionalWarning(DeprecationWarning):
105 """
105 """
106 Warning class for unstable features
106 Warning class for unstable features
107 """
107 """
108 pass
108 pass
109
109
110 if sys.version_info > (3,6):
110 if sys.version_info > (3,6):
111 _assign_nodes = (ast.AugAssign, ast.AnnAssign, ast.Assign)
111 _assign_nodes = (ast.AugAssign, ast.AnnAssign, ast.Assign)
112 _single_targets_nodes = (ast.AugAssign, ast.AnnAssign)
112 _single_targets_nodes = (ast.AugAssign, ast.AnnAssign)
113 else:
113 else:
114 _assign_nodes = (ast.AugAssign, ast.Assign )
114 _assign_nodes = (ast.AugAssign, ast.Assign )
115 _single_targets_nodes = (ast.AugAssign, )
115 _single_targets_nodes = (ast.AugAssign, )
116
116
117 #-----------------------------------------------------------------------------
117 #-----------------------------------------------------------------------------
118 # Await Helpers
118 # Await Helpers
119 #-----------------------------------------------------------------------------
119 #-----------------------------------------------------------------------------
120
120
121 def removed_co_newlocals(function:types.FunctionType) -> types.FunctionType:
121 def removed_co_newlocals(function:types.FunctionType) -> types.FunctionType:
122 """Return a function that do not create a new local scope.
122 """Return a function that do not create a new local scope.
123
123
124 Given a function, create a clone of this function where the co_newlocal flag
124 Given a function, create a clone of this function where the co_newlocal flag
125 has been removed, making this function code actually run in the sourounding
125 has been removed, making this function code actually run in the sourounding
126 scope.
126 scope.
127
127
128 We need this in order to run asynchronous code in user level namespace.
128 We need this in order to run asynchronous code in user level namespace.
129 """
129 """
130 from types import CodeType, FunctionType
130 from types import CodeType, FunctionType
131 CO_NEWLOCALS = 0x0002
131 CO_NEWLOCALS = 0x0002
132 code = function.__code__
132 code = function.__code__
133 new_code = CodeType(
133 new_code = CodeType(
134 code.co_argcount,
134 code.co_argcount,
135 code.co_kwonlyargcount,
135 code.co_kwonlyargcount,
136 code.co_nlocals,
136 code.co_nlocals,
137 code.co_stacksize,
137 code.co_stacksize,
138 code.co_flags & ~CO_NEWLOCALS,
138 code.co_flags & ~CO_NEWLOCALS,
139 code.co_code,
139 code.co_code,
140 code.co_consts,
140 code.co_consts,
141 code.co_names,
141 code.co_names,
142 code.co_varnames,
142 code.co_varnames,
143 code.co_filename,
143 code.co_filename,
144 code.co_name,
144 code.co_name,
145 code.co_firstlineno,
145 code.co_firstlineno,
146 code.co_lnotab,
146 code.co_lnotab,
147 code.co_freevars,
147 code.co_freevars,
148 code.co_cellvars
148 code.co_cellvars
149 )
149 )
150 return FunctionType(new_code, globals(), function.__name__, function.__defaults__)
150 return FunctionType(new_code, globals(), function.__name__, function.__defaults__)
151
151
152
152
153 if sys.version_info > (3,5):
153 if sys.version_info > (3,5):
154 from .async_helpers import (_asyncio_runner, _curio_runner, _trio_runner,
154 from .async_helpers import (_asyncio_runner, _curio_runner, _trio_runner,
155 _should_be_async, _asyncify
155 _should_be_async, _asyncify
156 )
156 )
157 else :
157 else :
158 _asyncio_runner = _curio_runner = _trio_runner = None
158 _asyncio_runner = _curio_runner = _trio_runner = None
159
159
160 def _should_be_async(whatever:str)->bool:
160 def _should_be_async(whatever:str)->bool:
161 return False
161 return False
162
162
163
163
164 def _ast_asyncify(cell:str, wrapper_name:str) -> ast.Module:
164 def _ast_asyncify(cell:str, wrapper_name:str) -> ast.Module:
165 """
165 """
166 Parse a cell with top-level await and modify the AST to be able to run it later.
166 Parse a cell with top-level await and modify the AST to be able to run it later.
167
167
168 Parameter
168 Parameter
169 ---------
169 ---------
170
170
171 cell: str
171 cell: str
172 The code cell to asyncronify
172 The code cell to asyncronify
173 wrapper_name: str
173 wrapper_name: str
174 The name of the function to be used to wrap the passed `cell`. It is
174 The name of the function to be used to wrap the passed `cell`. It is
175 advised to **not** use a python identifier in order to not pollute the
175 advised to **not** use a python identifier in order to not pollute the
176 global namespace in which the function will be ran.
176 global namespace in which the function will be ran.
177
177
178 Return
178 Return
179 ------
179 ------
180
180
181 A module object AST containing **one** function named `wrapper_name`.
181 A module object AST containing **one** function named `wrapper_name`.
182
182
183 The given code is wrapped in a async-def function, parsed into an AST, and
183 The given code is wrapped in a async-def function, parsed into an AST, and
184 the resulting function definition AST is modified to return the last
184 the resulting function definition AST is modified to return the last
185 expression.
185 expression.
186
186
187 The last expression or await node is moved into a return statement at the
187 The last expression or await node is moved into a return statement at the
188 end of the function, and removed from its original location. If the last
188 end of the function, and removed from its original location. If the last
189 node is not Expr or Await nothing is done.
189 node is not Expr or Await nothing is done.
190
190
191 The function `__code__` will need to be later modified (by
191 The function `__code__` will need to be later modified (by
192 ``removed_co_newlocals``) in a subsequent step to not create new `locals()`
192 ``removed_co_newlocals``) in a subsequent step to not create new `locals()`
193 meaning that the local and global scope are the same, ie as if the body of
193 meaning that the local and global scope are the same, ie as if the body of
194 the function was at module level.
194 the function was at module level.
195
195
196 Lastly a call to `locals()` is made just before the last expression of the
196 Lastly a call to `locals()` is made just before the last expression of the
197 function, or just after the last assignment or statement to make sure the
197 function, or just after the last assignment or statement to make sure the
198 global dict is updated as python function work with a local fast cache which
198 global dict is updated as python function work with a local fast cache which
199 is updated only on `local()` calls.
199 is updated only on `local()` calls.
200 """
200 """
201
201
202 from ast import Expr, Await, Return
202 from ast import Expr, Await, Return
203 tree = ast.parse(_asyncify(cell))
203 tree = ast.parse(_asyncify(cell))
204
204
205 function_def = tree.body[0]
205 function_def = tree.body[0]
206 function_def.name = wrapper_name
206 function_def.name = wrapper_name
207 try_block = function_def.body[0]
207 try_block = function_def.body[0]
208 lastexpr = try_block.body[-1]
208 lastexpr = try_block.body[-1]
209 if isinstance(lastexpr, (Expr, Await)):
209 if isinstance(lastexpr, (Expr, Await)):
210 try_block.body[-1] = Return(lastexpr.value)
210 try_block.body[-1] = Return(lastexpr.value)
211 ast.fix_missing_locations(tree)
211 ast.fix_missing_locations(tree)
212 return tree
212 return tree
213 #-----------------------------------------------------------------------------
213 #-----------------------------------------------------------------------------
214 # Globals
214 # Globals
215 #-----------------------------------------------------------------------------
215 #-----------------------------------------------------------------------------
216
216
217 # compiled regexps for autoindent management
217 # compiled regexps for autoindent management
218 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
218 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
219
219
220 #-----------------------------------------------------------------------------
220 #-----------------------------------------------------------------------------
221 # Utilities
221 # Utilities
222 #-----------------------------------------------------------------------------
222 #-----------------------------------------------------------------------------
223
223
224 @undoc
224 @undoc
225 def softspace(file, newvalue):
225 def softspace(file, newvalue):
226 """Copied from code.py, to remove the dependency"""
226 """Copied from code.py, to remove the dependency"""
227
227
228 oldvalue = 0
228 oldvalue = 0
229 try:
229 try:
230 oldvalue = file.softspace
230 oldvalue = file.softspace
231 except AttributeError:
231 except AttributeError:
232 pass
232 pass
233 try:
233 try:
234 file.softspace = newvalue
234 file.softspace = newvalue
235 except (AttributeError, TypeError):
235 except (AttributeError, TypeError):
236 # "attribute-less object" or "read-only attributes"
236 # "attribute-less object" or "read-only attributes"
237 pass
237 pass
238 return oldvalue
238 return oldvalue
239
239
240 @undoc
240 @undoc
241 def no_op(*a, **kw):
241 def no_op(*a, **kw):
242 pass
242 pass
243
243
244
244
245 class SpaceInInput(Exception): pass
245 class SpaceInInput(Exception): pass
246
246
247
247
248 def get_default_colors():
248 def get_default_colors():
249 "DEPRECATED"
249 "DEPRECATED"
250 warn('get_default_color is deprecated since IPython 5.0, and returns `Neutral` on all platforms.',
250 warn('get_default_color is deprecated since IPython 5.0, and returns `Neutral` on all platforms.',
251 DeprecationWarning, stacklevel=2)
251 DeprecationWarning, stacklevel=2)
252 return 'Neutral'
252 return 'Neutral'
253
253
254
254
255 class SeparateUnicode(Unicode):
255 class SeparateUnicode(Unicode):
256 r"""A Unicode subclass to validate separate_in, separate_out, etc.
256 r"""A Unicode subclass to validate separate_in, separate_out, etc.
257
257
258 This is a Unicode based trait that converts '0'->'' and ``'\\n'->'\n'``.
258 This is a Unicode based trait that converts '0'->'' and ``'\\n'->'\n'``.
259 """
259 """
260
260
261 def validate(self, obj, value):
261 def validate(self, obj, value):
262 if value == '0': value = ''
262 if value == '0': value = ''
263 value = value.replace('\\n','\n')
263 value = value.replace('\\n','\n')
264 return super(SeparateUnicode, self).validate(obj, value)
264 return super(SeparateUnicode, self).validate(obj, value)
265
265
266
266
267 @undoc
267 @undoc
268 class DummyMod(object):
268 class DummyMod(object):
269 """A dummy module used for IPython's interactive module when
269 """A dummy module used for IPython's interactive module when
270 a namespace must be assigned to the module's __dict__."""
270 a namespace must be assigned to the module's __dict__."""
271 __spec__ = None
271 __spec__ = None
272
272
273
273
274 class ExecutionInfo(object):
274 class ExecutionInfo(object):
275 """The arguments used for a call to :meth:`InteractiveShell.run_cell`
275 """The arguments used for a call to :meth:`InteractiveShell.run_cell`
276
276
277 Stores information about what is going to happen.
277 Stores information about what is going to happen.
278 """
278 """
279 raw_cell = None
279 raw_cell = None
280 store_history = False
280 store_history = False
281 silent = False
281 silent = False
282 shell_futures = True
282 shell_futures = True
283
283
284 def __init__(self, raw_cell, store_history, silent, shell_futures):
284 def __init__(self, raw_cell, store_history, silent, shell_futures):
285 self.raw_cell = raw_cell
285 self.raw_cell = raw_cell
286 self.store_history = store_history
286 self.store_history = store_history
287 self.silent = silent
287 self.silent = silent
288 self.shell_futures = shell_futures
288 self.shell_futures = shell_futures
289
289
290 def __repr__(self):
290 def __repr__(self):
291 name = self.__class__.__qualname__
291 name = self.__class__.__qualname__
292 raw_cell = ((self.raw_cell[:50] + '..')
292 raw_cell = ((self.raw_cell[:50] + '..')
293 if len(self.raw_cell) > 50 else self.raw_cell)
293 if len(self.raw_cell) > 50 else self.raw_cell)
294 return '<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s>' %\
294 return '<%s object at %x, raw_cell="%s" store_history=%s silent=%s shell_futures=%s>' %\
295 (name, id(self), raw_cell, self.store_history, self.silent, self.shell_futures)
295 (name, id(self), raw_cell, self.store_history, self.silent, self.shell_futures)
296
296
297
297
298 class ExecutionResult(object):
298 class ExecutionResult(object):
299 """The result of a call to :meth:`InteractiveShell.run_cell`
299 """The result of a call to :meth:`InteractiveShell.run_cell`
300
300
301 Stores information about what took place.
301 Stores information about what took place.
302 """
302 """
303 execution_count = None
303 execution_count = None
304 error_before_exec = None
304 error_before_exec = None
305 error_in_exec = None
305 error_in_exec = None
306 info = None
306 info = None
307 result = None
307 result = None
308
308
309 def __init__(self, info):
309 def __init__(self, info):
310 self.info = info
310 self.info = info
311
311
312 @property
312 @property
313 def success(self):
313 def success(self):
314 return (self.error_before_exec is None) and (self.error_in_exec is None)
314 return (self.error_before_exec is None) and (self.error_in_exec is None)
315
315
316 def raise_error(self):
316 def raise_error(self):
317 """Reraises error if `success` is `False`, otherwise does nothing"""
317 """Reraises error if `success` is `False`, otherwise does nothing"""
318 if self.error_before_exec is not None:
318 if self.error_before_exec is not None:
319 raise self.error_before_exec
319 raise self.error_before_exec
320 if self.error_in_exec is not None:
320 if self.error_in_exec is not None:
321 raise self.error_in_exec
321 raise self.error_in_exec
322
322
323 def __repr__(self):
323 def __repr__(self):
324 name = self.__class__.__qualname__
324 name = self.__class__.__qualname__
325 return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
325 return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
326 (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
326 (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))
327
327
328
328
329 class InteractiveShell(SingletonConfigurable):
329 class InteractiveShell(SingletonConfigurable):
330 """An enhanced, interactive shell for Python."""
330 """An enhanced, interactive shell for Python."""
331
331
332 _instance = None
332 _instance = None
333
333
334 ast_transformers = List([], help=
334 ast_transformers = List([], help=
335 """
335 """
336 A list of ast.NodeTransformer subclass instances, which will be applied
336 A list of ast.NodeTransformer subclass instances, which will be applied
337 to user input before code is run.
337 to user input before code is run.
338 """
338 """
339 ).tag(config=True)
339 ).tag(config=True)
340
340
341 autocall = Enum((0,1,2), default_value=0, help=
341 autocall = Enum((0,1,2), default_value=0, help=
342 """
342 """
343 Make IPython automatically call any callable object even if you didn't
343 Make IPython automatically call any callable object even if you didn't
344 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
344 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
345 automatically. The value can be '0' to disable the feature, '1' for
345 automatically. The value can be '0' to disable the feature, '1' for
346 'smart' autocall, where it is not applied if there are no more
346 'smart' autocall, where it is not applied if there are no more
347 arguments on the line, and '2' for 'full' autocall, where all callable
347 arguments on the line, and '2' for 'full' autocall, where all callable
348 objects are automatically called (even if no arguments are present).
348 objects are automatically called (even if no arguments are present).
349 """
349 """
350 ).tag(config=True)
350 ).tag(config=True)
351 # TODO: remove all autoindent logic and put into frontends.
351 # TODO: remove all autoindent logic and put into frontends.
352 # We can't do this yet because even runlines uses the autoindent.
352 # We can't do this yet because even runlines uses the autoindent.
353 autoindent = Bool(True, help=
353 autoindent = Bool(True, help=
354 """
354 """
355 Autoindent IPython code entered interactively.
355 Autoindent IPython code entered interactively.
356 """
356 """
357 ).tag(config=True)
357 ).tag(config=True)
358
358
359 autoawait = Bool(True, help=
359 autoawait = Bool(True, help=
360 """
360 """
361 Automatically run await statement in the top level repl.
361 Automatically run await statement in the top level repl.
362 """
362 """
363 ).tag(config=True)
363 ).tag(config=True)
364
364
365 loop_runner_map ={
365 loop_runner_map ={
366 'asyncio':_asyncio_runner,
366 'asyncio':_asyncio_runner,
367 'curio':_curio_runner,
367 'curio':_curio_runner,
368 'trio':_trio_runner,
368 'trio':_trio_runner,
369 }
369 }
370
370
371 loop_runner = Any(default_value="IPython.core.interactiveshell._asyncio_runner",
371 loop_runner = Any(default_value="IPython.core.interactiveshell._asyncio_runner",
372 allow_none=True,
372 allow_none=True,
373 help="""Select the loop runner that will be used to execute top-level asynchronous code"""
373 help="""Select the loop runner that will be used to execute top-level asynchronous code"""
374 ).tag(config=True)
374 ).tag(config=True)
375
375
376 @default('loop_runner')
376 @default('loop_runner')
377 def _default_loop_runner(self):
377 def _default_loop_runner(self):
378 return import_item("IPython.core.interactiveshell._asyncio_runner")
378 return import_item("IPython.core.interactiveshell._asyncio_runner")
379
379
380 @validate('loop_runner')
380 @validate('loop_runner')
381 def _import_runner(self, proposal):
381 def _import_runner(self, proposal):
382 if isinstance(proposal.value, str):
382 if isinstance(proposal.value, str):
383 if proposal.value in self.loop_runner_map:
383 if proposal.value in self.loop_runner_map:
384 return self.loop_runner_map[proposal.value]
384 return self.loop_runner_map[proposal.value]
385 runner = import_item(proposal.value)
385 runner = import_item(proposal.value)
386 if not callable(runner):
386 if not callable(runner):
387 raise ValueError('loop_runner must be callable')
387 raise ValueError('loop_runner must be callable')
388 return runner
388 return runner
389 if not callable(proposal.value):
389 if not callable(proposal.value):
390 raise ValueError('loop_runner must be callable')
390 raise ValueError('loop_runner must be callable')
391 return proposal.value
391 return proposal.value
392
392
393 automagic = Bool(True, help=
393 automagic = Bool(True, help=
394 """
394 """
395 Enable magic commands to be called without the leading %.
395 Enable magic commands to be called without the leading %.
396 """
396 """
397 ).tag(config=True)
397 ).tag(config=True)
398
398
399 banner1 = Unicode(default_banner,
399 banner1 = Unicode(default_banner,
400 help="""The part of the banner to be printed before the profile"""
400 help="""The part of the banner to be printed before the profile"""
401 ).tag(config=True)
401 ).tag(config=True)
402 banner2 = Unicode('',
402 banner2 = Unicode('',
403 help="""The part of the banner to be printed after the profile"""
403 help="""The part of the banner to be printed after the profile"""
404 ).tag(config=True)
404 ).tag(config=True)
405
405
406 cache_size = Integer(1000, help=
406 cache_size = Integer(1000, help=
407 """
407 """
408 Set the size of the output cache. The default is 1000, you can
408 Set the size of the output cache. The default is 1000, you can
409 change it permanently in your config file. Setting it to 0 completely
409 change it permanently in your config file. Setting it to 0 completely
410 disables the caching system, and the minimum value accepted is 3 (if
410 disables the caching system, and the minimum value accepted is 3 (if
411 you provide a value less than 3, it is reset to 0 and a warning is
411 you provide a value less than 3, it is reset to 0 and a warning is
412 issued). This limit is defined because otherwise you'll spend more
412 issued). This limit is defined because otherwise you'll spend more
413 time re-flushing a too small cache than working
413 time re-flushing a too small cache than working
414 """
414 """
415 ).tag(config=True)
415 ).tag(config=True)
416 color_info = Bool(True, help=
416 color_info = Bool(True, help=
417 """
417 """
418 Use colors for displaying information about objects. Because this
418 Use colors for displaying information about objects. Because this
419 information is passed through a pager (like 'less'), and some pagers
419 information is passed through a pager (like 'less'), and some pagers
420 get confused with color codes, this capability can be turned off.
420 get confused with color codes, this capability can be turned off.
421 """
421 """
422 ).tag(config=True)
422 ).tag(config=True)
423 colors = CaselessStrEnum(('Neutral', 'NoColor','LightBG','Linux'),
423 colors = CaselessStrEnum(('Neutral', 'NoColor','LightBG','Linux'),
424 default_value='Neutral',
424 default_value='Neutral',
425 help="Set the color scheme (NoColor, Neutral, Linux, or LightBG)."
425 help="Set the color scheme (NoColor, Neutral, Linux, or LightBG)."
426 ).tag(config=True)
426 ).tag(config=True)
427 debug = Bool(False).tag(config=True)
427 debug = Bool(False).tag(config=True)
428 disable_failing_post_execute = Bool(False,
428 disable_failing_post_execute = Bool(False,
429 help="Don't call post-execute functions that have failed in the past."
429 help="Don't call post-execute functions that have failed in the past."
430 ).tag(config=True)
430 ).tag(config=True)
431 display_formatter = Instance(DisplayFormatter, allow_none=True)
431 display_formatter = Instance(DisplayFormatter, allow_none=True)
432 displayhook_class = Type(DisplayHook)
432 displayhook_class = Type(DisplayHook)
433 display_pub_class = Type(DisplayPublisher)
433 display_pub_class = Type(DisplayPublisher)
434
434
435 sphinxify_docstring = Bool(False, help=
435 sphinxify_docstring = Bool(False, help=
436 """
436 """
437 Enables rich html representation of docstrings. (This requires the
437 Enables rich html representation of docstrings. (This requires the
438 docrepr module).
438 docrepr module).
439 """).tag(config=True)
439 """).tag(config=True)
440
440
441 @observe("sphinxify_docstring")
441 @observe("sphinxify_docstring")
442 def _sphinxify_docstring_changed(self, change):
442 def _sphinxify_docstring_changed(self, change):
443 if change['new']:
443 if change['new']:
444 warn("`sphinxify_docstring` is provisional since IPython 5.0 and might change in future versions." , ProvisionalWarning)
444 warn("`sphinxify_docstring` is provisional since IPython 5.0 and might change in future versions." , ProvisionalWarning)
445
445
446 enable_html_pager = Bool(False, help=
446 enable_html_pager = Bool(False, help=
447 """
447 """
448 (Provisional API) enables html representation in mime bundles sent
448 (Provisional API) enables html representation in mime bundles sent
449 to pagers.
449 to pagers.
450 """).tag(config=True)
450 """).tag(config=True)
451
451
452 @observe("enable_html_pager")
452 @observe("enable_html_pager")
453 def _enable_html_pager_changed(self, change):
453 def _enable_html_pager_changed(self, change):
454 if change['new']:
454 if change['new']:
455 warn("`enable_html_pager` is provisional since IPython 5.0 and might change in future versions.", ProvisionalWarning)
455 warn("`enable_html_pager` is provisional since IPython 5.0 and might change in future versions.", ProvisionalWarning)
456
456
457 data_pub_class = None
457 data_pub_class = None
458
458
459 exit_now = Bool(False)
459 exit_now = Bool(False)
460 exiter = Instance(ExitAutocall)
460 exiter = Instance(ExitAutocall)
461 @default('exiter')
461 @default('exiter')
462 def _exiter_default(self):
462 def _exiter_default(self):
463 return ExitAutocall(self)
463 return ExitAutocall(self)
464 # Monotonically increasing execution counter
464 # Monotonically increasing execution counter
465 execution_count = Integer(1)
465 execution_count = Integer(1)
466 filename = Unicode("<ipython console>")
466 filename = Unicode("<ipython console>")
467 ipython_dir= Unicode('').tag(config=True) # Set to get_ipython_dir() in __init__
467 ipython_dir= Unicode('').tag(config=True) # Set to get_ipython_dir() in __init__
468
468
469 # Input splitter, to transform input line by line and detect when a block
469 # Input splitter, to transform input line by line and detect when a block
470 # is ready to be executed.
470 # is ready to be executed.
471 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
471 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
472 (), {'line_input_checker': True})
472 (), {'line_input_checker': True})
473
473
474 # This InputSplitter instance is used to transform completed cells before
474 # This InputSplitter instance is used to transform completed cells before
475 # running them. It allows cell magics to contain blank lines.
475 # running them. It allows cell magics to contain blank lines.
476 input_transformer_manager = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
476 input_transformer_manager = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
477 (), {'line_input_checker': False})
477 (), {'line_input_checker': False})
478
478
479 logstart = Bool(False, help=
479 logstart = Bool(False, help=
480 """
480 """
481 Start logging to the default log file in overwrite mode.
481 Start logging to the default log file in overwrite mode.
482 Use `logappend` to specify a log file to **append** logs to.
482 Use `logappend` to specify a log file to **append** logs to.
483 """
483 """
484 ).tag(config=True)
484 ).tag(config=True)
485 logfile = Unicode('', help=
485 logfile = Unicode('', help=
486 """
486 """
487 The name of the logfile to use.
487 The name of the logfile to use.
488 """
488 """
489 ).tag(config=True)
489 ).tag(config=True)
490 logappend = Unicode('', help=
490 logappend = Unicode('', help=
491 """
491 """
492 Start logging to the given file in append mode.
492 Start logging to the given file in append mode.
493 Use `logfile` to specify a log file to **overwrite** logs to.
493 Use `logfile` to specify a log file to **overwrite** logs to.
494 """
494 """
495 ).tag(config=True)
495 ).tag(config=True)
496 object_info_string_level = Enum((0,1,2), default_value=0,
496 object_info_string_level = Enum((0,1,2), default_value=0,
497 ).tag(config=True)
497 ).tag(config=True)
498 pdb = Bool(False, help=
498 pdb = Bool(False, help=
499 """
499 """
500 Automatically call the pdb debugger after every exception.
500 Automatically call the pdb debugger after every exception.
501 """
501 """
502 ).tag(config=True)
502 ).tag(config=True)
503 display_page = Bool(False,
503 display_page = Bool(False,
504 help="""If True, anything that would be passed to the pager
504 help="""If True, anything that would be passed to the pager
505 will be displayed as regular output instead."""
505 will be displayed as regular output instead."""
506 ).tag(config=True)
506 ).tag(config=True)
507
507
508 # deprecated prompt traits:
508 # deprecated prompt traits:
509
509
510 prompt_in1 = Unicode('In [\\#]: ',
510 prompt_in1 = Unicode('In [\\#]: ',
511 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
511 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
512 ).tag(config=True)
512 ).tag(config=True)
513 prompt_in2 = Unicode(' .\\D.: ',
513 prompt_in2 = Unicode(' .\\D.: ',
514 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
514 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
515 ).tag(config=True)
515 ).tag(config=True)
516 prompt_out = Unicode('Out[\\#]: ',
516 prompt_out = Unicode('Out[\\#]: ',
517 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
517 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
518 ).tag(config=True)
518 ).tag(config=True)
519 prompts_pad_left = Bool(True,
519 prompts_pad_left = Bool(True,
520 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
520 help="Deprecated since IPython 4.0 and ignored since 5.0, set TerminalInteractiveShell.prompts object directly."
521 ).tag(config=True)
521 ).tag(config=True)
522
522
523 @observe('prompt_in1', 'prompt_in2', 'prompt_out', 'prompt_pad_left')
523 @observe('prompt_in1', 'prompt_in2', 'prompt_out', 'prompt_pad_left')
524 def _prompt_trait_changed(self, change):
524 def _prompt_trait_changed(self, change):
525 name = change['name']
525 name = change['name']
526 warn("InteractiveShell.{name} is deprecated since IPython 4.0"
526 warn("InteractiveShell.{name} is deprecated since IPython 4.0"
527 " and ignored since 5.0, set TerminalInteractiveShell.prompts"
527 " and ignored since 5.0, set TerminalInteractiveShell.prompts"
528 " object directly.".format(name=name))
528 " object directly.".format(name=name))
529
529
530 # protect against weird cases where self.config may not exist:
530 # protect against weird cases where self.config may not exist:
531
531
532 show_rewritten_input = Bool(True,
532 show_rewritten_input = Bool(True,
533 help="Show rewritten input, e.g. for autocall."
533 help="Show rewritten input, e.g. for autocall."
534 ).tag(config=True)
534 ).tag(config=True)
535
535
536 quiet = Bool(False).tag(config=True)
536 quiet = Bool(False).tag(config=True)
537
537
538 history_length = Integer(10000,
538 history_length = Integer(10000,
539 help='Total length of command history'
539 help='Total length of command history'
540 ).tag(config=True)
540 ).tag(config=True)
541
541
542 history_load_length = Integer(1000, help=
542 history_load_length = Integer(1000, help=
543 """
543 """
544 The number of saved history entries to be loaded
544 The number of saved history entries to be loaded
545 into the history buffer at startup.
545 into the history buffer at startup.
546 """
546 """
547 ).tag(config=True)
547 ).tag(config=True)
548
548
549 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none', 'last_expr_or_assign'],
549 ast_node_interactivity = Enum(['all', 'last', 'last_expr', 'none', 'last_expr_or_assign'],
550 default_value='last_expr',
550 default_value='last_expr',
551 help="""
551 help="""
552 'all', 'last', 'last_expr' or 'none', 'last_expr_or_assign' specifying
552 'all', 'last', 'last_expr' or 'none', 'last_expr_or_assign' specifying
553 which nodes should be run interactively (displaying output from expressions).
553 which nodes should be run interactively (displaying output from expressions).
554 """
554 """
555 ).tag(config=True)
555 ).tag(config=True)
556
556
557 # TODO: this part of prompt management should be moved to the frontends.
557 # TODO: this part of prompt management should be moved to the frontends.
558 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
558 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
559 separate_in = SeparateUnicode('\n').tag(config=True)
559 separate_in = SeparateUnicode('\n').tag(config=True)
560 separate_out = SeparateUnicode('').tag(config=True)
560 separate_out = SeparateUnicode('').tag(config=True)
561 separate_out2 = SeparateUnicode('').tag(config=True)
561 separate_out2 = SeparateUnicode('').tag(config=True)
562 wildcards_case_sensitive = Bool(True).tag(config=True)
562 wildcards_case_sensitive = Bool(True).tag(config=True)
563 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
563 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
564 default_value='Context',
564 default_value='Context',
565 help="Switch modes for the IPython exception handlers."
565 help="Switch modes for the IPython exception handlers."
566 ).tag(config=True)
566 ).tag(config=True)
567
567
568 # Subcomponents of InteractiveShell
568 # Subcomponents of InteractiveShell
569 alias_manager = Instance('IPython.core.alias.AliasManager', allow_none=True)
569 alias_manager = Instance('IPython.core.alias.AliasManager', allow_none=True)
570 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager', allow_none=True)
570 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager', allow_none=True)
571 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap', allow_none=True)
571 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap', allow_none=True)
572 display_trap = Instance('IPython.core.display_trap.DisplayTrap', allow_none=True)
572 display_trap = Instance('IPython.core.display_trap.DisplayTrap', allow_none=True)
573 extension_manager = Instance('IPython.core.extensions.ExtensionManager', allow_none=True)
573 extension_manager = Instance('IPython.core.extensions.ExtensionManager', allow_none=True)
574 payload_manager = Instance('IPython.core.payload.PayloadManager', allow_none=True)
574 payload_manager = Instance('IPython.core.payload.PayloadManager', allow_none=True)
575 history_manager = Instance('IPython.core.history.HistoryAccessorBase', allow_none=True)
575 history_manager = Instance('IPython.core.history.HistoryAccessorBase', allow_none=True)
576 magics_manager = Instance('IPython.core.magic.MagicsManager', allow_none=True)
576 magics_manager = Instance('IPython.core.magic.MagicsManager', allow_none=True)
577
577
578 profile_dir = Instance('IPython.core.application.ProfileDir', allow_none=True)
578 profile_dir = Instance('IPython.core.application.ProfileDir', allow_none=True)
579 @property
579 @property
580 def profile(self):
580 def profile(self):
581 if self.profile_dir is not None:
581 if self.profile_dir is not None:
582 name = os.path.basename(self.profile_dir.location)
582 name = os.path.basename(self.profile_dir.location)
583 return name.replace('profile_','')
583 return name.replace('profile_','')
584
584
585
585
586 # Private interface
586 # Private interface
587 _post_execute = Dict()
587 _post_execute = Dict()
588
588
589 # Tracks any GUI loop loaded for pylab
589 # Tracks any GUI loop loaded for pylab
590 pylab_gui_select = None
590 pylab_gui_select = None
591
591
592 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
592 last_execution_succeeded = Bool(True, help='Did last executed command succeeded')
593
593
594 last_execution_result = Instance('IPython.core.interactiveshell.ExecutionResult', help='Result of executing the last command', allow_none=True)
594 last_execution_result = Instance('IPython.core.interactiveshell.ExecutionResult', help='Result of executing the last command', allow_none=True)
595
595
596 def __init__(self, ipython_dir=None, profile_dir=None,
596 def __init__(self, ipython_dir=None, profile_dir=None,
597 user_module=None, user_ns=None,
597 user_module=None, user_ns=None,
598 custom_exceptions=((), None), **kwargs):
598 custom_exceptions=((), None), **kwargs):
599
599
600 # This is where traits with a config_key argument are updated
600 # This is where traits with a config_key argument are updated
601 # from the values on config.
601 # from the values on config.
602 super(InteractiveShell, self).__init__(**kwargs)
602 super(InteractiveShell, self).__init__(**kwargs)
603 if 'PromptManager' in self.config:
603 if 'PromptManager' in self.config:
604 warn('As of IPython 5.0 `PromptManager` config will have no effect'
604 warn('As of IPython 5.0 `PromptManager` config will have no effect'
605 ' and has been replaced by TerminalInteractiveShell.prompts_class')
605 ' and has been replaced by TerminalInteractiveShell.prompts_class')
606 self.configurables = [self]
606 self.configurables = [self]
607
607
608 # These are relatively independent and stateless
608 # These are relatively independent and stateless
609 self.init_ipython_dir(ipython_dir)
609 self.init_ipython_dir(ipython_dir)
610 self.init_profile_dir(profile_dir)
610 self.init_profile_dir(profile_dir)
611 self.init_instance_attrs()
611 self.init_instance_attrs()
612 self.init_environment()
612 self.init_environment()
613
613
614 # Check if we're in a virtualenv, and set up sys.path.
614 # Check if we're in a virtualenv, and set up sys.path.
615 self.init_virtualenv()
615 self.init_virtualenv()
616
616
617 # Create namespaces (user_ns, user_global_ns, etc.)
617 # Create namespaces (user_ns, user_global_ns, etc.)
618 self.init_create_namespaces(user_module, user_ns)
618 self.init_create_namespaces(user_module, user_ns)
619 # This has to be done after init_create_namespaces because it uses
619 # This has to be done after init_create_namespaces because it uses
620 # something in self.user_ns, but before init_sys_modules, which
620 # something in self.user_ns, but before init_sys_modules, which
621 # is the first thing to modify sys.
621 # is the first thing to modify sys.
622 # TODO: When we override sys.stdout and sys.stderr before this class
622 # TODO: When we override sys.stdout and sys.stderr before this class
623 # is created, we are saving the overridden ones here. Not sure if this
623 # is created, we are saving the overridden ones here. Not sure if this
624 # is what we want to do.
624 # is what we want to do.
625 self.save_sys_module_state()
625 self.save_sys_module_state()
626 self.init_sys_modules()
626 self.init_sys_modules()
627
627
628 # While we're trying to have each part of the code directly access what
628 # While we're trying to have each part of the code directly access what
629 # it needs without keeping redundant references to objects, we have too
629 # it needs without keeping redundant references to objects, we have too
630 # much legacy code that expects ip.db to exist.
630 # much legacy code that expects ip.db to exist.
631 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
631 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
632
632
633 self.init_history()
633 self.init_history()
634 self.init_encoding()
634 self.init_encoding()
635 self.init_prefilter()
635 self.init_prefilter()
636
636
637 self.init_syntax_highlighting()
637 self.init_syntax_highlighting()
638 self.init_hooks()
638 self.init_hooks()
639 self.init_events()
639 self.init_events()
640 self.init_pushd_popd_magic()
640 self.init_pushd_popd_magic()
641 self.init_user_ns()
641 self.init_user_ns()
642 self.init_logger()
642 self.init_logger()
643 self.init_builtins()
643 self.init_builtins()
644
644
645 # The following was in post_config_initialization
645 # The following was in post_config_initialization
646 self.init_inspector()
646 self.init_inspector()
647 self.raw_input_original = input
647 self.raw_input_original = input
648 self.init_completer()
648 self.init_completer()
649 # TODO: init_io() needs to happen before init_traceback handlers
649 # TODO: init_io() needs to happen before init_traceback handlers
650 # because the traceback handlers hardcode the stdout/stderr streams.
650 # because the traceback handlers hardcode the stdout/stderr streams.
651 # This logic in in debugger.Pdb and should eventually be changed.
651 # This logic in in debugger.Pdb and should eventually be changed.
652 self.init_io()
652 self.init_io()
653 self.init_traceback_handlers(custom_exceptions)
653 self.init_traceback_handlers(custom_exceptions)
654 self.init_prompts()
654 self.init_prompts()
655 self.init_display_formatter()
655 self.init_display_formatter()
656 self.init_display_pub()
656 self.init_display_pub()
657 self.init_data_pub()
657 self.init_data_pub()
658 self.init_displayhook()
658 self.init_displayhook()
659 self.init_magics()
659 self.init_magics()
660 self.init_alias()
660 self.init_alias()
661 self.init_logstart()
661 self.init_logstart()
662 self.init_pdb()
662 self.init_pdb()
663 self.init_extension_manager()
663 self.init_extension_manager()
664 self.init_payload()
664 self.init_payload()
665 self.init_deprecation_warnings()
665 self.init_deprecation_warnings()
666 self.hooks.late_startup_hook()
666 self.hooks.late_startup_hook()
667 self.events.trigger('shell_initialized', self)
667 self.events.trigger('shell_initialized', self)
668 atexit.register(self.atexit_operations)
668 atexit.register(self.atexit_operations)
669
669
670 def get_ipython(self):
670 def get_ipython(self):
671 """Return the currently running IPython instance."""
671 """Return the currently running IPython instance."""
672 return self
672 return self
673
673
674 #-------------------------------------------------------------------------
674 #-------------------------------------------------------------------------
675 # Trait changed handlers
675 # Trait changed handlers
676 #-------------------------------------------------------------------------
676 #-------------------------------------------------------------------------
677 @observe('ipython_dir')
677 @observe('ipython_dir')
678 def _ipython_dir_changed(self, change):
678 def _ipython_dir_changed(self, change):
679 ensure_dir_exists(change['new'])
679 ensure_dir_exists(change['new'])
680
680
681 def set_autoindent(self,value=None):
681 def set_autoindent(self,value=None):
682 """Set the autoindent flag.
682 """Set the autoindent flag.
683
683
684 If called with no arguments, it acts as a toggle."""
684 If called with no arguments, it acts as a toggle."""
685 if value is None:
685 if value is None:
686 self.autoindent = not self.autoindent
686 self.autoindent = not self.autoindent
687 else:
687 else:
688 self.autoindent = value
688 self.autoindent = value
689
689
690 #-------------------------------------------------------------------------
690 #-------------------------------------------------------------------------
691 # init_* methods called by __init__
691 # init_* methods called by __init__
692 #-------------------------------------------------------------------------
692 #-------------------------------------------------------------------------
693
693
694 def init_ipython_dir(self, ipython_dir):
694 def init_ipython_dir(self, ipython_dir):
695 if ipython_dir is not None:
695 if ipython_dir is not None:
696 self.ipython_dir = ipython_dir
696 self.ipython_dir = ipython_dir
697 return
697 return
698
698
699 self.ipython_dir = get_ipython_dir()
699 self.ipython_dir = get_ipython_dir()
700
700
701 def init_profile_dir(self, profile_dir):
701 def init_profile_dir(self, profile_dir):
702 if profile_dir is not None:
702 if profile_dir is not None:
703 self.profile_dir = profile_dir
703 self.profile_dir = profile_dir
704 return
704 return
705 self.profile_dir =\
705 self.profile_dir =\
706 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
706 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
707
707
708 def init_instance_attrs(self):
708 def init_instance_attrs(self):
709 self.more = False
709 self.more = False
710
710
711 # command compiler
711 # command compiler
712 self.compile = CachingCompiler()
712 self.compile = CachingCompiler()
713
713
714 # Make an empty namespace, which extension writers can rely on both
714 # Make an empty namespace, which extension writers can rely on both
715 # existing and NEVER being used by ipython itself. This gives them a
715 # existing and NEVER being used by ipython itself. This gives them a
716 # convenient location for storing additional information and state
716 # convenient location for storing additional information and state
717 # their extensions may require, without fear of collisions with other
717 # their extensions may require, without fear of collisions with other
718 # ipython names that may develop later.
718 # ipython names that may develop later.
719 self.meta = Struct()
719 self.meta = Struct()
720
720
721 # Temporary files used for various purposes. Deleted at exit.
721 # Temporary files used for various purposes. Deleted at exit.
722 self.tempfiles = []
722 self.tempfiles = []
723 self.tempdirs = []
723 self.tempdirs = []
724
724
725 # keep track of where we started running (mainly for crash post-mortem)
725 # keep track of where we started running (mainly for crash post-mortem)
726 # This is not being used anywhere currently.
726 # This is not being used anywhere currently.
727 self.starting_dir = os.getcwd()
727 self.starting_dir = os.getcwd()
728
728
729 # Indentation management
729 # Indentation management
730 self.indent_current_nsp = 0
730 self.indent_current_nsp = 0
731
731
732 # Dict to track post-execution functions that have been registered
732 # Dict to track post-execution functions that have been registered
733 self._post_execute = {}
733 self._post_execute = {}
734
734
735 def init_environment(self):
735 def init_environment(self):
736 """Any changes we need to make to the user's environment."""
736 """Any changes we need to make to the user's environment."""
737 pass
737 pass
738
738
739 def init_encoding(self):
739 def init_encoding(self):
740 # Get system encoding at startup time. Certain terminals (like Emacs
740 # Get system encoding at startup time. Certain terminals (like Emacs
741 # under Win32 have it set to None, and we need to have a known valid
741 # under Win32 have it set to None, and we need to have a known valid
742 # encoding to use in the raw_input() method
742 # encoding to use in the raw_input() method
743 try:
743 try:
744 self.stdin_encoding = sys.stdin.encoding or 'ascii'
744 self.stdin_encoding = sys.stdin.encoding or 'ascii'
745 except AttributeError:
745 except AttributeError:
746 self.stdin_encoding = 'ascii'
746 self.stdin_encoding = 'ascii'
747
747
748
748
749 @observe('colors')
749 @observe('colors')
750 def init_syntax_highlighting(self, changes=None):
750 def init_syntax_highlighting(self, changes=None):
751 # Python source parser/formatter for syntax highlighting
751 # Python source parser/formatter for syntax highlighting
752 pyformat = PyColorize.Parser(style=self.colors, parent=self).format
752 pyformat = PyColorize.Parser(style=self.colors, parent=self).format
753 self.pycolorize = lambda src: pyformat(src,'str')
753 self.pycolorize = lambda src: pyformat(src,'str')
754
754
755 def refresh_style(self):
755 def refresh_style(self):
756 # No-op here, used in subclass
756 # No-op here, used in subclass
757 pass
757 pass
758
758
759 def init_pushd_popd_magic(self):
759 def init_pushd_popd_magic(self):
760 # for pushd/popd management
760 # for pushd/popd management
761 self.home_dir = get_home_dir()
761 self.home_dir = get_home_dir()
762
762
763 self.dir_stack = []
763 self.dir_stack = []
764
764
765 def init_logger(self):
765 def init_logger(self):
766 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
766 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
767 logmode='rotate')
767 logmode='rotate')
768
768
769 def init_logstart(self):
769 def init_logstart(self):
770 """Initialize logging in case it was requested at the command line.
770 """Initialize logging in case it was requested at the command line.
771 """
771 """
772 if self.logappend:
772 if self.logappend:
773 self.magic('logstart %s append' % self.logappend)
773 self.magic('logstart %s append' % self.logappend)
774 elif self.logfile:
774 elif self.logfile:
775 self.magic('logstart %s' % self.logfile)
775 self.magic('logstart %s' % self.logfile)
776 elif self.logstart:
776 elif self.logstart:
777 self.magic('logstart')
777 self.magic('logstart')
778
778
779 def init_deprecation_warnings(self):
779 def init_deprecation_warnings(self):
780 """
780 """
781 register default filter for deprecation warning.
781 register default filter for deprecation warning.
782
782
783 This will allow deprecation warning of function used interactively to show
783 This will allow deprecation warning of function used interactively to show
784 warning to users, and still hide deprecation warning from libraries import.
784 warning to users, and still hide deprecation warning from libraries import.
785 """
785 """
786 warnings.filterwarnings("default", category=DeprecationWarning, module=self.user_ns.get("__name__"))
786 warnings.filterwarnings("default", category=DeprecationWarning, module=self.user_ns.get("__name__"))
787
787
788 def init_builtins(self):
788 def init_builtins(self):
789 # A single, static flag that we set to True. Its presence indicates
789 # A single, static flag that we set to True. Its presence indicates
790 # that an IPython shell has been created, and we make no attempts at
790 # that an IPython shell has been created, and we make no attempts at
791 # removing on exit or representing the existence of more than one
791 # removing on exit or representing the existence of more than one
792 # IPython at a time.
792 # IPython at a time.
793 builtin_mod.__dict__['__IPYTHON__'] = True
793 builtin_mod.__dict__['__IPYTHON__'] = True
794 builtin_mod.__dict__['display'] = display
794 builtin_mod.__dict__['display'] = display
795
795
796 self.builtin_trap = BuiltinTrap(shell=self)
796 self.builtin_trap = BuiltinTrap(shell=self)
797
797
798 @observe('colors')
798 @observe('colors')
799 def init_inspector(self, changes=None):
799 def init_inspector(self, changes=None):
800 # Object inspector
800 # Object inspector
801 self.inspector = oinspect.Inspector(oinspect.InspectColors,
801 self.inspector = oinspect.Inspector(oinspect.InspectColors,
802 PyColorize.ANSICodeColors,
802 PyColorize.ANSICodeColors,
803 self.colors,
803 self.colors,
804 self.object_info_string_level)
804 self.object_info_string_level)
805
805
806 def init_io(self):
806 def init_io(self):
807 # This will just use sys.stdout and sys.stderr. If you want to
807 # This will just use sys.stdout and sys.stderr. If you want to
808 # override sys.stdout and sys.stderr themselves, you need to do that
808 # override sys.stdout and sys.stderr themselves, you need to do that
809 # *before* instantiating this class, because io holds onto
809 # *before* instantiating this class, because io holds onto
810 # references to the underlying streams.
810 # references to the underlying streams.
811 # io.std* are deprecated, but don't show our own deprecation warnings
811 # io.std* are deprecated, but don't show our own deprecation warnings
812 # during initialization of the deprecated API.
812 # during initialization of the deprecated API.
813 with warnings.catch_warnings():
813 with warnings.catch_warnings():
814 warnings.simplefilter('ignore', DeprecationWarning)
814 warnings.simplefilter('ignore', DeprecationWarning)
815 io.stdout = io.IOStream(sys.stdout)
815 io.stdout = io.IOStream(sys.stdout)
816 io.stderr = io.IOStream(sys.stderr)
816 io.stderr = io.IOStream(sys.stderr)
817
817
818 def init_prompts(self):
818 def init_prompts(self):
819 # Set system prompts, so that scripts can decide if they are running
819 # Set system prompts, so that scripts can decide if they are running
820 # interactively.
820 # interactively.
821 sys.ps1 = 'In : '
821 sys.ps1 = 'In : '
822 sys.ps2 = '...: '
822 sys.ps2 = '...: '
823 sys.ps3 = 'Out: '
823 sys.ps3 = 'Out: '
824
824
825 def init_display_formatter(self):
825 def init_display_formatter(self):
826 self.display_formatter = DisplayFormatter(parent=self)
826 self.display_formatter = DisplayFormatter(parent=self)
827 self.configurables.append(self.display_formatter)
827 self.configurables.append(self.display_formatter)
828
828
829 def init_display_pub(self):
829 def init_display_pub(self):
830 self.display_pub = self.display_pub_class(parent=self)
830 self.display_pub = self.display_pub_class(parent=self)
831 self.configurables.append(self.display_pub)
831 self.configurables.append(self.display_pub)
832
832
833 def init_data_pub(self):
833 def init_data_pub(self):
834 if not self.data_pub_class:
834 if not self.data_pub_class:
835 self.data_pub = None
835 self.data_pub = None
836 return
836 return
837 self.data_pub = self.data_pub_class(parent=self)
837 self.data_pub = self.data_pub_class(parent=self)
838 self.configurables.append(self.data_pub)
838 self.configurables.append(self.data_pub)
839
839
840 def init_displayhook(self):
840 def init_displayhook(self):
841 # Initialize displayhook, set in/out prompts and printing system
841 # Initialize displayhook, set in/out prompts and printing system
842 self.displayhook = self.displayhook_class(
842 self.displayhook = self.displayhook_class(
843 parent=self,
843 parent=self,
844 shell=self,
844 shell=self,
845 cache_size=self.cache_size,
845 cache_size=self.cache_size,
846 )
846 )
847 self.configurables.append(self.displayhook)
847 self.configurables.append(self.displayhook)
848 # This is a context manager that installs/revmoes the displayhook at
848 # This is a context manager that installs/revmoes the displayhook at
849 # the appropriate time.
849 # the appropriate time.
850 self.display_trap = DisplayTrap(hook=self.displayhook)
850 self.display_trap = DisplayTrap(hook=self.displayhook)
851
851
852 def init_virtualenv(self):
852 def init_virtualenv(self):
853 """Add a virtualenv to sys.path so the user can import modules from it.
853 """Add a virtualenv to sys.path so the user can import modules from it.
854 This isn't perfect: it doesn't use the Python interpreter with which the
854 This isn't perfect: it doesn't use the Python interpreter with which the
855 virtualenv was built, and it ignores the --no-site-packages option. A
855 virtualenv was built, and it ignores the --no-site-packages option. A
856 warning will appear suggesting the user installs IPython in the
856 warning will appear suggesting the user installs IPython in the
857 virtualenv, but for many cases, it probably works well enough.
857 virtualenv, but for many cases, it probably works well enough.
858
858
859 Adapted from code snippets online.
859 Adapted from code snippets online.
860
860
861 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
861 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
862 """
862 """
863 if 'VIRTUAL_ENV' not in os.environ:
863 if 'VIRTUAL_ENV' not in os.environ:
864 # Not in a virtualenv
864 # Not in a virtualenv
865 return
865 return
866
866
867 p = os.path.normcase(sys.executable)
867 p = os.path.normcase(sys.executable)
868 p_venv = os.path.normcase(os.environ['VIRTUAL_ENV'])
868 p_venv = os.path.normcase(os.environ['VIRTUAL_ENV'])
869
869
870 # executable path should end like /bin/python or \\scripts\\python.exe
870 # executable path should end like /bin/python or \\scripts\\python.exe
871 p_exe_up2 = os.path.dirname(os.path.dirname(p))
871 p_exe_up2 = os.path.dirname(os.path.dirname(p))
872 if p_exe_up2 and os.path.exists(p_venv) and os.path.samefile(p_exe_up2, p_venv):
872 if p_exe_up2 and os.path.exists(p_venv) and os.path.samefile(p_exe_up2, p_venv):
873 # Our exe is inside the virtualenv, don't need to do anything.
873 # Our exe is inside the virtualenv, don't need to do anything.
874 return
874 return
875
875
876 # fallback venv detection:
876 # fallback venv detection:
877 # stdlib venv may symlink sys.executable, so we can't use realpath.
877 # stdlib venv may symlink sys.executable, so we can't use realpath.
878 # but others can symlink *to* the venv Python, so we can't just use sys.executable.
878 # but others can symlink *to* the venv Python, so we can't just use sys.executable.
879 # So we just check every item in the symlink tree (generally <= 3)
879 # So we just check every item in the symlink tree (generally <= 3)
880 paths = [p]
880 paths = [p]
881 while os.path.islink(p):
881 while os.path.islink(p):
882 p = os.path.normcase(os.path.join(os.path.dirname(p), os.readlink(p)))
882 p = os.path.normcase(os.path.join(os.path.dirname(p), os.readlink(p)))
883 paths.append(p)
883 paths.append(p)
884
884
885 # In Cygwin paths like "c:\..." and '\cygdrive\c\...' are possible
885 # In Cygwin paths like "c:\..." and '\cygdrive\c\...' are possible
886 if p_venv.startswith('\\cygdrive'):
886 if p_venv.startswith('\\cygdrive'):
887 p_venv = p_venv[11:]
887 p_venv = p_venv[11:]
888 elif len(p_venv) >= 2 and p_venv[1] == ':':
888 elif len(p_venv) >= 2 and p_venv[1] == ':':
889 p_venv = p_venv[2:]
889 p_venv = p_venv[2:]
890
890
891 if any(p_venv in p for p in paths):
891 if any(p_venv in p for p in paths):
892 # Running properly in the virtualenv, don't need to do anything
892 # Running properly in the virtualenv, don't need to do anything
893 return
893 return
894
894
895 warn("Attempting to work in a virtualenv. If you encounter problems, please "
895 warn("Attempting to work in a virtualenv. If you encounter problems, please "
896 "install IPython inside the virtualenv.")
896 "install IPython inside the virtualenv.")
897 if sys.platform == "win32":
897 if sys.platform == "win32":
898 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
898 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
899 else:
899 else:
900 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
900 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
901 'python%d.%d' % sys.version_info[:2], 'site-packages')
901 'python%d.%d' % sys.version_info[:2], 'site-packages')
902
902
903 import site
903 import site
904 sys.path.insert(0, virtual_env)
904 sys.path.insert(0, virtual_env)
905 site.addsitedir(virtual_env)
905 site.addsitedir(virtual_env)
906
906
907 #-------------------------------------------------------------------------
907 #-------------------------------------------------------------------------
908 # Things related to injections into the sys module
908 # Things related to injections into the sys module
909 #-------------------------------------------------------------------------
909 #-------------------------------------------------------------------------
910
910
911 def save_sys_module_state(self):
911 def save_sys_module_state(self):
912 """Save the state of hooks in the sys module.
912 """Save the state of hooks in the sys module.
913
913
914 This has to be called after self.user_module is created.
914 This has to be called after self.user_module is created.
915 """
915 """
916 self._orig_sys_module_state = {'stdin': sys.stdin,
916 self._orig_sys_module_state = {'stdin': sys.stdin,
917 'stdout': sys.stdout,
917 'stdout': sys.stdout,
918 'stderr': sys.stderr,
918 'stderr': sys.stderr,
919 'excepthook': sys.excepthook}
919 'excepthook': sys.excepthook}
920 self._orig_sys_modules_main_name = self.user_module.__name__
920 self._orig_sys_modules_main_name = self.user_module.__name__
921 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
921 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
922
922
923 def restore_sys_module_state(self):
923 def restore_sys_module_state(self):
924 """Restore the state of the sys module."""
924 """Restore the state of the sys module."""
925 try:
925 try:
926 for k, v in self._orig_sys_module_state.items():
926 for k, v in self._orig_sys_module_state.items():
927 setattr(sys, k, v)
927 setattr(sys, k, v)
928 except AttributeError:
928 except AttributeError:
929 pass
929 pass
930 # Reset what what done in self.init_sys_modules
930 # Reset what what done in self.init_sys_modules
931 if self._orig_sys_modules_main_mod is not None:
931 if self._orig_sys_modules_main_mod is not None:
932 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
932 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
933
933
934 #-------------------------------------------------------------------------
934 #-------------------------------------------------------------------------
935 # Things related to the banner
935 # Things related to the banner
936 #-------------------------------------------------------------------------
936 #-------------------------------------------------------------------------
937
937
938 @property
938 @property
939 def banner(self):
939 def banner(self):
940 banner = self.banner1
940 banner = self.banner1
941 if self.profile and self.profile != 'default':
941 if self.profile and self.profile != 'default':
942 banner += '\nIPython profile: %s\n' % self.profile
942 banner += '\nIPython profile: %s\n' % self.profile
943 if self.banner2:
943 if self.banner2:
944 banner += '\n' + self.banner2
944 banner += '\n' + self.banner2
945 return banner
945 return banner
946
946
947 def show_banner(self, banner=None):
947 def show_banner(self, banner=None):
948 if banner is None:
948 if banner is None:
949 banner = self.banner
949 banner = self.banner
950 sys.stdout.write(banner)
950 sys.stdout.write(banner)
951
951
952 #-------------------------------------------------------------------------
952 #-------------------------------------------------------------------------
953 # Things related to hooks
953 # Things related to hooks
954 #-------------------------------------------------------------------------
954 #-------------------------------------------------------------------------
955
955
956 def init_hooks(self):
956 def init_hooks(self):
957 # hooks holds pointers used for user-side customizations
957 # hooks holds pointers used for user-side customizations
958 self.hooks = Struct()
958 self.hooks = Struct()
959
959
960 self.strdispatchers = {}
960 self.strdispatchers = {}
961
961
962 # Set all default hooks, defined in the IPython.hooks module.
962 # Set all default hooks, defined in the IPython.hooks module.
963 hooks = IPython.core.hooks
963 hooks = IPython.core.hooks
964 for hook_name in hooks.__all__:
964 for hook_name in hooks.__all__:
965 # default hooks have priority 100, i.e. low; user hooks should have
965 # default hooks have priority 100, i.e. low; user hooks should have
966 # 0-100 priority
966 # 0-100 priority
967 self.set_hook(hook_name,getattr(hooks,hook_name), 100, _warn_deprecated=False)
967 self.set_hook(hook_name,getattr(hooks,hook_name), 100, _warn_deprecated=False)
968
968
969 if self.display_page:
969 if self.display_page:
970 self.set_hook('show_in_pager', page.as_hook(page.display_page), 90)
970 self.set_hook('show_in_pager', page.as_hook(page.display_page), 90)
971
971
972 def set_hook(self,name,hook, priority=50, str_key=None, re_key=None,
972 def set_hook(self,name,hook, priority=50, str_key=None, re_key=None,
973 _warn_deprecated=True):
973 _warn_deprecated=True):
974 """set_hook(name,hook) -> sets an internal IPython hook.
974 """set_hook(name,hook) -> sets an internal IPython hook.
975
975
976 IPython exposes some of its internal API as user-modifiable hooks. By
976 IPython exposes some of its internal API as user-modifiable hooks. By
977 adding your function to one of these hooks, you can modify IPython's
977 adding your function to one of these hooks, you can modify IPython's
978 behavior to call at runtime your own routines."""
978 behavior to call at runtime your own routines."""
979
979
980 # At some point in the future, this should validate the hook before it
980 # At some point in the future, this should validate the hook before it
981 # accepts it. Probably at least check that the hook takes the number
981 # accepts it. Probably at least check that the hook takes the number
982 # of args it's supposed to.
982 # of args it's supposed to.
983
983
984 f = types.MethodType(hook,self)
984 f = types.MethodType(hook,self)
985
985
986 # check if the hook is for strdispatcher first
986 # check if the hook is for strdispatcher first
987 if str_key is not None:
987 if str_key is not None:
988 sdp = self.strdispatchers.get(name, StrDispatch())
988 sdp = self.strdispatchers.get(name, StrDispatch())
989 sdp.add_s(str_key, f, priority )
989 sdp.add_s(str_key, f, priority )
990 self.strdispatchers[name] = sdp
990 self.strdispatchers[name] = sdp
991 return
991 return
992 if re_key is not None:
992 if re_key is not None:
993 sdp = self.strdispatchers.get(name, StrDispatch())
993 sdp = self.strdispatchers.get(name, StrDispatch())
994 sdp.add_re(re.compile(re_key), f, priority )
994 sdp.add_re(re.compile(re_key), f, priority )
995 self.strdispatchers[name] = sdp
995 self.strdispatchers[name] = sdp
996 return
996 return
997
997
998 dp = getattr(self.hooks, name, None)
998 dp = getattr(self.hooks, name, None)
999 if name not in IPython.core.hooks.__all__:
999 if name not in IPython.core.hooks.__all__:
1000 print("Warning! Hook '%s' is not one of %s" % \
1000 print("Warning! Hook '%s' is not one of %s" % \
1001 (name, IPython.core.hooks.__all__ ))
1001 (name, IPython.core.hooks.__all__ ))
1002
1002
1003 if _warn_deprecated and (name in IPython.core.hooks.deprecated):
1003 if _warn_deprecated and (name in IPython.core.hooks.deprecated):
1004 alternative = IPython.core.hooks.deprecated[name]
1004 alternative = IPython.core.hooks.deprecated[name]
1005 warn("Hook {} is deprecated. Use {} instead.".format(name, alternative), stacklevel=2)
1005 warn("Hook {} is deprecated. Use {} instead.".format(name, alternative), stacklevel=2)
1006
1006
1007 if not dp:
1007 if not dp:
1008 dp = IPython.core.hooks.CommandChainDispatcher()
1008 dp = IPython.core.hooks.CommandChainDispatcher()
1009
1009
1010 try:
1010 try:
1011 dp.add(f,priority)
1011 dp.add(f,priority)
1012 except AttributeError:
1012 except AttributeError:
1013 # it was not commandchain, plain old func - replace
1013 # it was not commandchain, plain old func - replace
1014 dp = f
1014 dp = f
1015
1015
1016 setattr(self.hooks,name, dp)
1016 setattr(self.hooks,name, dp)
1017
1017
1018 #-------------------------------------------------------------------------
1018 #-------------------------------------------------------------------------
1019 # Things related to events
1019 # Things related to events
1020 #-------------------------------------------------------------------------
1020 #-------------------------------------------------------------------------
1021
1021
1022 def init_events(self):
1022 def init_events(self):
1023 self.events = EventManager(self, available_events)
1023 self.events = EventManager(self, available_events)
1024
1024
1025 self.events.register("pre_execute", self._clear_warning_registry)
1025 self.events.register("pre_execute", self._clear_warning_registry)
1026
1026
1027 def register_post_execute(self, func):
1027 def register_post_execute(self, func):
1028 """DEPRECATED: Use ip.events.register('post_run_cell', func)
1028 """DEPRECATED: Use ip.events.register('post_run_cell', func)
1029
1029
1030 Register a function for calling after code execution.
1030 Register a function for calling after code execution.
1031 """
1031 """
1032 warn("ip.register_post_execute is deprecated, use "
1032 warn("ip.register_post_execute is deprecated, use "
1033 "ip.events.register('post_run_cell', func) instead.", stacklevel=2)
1033 "ip.events.register('post_run_cell', func) instead.", stacklevel=2)
1034 self.events.register('post_run_cell', func)
1034 self.events.register('post_run_cell', func)
1035
1035
1036 def _clear_warning_registry(self):
1036 def _clear_warning_registry(self):
1037 # clear the warning registry, so that different code blocks with
1037 # clear the warning registry, so that different code blocks with
1038 # overlapping line number ranges don't cause spurious suppression of
1038 # overlapping line number ranges don't cause spurious suppression of
1039 # warnings (see gh-6611 for details)
1039 # warnings (see gh-6611 for details)
1040 if "__warningregistry__" in self.user_global_ns:
1040 if "__warningregistry__" in self.user_global_ns:
1041 del self.user_global_ns["__warningregistry__"]
1041 del self.user_global_ns["__warningregistry__"]
1042
1042
1043 #-------------------------------------------------------------------------
1043 #-------------------------------------------------------------------------
1044 # Things related to the "main" module
1044 # Things related to the "main" module
1045 #-------------------------------------------------------------------------
1045 #-------------------------------------------------------------------------
1046
1046
1047 def new_main_mod(self, filename, modname):
1047 def new_main_mod(self, filename, modname):
1048 """Return a new 'main' module object for user code execution.
1048 """Return a new 'main' module object for user code execution.
1049
1049
1050 ``filename`` should be the path of the script which will be run in the
1050 ``filename`` should be the path of the script which will be run in the
1051 module. Requests with the same filename will get the same module, with
1051 module. Requests with the same filename will get the same module, with
1052 its namespace cleared.
1052 its namespace cleared.
1053
1053
1054 ``modname`` should be the module name - normally either '__main__' or
1054 ``modname`` should be the module name - normally either '__main__' or
1055 the basename of the file without the extension.
1055 the basename of the file without the extension.
1056
1056
1057 When scripts are executed via %run, we must keep a reference to their
1057 When scripts are executed via %run, we must keep a reference to their
1058 __main__ module around so that Python doesn't
1058 __main__ module around so that Python doesn't
1059 clear it, rendering references to module globals useless.
1059 clear it, rendering references to module globals useless.
1060
1060
1061 This method keeps said reference in a private dict, keyed by the
1061 This method keeps said reference in a private dict, keyed by the
1062 absolute path of the script. This way, for multiple executions of the
1062 absolute path of the script. This way, for multiple executions of the
1063 same script we only keep one copy of the namespace (the last one),
1063 same script we only keep one copy of the namespace (the last one),
1064 thus preventing memory leaks from old references while allowing the
1064 thus preventing memory leaks from old references while allowing the
1065 objects from the last execution to be accessible.
1065 objects from the last execution to be accessible.
1066 """
1066 """
1067 filename = os.path.abspath(filename)
1067 filename = os.path.abspath(filename)
1068 try:
1068 try:
1069 main_mod = self._main_mod_cache[filename]
1069 main_mod = self._main_mod_cache[filename]
1070 except KeyError:
1070 except KeyError:
1071 main_mod = self._main_mod_cache[filename] = types.ModuleType(
1071 main_mod = self._main_mod_cache[filename] = types.ModuleType(
1072 modname,
1072 modname,
1073 doc="Module created for script run in IPython")
1073 doc="Module created for script run in IPython")
1074 else:
1074 else:
1075 main_mod.__dict__.clear()
1075 main_mod.__dict__.clear()
1076 main_mod.__name__ = modname
1076 main_mod.__name__ = modname
1077
1077
1078 main_mod.__file__ = filename
1078 main_mod.__file__ = filename
1079 # It seems pydoc (and perhaps others) needs any module instance to
1079 # It seems pydoc (and perhaps others) needs any module instance to
1080 # implement a __nonzero__ method
1080 # implement a __nonzero__ method
1081 main_mod.__nonzero__ = lambda : True
1081 main_mod.__nonzero__ = lambda : True
1082
1082
1083 return main_mod
1083 return main_mod
1084
1084
1085 def clear_main_mod_cache(self):
1085 def clear_main_mod_cache(self):
1086 """Clear the cache of main modules.
1086 """Clear the cache of main modules.
1087
1087
1088 Mainly for use by utilities like %reset.
1088 Mainly for use by utilities like %reset.
1089
1089
1090 Examples
1090 Examples
1091 --------
1091 --------
1092
1092
1093 In [15]: import IPython
1093 In [15]: import IPython
1094
1094
1095 In [16]: m = _ip.new_main_mod(IPython.__file__, 'IPython')
1095 In [16]: m = _ip.new_main_mod(IPython.__file__, 'IPython')
1096
1096
1097 In [17]: len(_ip._main_mod_cache) > 0
1097 In [17]: len(_ip._main_mod_cache) > 0
1098 Out[17]: True
1098 Out[17]: True
1099
1099
1100 In [18]: _ip.clear_main_mod_cache()
1100 In [18]: _ip.clear_main_mod_cache()
1101
1101
1102 In [19]: len(_ip._main_mod_cache) == 0
1102 In [19]: len(_ip._main_mod_cache) == 0
1103 Out[19]: True
1103 Out[19]: True
1104 """
1104 """
1105 self._main_mod_cache.clear()
1105 self._main_mod_cache.clear()
1106
1106
1107 #-------------------------------------------------------------------------
1107 #-------------------------------------------------------------------------
1108 # Things related to debugging
1108 # Things related to debugging
1109 #-------------------------------------------------------------------------
1109 #-------------------------------------------------------------------------
1110
1110
1111 def init_pdb(self):
1111 def init_pdb(self):
1112 # Set calling of pdb on exceptions
1112 # Set calling of pdb on exceptions
1113 # self.call_pdb is a property
1113 # self.call_pdb is a property
1114 self.call_pdb = self.pdb
1114 self.call_pdb = self.pdb
1115
1115
1116 def _get_call_pdb(self):
1116 def _get_call_pdb(self):
1117 return self._call_pdb
1117 return self._call_pdb
1118
1118
1119 def _set_call_pdb(self,val):
1119 def _set_call_pdb(self,val):
1120
1120
1121 if val not in (0,1,False,True):
1121 if val not in (0,1,False,True):
1122 raise ValueError('new call_pdb value must be boolean')
1122 raise ValueError('new call_pdb value must be boolean')
1123
1123
1124 # store value in instance
1124 # store value in instance
1125 self._call_pdb = val
1125 self._call_pdb = val
1126
1126
1127 # notify the actual exception handlers
1127 # notify the actual exception handlers
1128 self.InteractiveTB.call_pdb = val
1128 self.InteractiveTB.call_pdb = val
1129
1129
1130 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1130 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1131 'Control auto-activation of pdb at exceptions')
1131 'Control auto-activation of pdb at exceptions')
1132
1132
1133 def debugger(self,force=False):
1133 def debugger(self,force=False):
1134 """Call the pdb debugger.
1134 """Call the pdb debugger.
1135
1135
1136 Keywords:
1136 Keywords:
1137
1137
1138 - force(False): by default, this routine checks the instance call_pdb
1138 - force(False): by default, this routine checks the instance call_pdb
1139 flag and does not actually invoke the debugger if the flag is false.
1139 flag and does not actually invoke the debugger if the flag is false.
1140 The 'force' option forces the debugger to activate even if the flag
1140 The 'force' option forces the debugger to activate even if the flag
1141 is false.
1141 is false.
1142 """
1142 """
1143
1143
1144 if not (force or self.call_pdb):
1144 if not (force or self.call_pdb):
1145 return
1145 return
1146
1146
1147 if not hasattr(sys,'last_traceback'):
1147 if not hasattr(sys,'last_traceback'):
1148 error('No traceback has been produced, nothing to debug.')
1148 error('No traceback has been produced, nothing to debug.')
1149 return
1149 return
1150
1150
1151 self.InteractiveTB.debugger(force=True)
1151 self.InteractiveTB.debugger(force=True)
1152
1152
1153 #-------------------------------------------------------------------------
1153 #-------------------------------------------------------------------------
1154 # Things related to IPython's various namespaces
1154 # Things related to IPython's various namespaces
1155 #-------------------------------------------------------------------------
1155 #-------------------------------------------------------------------------
1156 default_user_namespaces = True
1156 default_user_namespaces = True
1157
1157
1158 def init_create_namespaces(self, user_module=None, user_ns=None):
1158 def init_create_namespaces(self, user_module=None, user_ns=None):
1159 # Create the namespace where the user will operate. user_ns is
1159 # Create the namespace where the user will operate. user_ns is
1160 # normally the only one used, and it is passed to the exec calls as
1160 # normally the only one used, and it is passed to the exec calls as
1161 # the locals argument. But we do carry a user_global_ns namespace
1161 # the locals argument. But we do carry a user_global_ns namespace
1162 # given as the exec 'globals' argument, This is useful in embedding
1162 # given as the exec 'globals' argument, This is useful in embedding
1163 # situations where the ipython shell opens in a context where the
1163 # situations where the ipython shell opens in a context where the
1164 # distinction between locals and globals is meaningful. For
1164 # distinction between locals and globals is meaningful. For
1165 # non-embedded contexts, it is just the same object as the user_ns dict.
1165 # non-embedded contexts, it is just the same object as the user_ns dict.
1166
1166
1167 # FIXME. For some strange reason, __builtins__ is showing up at user
1167 # FIXME. For some strange reason, __builtins__ is showing up at user
1168 # level as a dict instead of a module. This is a manual fix, but I
1168 # level as a dict instead of a module. This is a manual fix, but I
1169 # should really track down where the problem is coming from. Alex
1169 # should really track down where the problem is coming from. Alex
1170 # Schmolck reported this problem first.
1170 # Schmolck reported this problem first.
1171
1171
1172 # A useful post by Alex Martelli on this topic:
1172 # A useful post by Alex Martelli on this topic:
1173 # Re: inconsistent value from __builtins__
1173 # Re: inconsistent value from __builtins__
1174 # Von: Alex Martelli <aleaxit@yahoo.com>
1174 # Von: Alex Martelli <aleaxit@yahoo.com>
1175 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
1175 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
1176 # Gruppen: comp.lang.python
1176 # Gruppen: comp.lang.python
1177
1177
1178 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
1178 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
1179 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
1179 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
1180 # > <type 'dict'>
1180 # > <type 'dict'>
1181 # > >>> print type(__builtins__)
1181 # > >>> print type(__builtins__)
1182 # > <type 'module'>
1182 # > <type 'module'>
1183 # > Is this difference in return value intentional?
1183 # > Is this difference in return value intentional?
1184
1184
1185 # Well, it's documented that '__builtins__' can be either a dictionary
1185 # Well, it's documented that '__builtins__' can be either a dictionary
1186 # or a module, and it's been that way for a long time. Whether it's
1186 # or a module, and it's been that way for a long time. Whether it's
1187 # intentional (or sensible), I don't know. In any case, the idea is
1187 # intentional (or sensible), I don't know. In any case, the idea is
1188 # that if you need to access the built-in namespace directly, you
1188 # that if you need to access the built-in namespace directly, you
1189 # should start with "import __builtin__" (note, no 's') which will
1189 # should start with "import __builtin__" (note, no 's') which will
1190 # definitely give you a module. Yeah, it's somewhat confusing:-(.
1190 # definitely give you a module. Yeah, it's somewhat confusing:-(.
1191
1191
1192 # These routines return a properly built module and dict as needed by
1192 # These routines return a properly built module and dict as needed by
1193 # the rest of the code, and can also be used by extension writers to
1193 # the rest of the code, and can also be used by extension writers to
1194 # generate properly initialized namespaces.
1194 # generate properly initialized namespaces.
1195 if (user_ns is not None) or (user_module is not None):
1195 if (user_ns is not None) or (user_module is not None):
1196 self.default_user_namespaces = False
1196 self.default_user_namespaces = False
1197 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
1197 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
1198
1198
1199 # A record of hidden variables we have added to the user namespace, so
1199 # A record of hidden variables we have added to the user namespace, so
1200 # we can list later only variables defined in actual interactive use.
1200 # we can list later only variables defined in actual interactive use.
1201 self.user_ns_hidden = {}
1201 self.user_ns_hidden = {}
1202
1202
1203 # Now that FakeModule produces a real module, we've run into a nasty
1203 # Now that FakeModule produces a real module, we've run into a nasty
1204 # problem: after script execution (via %run), the module where the user
1204 # problem: after script execution (via %run), the module where the user
1205 # code ran is deleted. Now that this object is a true module (needed
1205 # code ran is deleted. Now that this object is a true module (needed
1206 # so doctest and other tools work correctly), the Python module
1206 # so doctest and other tools work correctly), the Python module
1207 # teardown mechanism runs over it, and sets to None every variable
1207 # teardown mechanism runs over it, and sets to None every variable
1208 # present in that module. Top-level references to objects from the
1208 # present in that module. Top-level references to objects from the
1209 # script survive, because the user_ns is updated with them. However,
1209 # script survive, because the user_ns is updated with them. However,
1210 # calling functions defined in the script that use other things from
1210 # calling functions defined in the script that use other things from
1211 # the script will fail, because the function's closure had references
1211 # the script will fail, because the function's closure had references
1212 # to the original objects, which are now all None. So we must protect
1212 # to the original objects, which are now all None. So we must protect
1213 # these modules from deletion by keeping a cache.
1213 # these modules from deletion by keeping a cache.
1214 #
1214 #
1215 # To avoid keeping stale modules around (we only need the one from the
1215 # To avoid keeping stale modules around (we only need the one from the
1216 # last run), we use a dict keyed with the full path to the script, so
1216 # last run), we use a dict keyed with the full path to the script, so
1217 # only the last version of the module is held in the cache. Note,
1217 # only the last version of the module is held in the cache. Note,
1218 # however, that we must cache the module *namespace contents* (their
1218 # however, that we must cache the module *namespace contents* (their
1219 # __dict__). Because if we try to cache the actual modules, old ones
1219 # __dict__). Because if we try to cache the actual modules, old ones
1220 # (uncached) could be destroyed while still holding references (such as
1220 # (uncached) could be destroyed while still holding references (such as
1221 # those held by GUI objects that tend to be long-lived)>
1221 # those held by GUI objects that tend to be long-lived)>
1222 #
1222 #
1223 # The %reset command will flush this cache. See the cache_main_mod()
1223 # The %reset command will flush this cache. See the cache_main_mod()
1224 # and clear_main_mod_cache() methods for details on use.
1224 # and clear_main_mod_cache() methods for details on use.
1225
1225
1226 # This is the cache used for 'main' namespaces
1226 # This is the cache used for 'main' namespaces
1227 self._main_mod_cache = {}
1227 self._main_mod_cache = {}
1228
1228
1229 # A table holding all the namespaces IPython deals with, so that
1229 # A table holding all the namespaces IPython deals with, so that
1230 # introspection facilities can search easily.
1230 # introspection facilities can search easily.
1231 self.ns_table = {'user_global':self.user_module.__dict__,
1231 self.ns_table = {'user_global':self.user_module.__dict__,
1232 'user_local':self.user_ns,
1232 'user_local':self.user_ns,
1233 'builtin':builtin_mod.__dict__
1233 'builtin':builtin_mod.__dict__
1234 }
1234 }
1235
1235
1236 @property
1236 @property
1237 def user_global_ns(self):
1237 def user_global_ns(self):
1238 return self.user_module.__dict__
1238 return self.user_module.__dict__
1239
1239
1240 def prepare_user_module(self, user_module=None, user_ns=None):
1240 def prepare_user_module(self, user_module=None, user_ns=None):
1241 """Prepare the module and namespace in which user code will be run.
1241 """Prepare the module and namespace in which user code will be run.
1242
1242
1243 When IPython is started normally, both parameters are None: a new module
1243 When IPython is started normally, both parameters are None: a new module
1244 is created automatically, and its __dict__ used as the namespace.
1244 is created automatically, and its __dict__ used as the namespace.
1245
1245
1246 If only user_module is provided, its __dict__ is used as the namespace.
1246 If only user_module is provided, its __dict__ is used as the namespace.
1247 If only user_ns is provided, a dummy module is created, and user_ns
1247 If only user_ns is provided, a dummy module is created, and user_ns
1248 becomes the global namespace. If both are provided (as they may be
1248 becomes the global namespace. If both are provided (as they may be
1249 when embedding), user_ns is the local namespace, and user_module
1249 when embedding), user_ns is the local namespace, and user_module
1250 provides the global namespace.
1250 provides the global namespace.
1251
1251
1252 Parameters
1252 Parameters
1253 ----------
1253 ----------
1254 user_module : module, optional
1254 user_module : module, optional
1255 The current user module in which IPython is being run. If None,
1255 The current user module in which IPython is being run. If None,
1256 a clean module will be created.
1256 a clean module will be created.
1257 user_ns : dict, optional
1257 user_ns : dict, optional
1258 A namespace in which to run interactive commands.
1258 A namespace in which to run interactive commands.
1259
1259
1260 Returns
1260 Returns
1261 -------
1261 -------
1262 A tuple of user_module and user_ns, each properly initialised.
1262 A tuple of user_module and user_ns, each properly initialised.
1263 """
1263 """
1264 if user_module is None and user_ns is not None:
1264 if user_module is None and user_ns is not None:
1265 user_ns.setdefault("__name__", "__main__")
1265 user_ns.setdefault("__name__", "__main__")
1266 user_module = DummyMod()
1266 user_module = DummyMod()
1267 user_module.__dict__ = user_ns
1267 user_module.__dict__ = user_ns
1268
1268
1269 if user_module is None:
1269 if user_module is None:
1270 user_module = types.ModuleType("__main__",
1270 user_module = types.ModuleType("__main__",
1271 doc="Automatically created module for IPython interactive environment")
1271 doc="Automatically created module for IPython interactive environment")
1272
1272
1273 # We must ensure that __builtin__ (without the final 's') is always
1273 # We must ensure that __builtin__ (without the final 's') is always
1274 # available and pointing to the __builtin__ *module*. For more details:
1274 # available and pointing to the __builtin__ *module*. For more details:
1275 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1275 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1276 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1276 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1277 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1277 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1278
1278
1279 if user_ns is None:
1279 if user_ns is None:
1280 user_ns = user_module.__dict__
1280 user_ns = user_module.__dict__
1281
1281
1282 return user_module, user_ns
1282 return user_module, user_ns
1283
1283
1284 def init_sys_modules(self):
1284 def init_sys_modules(self):
1285 # We need to insert into sys.modules something that looks like a
1285 # We need to insert into sys.modules something that looks like a
1286 # module but which accesses the IPython namespace, for shelve and
1286 # module but which accesses the IPython namespace, for shelve and
1287 # pickle to work interactively. Normally they rely on getting
1287 # pickle to work interactively. Normally they rely on getting
1288 # everything out of __main__, but for embedding purposes each IPython
1288 # everything out of __main__, but for embedding purposes each IPython
1289 # instance has its own private namespace, so we can't go shoving
1289 # instance has its own private namespace, so we can't go shoving
1290 # everything into __main__.
1290 # everything into __main__.
1291
1291
1292 # note, however, that we should only do this for non-embedded
1292 # note, however, that we should only do this for non-embedded
1293 # ipythons, which really mimic the __main__.__dict__ with their own
1293 # ipythons, which really mimic the __main__.__dict__ with their own
1294 # namespace. Embedded instances, on the other hand, should not do
1294 # namespace. Embedded instances, on the other hand, should not do
1295 # this because they need to manage the user local/global namespaces
1295 # this because they need to manage the user local/global namespaces
1296 # only, but they live within a 'normal' __main__ (meaning, they
1296 # only, but they live within a 'normal' __main__ (meaning, they
1297 # shouldn't overtake the execution environment of the script they're
1297 # shouldn't overtake the execution environment of the script they're
1298 # embedded in).
1298 # embedded in).
1299
1299
1300 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1300 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1301 main_name = self.user_module.__name__
1301 main_name = self.user_module.__name__
1302 sys.modules[main_name] = self.user_module
1302 sys.modules[main_name] = self.user_module
1303
1303
1304 def init_user_ns(self):
1304 def init_user_ns(self):
1305 """Initialize all user-visible namespaces to their minimum defaults.
1305 """Initialize all user-visible namespaces to their minimum defaults.
1306
1306
1307 Certain history lists are also initialized here, as they effectively
1307 Certain history lists are also initialized here, as they effectively
1308 act as user namespaces.
1308 act as user namespaces.
1309
1309
1310 Notes
1310 Notes
1311 -----
1311 -----
1312 All data structures here are only filled in, they are NOT reset by this
1312 All data structures here are only filled in, they are NOT reset by this
1313 method. If they were not empty before, data will simply be added to
1313 method. If they were not empty before, data will simply be added to
1314 them.
1314 them.
1315 """
1315 """
1316 # This function works in two parts: first we put a few things in
1316 # This function works in two parts: first we put a few things in
1317 # user_ns, and we sync that contents into user_ns_hidden so that these
1317 # user_ns, and we sync that contents into user_ns_hidden so that these
1318 # initial variables aren't shown by %who. After the sync, we add the
1318 # initial variables aren't shown by %who. After the sync, we add the
1319 # rest of what we *do* want the user to see with %who even on a new
1319 # rest of what we *do* want the user to see with %who even on a new
1320 # session (probably nothing, so they really only see their own stuff)
1320 # session (probably nothing, so they really only see their own stuff)
1321
1321
1322 # The user dict must *always* have a __builtin__ reference to the
1322 # The user dict must *always* have a __builtin__ reference to the
1323 # Python standard __builtin__ namespace, which must be imported.
1323 # Python standard __builtin__ namespace, which must be imported.
1324 # This is so that certain operations in prompt evaluation can be
1324 # This is so that certain operations in prompt evaluation can be
1325 # reliably executed with builtins. Note that we can NOT use
1325 # reliably executed with builtins. Note that we can NOT use
1326 # __builtins__ (note the 's'), because that can either be a dict or a
1326 # __builtins__ (note the 's'), because that can either be a dict or a
1327 # module, and can even mutate at runtime, depending on the context
1327 # module, and can even mutate at runtime, depending on the context
1328 # (Python makes no guarantees on it). In contrast, __builtin__ is
1328 # (Python makes no guarantees on it). In contrast, __builtin__ is
1329 # always a module object, though it must be explicitly imported.
1329 # always a module object, though it must be explicitly imported.
1330
1330
1331 # For more details:
1331 # For more details:
1332 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1332 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1333 ns = {}
1333 ns = {}
1334
1334
1335 # make global variables for user access to the histories
1335 # make global variables for user access to the histories
1336 ns['_ih'] = self.history_manager.input_hist_parsed
1336 ns['_ih'] = self.history_manager.input_hist_parsed
1337 ns['_oh'] = self.history_manager.output_hist
1337 ns['_oh'] = self.history_manager.output_hist
1338 ns['_dh'] = self.history_manager.dir_hist
1338 ns['_dh'] = self.history_manager.dir_hist
1339
1339
1340 # user aliases to input and output histories. These shouldn't show up
1340 # user aliases to input and output histories. These shouldn't show up
1341 # in %who, as they can have very large reprs.
1341 # in %who, as they can have very large reprs.
1342 ns['In'] = self.history_manager.input_hist_parsed
1342 ns['In'] = self.history_manager.input_hist_parsed
1343 ns['Out'] = self.history_manager.output_hist
1343 ns['Out'] = self.history_manager.output_hist
1344
1344
1345 # Store myself as the public api!!!
1345 # Store myself as the public api!!!
1346 ns['get_ipython'] = self.get_ipython
1346 ns['get_ipython'] = self.get_ipython
1347
1347
1348 ns['exit'] = self.exiter
1348 ns['exit'] = self.exiter
1349 ns['quit'] = self.exiter
1349 ns['quit'] = self.exiter
1350
1350
1351 # Sync what we've added so far to user_ns_hidden so these aren't seen
1351 # Sync what we've added so far to user_ns_hidden so these aren't seen
1352 # by %who
1352 # by %who
1353 self.user_ns_hidden.update(ns)
1353 self.user_ns_hidden.update(ns)
1354
1354
1355 # Anything put into ns now would show up in %who. Think twice before
1355 # Anything put into ns now would show up in %who. Think twice before
1356 # putting anything here, as we really want %who to show the user their
1356 # putting anything here, as we really want %who to show the user their
1357 # stuff, not our variables.
1357 # stuff, not our variables.
1358
1358
1359 # Finally, update the real user's namespace
1359 # Finally, update the real user's namespace
1360 self.user_ns.update(ns)
1360 self.user_ns.update(ns)
1361
1361
1362 @property
1362 @property
1363 def all_ns_refs(self):
1363 def all_ns_refs(self):
1364 """Get a list of references to all the namespace dictionaries in which
1364 """Get a list of references to all the namespace dictionaries in which
1365 IPython might store a user-created object.
1365 IPython might store a user-created object.
1366
1366
1367 Note that this does not include the displayhook, which also caches
1367 Note that this does not include the displayhook, which also caches
1368 objects from the output."""
1368 objects from the output."""
1369 return [self.user_ns, self.user_global_ns, self.user_ns_hidden] + \
1369 return [self.user_ns, self.user_global_ns, self.user_ns_hidden] + \
1370 [m.__dict__ for m in self._main_mod_cache.values()]
1370 [m.__dict__ for m in self._main_mod_cache.values()]
1371
1371
1372 def reset(self, new_session=True):
1372 def reset(self, new_session=True):
1373 """Clear all internal namespaces, and attempt to release references to
1373 """Clear all internal namespaces, and attempt to release references to
1374 user objects.
1374 user objects.
1375
1375
1376 If new_session is True, a new history session will be opened.
1376 If new_session is True, a new history session will be opened.
1377 """
1377 """
1378 # Clear histories
1378 # Clear histories
1379 self.history_manager.reset(new_session)
1379 self.history_manager.reset(new_session)
1380 # Reset counter used to index all histories
1380 # Reset counter used to index all histories
1381 if new_session:
1381 if new_session:
1382 self.execution_count = 1
1382 self.execution_count = 1
1383
1383
1384 # Reset last execution result
1384 # Reset last execution result
1385 self.last_execution_succeeded = True
1385 self.last_execution_succeeded = True
1386 self.last_execution_result = None
1386 self.last_execution_result = None
1387
1387
1388 # Flush cached output items
1388 # Flush cached output items
1389 if self.displayhook.do_full_cache:
1389 if self.displayhook.do_full_cache:
1390 self.displayhook.flush()
1390 self.displayhook.flush()
1391
1391
1392 # The main execution namespaces must be cleared very carefully,
1392 # The main execution namespaces must be cleared very carefully,
1393 # skipping the deletion of the builtin-related keys, because doing so
1393 # skipping the deletion of the builtin-related keys, because doing so
1394 # would cause errors in many object's __del__ methods.
1394 # would cause errors in many object's __del__ methods.
1395 if self.user_ns is not self.user_global_ns:
1395 if self.user_ns is not self.user_global_ns:
1396 self.user_ns.clear()
1396 self.user_ns.clear()
1397 ns = self.user_global_ns
1397 ns = self.user_global_ns
1398 drop_keys = set(ns.keys())
1398 drop_keys = set(ns.keys())
1399 drop_keys.discard('__builtin__')
1399 drop_keys.discard('__builtin__')
1400 drop_keys.discard('__builtins__')
1400 drop_keys.discard('__builtins__')
1401 drop_keys.discard('__name__')
1401 drop_keys.discard('__name__')
1402 for k in drop_keys:
1402 for k in drop_keys:
1403 del ns[k]
1403 del ns[k]
1404
1404
1405 self.user_ns_hidden.clear()
1405 self.user_ns_hidden.clear()
1406
1406
1407 # Restore the user namespaces to minimal usability
1407 # Restore the user namespaces to minimal usability
1408 self.init_user_ns()
1408 self.init_user_ns()
1409
1409
1410 # Restore the default and user aliases
1410 # Restore the default and user aliases
1411 self.alias_manager.clear_aliases()
1411 self.alias_manager.clear_aliases()
1412 self.alias_manager.init_aliases()
1412 self.alias_manager.init_aliases()
1413
1413
1414 # Flush the private list of module references kept for script
1414 # Flush the private list of module references kept for script
1415 # execution protection
1415 # execution protection
1416 self.clear_main_mod_cache()
1416 self.clear_main_mod_cache()
1417
1417
1418 def del_var(self, varname, by_name=False):
1418 def del_var(self, varname, by_name=False):
1419 """Delete a variable from the various namespaces, so that, as
1419 """Delete a variable from the various namespaces, so that, as
1420 far as possible, we're not keeping any hidden references to it.
1420 far as possible, we're not keeping any hidden references to it.
1421
1421
1422 Parameters
1422 Parameters
1423 ----------
1423 ----------
1424 varname : str
1424 varname : str
1425 The name of the variable to delete.
1425 The name of the variable to delete.
1426 by_name : bool
1426 by_name : bool
1427 If True, delete variables with the given name in each
1427 If True, delete variables with the given name in each
1428 namespace. If False (default), find the variable in the user
1428 namespace. If False (default), find the variable in the user
1429 namespace, and delete references to it.
1429 namespace, and delete references to it.
1430 """
1430 """
1431 if varname in ('__builtin__', '__builtins__'):
1431 if varname in ('__builtin__', '__builtins__'):
1432 raise ValueError("Refusing to delete %s" % varname)
1432 raise ValueError("Refusing to delete %s" % varname)
1433
1433
1434 ns_refs = self.all_ns_refs
1434 ns_refs = self.all_ns_refs
1435
1435
1436 if by_name: # Delete by name
1436 if by_name: # Delete by name
1437 for ns in ns_refs:
1437 for ns in ns_refs:
1438 try:
1438 try:
1439 del ns[varname]
1439 del ns[varname]
1440 except KeyError:
1440 except KeyError:
1441 pass
1441 pass
1442 else: # Delete by object
1442 else: # Delete by object
1443 try:
1443 try:
1444 obj = self.user_ns[varname]
1444 obj = self.user_ns[varname]
1445 except KeyError:
1445 except KeyError:
1446 raise NameError("name '%s' is not defined" % varname)
1446 raise NameError("name '%s' is not defined" % varname)
1447 # Also check in output history
1447 # Also check in output history
1448 ns_refs.append(self.history_manager.output_hist)
1448 ns_refs.append(self.history_manager.output_hist)
1449 for ns in ns_refs:
1449 for ns in ns_refs:
1450 to_delete = [n for n, o in ns.items() if o is obj]
1450 to_delete = [n for n, o in ns.items() if o is obj]
1451 for name in to_delete:
1451 for name in to_delete:
1452 del ns[name]
1452 del ns[name]
1453
1453
1454 # Ensure it is removed from the last execution result
1454 # Ensure it is removed from the last execution result
1455 if self.last_execution_result.result is obj:
1455 if self.last_execution_result.result is obj:
1456 self.last_execution_result = None
1456 self.last_execution_result = None
1457
1457
1458 # displayhook keeps extra references, but not in a dictionary
1458 # displayhook keeps extra references, but not in a dictionary
1459 for name in ('_', '__', '___'):
1459 for name in ('_', '__', '___'):
1460 if getattr(self.displayhook, name) is obj:
1460 if getattr(self.displayhook, name) is obj:
1461 setattr(self.displayhook, name, None)
1461 setattr(self.displayhook, name, None)
1462
1462
1463 def reset_selective(self, regex=None):
1463 def reset_selective(self, regex=None):
1464 """Clear selective variables from internal namespaces based on a
1464 """Clear selective variables from internal namespaces based on a
1465 specified regular expression.
1465 specified regular expression.
1466
1466
1467 Parameters
1467 Parameters
1468 ----------
1468 ----------
1469 regex : string or compiled pattern, optional
1469 regex : string or compiled pattern, optional
1470 A regular expression pattern that will be used in searching
1470 A regular expression pattern that will be used in searching
1471 variable names in the users namespaces.
1471 variable names in the users namespaces.
1472 """
1472 """
1473 if regex is not None:
1473 if regex is not None:
1474 try:
1474 try:
1475 m = re.compile(regex)
1475 m = re.compile(regex)
1476 except TypeError:
1476 except TypeError:
1477 raise TypeError('regex must be a string or compiled pattern')
1477 raise TypeError('regex must be a string or compiled pattern')
1478 # Search for keys in each namespace that match the given regex
1478 # Search for keys in each namespace that match the given regex
1479 # If a match is found, delete the key/value pair.
1479 # If a match is found, delete the key/value pair.
1480 for ns in self.all_ns_refs:
1480 for ns in self.all_ns_refs:
1481 for var in ns:
1481 for var in ns:
1482 if m.search(var):
1482 if m.search(var):
1483 del ns[var]
1483 del ns[var]
1484
1484
1485 def push(self, variables, interactive=True):
1485 def push(self, variables, interactive=True):
1486 """Inject a group of variables into the IPython user namespace.
1486 """Inject a group of variables into the IPython user namespace.
1487
1487
1488 Parameters
1488 Parameters
1489 ----------
1489 ----------
1490 variables : dict, str or list/tuple of str
1490 variables : dict, str or list/tuple of str
1491 The variables to inject into the user's namespace. If a dict, a
1491 The variables to inject into the user's namespace. If a dict, a
1492 simple update is done. If a str, the string is assumed to have
1492 simple update is done. If a str, the string is assumed to have
1493 variable names separated by spaces. A list/tuple of str can also
1493 variable names separated by spaces. A list/tuple of str can also
1494 be used to give the variable names. If just the variable names are
1494 be used to give the variable names. If just the variable names are
1495 give (list/tuple/str) then the variable values looked up in the
1495 give (list/tuple/str) then the variable values looked up in the
1496 callers frame.
1496 callers frame.
1497 interactive : bool
1497 interactive : bool
1498 If True (default), the variables will be listed with the ``who``
1498 If True (default), the variables will be listed with the ``who``
1499 magic.
1499 magic.
1500 """
1500 """
1501 vdict = None
1501 vdict = None
1502
1502
1503 # We need a dict of name/value pairs to do namespace updates.
1503 # We need a dict of name/value pairs to do namespace updates.
1504 if isinstance(variables, dict):
1504 if isinstance(variables, dict):
1505 vdict = variables
1505 vdict = variables
1506 elif isinstance(variables, (str, list, tuple)):
1506 elif isinstance(variables, (str, list, tuple)):
1507 if isinstance(variables, str):
1507 if isinstance(variables, str):
1508 vlist = variables.split()
1508 vlist = variables.split()
1509 else:
1509 else:
1510 vlist = variables
1510 vlist = variables
1511 vdict = {}
1511 vdict = {}
1512 cf = sys._getframe(1)
1512 cf = sys._getframe(1)
1513 for name in vlist:
1513 for name in vlist:
1514 try:
1514 try:
1515 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1515 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1516 except:
1516 except:
1517 print('Could not get variable %s from %s' %
1517 print('Could not get variable %s from %s' %
1518 (name,cf.f_code.co_name))
1518 (name,cf.f_code.co_name))
1519 else:
1519 else:
1520 raise ValueError('variables must be a dict/str/list/tuple')
1520 raise ValueError('variables must be a dict/str/list/tuple')
1521
1521
1522 # Propagate variables to user namespace
1522 # Propagate variables to user namespace
1523 self.user_ns.update(vdict)
1523 self.user_ns.update(vdict)
1524
1524
1525 # And configure interactive visibility
1525 # And configure interactive visibility
1526 user_ns_hidden = self.user_ns_hidden
1526 user_ns_hidden = self.user_ns_hidden
1527 if interactive:
1527 if interactive:
1528 for name in vdict:
1528 for name in vdict:
1529 user_ns_hidden.pop(name, None)
1529 user_ns_hidden.pop(name, None)
1530 else:
1530 else:
1531 user_ns_hidden.update(vdict)
1531 user_ns_hidden.update(vdict)
1532
1532
1533 def drop_by_id(self, variables):
1533 def drop_by_id(self, variables):
1534 """Remove a dict of variables from the user namespace, if they are the
1534 """Remove a dict of variables from the user namespace, if they are the
1535 same as the values in the dictionary.
1535 same as the values in the dictionary.
1536
1536
1537 This is intended for use by extensions: variables that they've added can
1537 This is intended for use by extensions: variables that they've added can
1538 be taken back out if they are unloaded, without removing any that the
1538 be taken back out if they are unloaded, without removing any that the
1539 user has overwritten.
1539 user has overwritten.
1540
1540
1541 Parameters
1541 Parameters
1542 ----------
1542 ----------
1543 variables : dict
1543 variables : dict
1544 A dictionary mapping object names (as strings) to the objects.
1544 A dictionary mapping object names (as strings) to the objects.
1545 """
1545 """
1546 for name, obj in variables.items():
1546 for name, obj in variables.items():
1547 if name in self.user_ns and self.user_ns[name] is obj:
1547 if name in self.user_ns and self.user_ns[name] is obj:
1548 del self.user_ns[name]
1548 del self.user_ns[name]
1549 self.user_ns_hidden.pop(name, None)
1549 self.user_ns_hidden.pop(name, None)
1550
1550
1551 #-------------------------------------------------------------------------
1551 #-------------------------------------------------------------------------
1552 # Things related to object introspection
1552 # Things related to object introspection
1553 #-------------------------------------------------------------------------
1553 #-------------------------------------------------------------------------
1554
1554
1555 def _ofind(self, oname, namespaces=None):
1555 def _ofind(self, oname, namespaces=None):
1556 """Find an object in the available namespaces.
1556 """Find an object in the available namespaces.
1557
1557
1558 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1558 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1559
1559
1560 Has special code to detect magic functions.
1560 Has special code to detect magic functions.
1561 """
1561 """
1562 oname = oname.strip()
1562 oname = oname.strip()
1563 if not oname.startswith(ESC_MAGIC) and \
1563 if not oname.startswith(ESC_MAGIC) and \
1564 not oname.startswith(ESC_MAGIC2) and \
1564 not oname.startswith(ESC_MAGIC2) and \
1565 not all(a.isidentifier() for a in oname.split(".")):
1565 not all(a.isidentifier() for a in oname.split(".")):
1566 return {'found': False}
1566 return {'found': False}
1567
1567
1568 if namespaces is None:
1568 if namespaces is None:
1569 # Namespaces to search in:
1569 # Namespaces to search in:
1570 # Put them in a list. The order is important so that we
1570 # Put them in a list. The order is important so that we
1571 # find things in the same order that Python finds them.
1571 # find things in the same order that Python finds them.
1572 namespaces = [ ('Interactive', self.user_ns),
1572 namespaces = [ ('Interactive', self.user_ns),
1573 ('Interactive (global)', self.user_global_ns),
1573 ('Interactive (global)', self.user_global_ns),
1574 ('Python builtin', builtin_mod.__dict__),
1574 ('Python builtin', builtin_mod.__dict__),
1575 ]
1575 ]
1576
1576
1577 ismagic = False
1577 ismagic = False
1578 isalias = False
1578 isalias = False
1579 found = False
1579 found = False
1580 ospace = None
1580 ospace = None
1581 parent = None
1581 parent = None
1582 obj = None
1582 obj = None
1583
1583
1584
1584
1585 # Look for the given name by splitting it in parts. If the head is
1585 # Look for the given name by splitting it in parts. If the head is
1586 # found, then we look for all the remaining parts as members, and only
1586 # found, then we look for all the remaining parts as members, and only
1587 # declare success if we can find them all.
1587 # declare success if we can find them all.
1588 oname_parts = oname.split('.')
1588 oname_parts = oname.split('.')
1589 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1589 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1590 for nsname,ns in namespaces:
1590 for nsname,ns in namespaces:
1591 try:
1591 try:
1592 obj = ns[oname_head]
1592 obj = ns[oname_head]
1593 except KeyError:
1593 except KeyError:
1594 continue
1594 continue
1595 else:
1595 else:
1596 for idx, part in enumerate(oname_rest):
1596 for idx, part in enumerate(oname_rest):
1597 try:
1597 try:
1598 parent = obj
1598 parent = obj
1599 # The last part is looked up in a special way to avoid
1599 # The last part is looked up in a special way to avoid
1600 # descriptor invocation as it may raise or have side
1600 # descriptor invocation as it may raise or have side
1601 # effects.
1601 # effects.
1602 if idx == len(oname_rest) - 1:
1602 if idx == len(oname_rest) - 1:
1603 obj = self._getattr_property(obj, part)
1603 obj = self._getattr_property(obj, part)
1604 else:
1604 else:
1605 obj = getattr(obj, part)
1605 obj = getattr(obj, part)
1606 except:
1606 except:
1607 # Blanket except b/c some badly implemented objects
1607 # Blanket except b/c some badly implemented objects
1608 # allow __getattr__ to raise exceptions other than
1608 # allow __getattr__ to raise exceptions other than
1609 # AttributeError, which then crashes IPython.
1609 # AttributeError, which then crashes IPython.
1610 break
1610 break
1611 else:
1611 else:
1612 # If we finish the for loop (no break), we got all members
1612 # If we finish the for loop (no break), we got all members
1613 found = True
1613 found = True
1614 ospace = nsname
1614 ospace = nsname
1615 break # namespace loop
1615 break # namespace loop
1616
1616
1617 # Try to see if it's magic
1617 # Try to see if it's magic
1618 if not found:
1618 if not found:
1619 obj = None
1619 obj = None
1620 if oname.startswith(ESC_MAGIC2):
1620 if oname.startswith(ESC_MAGIC2):
1621 oname = oname.lstrip(ESC_MAGIC2)
1621 oname = oname.lstrip(ESC_MAGIC2)
1622 obj = self.find_cell_magic(oname)
1622 obj = self.find_cell_magic(oname)
1623 elif oname.startswith(ESC_MAGIC):
1623 elif oname.startswith(ESC_MAGIC):
1624 oname = oname.lstrip(ESC_MAGIC)
1624 oname = oname.lstrip(ESC_MAGIC)
1625 obj = self.find_line_magic(oname)
1625 obj = self.find_line_magic(oname)
1626 else:
1626 else:
1627 # search without prefix, so run? will find %run?
1627 # search without prefix, so run? will find %run?
1628 obj = self.find_line_magic(oname)
1628 obj = self.find_line_magic(oname)
1629 if obj is None:
1629 if obj is None:
1630 obj = self.find_cell_magic(oname)
1630 obj = self.find_cell_magic(oname)
1631 if obj is not None:
1631 if obj is not None:
1632 found = True
1632 found = True
1633 ospace = 'IPython internal'
1633 ospace = 'IPython internal'
1634 ismagic = True
1634 ismagic = True
1635 isalias = isinstance(obj, Alias)
1635 isalias = isinstance(obj, Alias)
1636
1636
1637 # Last try: special-case some literals like '', [], {}, etc:
1637 # Last try: special-case some literals like '', [], {}, etc:
1638 if not found and oname_head in ["''",'""','[]','{}','()']:
1638 if not found and oname_head in ["''",'""','[]','{}','()']:
1639 obj = eval(oname_head)
1639 obj = eval(oname_head)
1640 found = True
1640 found = True
1641 ospace = 'Interactive'
1641 ospace = 'Interactive'
1642
1642
1643 return {
1643 return {
1644 'obj':obj,
1644 'obj':obj,
1645 'found':found,
1645 'found':found,
1646 'parent':parent,
1646 'parent':parent,
1647 'ismagic':ismagic,
1647 'ismagic':ismagic,
1648 'isalias':isalias,
1648 'isalias':isalias,
1649 'namespace':ospace
1649 'namespace':ospace
1650 }
1650 }
1651
1651
1652 @staticmethod
1652 @staticmethod
1653 def _getattr_property(obj, attrname):
1653 def _getattr_property(obj, attrname):
1654 """Property-aware getattr to use in object finding.
1654 """Property-aware getattr to use in object finding.
1655
1655
1656 If attrname represents a property, return it unevaluated (in case it has
1656 If attrname represents a property, return it unevaluated (in case it has
1657 side effects or raises an error.
1657 side effects or raises an error.
1658
1658
1659 """
1659 """
1660 if not isinstance(obj, type):
1660 if not isinstance(obj, type):
1661 try:
1661 try:
1662 # `getattr(type(obj), attrname)` is not guaranteed to return
1662 # `getattr(type(obj), attrname)` is not guaranteed to return
1663 # `obj`, but does so for property:
1663 # `obj`, but does so for property:
1664 #
1664 #
1665 # property.__get__(self, None, cls) -> self
1665 # property.__get__(self, None, cls) -> self
1666 #
1666 #
1667 # The universal alternative is to traverse the mro manually
1667 # The universal alternative is to traverse the mro manually
1668 # searching for attrname in class dicts.
1668 # searching for attrname in class dicts.
1669 attr = getattr(type(obj), attrname)
1669 attr = getattr(type(obj), attrname)
1670 except AttributeError:
1670 except AttributeError:
1671 pass
1671 pass
1672 else:
1672 else:
1673 # This relies on the fact that data descriptors (with both
1673 # This relies on the fact that data descriptors (with both
1674 # __get__ & __set__ magic methods) take precedence over
1674 # __get__ & __set__ magic methods) take precedence over
1675 # instance-level attributes:
1675 # instance-level attributes:
1676 #
1676 #
1677 # class A(object):
1677 # class A(object):
1678 # @property
1678 # @property
1679 # def foobar(self): return 123
1679 # def foobar(self): return 123
1680 # a = A()
1680 # a = A()
1681 # a.__dict__['foobar'] = 345
1681 # a.__dict__['foobar'] = 345
1682 # a.foobar # == 123
1682 # a.foobar # == 123
1683 #
1683 #
1684 # So, a property may be returned right away.
1684 # So, a property may be returned right away.
1685 if isinstance(attr, property):
1685 if isinstance(attr, property):
1686 return attr
1686 return attr
1687
1687
1688 # Nothing helped, fall back.
1688 # Nothing helped, fall back.
1689 return getattr(obj, attrname)
1689 return getattr(obj, attrname)
1690
1690
1691 def _object_find(self, oname, namespaces=None):
1691 def _object_find(self, oname, namespaces=None):
1692 """Find an object and return a struct with info about it."""
1692 """Find an object and return a struct with info about it."""
1693 return Struct(self._ofind(oname, namespaces))
1693 return Struct(self._ofind(oname, namespaces))
1694
1694
1695 def _inspect(self, meth, oname, namespaces=None, **kw):
1695 def _inspect(self, meth, oname, namespaces=None, **kw):
1696 """Generic interface to the inspector system.
1696 """Generic interface to the inspector system.
1697
1697
1698 This function is meant to be called by pdef, pdoc & friends.
1698 This function is meant to be called by pdef, pdoc & friends.
1699 """
1699 """
1700 info = self._object_find(oname, namespaces)
1700 info = self._object_find(oname, namespaces)
1701 docformat = sphinxify if self.sphinxify_docstring else None
1701 docformat = sphinxify if self.sphinxify_docstring else None
1702 if info.found:
1702 if info.found:
1703 pmethod = getattr(self.inspector, meth)
1703 pmethod = getattr(self.inspector, meth)
1704 # TODO: only apply format_screen to the plain/text repr of the mime
1704 # TODO: only apply format_screen to the plain/text repr of the mime
1705 # bundle.
1705 # bundle.
1706 formatter = format_screen if info.ismagic else docformat
1706 formatter = format_screen if info.ismagic else docformat
1707 if meth == 'pdoc':
1707 if meth == 'pdoc':
1708 pmethod(info.obj, oname, formatter)
1708 pmethod(info.obj, oname, formatter)
1709 elif meth == 'pinfo':
1709 elif meth == 'pinfo':
1710 pmethod(info.obj, oname, formatter, info,
1710 pmethod(info.obj, oname, formatter, info,
1711 enable_html_pager=self.enable_html_pager, **kw)
1711 enable_html_pager=self.enable_html_pager, **kw)
1712 else:
1712 else:
1713 pmethod(info.obj, oname)
1713 pmethod(info.obj, oname)
1714 else:
1714 else:
1715 print('Object `%s` not found.' % oname)
1715 print('Object `%s` not found.' % oname)
1716 return 'not found' # so callers can take other action
1716 return 'not found' # so callers can take other action
1717
1717
1718 def object_inspect(self, oname, detail_level=0):
1718 def object_inspect(self, oname, detail_level=0):
1719 """Get object info about oname"""
1719 """Get object info about oname"""
1720 with self.builtin_trap:
1720 with self.builtin_trap:
1721 info = self._object_find(oname)
1721 info = self._object_find(oname)
1722 if info.found:
1722 if info.found:
1723 return self.inspector.info(info.obj, oname, info=info,
1723 return self.inspector.info(info.obj, oname, info=info,
1724 detail_level=detail_level
1724 detail_level=detail_level
1725 )
1725 )
1726 else:
1726 else:
1727 return oinspect.object_info(name=oname, found=False)
1727 return oinspect.object_info(name=oname, found=False)
1728
1728
1729 def object_inspect_text(self, oname, detail_level=0):
1729 def object_inspect_text(self, oname, detail_level=0):
1730 """Get object info as formatted text"""
1730 """Get object info as formatted text"""
1731 return self.object_inspect_mime(oname, detail_level)['text/plain']
1731 return self.object_inspect_mime(oname, detail_level)['text/plain']
1732
1732
1733 def object_inspect_mime(self, oname, detail_level=0):
1733 def object_inspect_mime(self, oname, detail_level=0):
1734 """Get object info as a mimebundle of formatted representations.
1734 """Get object info as a mimebundle of formatted representations.
1735
1735
1736 A mimebundle is a dictionary, keyed by mime-type.
1736 A mimebundle is a dictionary, keyed by mime-type.
1737 It must always have the key `'text/plain'`.
1737 It must always have the key `'text/plain'`.
1738 """
1738 """
1739 with self.builtin_trap:
1739 with self.builtin_trap:
1740 info = self._object_find(oname)
1740 info = self._object_find(oname)
1741 if info.found:
1741 if info.found:
1742 return self.inspector._get_info(info.obj, oname, info=info,
1742 return self.inspector._get_info(info.obj, oname, info=info,
1743 detail_level=detail_level
1743 detail_level=detail_level
1744 )
1744 )
1745 else:
1745 else:
1746 raise KeyError(oname)
1746 raise KeyError(oname)
1747
1747
1748 #-------------------------------------------------------------------------
1748 #-------------------------------------------------------------------------
1749 # Things related to history management
1749 # Things related to history management
1750 #-------------------------------------------------------------------------
1750 #-------------------------------------------------------------------------
1751
1751
1752 def init_history(self):
1752 def init_history(self):
1753 """Sets up the command history, and starts regular autosaves."""
1753 """Sets up the command history, and starts regular autosaves."""
1754 self.history_manager = HistoryManager(shell=self, parent=self)
1754 self.history_manager = HistoryManager(shell=self, parent=self)
1755 self.configurables.append(self.history_manager)
1755 self.configurables.append(self.history_manager)
1756
1756
1757 #-------------------------------------------------------------------------
1757 #-------------------------------------------------------------------------
1758 # Things related to exception handling and tracebacks (not debugging)
1758 # Things related to exception handling and tracebacks (not debugging)
1759 #-------------------------------------------------------------------------
1759 #-------------------------------------------------------------------------
1760
1760
1761 debugger_cls = Pdb
1761 debugger_cls = Pdb
1762
1762
1763 def init_traceback_handlers(self, custom_exceptions):
1763 def init_traceback_handlers(self, custom_exceptions):
1764 # Syntax error handler.
1764 # Syntax error handler.
1765 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor', parent=self)
1765 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor', parent=self)
1766
1766
1767 # The interactive one is initialized with an offset, meaning we always
1767 # The interactive one is initialized with an offset, meaning we always
1768 # want to remove the topmost item in the traceback, which is our own
1768 # want to remove the topmost item in the traceback, which is our own
1769 # internal code. Valid modes: ['Plain','Context','Verbose']
1769 # internal code. Valid modes: ['Plain','Context','Verbose']
1770 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1770 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1771 color_scheme='NoColor',
1771 color_scheme='NoColor',
1772 tb_offset = 1,
1772 tb_offset = 1,
1773 check_cache=check_linecache_ipython,
1773 check_cache=check_linecache_ipython,
1774 debugger_cls=self.debugger_cls, parent=self)
1774 debugger_cls=self.debugger_cls, parent=self)
1775
1775
1776 # The instance will store a pointer to the system-wide exception hook,
1776 # The instance will store a pointer to the system-wide exception hook,
1777 # so that runtime code (such as magics) can access it. This is because
1777 # so that runtime code (such as magics) can access it. This is because
1778 # during the read-eval loop, it may get temporarily overwritten.
1778 # during the read-eval loop, it may get temporarily overwritten.
1779 self.sys_excepthook = sys.excepthook
1779 self.sys_excepthook = sys.excepthook
1780
1780
1781 # and add any custom exception handlers the user may have specified
1781 # and add any custom exception handlers the user may have specified
1782 self.set_custom_exc(*custom_exceptions)
1782 self.set_custom_exc(*custom_exceptions)
1783
1783
1784 # Set the exception mode
1784 # Set the exception mode
1785 self.InteractiveTB.set_mode(mode=self.xmode)
1785 self.InteractiveTB.set_mode(mode=self.xmode)
1786
1786
1787 def set_custom_exc(self, exc_tuple, handler):
1787 def set_custom_exc(self, exc_tuple, handler):
1788 """set_custom_exc(exc_tuple, handler)
1788 """set_custom_exc(exc_tuple, handler)
1789
1789
1790 Set a custom exception handler, which will be called if any of the
1790 Set a custom exception handler, which will be called if any of the
1791 exceptions in exc_tuple occur in the mainloop (specifically, in the
1791 exceptions in exc_tuple occur in the mainloop (specifically, in the
1792 run_code() method).
1792 run_code() method).
1793
1793
1794 Parameters
1794 Parameters
1795 ----------
1795 ----------
1796
1796
1797 exc_tuple : tuple of exception classes
1797 exc_tuple : tuple of exception classes
1798 A *tuple* of exception classes, for which to call the defined
1798 A *tuple* of exception classes, for which to call the defined
1799 handler. It is very important that you use a tuple, and NOT A
1799 handler. It is very important that you use a tuple, and NOT A
1800 LIST here, because of the way Python's except statement works. If
1800 LIST here, because of the way Python's except statement works. If
1801 you only want to trap a single exception, use a singleton tuple::
1801 you only want to trap a single exception, use a singleton tuple::
1802
1802
1803 exc_tuple == (MyCustomException,)
1803 exc_tuple == (MyCustomException,)
1804
1804
1805 handler : callable
1805 handler : callable
1806 handler must have the following signature::
1806 handler must have the following signature::
1807
1807
1808 def my_handler(self, etype, value, tb, tb_offset=None):
1808 def my_handler(self, etype, value, tb, tb_offset=None):
1809 ...
1809 ...
1810 return structured_traceback
1810 return structured_traceback
1811
1811
1812 Your handler must return a structured traceback (a list of strings),
1812 Your handler must return a structured traceback (a list of strings),
1813 or None.
1813 or None.
1814
1814
1815 This will be made into an instance method (via types.MethodType)
1815 This will be made into an instance method (via types.MethodType)
1816 of IPython itself, and it will be called if any of the exceptions
1816 of IPython itself, and it will be called if any of the exceptions
1817 listed in the exc_tuple are caught. If the handler is None, an
1817 listed in the exc_tuple are caught. If the handler is None, an
1818 internal basic one is used, which just prints basic info.
1818 internal basic one is used, which just prints basic info.
1819
1819
1820 To protect IPython from crashes, if your handler ever raises an
1820 To protect IPython from crashes, if your handler ever raises an
1821 exception or returns an invalid result, it will be immediately
1821 exception or returns an invalid result, it will be immediately
1822 disabled.
1822 disabled.
1823
1823
1824 WARNING: by putting in your own exception handler into IPython's main
1824 WARNING: by putting in your own exception handler into IPython's main
1825 execution loop, you run a very good chance of nasty crashes. This
1825 execution loop, you run a very good chance of nasty crashes. This
1826 facility should only be used if you really know what you are doing."""
1826 facility should only be used if you really know what you are doing."""
1827 if not isinstance(exc_tuple, tuple):
1827 if not isinstance(exc_tuple, tuple):
1828 raise TypeError("The custom exceptions must be given as a tuple.")
1828 raise TypeError("The custom exceptions must be given as a tuple.")
1829
1829
1830 def dummy_handler(self, etype, value, tb, tb_offset=None):
1830 def dummy_handler(self, etype, value, tb, tb_offset=None):
1831 print('*** Simple custom exception handler ***')
1831 print('*** Simple custom exception handler ***')
1832 print('Exception type :', etype)
1832 print('Exception type :', etype)
1833 print('Exception value:', value)
1833 print('Exception value:', value)
1834 print('Traceback :', tb)
1834 print('Traceback :', tb)
1835
1835
1836 def validate_stb(stb):
1836 def validate_stb(stb):
1837 """validate structured traceback return type
1837 """validate structured traceback return type
1838
1838
1839 return type of CustomTB *should* be a list of strings, but allow
1839 return type of CustomTB *should* be a list of strings, but allow
1840 single strings or None, which are harmless.
1840 single strings or None, which are harmless.
1841
1841
1842 This function will *always* return a list of strings,
1842 This function will *always* return a list of strings,
1843 and will raise a TypeError if stb is inappropriate.
1843 and will raise a TypeError if stb is inappropriate.
1844 """
1844 """
1845 msg = "CustomTB must return list of strings, not %r" % stb
1845 msg = "CustomTB must return list of strings, not %r" % stb
1846 if stb is None:
1846 if stb is None:
1847 return []
1847 return []
1848 elif isinstance(stb, str):
1848 elif isinstance(stb, str):
1849 return [stb]
1849 return [stb]
1850 elif not isinstance(stb, list):
1850 elif not isinstance(stb, list):
1851 raise TypeError(msg)
1851 raise TypeError(msg)
1852 # it's a list
1852 # it's a list
1853 for line in stb:
1853 for line in stb:
1854 # check every element
1854 # check every element
1855 if not isinstance(line, str):
1855 if not isinstance(line, str):
1856 raise TypeError(msg)
1856 raise TypeError(msg)
1857 return stb
1857 return stb
1858
1858
1859 if handler is None:
1859 if handler is None:
1860 wrapped = dummy_handler
1860 wrapped = dummy_handler
1861 else:
1861 else:
1862 def wrapped(self,etype,value,tb,tb_offset=None):
1862 def wrapped(self,etype,value,tb,tb_offset=None):
1863 """wrap CustomTB handler, to protect IPython from user code
1863 """wrap CustomTB handler, to protect IPython from user code
1864
1864
1865 This makes it harder (but not impossible) for custom exception
1865 This makes it harder (but not impossible) for custom exception
1866 handlers to crash IPython.
1866 handlers to crash IPython.
1867 """
1867 """
1868 try:
1868 try:
1869 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1869 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1870 return validate_stb(stb)
1870 return validate_stb(stb)
1871 except:
1871 except:
1872 # clear custom handler immediately
1872 # clear custom handler immediately
1873 self.set_custom_exc((), None)
1873 self.set_custom_exc((), None)
1874 print("Custom TB Handler failed, unregistering", file=sys.stderr)
1874 print("Custom TB Handler failed, unregistering", file=sys.stderr)
1875 # show the exception in handler first
1875 # show the exception in handler first
1876 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1876 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1877 print(self.InteractiveTB.stb2text(stb))
1877 print(self.InteractiveTB.stb2text(stb))
1878 print("The original exception:")
1878 print("The original exception:")
1879 stb = self.InteractiveTB.structured_traceback(
1879 stb = self.InteractiveTB.structured_traceback(
1880 (etype,value,tb), tb_offset=tb_offset
1880 (etype,value,tb), tb_offset=tb_offset
1881 )
1881 )
1882 return stb
1882 return stb
1883
1883
1884 self.CustomTB = types.MethodType(wrapped,self)
1884 self.CustomTB = types.MethodType(wrapped,self)
1885 self.custom_exceptions = exc_tuple
1885 self.custom_exceptions = exc_tuple
1886
1886
1887 def excepthook(self, etype, value, tb):
1887 def excepthook(self, etype, value, tb):
1888 """One more defense for GUI apps that call sys.excepthook.
1888 """One more defense for GUI apps that call sys.excepthook.
1889
1889
1890 GUI frameworks like wxPython trap exceptions and call
1890 GUI frameworks like wxPython trap exceptions and call
1891 sys.excepthook themselves. I guess this is a feature that
1891 sys.excepthook themselves. I guess this is a feature that
1892 enables them to keep running after exceptions that would
1892 enables them to keep running after exceptions that would
1893 otherwise kill their mainloop. This is a bother for IPython
1893 otherwise kill their mainloop. This is a bother for IPython
1894 which excepts to catch all of the program exceptions with a try:
1894 which excepts to catch all of the program exceptions with a try:
1895 except: statement.
1895 except: statement.
1896
1896
1897 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1897 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1898 any app directly invokes sys.excepthook, it will look to the user like
1898 any app directly invokes sys.excepthook, it will look to the user like
1899 IPython crashed. In order to work around this, we can disable the
1899 IPython crashed. In order to work around this, we can disable the
1900 CrashHandler and replace it with this excepthook instead, which prints a
1900 CrashHandler and replace it with this excepthook instead, which prints a
1901 regular traceback using our InteractiveTB. In this fashion, apps which
1901 regular traceback using our InteractiveTB. In this fashion, apps which
1902 call sys.excepthook will generate a regular-looking exception from
1902 call sys.excepthook will generate a regular-looking exception from
1903 IPython, and the CrashHandler will only be triggered by real IPython
1903 IPython, and the CrashHandler will only be triggered by real IPython
1904 crashes.
1904 crashes.
1905
1905
1906 This hook should be used sparingly, only in places which are not likely
1906 This hook should be used sparingly, only in places which are not likely
1907 to be true IPython errors.
1907 to be true IPython errors.
1908 """
1908 """
1909 self.showtraceback((etype, value, tb), tb_offset=0)
1909 self.showtraceback((etype, value, tb), tb_offset=0)
1910
1910
1911 def _get_exc_info(self, exc_tuple=None):
1911 def _get_exc_info(self, exc_tuple=None):
1912 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1912 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1913
1913
1914 Ensures sys.last_type,value,traceback hold the exc_info we found,
1914 Ensures sys.last_type,value,traceback hold the exc_info we found,
1915 from whichever source.
1915 from whichever source.
1916
1916
1917 raises ValueError if none of these contain any information
1917 raises ValueError if none of these contain any information
1918 """
1918 """
1919 if exc_tuple is None:
1919 if exc_tuple is None:
1920 etype, value, tb = sys.exc_info()
1920 etype, value, tb = sys.exc_info()
1921 else:
1921 else:
1922 etype, value, tb = exc_tuple
1922 etype, value, tb = exc_tuple
1923
1923
1924 if etype is None:
1924 if etype is None:
1925 if hasattr(sys, 'last_type'):
1925 if hasattr(sys, 'last_type'):
1926 etype, value, tb = sys.last_type, sys.last_value, \
1926 etype, value, tb = sys.last_type, sys.last_value, \
1927 sys.last_traceback
1927 sys.last_traceback
1928
1928
1929 if etype is None:
1929 if etype is None:
1930 raise ValueError("No exception to find")
1930 raise ValueError("No exception to find")
1931
1931
1932 # Now store the exception info in sys.last_type etc.
1932 # Now store the exception info in sys.last_type etc.
1933 # WARNING: these variables are somewhat deprecated and not
1933 # WARNING: these variables are somewhat deprecated and not
1934 # necessarily safe to use in a threaded environment, but tools
1934 # necessarily safe to use in a threaded environment, but tools
1935 # like pdb depend on their existence, so let's set them. If we
1935 # like pdb depend on their existence, so let's set them. If we
1936 # find problems in the field, we'll need to revisit their use.
1936 # find problems in the field, we'll need to revisit their use.
1937 sys.last_type = etype
1937 sys.last_type = etype
1938 sys.last_value = value
1938 sys.last_value = value
1939 sys.last_traceback = tb
1939 sys.last_traceback = tb
1940
1940
1941 return etype, value, tb
1941 return etype, value, tb
1942
1942
1943 def show_usage_error(self, exc):
1943 def show_usage_error(self, exc):
1944 """Show a short message for UsageErrors
1944 """Show a short message for UsageErrors
1945
1945
1946 These are special exceptions that shouldn't show a traceback.
1946 These are special exceptions that shouldn't show a traceback.
1947 """
1947 """
1948 print("UsageError: %s" % exc, file=sys.stderr)
1948 print("UsageError: %s" % exc, file=sys.stderr)
1949
1949
1950 def get_exception_only(self, exc_tuple=None):
1950 def get_exception_only(self, exc_tuple=None):
1951 """
1951 """
1952 Return as a string (ending with a newline) the exception that
1952 Return as a string (ending with a newline) the exception that
1953 just occurred, without any traceback.
1953 just occurred, without any traceback.
1954 """
1954 """
1955 etype, value, tb = self._get_exc_info(exc_tuple)
1955 etype, value, tb = self._get_exc_info(exc_tuple)
1956 msg = traceback.format_exception_only(etype, value)
1956 msg = traceback.format_exception_only(etype, value)
1957 return ''.join(msg)
1957 return ''.join(msg)
1958
1958
1959 def showtraceback(self, exc_tuple=None, filename=None, tb_offset=None,
1959 def showtraceback(self, exc_tuple=None, filename=None, tb_offset=None,
1960 exception_only=False, running_compiled_code=False):
1960 exception_only=False, running_compiled_code=False):
1961 """Display the exception that just occurred.
1961 """Display the exception that just occurred.
1962
1962
1963 If nothing is known about the exception, this is the method which
1963 If nothing is known about the exception, this is the method which
1964 should be used throughout the code for presenting user tracebacks,
1964 should be used throughout the code for presenting user tracebacks,
1965 rather than directly invoking the InteractiveTB object.
1965 rather than directly invoking the InteractiveTB object.
1966
1966
1967 A specific showsyntaxerror() also exists, but this method can take
1967 A specific showsyntaxerror() also exists, but this method can take
1968 care of calling it if needed, so unless you are explicitly catching a
1968 care of calling it if needed, so unless you are explicitly catching a
1969 SyntaxError exception, don't try to analyze the stack manually and
1969 SyntaxError exception, don't try to analyze the stack manually and
1970 simply call this method."""
1970 simply call this method."""
1971
1971
1972 try:
1972 try:
1973 try:
1973 try:
1974 etype, value, tb = self._get_exc_info(exc_tuple)
1974 etype, value, tb = self._get_exc_info(exc_tuple)
1975 except ValueError:
1975 except ValueError:
1976 print('No traceback available to show.', file=sys.stderr)
1976 print('No traceback available to show.', file=sys.stderr)
1977 return
1977 return
1978
1978
1979 if issubclass(etype, SyntaxError):
1979 if issubclass(etype, SyntaxError):
1980 # Though this won't be called by syntax errors in the input
1980 # Though this won't be called by syntax errors in the input
1981 # line, there may be SyntaxError cases with imported code.
1981 # line, there may be SyntaxError cases with imported code.
1982 self.showsyntaxerror(filename, running_compiled_code)
1982 self.showsyntaxerror(filename, running_compiled_code)
1983 elif etype is UsageError:
1983 elif etype is UsageError:
1984 self.show_usage_error(value)
1984 self.show_usage_error(value)
1985 else:
1985 else:
1986 if exception_only:
1986 if exception_only:
1987 stb = ['An exception has occurred, use %tb to see '
1987 stb = ['An exception has occurred, use %tb to see '
1988 'the full traceback.\n']
1988 'the full traceback.\n']
1989 stb.extend(self.InteractiveTB.get_exception_only(etype,
1989 stb.extend(self.InteractiveTB.get_exception_only(etype,
1990 value))
1990 value))
1991 else:
1991 else:
1992 try:
1992 try:
1993 # Exception classes can customise their traceback - we
1993 # Exception classes can customise their traceback - we
1994 # use this in IPython.parallel for exceptions occurring
1994 # use this in IPython.parallel for exceptions occurring
1995 # in the engines. This should return a list of strings.
1995 # in the engines. This should return a list of strings.
1996 stb = value._render_traceback_()
1996 stb = value._render_traceback_()
1997 except Exception:
1997 except Exception:
1998 stb = self.InteractiveTB.structured_traceback(etype,
1998 stb = self.InteractiveTB.structured_traceback(etype,
1999 value, tb, tb_offset=tb_offset)
1999 value, tb, tb_offset=tb_offset)
2000
2000
2001 self._showtraceback(etype, value, stb)
2001 self._showtraceback(etype, value, stb)
2002 if self.call_pdb:
2002 if self.call_pdb:
2003 # drop into debugger
2003 # drop into debugger
2004 self.debugger(force=True)
2004 self.debugger(force=True)
2005 return
2005 return
2006
2006
2007 # Actually show the traceback
2007 # Actually show the traceback
2008 self._showtraceback(etype, value, stb)
2008 self._showtraceback(etype, value, stb)
2009
2009
2010 except KeyboardInterrupt:
2010 except KeyboardInterrupt:
2011 print('\n' + self.get_exception_only(), file=sys.stderr)
2011 print('\n' + self.get_exception_only(), file=sys.stderr)
2012
2012
2013 def _showtraceback(self, etype, evalue, stb):
2013 def _showtraceback(self, etype, evalue, stb):
2014 """Actually show a traceback.
2014 """Actually show a traceback.
2015
2015
2016 Subclasses may override this method to put the traceback on a different
2016 Subclasses may override this method to put the traceback on a different
2017 place, like a side channel.
2017 place, like a side channel.
2018 """
2018 """
2019 print(self.InteractiveTB.stb2text(stb))
2019 print(self.InteractiveTB.stb2text(stb))
2020
2020
2021 def showsyntaxerror(self, filename=None, running_compiled_code=False):
2021 def showsyntaxerror(self, filename=None, running_compiled_code=False):
2022 """Display the syntax error that just occurred.
2022 """Display the syntax error that just occurred.
2023
2023
2024 This doesn't display a stack trace because there isn't one.
2024 This doesn't display a stack trace because there isn't one.
2025
2025
2026 If a filename is given, it is stuffed in the exception instead
2026 If a filename is given, it is stuffed in the exception instead
2027 of what was there before (because Python's parser always uses
2027 of what was there before (because Python's parser always uses
2028 "<string>" when reading from a string).
2028 "<string>" when reading from a string).
2029
2029
2030 If the syntax error occurred when running a compiled code (i.e. running_compile_code=True),
2030 If the syntax error occurred when running a compiled code (i.e. running_compile_code=True),
2031 longer stack trace will be displayed.
2031 longer stack trace will be displayed.
2032 """
2032 """
2033 etype, value, last_traceback = self._get_exc_info()
2033 etype, value, last_traceback = self._get_exc_info()
2034
2034
2035 if filename and issubclass(etype, SyntaxError):
2035 if filename and issubclass(etype, SyntaxError):
2036 try:
2036 try:
2037 value.filename = filename
2037 value.filename = filename
2038 except:
2038 except:
2039 # Not the format we expect; leave it alone
2039 # Not the format we expect; leave it alone
2040 pass
2040 pass
2041
2041
2042 # If the error occurred when executing compiled code, we should provide full stacktrace.
2042 # If the error occurred when executing compiled code, we should provide full stacktrace.
2043 elist = traceback.extract_tb(last_traceback) if running_compiled_code else []
2043 elist = traceback.extract_tb(last_traceback) if running_compiled_code else []
2044 stb = self.SyntaxTB.structured_traceback(etype, value, elist)
2044 stb = self.SyntaxTB.structured_traceback(etype, value, elist)
2045 self._showtraceback(etype, value, stb)
2045 self._showtraceback(etype, value, stb)
2046
2046
2047 # This is overridden in TerminalInteractiveShell to show a message about
2047 # This is overridden in TerminalInteractiveShell to show a message about
2048 # the %paste magic.
2048 # the %paste magic.
2049 def showindentationerror(self):
2049 def showindentationerror(self):
2050 """Called by _run_cell when there's an IndentationError in code entered
2050 """Called by _run_cell when there's an IndentationError in code entered
2051 at the prompt.
2051 at the prompt.
2052
2052
2053 This is overridden in TerminalInteractiveShell to show a message about
2053 This is overridden in TerminalInteractiveShell to show a message about
2054 the %paste magic."""
2054 the %paste magic."""
2055 self.showsyntaxerror()
2055 self.showsyntaxerror()
2056
2056
2057 #-------------------------------------------------------------------------
2057 #-------------------------------------------------------------------------
2058 # Things related to readline
2058 # Things related to readline
2059 #-------------------------------------------------------------------------
2059 #-------------------------------------------------------------------------
2060
2060
2061 def init_readline(self):
2061 def init_readline(self):
2062 """DEPRECATED
2062 """DEPRECATED
2063
2063
2064 Moved to terminal subclass, here only to simplify the init logic."""
2064 Moved to terminal subclass, here only to simplify the init logic."""
2065 # Set a number of methods that depend on readline to be no-op
2065 # Set a number of methods that depend on readline to be no-op
2066 warnings.warn('`init_readline` is no-op since IPython 5.0 and is Deprecated',
2066 warnings.warn('`init_readline` is no-op since IPython 5.0 and is Deprecated',
2067 DeprecationWarning, stacklevel=2)
2067 DeprecationWarning, stacklevel=2)
2068 self.set_custom_completer = no_op
2068 self.set_custom_completer = no_op
2069
2069
2070 @skip_doctest
2070 @skip_doctest
2071 def set_next_input(self, s, replace=False):
2071 def set_next_input(self, s, replace=False):
2072 """ Sets the 'default' input string for the next command line.
2072 """ Sets the 'default' input string for the next command line.
2073
2073
2074 Example::
2074 Example::
2075
2075
2076 In [1]: _ip.set_next_input("Hello Word")
2076 In [1]: _ip.set_next_input("Hello Word")
2077 In [2]: Hello Word_ # cursor is here
2077 In [2]: Hello Word_ # cursor is here
2078 """
2078 """
2079 self.rl_next_input = s
2079 self.rl_next_input = s
2080
2080
2081 def _indent_current_str(self):
2081 def _indent_current_str(self):
2082 """return the current level of indentation as a string"""
2082 """return the current level of indentation as a string"""
2083 return self.input_splitter.get_indent_spaces() * ' '
2083 return self.input_splitter.get_indent_spaces() * ' '
2084
2084
2085 #-------------------------------------------------------------------------
2085 #-------------------------------------------------------------------------
2086 # Things related to text completion
2086 # Things related to text completion
2087 #-------------------------------------------------------------------------
2087 #-------------------------------------------------------------------------
2088
2088
2089 def init_completer(self):
2089 def init_completer(self):
2090 """Initialize the completion machinery.
2090 """Initialize the completion machinery.
2091
2091
2092 This creates completion machinery that can be used by client code,
2092 This creates completion machinery that can be used by client code,
2093 either interactively in-process (typically triggered by the readline
2093 either interactively in-process (typically triggered by the readline
2094 library), programmatically (such as in test suites) or out-of-process
2094 library), programmatically (such as in test suites) or out-of-process
2095 (typically over the network by remote frontends).
2095 (typically over the network by remote frontends).
2096 """
2096 """
2097 from IPython.core.completer import IPCompleter
2097 from IPython.core.completer import IPCompleter
2098 from IPython.core.completerlib import (module_completer,
2098 from IPython.core.completerlib import (module_completer,
2099 magic_run_completer, cd_completer, reset_completer)
2099 magic_run_completer, cd_completer, reset_completer)
2100
2100
2101 self.Completer = IPCompleter(shell=self,
2101 self.Completer = IPCompleter(shell=self,
2102 namespace=self.user_ns,
2102 namespace=self.user_ns,
2103 global_namespace=self.user_global_ns,
2103 global_namespace=self.user_global_ns,
2104 parent=self,
2104 parent=self,
2105 )
2105 )
2106 self.configurables.append(self.Completer)
2106 self.configurables.append(self.Completer)
2107
2107
2108 # Add custom completers to the basic ones built into IPCompleter
2108 # Add custom completers to the basic ones built into IPCompleter
2109 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
2109 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
2110 self.strdispatchers['complete_command'] = sdisp
2110 self.strdispatchers['complete_command'] = sdisp
2111 self.Completer.custom_completers = sdisp
2111 self.Completer.custom_completers = sdisp
2112
2112
2113 self.set_hook('complete_command', module_completer, str_key = 'import')
2113 self.set_hook('complete_command', module_completer, str_key = 'import')
2114 self.set_hook('complete_command', module_completer, str_key = 'from')
2114 self.set_hook('complete_command', module_completer, str_key = 'from')
2115 self.set_hook('complete_command', module_completer, str_key = '%aimport')
2115 self.set_hook('complete_command', module_completer, str_key = '%aimport')
2116 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
2116 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
2117 self.set_hook('complete_command', cd_completer, str_key = '%cd')
2117 self.set_hook('complete_command', cd_completer, str_key = '%cd')
2118 self.set_hook('complete_command', reset_completer, str_key = '%reset')
2118 self.set_hook('complete_command', reset_completer, str_key = '%reset')
2119
2119
2120 @skip_doctest
2120 @skip_doctest
2121 def complete(self, text, line=None, cursor_pos=None):
2121 def complete(self, text, line=None, cursor_pos=None):
2122 """Return the completed text and a list of completions.
2122 """Return the completed text and a list of completions.
2123
2123
2124 Parameters
2124 Parameters
2125 ----------
2125 ----------
2126
2126
2127 text : string
2127 text : string
2128 A string of text to be completed on. It can be given as empty and
2128 A string of text to be completed on. It can be given as empty and
2129 instead a line/position pair are given. In this case, the
2129 instead a line/position pair are given. In this case, the
2130 completer itself will split the line like readline does.
2130 completer itself will split the line like readline does.
2131
2131
2132 line : string, optional
2132 line : string, optional
2133 The complete line that text is part of.
2133 The complete line that text is part of.
2134
2134
2135 cursor_pos : int, optional
2135 cursor_pos : int, optional
2136 The position of the cursor on the input line.
2136 The position of the cursor on the input line.
2137
2137
2138 Returns
2138 Returns
2139 -------
2139 -------
2140 text : string
2140 text : string
2141 The actual text that was completed.
2141 The actual text that was completed.
2142
2142
2143 matches : list
2143 matches : list
2144 A sorted list with all possible completions.
2144 A sorted list with all possible completions.
2145
2145
2146 The optional arguments allow the completion to take more context into
2146 The optional arguments allow the completion to take more context into
2147 account, and are part of the low-level completion API.
2147 account, and are part of the low-level completion API.
2148
2148
2149 This is a wrapper around the completion mechanism, similar to what
2149 This is a wrapper around the completion mechanism, similar to what
2150 readline does at the command line when the TAB key is hit. By
2150 readline does at the command line when the TAB key is hit. By
2151 exposing it as a method, it can be used by other non-readline
2151 exposing it as a method, it can be used by other non-readline
2152 environments (such as GUIs) for text completion.
2152 environments (such as GUIs) for text completion.
2153
2153
2154 Simple usage example:
2154 Simple usage example:
2155
2155
2156 In [1]: x = 'hello'
2156 In [1]: x = 'hello'
2157
2157
2158 In [2]: _ip.complete('x.l')
2158 In [2]: _ip.complete('x.l')
2159 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2159 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
2160 """
2160 """
2161
2161
2162 # Inject names into __builtin__ so we can complete on the added names.
2162 # Inject names into __builtin__ so we can complete on the added names.
2163 with self.builtin_trap:
2163 with self.builtin_trap:
2164 return self.Completer.complete(text, line, cursor_pos)
2164 return self.Completer.complete(text, line, cursor_pos)
2165
2165
2166 def set_custom_completer(self, completer, pos=0):
2166 def set_custom_completer(self, completer, pos=0):
2167 """Adds a new custom completer function.
2167 """Adds a new custom completer function.
2168
2168
2169 The position argument (defaults to 0) is the index in the completers
2169 The position argument (defaults to 0) is the index in the completers
2170 list where you want the completer to be inserted."""
2170 list where you want the completer to be inserted."""
2171
2171
2172 newcomp = types.MethodType(completer,self.Completer)
2172 newcomp = types.MethodType(completer,self.Completer)
2173 self.Completer.matchers.insert(pos,newcomp)
2173 self.Completer.matchers.insert(pos,newcomp)
2174
2174
2175 def set_completer_frame(self, frame=None):
2175 def set_completer_frame(self, frame=None):
2176 """Set the frame of the completer."""
2176 """Set the frame of the completer."""
2177 if frame:
2177 if frame:
2178 self.Completer.namespace = frame.f_locals
2178 self.Completer.namespace = frame.f_locals
2179 self.Completer.global_namespace = frame.f_globals
2179 self.Completer.global_namespace = frame.f_globals
2180 else:
2180 else:
2181 self.Completer.namespace = self.user_ns
2181 self.Completer.namespace = self.user_ns
2182 self.Completer.global_namespace = self.user_global_ns
2182 self.Completer.global_namespace = self.user_global_ns
2183
2183
2184 #-------------------------------------------------------------------------
2184 #-------------------------------------------------------------------------
2185 # Things related to magics
2185 # Things related to magics
2186 #-------------------------------------------------------------------------
2186 #-------------------------------------------------------------------------
2187
2187
2188 def init_magics(self):
2188 def init_magics(self):
2189 from IPython.core import magics as m
2189 from IPython.core import magics as m
2190 self.magics_manager = magic.MagicsManager(shell=self,
2190 self.magics_manager = magic.MagicsManager(shell=self,
2191 parent=self,
2191 parent=self,
2192 user_magics=m.UserMagics(self))
2192 user_magics=m.UserMagics(self))
2193 self.configurables.append(self.magics_manager)
2193 self.configurables.append(self.magics_manager)
2194
2194
2195 # Expose as public API from the magics manager
2195 # Expose as public API from the magics manager
2196 self.register_magics = self.magics_manager.register
2196 self.register_magics = self.magics_manager.register
2197
2197
2198 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2198 self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics,
2199 m.ConfigMagics, m.DisplayMagics, m.ExecutionMagics,
2199 m.ConfigMagics, m.DisplayMagics, m.ExecutionMagics,
2200 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2200 m.ExtensionMagics, m.HistoryMagics, m.LoggingMagics,
2201 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2201 m.NamespaceMagics, m.OSMagics, m.PylabMagics, m.ScriptMagics,
2202 )
2202 )
2203
2203
2204 # Register Magic Aliases
2204 # Register Magic Aliases
2205 mman = self.magics_manager
2205 mman = self.magics_manager
2206 # FIXME: magic aliases should be defined by the Magics classes
2206 # FIXME: magic aliases should be defined by the Magics classes
2207 # or in MagicsManager, not here
2207 # or in MagicsManager, not here
2208 mman.register_alias('ed', 'edit')
2208 mman.register_alias('ed', 'edit')
2209 mman.register_alias('hist', 'history')
2209 mman.register_alias('hist', 'history')
2210 mman.register_alias('rep', 'recall')
2210 mman.register_alias('rep', 'recall')
2211 mman.register_alias('SVG', 'svg', 'cell')
2211 mman.register_alias('SVG', 'svg', 'cell')
2212 mman.register_alias('HTML', 'html', 'cell')
2212 mman.register_alias('HTML', 'html', 'cell')
2213 mman.register_alias('file', 'writefile', 'cell')
2213 mman.register_alias('file', 'writefile', 'cell')
2214
2214
2215 # FIXME: Move the color initialization to the DisplayHook, which
2215 # FIXME: Move the color initialization to the DisplayHook, which
2216 # should be split into a prompt manager and displayhook. We probably
2216 # should be split into a prompt manager and displayhook. We probably
2217 # even need a centralize colors management object.
2217 # even need a centralize colors management object.
2218 self.run_line_magic('colors', self.colors)
2218 self.run_line_magic('colors', self.colors)
2219
2219
2220 # Defined here so that it's included in the documentation
2220 # Defined here so that it's included in the documentation
2221 @functools.wraps(magic.MagicsManager.register_function)
2221 @functools.wraps(magic.MagicsManager.register_function)
2222 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2222 def register_magic_function(self, func, magic_kind='line', magic_name=None):
2223 self.magics_manager.register_function(func,
2223 self.magics_manager.register_function(func,
2224 magic_kind=magic_kind, magic_name=magic_name)
2224 magic_kind=magic_kind, magic_name=magic_name)
2225
2225
2226 def run_line_magic(self, magic_name, line, _stack_depth=1):
2226 def run_line_magic(self, magic_name, line, _stack_depth=1):
2227 """Execute the given line magic.
2227 """Execute the given line magic.
2228
2228
2229 Parameters
2229 Parameters
2230 ----------
2230 ----------
2231 magic_name : str
2231 magic_name : str
2232 Name of the desired magic function, without '%' prefix.
2232 Name of the desired magic function, without '%' prefix.
2233
2233
2234 line : str
2234 line : str
2235 The rest of the input line as a single string.
2235 The rest of the input line as a single string.
2236
2236
2237 _stack_depth : int
2237 _stack_depth : int
2238 If run_line_magic() is called from magic() then _stack_depth=2.
2238 If run_line_magic() is called from magic() then _stack_depth=2.
2239 This is added to ensure backward compatibility for use of 'get_ipython().magic()'
2239 This is added to ensure backward compatibility for use of 'get_ipython().magic()'
2240 """
2240 """
2241 fn = self.find_line_magic(magic_name)
2241 fn = self.find_line_magic(magic_name)
2242 if fn is None:
2242 if fn is None:
2243 cm = self.find_cell_magic(magic_name)
2243 cm = self.find_cell_magic(magic_name)
2244 etpl = "Line magic function `%%%s` not found%s."
2244 etpl = "Line magic function `%%%s` not found%s."
2245 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2245 extra = '' if cm is None else (' (But cell magic `%%%%%s` exists, '
2246 'did you mean that instead?)' % magic_name )
2246 'did you mean that instead?)' % magic_name )
2247 raise UsageError(etpl % (magic_name, extra))
2247 raise UsageError(etpl % (magic_name, extra))
2248 else:
2248 else:
2249 # Note: this is the distance in the stack to the user's frame.
2249 # Note: this is the distance in the stack to the user's frame.
2250 # This will need to be updated if the internal calling logic gets
2250 # This will need to be updated if the internal calling logic gets
2251 # refactored, or else we'll be expanding the wrong variables.
2251 # refactored, or else we'll be expanding the wrong variables.
2252
2252
2253 # Determine stack_depth depending on where run_line_magic() has been called
2253 # Determine stack_depth depending on where run_line_magic() has been called
2254 stack_depth = _stack_depth
2254 stack_depth = _stack_depth
2255 magic_arg_s = self.var_expand(line, stack_depth)
2255 magic_arg_s = self.var_expand(line, stack_depth)
2256 # Put magic args in a list so we can call with f(*a) syntax
2256 # Put magic args in a list so we can call with f(*a) syntax
2257 args = [magic_arg_s]
2257 args = [magic_arg_s]
2258 kwargs = {}
2258 kwargs = {}
2259 # Grab local namespace if we need it:
2259 # Grab local namespace if we need it:
2260 if getattr(fn, "needs_local_scope", False):
2260 if getattr(fn, "needs_local_scope", False):
2261 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2261 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2262 with self.builtin_trap:
2262 with self.builtin_trap:
2263 result = fn(*args,**kwargs)
2263 result = fn(*args,**kwargs)
2264 return result
2264 return result
2265
2265
2266 def run_cell_magic(self, magic_name, line, cell):
2266 def run_cell_magic(self, magic_name, line, cell):
2267 """Execute the given cell magic.
2267 """Execute the given cell magic.
2268
2268
2269 Parameters
2269 Parameters
2270 ----------
2270 ----------
2271 magic_name : str
2271 magic_name : str
2272 Name of the desired magic function, without '%' prefix.
2272 Name of the desired magic function, without '%' prefix.
2273
2273
2274 line : str
2274 line : str
2275 The rest of the first input line as a single string.
2275 The rest of the first input line as a single string.
2276
2276
2277 cell : str
2277 cell : str
2278 The body of the cell as a (possibly multiline) string.
2278 The body of the cell as a (possibly multiline) string.
2279 """
2279 """
2280 fn = self.find_cell_magic(magic_name)
2280 fn = self.find_cell_magic(magic_name)
2281 if fn is None:
2281 if fn is None:
2282 lm = self.find_line_magic(magic_name)
2282 lm = self.find_line_magic(magic_name)
2283 etpl = "Cell magic `%%{0}` not found{1}."
2283 etpl = "Cell magic `%%{0}` not found{1}."
2284 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2284 extra = '' if lm is None else (' (But line magic `%{0}` exists, '
2285 'did you mean that instead?)'.format(magic_name))
2285 'did you mean that instead?)'.format(magic_name))
2286 raise UsageError(etpl.format(magic_name, extra))
2286 raise UsageError(etpl.format(magic_name, extra))
2287 elif cell == '':
2287 elif cell == '':
2288 message = '%%{0} is a cell magic, but the cell body is empty.'.format(magic_name)
2288 message = '%%{0} is a cell magic, but the cell body is empty.'.format(magic_name)
2289 if self.find_line_magic(magic_name) is not None:
2289 if self.find_line_magic(magic_name) is not None:
2290 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2290 message += ' Did you mean the line magic %{0} (single %)?'.format(magic_name)
2291 raise UsageError(message)
2291 raise UsageError(message)
2292 else:
2292 else:
2293 # Note: this is the distance in the stack to the user's frame.
2293 # Note: this is the distance in the stack to the user's frame.
2294 # This will need to be updated if the internal calling logic gets
2294 # This will need to be updated if the internal calling logic gets
2295 # refactored, or else we'll be expanding the wrong variables.
2295 # refactored, or else we'll be expanding the wrong variables.
2296 stack_depth = 2
2296 stack_depth = 2
2297 magic_arg_s = self.var_expand(line, stack_depth)
2297 magic_arg_s = self.var_expand(line, stack_depth)
2298 with self.builtin_trap:
2298 with self.builtin_trap:
2299 result = fn(magic_arg_s, cell)
2299 result = fn(magic_arg_s, cell)
2300 return result
2300 return result
2301
2301
2302 def find_line_magic(self, magic_name):
2302 def find_line_magic(self, magic_name):
2303 """Find and return a line magic by name.
2303 """Find and return a line magic by name.
2304
2304
2305 Returns None if the magic isn't found."""
2305 Returns None if the magic isn't found."""
2306 return self.magics_manager.magics['line'].get(magic_name)
2306 return self.magics_manager.magics['line'].get(magic_name)
2307
2307
2308 def find_cell_magic(self, magic_name):
2308 def find_cell_magic(self, magic_name):
2309 """Find and return a cell magic by name.
2309 """Find and return a cell magic by name.
2310
2310
2311 Returns None if the magic isn't found."""
2311 Returns None if the magic isn't found."""
2312 return self.magics_manager.magics['cell'].get(magic_name)
2312 return self.magics_manager.magics['cell'].get(magic_name)
2313
2313
2314 def find_magic(self, magic_name, magic_kind='line'):
2314 def find_magic(self, magic_name, magic_kind='line'):
2315 """Find and return a magic of the given type by name.
2315 """Find and return a magic of the given type by name.
2316
2316
2317 Returns None if the magic isn't found."""
2317 Returns None if the magic isn't found."""
2318 return self.magics_manager.magics[magic_kind].get(magic_name)
2318 return self.magics_manager.magics[magic_kind].get(magic_name)
2319
2319
2320 def magic(self, arg_s):
2320 def magic(self, arg_s):
2321 """DEPRECATED. Use run_line_magic() instead.
2321 """DEPRECATED. Use run_line_magic() instead.
2322
2322
2323 Call a magic function by name.
2323 Call a magic function by name.
2324
2324
2325 Input: a string containing the name of the magic function to call and
2325 Input: a string containing the name of the magic function to call and
2326 any additional arguments to be passed to the magic.
2326 any additional arguments to be passed to the magic.
2327
2327
2328 magic('name -opt foo bar') is equivalent to typing at the ipython
2328 magic('name -opt foo bar') is equivalent to typing at the ipython
2329 prompt:
2329 prompt:
2330
2330
2331 In[1]: %name -opt foo bar
2331 In[1]: %name -opt foo bar
2332
2332
2333 To call a magic without arguments, simply use magic('name').
2333 To call a magic without arguments, simply use magic('name').
2334
2334
2335 This provides a proper Python function to call IPython's magics in any
2335 This provides a proper Python function to call IPython's magics in any
2336 valid Python code you can type at the interpreter, including loops and
2336 valid Python code you can type at the interpreter, including loops and
2337 compound statements.
2337 compound statements.
2338 """
2338 """
2339 # TODO: should we issue a loud deprecation warning here?
2339 # TODO: should we issue a loud deprecation warning here?
2340 magic_name, _, magic_arg_s = arg_s.partition(' ')
2340 magic_name, _, magic_arg_s = arg_s.partition(' ')
2341 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2341 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2342 return self.run_line_magic(magic_name, magic_arg_s, _stack_depth=2)
2342 return self.run_line_magic(magic_name, magic_arg_s, _stack_depth=2)
2343
2343
2344 #-------------------------------------------------------------------------
2344 #-------------------------------------------------------------------------
2345 # Things related to macros
2345 # Things related to macros
2346 #-------------------------------------------------------------------------
2346 #-------------------------------------------------------------------------
2347
2347
2348 def define_macro(self, name, themacro):
2348 def define_macro(self, name, themacro):
2349 """Define a new macro
2349 """Define a new macro
2350
2350
2351 Parameters
2351 Parameters
2352 ----------
2352 ----------
2353 name : str
2353 name : str
2354 The name of the macro.
2354 The name of the macro.
2355 themacro : str or Macro
2355 themacro : str or Macro
2356 The action to do upon invoking the macro. If a string, a new
2356 The action to do upon invoking the macro. If a string, a new
2357 Macro object is created by passing the string to it.
2357 Macro object is created by passing the string to it.
2358 """
2358 """
2359
2359
2360 from IPython.core import macro
2360 from IPython.core import macro
2361
2361
2362 if isinstance(themacro, str):
2362 if isinstance(themacro, str):
2363 themacro = macro.Macro(themacro)
2363 themacro = macro.Macro(themacro)
2364 if not isinstance(themacro, macro.Macro):
2364 if not isinstance(themacro, macro.Macro):
2365 raise ValueError('A macro must be a string or a Macro instance.')
2365 raise ValueError('A macro must be a string or a Macro instance.')
2366 self.user_ns[name] = themacro
2366 self.user_ns[name] = themacro
2367
2367
2368 #-------------------------------------------------------------------------
2368 #-------------------------------------------------------------------------
2369 # Things related to the running of system commands
2369 # Things related to the running of system commands
2370 #-------------------------------------------------------------------------
2370 #-------------------------------------------------------------------------
2371
2371
2372 def system_piped(self, cmd):
2372 def system_piped(self, cmd):
2373 """Call the given cmd in a subprocess, piping stdout/err
2373 """Call the given cmd in a subprocess, piping stdout/err
2374
2374
2375 Parameters
2375 Parameters
2376 ----------
2376 ----------
2377 cmd : str
2377 cmd : str
2378 Command to execute (can not end in '&', as background processes are
2378 Command to execute (can not end in '&', as background processes are
2379 not supported. Should not be a command that expects input
2379 not supported. Should not be a command that expects input
2380 other than simple text.
2380 other than simple text.
2381 """
2381 """
2382 if cmd.rstrip().endswith('&'):
2382 if cmd.rstrip().endswith('&'):
2383 # this is *far* from a rigorous test
2383 # this is *far* from a rigorous test
2384 # We do not support backgrounding processes because we either use
2384 # We do not support backgrounding processes because we either use
2385 # pexpect or pipes to read from. Users can always just call
2385 # pexpect or pipes to read from. Users can always just call
2386 # os.system() or use ip.system=ip.system_raw
2386 # os.system() or use ip.system=ip.system_raw
2387 # if they really want a background process.
2387 # if they really want a background process.
2388 raise OSError("Background processes not supported.")
2388 raise OSError("Background processes not supported.")
2389
2389
2390 # we explicitly do NOT return the subprocess status code, because
2390 # we explicitly do NOT return the subprocess status code, because
2391 # a non-None value would trigger :func:`sys.displayhook` calls.
2391 # a non-None value would trigger :func:`sys.displayhook` calls.
2392 # Instead, we store the exit_code in user_ns.
2392 # Instead, we store the exit_code in user_ns.
2393 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2393 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=1))
2394
2394
2395 def system_raw(self, cmd):
2395 def system_raw(self, cmd):
2396 """Call the given cmd in a subprocess using os.system on Windows or
2396 """Call the given cmd in a subprocess using os.system on Windows or
2397 subprocess.call using the system shell on other platforms.
2397 subprocess.call using the system shell on other platforms.
2398
2398
2399 Parameters
2399 Parameters
2400 ----------
2400 ----------
2401 cmd : str
2401 cmd : str
2402 Command to execute.
2402 Command to execute.
2403 """
2403 """
2404 cmd = self.var_expand(cmd, depth=1)
2404 cmd = self.var_expand(cmd, depth=1)
2405 # protect os.system from UNC paths on Windows, which it can't handle:
2405 # protect os.system from UNC paths on Windows, which it can't handle:
2406 if sys.platform == 'win32':
2406 if sys.platform == 'win32':
2407 from IPython.utils._process_win32 import AvoidUNCPath
2407 from IPython.utils._process_win32 import AvoidUNCPath
2408 with AvoidUNCPath() as path:
2408 with AvoidUNCPath() as path:
2409 if path is not None:
2409 if path is not None:
2410 cmd = '"pushd %s &&"%s' % (path, cmd)
2410 cmd = '"pushd %s &&"%s' % (path, cmd)
2411 try:
2411 try:
2412 ec = os.system(cmd)
2412 ec = os.system(cmd)
2413 except KeyboardInterrupt:
2413 except KeyboardInterrupt:
2414 print('\n' + self.get_exception_only(), file=sys.stderr)
2414 print('\n' + self.get_exception_only(), file=sys.stderr)
2415 ec = -2
2415 ec = -2
2416 else:
2416 else:
2417 # For posix the result of the subprocess.call() below is an exit
2417 # For posix the result of the subprocess.call() below is an exit
2418 # code, which by convention is zero for success, positive for
2418 # code, which by convention is zero for success, positive for
2419 # program failure. Exit codes above 128 are reserved for signals,
2419 # program failure. Exit codes above 128 are reserved for signals,
2420 # and the formula for converting a signal to an exit code is usually
2420 # and the formula for converting a signal to an exit code is usually
2421 # signal_number+128. To more easily differentiate between exit
2421 # signal_number+128. To more easily differentiate between exit
2422 # codes and signals, ipython uses negative numbers. For instance
2422 # codes and signals, ipython uses negative numbers. For instance
2423 # since control-c is signal 2 but exit code 130, ipython's
2423 # since control-c is signal 2 but exit code 130, ipython's
2424 # _exit_code variable will read -2. Note that some shells like
2424 # _exit_code variable will read -2. Note that some shells like
2425 # csh and fish don't follow sh/bash conventions for exit codes.
2425 # csh and fish don't follow sh/bash conventions for exit codes.
2426 executable = os.environ.get('SHELL', None)
2426 executable = os.environ.get('SHELL', None)
2427 try:
2427 try:
2428 # Use env shell instead of default /bin/sh
2428 # Use env shell instead of default /bin/sh
2429 ec = subprocess.call(cmd, shell=True, executable=executable)
2429 ec = subprocess.call(cmd, shell=True, executable=executable)
2430 except KeyboardInterrupt:
2430 except KeyboardInterrupt:
2431 # intercept control-C; a long traceback is not useful here
2431 # intercept control-C; a long traceback is not useful here
2432 print('\n' + self.get_exception_only(), file=sys.stderr)
2432 print('\n' + self.get_exception_only(), file=sys.stderr)
2433 ec = 130
2433 ec = 130
2434 if ec > 128:
2434 if ec > 128:
2435 ec = -(ec - 128)
2435 ec = -(ec - 128)
2436
2436
2437 # We explicitly do NOT return the subprocess status code, because
2437 # We explicitly do NOT return the subprocess status code, because
2438 # a non-None value would trigger :func:`sys.displayhook` calls.
2438 # a non-None value would trigger :func:`sys.displayhook` calls.
2439 # Instead, we store the exit_code in user_ns. Note the semantics
2439 # Instead, we store the exit_code in user_ns. Note the semantics
2440 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2440 # of _exit_code: for control-c, _exit_code == -signal.SIGNIT,
2441 # but raising SystemExit(_exit_code) will give status 254!
2441 # but raising SystemExit(_exit_code) will give status 254!
2442 self.user_ns['_exit_code'] = ec
2442 self.user_ns['_exit_code'] = ec
2443
2443
2444 # use piped system by default, because it is better behaved
2444 # use piped system by default, because it is better behaved
2445 system = system_piped
2445 system = system_piped
2446
2446
2447 def getoutput(self, cmd, split=True, depth=0):
2447 def getoutput(self, cmd, split=True, depth=0):
2448 """Get output (possibly including stderr) from a subprocess.
2448 """Get output (possibly including stderr) from a subprocess.
2449
2449
2450 Parameters
2450 Parameters
2451 ----------
2451 ----------
2452 cmd : str
2452 cmd : str
2453 Command to execute (can not end in '&', as background processes are
2453 Command to execute (can not end in '&', as background processes are
2454 not supported.
2454 not supported.
2455 split : bool, optional
2455 split : bool, optional
2456 If True, split the output into an IPython SList. Otherwise, an
2456 If True, split the output into an IPython SList. Otherwise, an
2457 IPython LSString is returned. These are objects similar to normal
2457 IPython LSString is returned. These are objects similar to normal
2458 lists and strings, with a few convenience attributes for easier
2458 lists and strings, with a few convenience attributes for easier
2459 manipulation of line-based output. You can use '?' on them for
2459 manipulation of line-based output. You can use '?' on them for
2460 details.
2460 details.
2461 depth : int, optional
2461 depth : int, optional
2462 How many frames above the caller are the local variables which should
2462 How many frames above the caller are the local variables which should
2463 be expanded in the command string? The default (0) assumes that the
2463 be expanded in the command string? The default (0) assumes that the
2464 expansion variables are in the stack frame calling this function.
2464 expansion variables are in the stack frame calling this function.
2465 """
2465 """
2466 if cmd.rstrip().endswith('&'):
2466 if cmd.rstrip().endswith('&'):
2467 # this is *far* from a rigorous test
2467 # this is *far* from a rigorous test
2468 raise OSError("Background processes not supported.")
2468 raise OSError("Background processes not supported.")
2469 out = getoutput(self.var_expand(cmd, depth=depth+1))
2469 out = getoutput(self.var_expand(cmd, depth=depth+1))
2470 if split:
2470 if split:
2471 out = SList(out.splitlines())
2471 out = SList(out.splitlines())
2472 else:
2472 else:
2473 out = LSString(out)
2473 out = LSString(out)
2474 return out
2474 return out
2475
2475
2476 #-------------------------------------------------------------------------
2476 #-------------------------------------------------------------------------
2477 # Things related to aliases
2477 # Things related to aliases
2478 #-------------------------------------------------------------------------
2478 #-------------------------------------------------------------------------
2479
2479
2480 def init_alias(self):
2480 def init_alias(self):
2481 self.alias_manager = AliasManager(shell=self, parent=self)
2481 self.alias_manager = AliasManager(shell=self, parent=self)
2482 self.configurables.append(self.alias_manager)
2482 self.configurables.append(self.alias_manager)
2483
2483
2484 #-------------------------------------------------------------------------
2484 #-------------------------------------------------------------------------
2485 # Things related to extensions
2485 # Things related to extensions
2486 #-------------------------------------------------------------------------
2486 #-------------------------------------------------------------------------
2487
2487
2488 def init_extension_manager(self):
2488 def init_extension_manager(self):
2489 self.extension_manager = ExtensionManager(shell=self, parent=self)
2489 self.extension_manager = ExtensionManager(shell=self, parent=self)
2490 self.configurables.append(self.extension_manager)
2490 self.configurables.append(self.extension_manager)
2491
2491
2492 #-------------------------------------------------------------------------
2492 #-------------------------------------------------------------------------
2493 # Things related to payloads
2493 # Things related to payloads
2494 #-------------------------------------------------------------------------
2494 #-------------------------------------------------------------------------
2495
2495
2496 def init_payload(self):
2496 def init_payload(self):
2497 self.payload_manager = PayloadManager(parent=self)
2497 self.payload_manager = PayloadManager(parent=self)
2498 self.configurables.append(self.payload_manager)
2498 self.configurables.append(self.payload_manager)
2499
2499
2500 #-------------------------------------------------------------------------
2500 #-------------------------------------------------------------------------
2501 # Things related to the prefilter
2501 # Things related to the prefilter
2502 #-------------------------------------------------------------------------
2502 #-------------------------------------------------------------------------
2503
2503
2504 def init_prefilter(self):
2504 def init_prefilter(self):
2505 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2505 self.prefilter_manager = PrefilterManager(shell=self, parent=self)
2506 self.configurables.append(self.prefilter_manager)
2506 self.configurables.append(self.prefilter_manager)
2507 # Ultimately this will be refactored in the new interpreter code, but
2507 # Ultimately this will be refactored in the new interpreter code, but
2508 # for now, we should expose the main prefilter method (there's legacy
2508 # for now, we should expose the main prefilter method (there's legacy
2509 # code out there that may rely on this).
2509 # code out there that may rely on this).
2510 self.prefilter = self.prefilter_manager.prefilter_lines
2510 self.prefilter = self.prefilter_manager.prefilter_lines
2511
2511
2512 def auto_rewrite_input(self, cmd):
2512 def auto_rewrite_input(self, cmd):
2513 """Print to the screen the rewritten form of the user's command.
2513 """Print to the screen the rewritten form of the user's command.
2514
2514
2515 This shows visual feedback by rewriting input lines that cause
2515 This shows visual feedback by rewriting input lines that cause
2516 automatic calling to kick in, like::
2516 automatic calling to kick in, like::
2517
2517
2518 /f x
2518 /f x
2519
2519
2520 into::
2520 into::
2521
2521
2522 ------> f(x)
2522 ------> f(x)
2523
2523
2524 after the user's input prompt. This helps the user understand that the
2524 after the user's input prompt. This helps the user understand that the
2525 input line was transformed automatically by IPython.
2525 input line was transformed automatically by IPython.
2526 """
2526 """
2527 if not self.show_rewritten_input:
2527 if not self.show_rewritten_input:
2528 return
2528 return
2529
2529
2530 # This is overridden in TerminalInteractiveShell to use fancy prompts
2530 # This is overridden in TerminalInteractiveShell to use fancy prompts
2531 print("------> " + cmd)
2531 print("------> " + cmd)
2532
2532
2533 #-------------------------------------------------------------------------
2533 #-------------------------------------------------------------------------
2534 # Things related to extracting values/expressions from kernel and user_ns
2534 # Things related to extracting values/expressions from kernel and user_ns
2535 #-------------------------------------------------------------------------
2535 #-------------------------------------------------------------------------
2536
2536
2537 def _user_obj_error(self):
2537 def _user_obj_error(self):
2538 """return simple exception dict
2538 """return simple exception dict
2539
2539
2540 for use in user_expressions
2540 for use in user_expressions
2541 """
2541 """
2542
2542
2543 etype, evalue, tb = self._get_exc_info()
2543 etype, evalue, tb = self._get_exc_info()
2544 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2544 stb = self.InteractiveTB.get_exception_only(etype, evalue)
2545
2545
2546 exc_info = {
2546 exc_info = {
2547 u'status' : 'error',
2547 u'status' : 'error',
2548 u'traceback' : stb,
2548 u'traceback' : stb,
2549 u'ename' : etype.__name__,
2549 u'ename' : etype.__name__,
2550 u'evalue' : py3compat.safe_unicode(evalue),
2550 u'evalue' : py3compat.safe_unicode(evalue),
2551 }
2551 }
2552
2552
2553 return exc_info
2553 return exc_info
2554
2554
2555 def _format_user_obj(self, obj):
2555 def _format_user_obj(self, obj):
2556 """format a user object to display dict
2556 """format a user object to display dict
2557
2557
2558 for use in user_expressions
2558 for use in user_expressions
2559 """
2559 """
2560
2560
2561 data, md = self.display_formatter.format(obj)
2561 data, md = self.display_formatter.format(obj)
2562 value = {
2562 value = {
2563 'status' : 'ok',
2563 'status' : 'ok',
2564 'data' : data,
2564 'data' : data,
2565 'metadata' : md,
2565 'metadata' : md,
2566 }
2566 }
2567 return value
2567 return value
2568
2568
2569 def user_expressions(self, expressions):
2569 def user_expressions(self, expressions):
2570 """Evaluate a dict of expressions in the user's namespace.
2570 """Evaluate a dict of expressions in the user's namespace.
2571
2571
2572 Parameters
2572 Parameters
2573 ----------
2573 ----------
2574 expressions : dict
2574 expressions : dict
2575 A dict with string keys and string values. The expression values
2575 A dict with string keys and string values. The expression values
2576 should be valid Python expressions, each of which will be evaluated
2576 should be valid Python expressions, each of which will be evaluated
2577 in the user namespace.
2577 in the user namespace.
2578
2578
2579 Returns
2579 Returns
2580 -------
2580 -------
2581 A dict, keyed like the input expressions dict, with the rich mime-typed
2581 A dict, keyed like the input expressions dict, with the rich mime-typed
2582 display_data of each value.
2582 display_data of each value.
2583 """
2583 """
2584 out = {}
2584 out = {}
2585 user_ns = self.user_ns
2585 user_ns = self.user_ns
2586 global_ns = self.user_global_ns
2586 global_ns = self.user_global_ns
2587
2587
2588 for key, expr in expressions.items():
2588 for key, expr in expressions.items():
2589 try:
2589 try:
2590 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2590 value = self._format_user_obj(eval(expr, global_ns, user_ns))
2591 except:
2591 except:
2592 value = self._user_obj_error()
2592 value = self._user_obj_error()
2593 out[key] = value
2593 out[key] = value
2594 return out
2594 return out
2595
2595
2596 #-------------------------------------------------------------------------
2596 #-------------------------------------------------------------------------
2597 # Things related to the running of code
2597 # Things related to the running of code
2598 #-------------------------------------------------------------------------
2598 #-------------------------------------------------------------------------
2599
2599
2600 def ex(self, cmd):
2600 def ex(self, cmd):
2601 """Execute a normal python statement in user namespace."""
2601 """Execute a normal python statement in user namespace."""
2602 with self.builtin_trap:
2602 with self.builtin_trap:
2603 exec(cmd, self.user_global_ns, self.user_ns)
2603 exec(cmd, self.user_global_ns, self.user_ns)
2604
2604
2605 def ev(self, expr):
2605 def ev(self, expr):
2606 """Evaluate python expression expr in user namespace.
2606 """Evaluate python expression expr in user namespace.
2607
2607
2608 Returns the result of evaluation
2608 Returns the result of evaluation
2609 """
2609 """
2610 with self.builtin_trap:
2610 with self.builtin_trap:
2611 return eval(expr, self.user_global_ns, self.user_ns)
2611 return eval(expr, self.user_global_ns, self.user_ns)
2612
2612
2613 def safe_execfile(self, fname, *where, exit_ignore=False, raise_exceptions=False, shell_futures=False):
2613 def safe_execfile(self, fname, *where, exit_ignore=False, raise_exceptions=False, shell_futures=False):
2614 """A safe version of the builtin execfile().
2614 """A safe version of the builtin execfile().
2615
2615
2616 This version will never throw an exception, but instead print
2616 This version will never throw an exception, but instead print
2617 helpful error messages to the screen. This only works on pure
2617 helpful error messages to the screen. This only works on pure
2618 Python files with the .py extension.
2618 Python files with the .py extension.
2619
2619
2620 Parameters
2620 Parameters
2621 ----------
2621 ----------
2622 fname : string
2622 fname : string
2623 The name of the file to be executed.
2623 The name of the file to be executed.
2624 where : tuple
2624 where : tuple
2625 One or two namespaces, passed to execfile() as (globals,locals).
2625 One or two namespaces, passed to execfile() as (globals,locals).
2626 If only one is given, it is passed as both.
2626 If only one is given, it is passed as both.
2627 exit_ignore : bool (False)
2627 exit_ignore : bool (False)
2628 If True, then silence SystemExit for non-zero status (it is always
2628 If True, then silence SystemExit for non-zero status (it is always
2629 silenced for zero status, as it is so common).
2629 silenced for zero status, as it is so common).
2630 raise_exceptions : bool (False)
2630 raise_exceptions : bool (False)
2631 If True raise exceptions everywhere. Meant for testing.
2631 If True raise exceptions everywhere. Meant for testing.
2632 shell_futures : bool (False)
2632 shell_futures : bool (False)
2633 If True, the code will share future statements with the interactive
2633 If True, the code will share future statements with the interactive
2634 shell. It will both be affected by previous __future__ imports, and
2634 shell. It will both be affected by previous __future__ imports, and
2635 any __future__ imports in the code will affect the shell. If False,
2635 any __future__ imports in the code will affect the shell. If False,
2636 __future__ imports are not shared in either direction.
2636 __future__ imports are not shared in either direction.
2637
2637
2638 """
2638 """
2639 fname = os.path.abspath(os.path.expanduser(fname))
2639 fname = os.path.abspath(os.path.expanduser(fname))
2640
2640
2641 # Make sure we can open the file
2641 # Make sure we can open the file
2642 try:
2642 try:
2643 with open(fname):
2643 with open(fname):
2644 pass
2644 pass
2645 except:
2645 except:
2646 warn('Could not open file <%s> for safe execution.' % fname)
2646 warn('Could not open file <%s> for safe execution.' % fname)
2647 return
2647 return
2648
2648
2649 # Find things also in current directory. This is needed to mimic the
2649 # Find things also in current directory. This is needed to mimic the
2650 # behavior of running a script from the system command line, where
2650 # behavior of running a script from the system command line, where
2651 # Python inserts the script's directory into sys.path
2651 # Python inserts the script's directory into sys.path
2652 dname = os.path.dirname(fname)
2652 dname = os.path.dirname(fname)
2653
2653
2654 with prepended_to_syspath(dname), self.builtin_trap:
2654 with prepended_to_syspath(dname), self.builtin_trap:
2655 try:
2655 try:
2656 glob, loc = (where + (None, ))[:2]
2656 glob, loc = (where + (None, ))[:2]
2657 py3compat.execfile(
2657 py3compat.execfile(
2658 fname, glob, loc,
2658 fname, glob, loc,
2659 self.compile if shell_futures else None)
2659 self.compile if shell_futures else None)
2660 except SystemExit as status:
2660 except SystemExit as status:
2661 # If the call was made with 0 or None exit status (sys.exit(0)
2661 # If the call was made with 0 or None exit status (sys.exit(0)
2662 # or sys.exit() ), don't bother showing a traceback, as both of
2662 # or sys.exit() ), don't bother showing a traceback, as both of
2663 # these are considered normal by the OS:
2663 # these are considered normal by the OS:
2664 # > python -c'import sys;sys.exit(0)'; echo $?
2664 # > python -c'import sys;sys.exit(0)'; echo $?
2665 # 0
2665 # 0
2666 # > python -c'import sys;sys.exit()'; echo $?
2666 # > python -c'import sys;sys.exit()'; echo $?
2667 # 0
2667 # 0
2668 # For other exit status, we show the exception unless
2668 # For other exit status, we show the exception unless
2669 # explicitly silenced, but only in short form.
2669 # explicitly silenced, but only in short form.
2670 if status.code:
2670 if status.code:
2671 if raise_exceptions:
2671 if raise_exceptions:
2672 raise
2672 raise
2673 if not exit_ignore:
2673 if not exit_ignore:
2674 self.showtraceback(exception_only=True)
2674 self.showtraceback(exception_only=True)
2675 except:
2675 except:
2676 if raise_exceptions:
2676 if raise_exceptions:
2677 raise
2677 raise
2678 # tb offset is 2 because we wrap execfile
2678 # tb offset is 2 because we wrap execfile
2679 self.showtraceback(tb_offset=2)
2679 self.showtraceback(tb_offset=2)
2680
2680
2681 def safe_execfile_ipy(self, fname, shell_futures=False, raise_exceptions=False):
2681 def safe_execfile_ipy(self, fname, shell_futures=False, raise_exceptions=False):
2682 """Like safe_execfile, but for .ipy or .ipynb files with IPython syntax.
2682 """Like safe_execfile, but for .ipy or .ipynb files with IPython syntax.
2683
2683
2684 Parameters
2684 Parameters
2685 ----------
2685 ----------
2686 fname : str
2686 fname : str
2687 The name of the file to execute. The filename must have a
2687 The name of the file to execute. The filename must have a
2688 .ipy or .ipynb extension.
2688 .ipy or .ipynb extension.
2689 shell_futures : bool (False)
2689 shell_futures : bool (False)
2690 If True, the code will share future statements with the interactive
2690 If True, the code will share future statements with the interactive
2691 shell. It will both be affected by previous __future__ imports, and
2691 shell. It will both be affected by previous __future__ imports, and
2692 any __future__ imports in the code will affect the shell. If False,
2692 any __future__ imports in the code will affect the shell. If False,
2693 __future__ imports are not shared in either direction.
2693 __future__ imports are not shared in either direction.
2694 raise_exceptions : bool (False)
2694 raise_exceptions : bool (False)
2695 If True raise exceptions everywhere. Meant for testing.
2695 If True raise exceptions everywhere. Meant for testing.
2696 """
2696 """
2697 fname = os.path.abspath(os.path.expanduser(fname))
2697 fname = os.path.abspath(os.path.expanduser(fname))
2698
2698
2699 # Make sure we can open the file
2699 # Make sure we can open the file
2700 try:
2700 try:
2701 with open(fname):
2701 with open(fname):
2702 pass
2702 pass
2703 except:
2703 except:
2704 warn('Could not open file <%s> for safe execution.' % fname)
2704 warn('Could not open file <%s> for safe execution.' % fname)
2705 return
2705 return
2706
2706
2707 # Find things also in current directory. This is needed to mimic the
2707 # Find things also in current directory. This is needed to mimic the
2708 # behavior of running a script from the system command line, where
2708 # behavior of running a script from the system command line, where
2709 # Python inserts the script's directory into sys.path
2709 # Python inserts the script's directory into sys.path
2710 dname = os.path.dirname(fname)
2710 dname = os.path.dirname(fname)
2711
2711
2712 def get_cells():
2712 def get_cells():
2713 """generator for sequence of code blocks to run"""
2713 """generator for sequence of code blocks to run"""
2714 if fname.endswith('.ipynb'):
2714 if fname.endswith('.ipynb'):
2715 from nbformat import read
2715 from nbformat import read
2716 nb = read(fname, as_version=4)
2716 nb = read(fname, as_version=4)
2717 if not nb.cells:
2717 if not nb.cells:
2718 return
2718 return
2719 for cell in nb.cells:
2719 for cell in nb.cells:
2720 if cell.cell_type == 'code':
2720 if cell.cell_type == 'code':
2721 yield cell.source
2721 yield cell.source
2722 else:
2722 else:
2723 with open(fname) as f:
2723 with open(fname) as f:
2724 yield f.read()
2724 yield f.read()
2725
2725
2726 with prepended_to_syspath(dname):
2726 with prepended_to_syspath(dname):
2727 try:
2727 try:
2728 for cell in get_cells():
2728 for cell in get_cells():
2729 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2729 result = self.run_cell(cell, silent=True, shell_futures=shell_futures)
2730 if raise_exceptions:
2730 if raise_exceptions:
2731 result.raise_error()
2731 result.raise_error()
2732 elif not result.success:
2732 elif not result.success:
2733 break
2733 break
2734 except:
2734 except:
2735 if raise_exceptions:
2735 if raise_exceptions:
2736 raise
2736 raise
2737 self.showtraceback()
2737 self.showtraceback()
2738 warn('Unknown failure executing file: <%s>' % fname)
2738 warn('Unknown failure executing file: <%s>' % fname)
2739
2739
2740 def safe_run_module(self, mod_name, where):
2740 def safe_run_module(self, mod_name, where):
2741 """A safe version of runpy.run_module().
2741 """A safe version of runpy.run_module().
2742
2742
2743 This version will never throw an exception, but instead print
2743 This version will never throw an exception, but instead print
2744 helpful error messages to the screen.
2744 helpful error messages to the screen.
2745
2745
2746 `SystemExit` exceptions with status code 0 or None are ignored.
2746 `SystemExit` exceptions with status code 0 or None are ignored.
2747
2747
2748 Parameters
2748 Parameters
2749 ----------
2749 ----------
2750 mod_name : string
2750 mod_name : string
2751 The name of the module to be executed.
2751 The name of the module to be executed.
2752 where : dict
2752 where : dict
2753 The globals namespace.
2753 The globals namespace.
2754 """
2754 """
2755 try:
2755 try:
2756 try:
2756 try:
2757 where.update(
2757 where.update(
2758 runpy.run_module(str(mod_name), run_name="__main__",
2758 runpy.run_module(str(mod_name), run_name="__main__",
2759 alter_sys=True)
2759 alter_sys=True)
2760 )
2760 )
2761 except SystemExit as status:
2761 except SystemExit as status:
2762 if status.code:
2762 if status.code:
2763 raise
2763 raise
2764 except:
2764 except:
2765 self.showtraceback()
2765 self.showtraceback()
2766 warn('Unknown failure executing module: <%s>' % mod_name)
2766 warn('Unknown failure executing module: <%s>' % mod_name)
2767
2767
2768 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2768 def run_cell(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2769 """Run a complete IPython cell.
2769 """Run a complete IPython cell.
2770
2770
2771 Parameters
2771 Parameters
2772 ----------
2772 ----------
2773 raw_cell : str
2773 raw_cell : str
2774 The code (including IPython code such as %magic functions) to run.
2774 The code (including IPython code such as %magic functions) to run.
2775 store_history : bool
2775 store_history : bool
2776 If True, the raw and translated cell will be stored in IPython's
2776 If True, the raw and translated cell will be stored in IPython's
2777 history. For user code calling back into IPython's machinery, this
2777 history. For user code calling back into IPython's machinery, this
2778 should be set to False.
2778 should be set to False.
2779 silent : bool
2779 silent : bool
2780 If True, avoid side-effects, such as implicit displayhooks and
2780 If True, avoid side-effects, such as implicit displayhooks and
2781 and logging. silent=True forces store_history=False.
2781 and logging. silent=True forces store_history=False.
2782 shell_futures : bool
2782 shell_futures : bool
2783 If True, the code will share future statements with the interactive
2783 If True, the code will share future statements with the interactive
2784 shell. It will both be affected by previous __future__ imports, and
2784 shell. It will both be affected by previous __future__ imports, and
2785 any __future__ imports in the code will affect the shell. If False,
2785 any __future__ imports in the code will affect the shell. If False,
2786 __future__ imports are not shared in either direction.
2786 __future__ imports are not shared in either direction.
2787
2787
2788 Returns
2788 Returns
2789 -------
2789 -------
2790 result : :class:`ExecutionResult`
2790 result : :class:`ExecutionResult`
2791 """
2791 """
2792 result = None
2792 try:
2793 try:
2793 result = self._run_cell(
2794 result = self._run_cell(
2794 raw_cell, store_history, silent, shell_futures)
2795 raw_cell, store_history, silent, shell_futures)
2795 finally:
2796 finally:
2796 self.events.trigger('post_execute')
2797 self.events.trigger('post_execute')
2797 if not silent:
2798 if not silent:
2798 self.events.trigger('post_run_cell', result)
2799 self.events.trigger('post_run_cell', result)
2799 return result
2800 return result
2800
2801
2801 def _run_cell(self, raw_cell, store_history, silent, shell_futures):
2802 def _run_cell(self, raw_cell, store_history, silent, shell_futures):
2802 """Internal method to run a complete IPython cell."""
2803 """Internal method to run a complete IPython cell."""
2803 return self.loop_runner(
2804 return self.loop_runner(
2804 self.run_cell_async(
2805 self.run_cell_async(
2805 raw_cell,
2806 raw_cell,
2806 store_history=store_history,
2807 store_history=store_history,
2807 silent=silent,
2808 silent=silent,
2808 shell_futures=shell_futures,
2809 shell_futures=shell_futures,
2809 )
2810 )
2810 )
2811 )
2811
2812
2812 @asyncio.coroutine
2813 @asyncio.coroutine
2813 def run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2814 def run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True):
2814 """Run a complete IPython cell asynchronously.
2815 """Run a complete IPython cell asynchronously.
2815
2816
2816 Parameters
2817 Parameters
2817 ----------
2818 ----------
2818 raw_cell : str
2819 raw_cell : str
2819 The code (including IPython code such as %magic functions) to run.
2820 The code (including IPython code such as %magic functions) to run.
2820 store_history : bool
2821 store_history : bool
2821 If True, the raw and translated cell will be stored in IPython's
2822 If True, the raw and translated cell will be stored in IPython's
2822 history. For user code calling back into IPython's machinery, this
2823 history. For user code calling back into IPython's machinery, this
2823 should be set to False.
2824 should be set to False.
2824 silent : bool
2825 silent : bool
2825 If True, avoid side-effects, such as implicit displayhooks and
2826 If True, avoid side-effects, such as implicit displayhooks and
2826 and logging. silent=True forces store_history=False.
2827 and logging. silent=True forces store_history=False.
2827 shell_futures : bool
2828 shell_futures : bool
2828 If True, the code will share future statements with the interactive
2829 If True, the code will share future statements with the interactive
2829 shell. It will both be affected by previous __future__ imports, and
2830 shell. It will both be affected by previous __future__ imports, and
2830 any __future__ imports in the code will affect the shell. If False,
2831 any __future__ imports in the code will affect the shell. If False,
2831 __future__ imports are not shared in either direction.
2832 __future__ imports are not shared in either direction.
2832
2833
2833 Returns
2834 Returns
2834 -------
2835 -------
2835 result : :class:`ExecutionResult`
2836 result : :class:`ExecutionResult`
2836 """
2837 """
2837 info = ExecutionInfo(
2838 info = ExecutionInfo(
2838 raw_cell, store_history, silent, shell_futures)
2839 raw_cell, store_history, silent, shell_futures)
2839 result = ExecutionResult(info)
2840 result = ExecutionResult(info)
2840
2841
2841 if (not raw_cell) or raw_cell.isspace():
2842 if (not raw_cell) or raw_cell.isspace():
2842 self.last_execution_succeeded = True
2843 self.last_execution_succeeded = True
2843 self.last_execution_result = result
2844 self.last_execution_result = result
2844 return result
2845 return result
2845
2846
2846 if silent:
2847 if silent:
2847 store_history = False
2848 store_history = False
2848
2849
2849 if store_history:
2850 if store_history:
2850 result.execution_count = self.execution_count
2851 result.execution_count = self.execution_count
2851
2852
2852 def error_before_exec(value):
2853 def error_before_exec(value):
2853 if store_history:
2854 if store_history:
2854 self.execution_count += 1
2855 self.execution_count += 1
2855 result.error_before_exec = value
2856 result.error_before_exec = value
2856 self.last_execution_succeeded = False
2857 self.last_execution_succeeded = False
2857 self.last_execution_result = result
2858 self.last_execution_result = result
2858 return result
2859 return result
2859
2860
2860 self.events.trigger('pre_execute')
2861 self.events.trigger('pre_execute')
2861 if not silent:
2862 if not silent:
2862 self.events.trigger('pre_run_cell', info)
2863 self.events.trigger('pre_run_cell', info)
2863
2864
2864 # If any of our input transformation (input_transformer_manager or
2865 # If any of our input transformation (input_transformer_manager or
2865 # prefilter_manager) raises an exception, we store it in this variable
2866 # prefilter_manager) raises an exception, we store it in this variable
2866 # so that we can display the error after logging the input and storing
2867 # so that we can display the error after logging the input and storing
2867 # it in the history.
2868 # it in the history.
2868 preprocessing_exc_tuple = None
2869 preprocessing_exc_tuple = None
2869 try:
2870 try:
2870 # Static input transformations
2871 # Static input transformations
2871 cell = self.input_transformer_manager.transform_cell(raw_cell)
2872 cell = self.input_transformer_manager.transform_cell(raw_cell)
2872 except SyntaxError:
2873 except SyntaxError:
2873 preprocessing_exc_tuple = sys.exc_info()
2874 preprocessing_exc_tuple = sys.exc_info()
2874 cell = raw_cell # cell has to exist so it can be stored/logged
2875 cell = raw_cell # cell has to exist so it can be stored/logged
2875 else:
2876 else:
2876 if len(cell.splitlines()) == 1:
2877 if len(cell.splitlines()) == 1:
2877 # Dynamic transformations - only applied for single line commands
2878 # Dynamic transformations - only applied for single line commands
2878 with self.builtin_trap:
2879 with self.builtin_trap:
2879 try:
2880 try:
2880 # use prefilter_lines to handle trailing newlines
2881 # use prefilter_lines to handle trailing newlines
2881 # restore trailing newline for ast.parse
2882 # restore trailing newline for ast.parse
2882 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2883 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2883 except Exception:
2884 except Exception:
2884 # don't allow prefilter errors to crash IPython
2885 # don't allow prefilter errors to crash IPython
2885 preprocessing_exc_tuple = sys.exc_info()
2886 preprocessing_exc_tuple = sys.exc_info()
2886
2887
2887 # Store raw and processed history
2888 # Store raw and processed history
2888 if store_history:
2889 if store_history:
2889 self.history_manager.store_inputs(self.execution_count,
2890 self.history_manager.store_inputs(self.execution_count,
2890 cell, raw_cell)
2891 cell, raw_cell)
2891 if not silent:
2892 if not silent:
2892 self.logger.log(cell, raw_cell)
2893 self.logger.log(cell, raw_cell)
2893
2894
2894 # Display the exception if input processing failed.
2895 # Display the exception if input processing failed.
2895 if preprocessing_exc_tuple is not None:
2896 if preprocessing_exc_tuple is not None:
2896 self.showtraceback(preprocessing_exc_tuple)
2897 self.showtraceback(preprocessing_exc_tuple)
2897 if store_history:
2898 if store_history:
2898 self.execution_count += 1
2899 self.execution_count += 1
2899 return error_before_exec(preprocessing_exc_tuple[2])
2900 return error_before_exec(preprocessing_exc_tuple[2])
2900
2901
2901 # Our own compiler remembers the __future__ environment. If we want to
2902 # Our own compiler remembers the __future__ environment. If we want to
2902 # run code with a separate __future__ environment, use the default
2903 # run code with a separate __future__ environment, use the default
2903 # compiler
2904 # compiler
2904 compiler = self.compile if shell_futures else CachingCompiler()
2905 compiler = self.compile if shell_futures else CachingCompiler()
2905
2906
2906 _run_async = False
2907 _run_async = False
2907
2908
2908 with self.builtin_trap:
2909 with self.builtin_trap:
2909 cell_name = self.compile.cache(cell, self.execution_count)
2910 cell_name = self.compile.cache(cell, self.execution_count)
2910
2911
2911 with self.display_trap:
2912 with self.display_trap:
2912 # Compile to bytecode
2913 # Compile to bytecode
2913 try:
2914 try:
2914 if self.autoawait and _should_be_async(cell):
2915 if self.autoawait and _should_be_async(cell):
2915 # the code AST below will not be user code: we wrap it
2916 # the code AST below will not be user code: we wrap it
2916 # in an `async def`. This will likely make some AST
2917 # in an `async def`. This will likely make some AST
2917 # transformer below miss some transform opportunity and
2918 # transformer below miss some transform opportunity and
2918 # introduce a small coupling to run_code (in which we
2919 # introduce a small coupling to run_code (in which we
2919 # bake some assumptions of what _ast_asyncify returns.
2920 # bake some assumptions of what _ast_asyncify returns.
2920 # they are ways around (like grafting part of the ast
2921 # they are ways around (like grafting part of the ast
2921 # later:
2922 # later:
2922 # - Here, return code_ast.body[0].body[1:-1], as well
2923 # - Here, return code_ast.body[0].body[1:-1], as well
2923 # as last expression in return statement which is
2924 # as last expression in return statement which is
2924 # the user code part.
2925 # the user code part.
2925 # - Let it go through the AST transformers, and graft
2926 # - Let it go through the AST transformers, and graft
2926 # - it back after the AST transform
2927 # - it back after the AST transform
2927 # But that seem unreasonable, at least while we
2928 # But that seem unreasonable, at least while we
2928 # do not need it.
2929 # do not need it.
2929 code_ast = _ast_asyncify(cell, 'async-def-wrapper')
2930 code_ast = _ast_asyncify(cell, 'async-def-wrapper')
2930 _run_async = True
2931 _run_async = True
2931 else:
2932 else:
2932 code_ast = compiler.ast_parse(cell, filename=cell_name)
2933 code_ast = compiler.ast_parse(cell, filename=cell_name)
2933 except self.custom_exceptions as e:
2934 except self.custom_exceptions as e:
2934 etype, value, tb = sys.exc_info()
2935 etype, value, tb = sys.exc_info()
2935 self.CustomTB(etype, value, tb)
2936 self.CustomTB(etype, value, tb)
2936 return error_before_exec(e)
2937 return error_before_exec(e)
2937 except IndentationError as e:
2938 except IndentationError as e:
2938 self.showindentationerror()
2939 self.showindentationerror()
2939 return error_before_exec(e)
2940 return error_before_exec(e)
2940 except (OverflowError, SyntaxError, ValueError, TypeError,
2941 except (OverflowError, SyntaxError, ValueError, TypeError,
2941 MemoryError) as e:
2942 MemoryError) as e:
2942 self.showsyntaxerror()
2943 self.showsyntaxerror()
2943 return error_before_exec(e)
2944 return error_before_exec(e)
2944
2945
2945 # Apply AST transformations
2946 # Apply AST transformations
2946 try:
2947 try:
2947 code_ast = self.transform_ast(code_ast)
2948 code_ast = self.transform_ast(code_ast)
2948 except InputRejected as e:
2949 except InputRejected as e:
2949 self.showtraceback()
2950 self.showtraceback()
2950 return error_before_exec(e)
2951 return error_before_exec(e)
2951
2952
2952 # Give the displayhook a reference to our ExecutionResult so it
2953 # Give the displayhook a reference to our ExecutionResult so it
2953 # can fill in the output value.
2954 # can fill in the output value.
2954 self.displayhook.exec_result = result
2955 self.displayhook.exec_result = result
2955
2956
2956 # Execute the user code
2957 # Execute the user code
2957 interactivity = "none" if silent else self.ast_node_interactivity
2958 interactivity = "none" if silent else self.ast_node_interactivity
2958 if _run_async:
2959 if _run_async:
2959 interactivity = 'async'
2960 interactivity = 'async'
2960 has_raised = yield from self.run_ast_nodes(code_ast.body, cell_name,
2961 has_raised = yield from self.run_ast_nodes(code_ast.body, cell_name,
2961 interactivity=interactivity, compiler=compiler, result=result)
2962 interactivity=interactivity, compiler=compiler, result=result)
2962
2963
2963 self.last_execution_succeeded = not has_raised
2964 self.last_execution_succeeded = not has_raised
2964 self.last_execution_result = result
2965 self.last_execution_result = result
2965
2966
2966 # Reset this so later displayed values do not modify the
2967 # Reset this so later displayed values do not modify the
2967 # ExecutionResult
2968 # ExecutionResult
2968 self.displayhook.exec_result = None
2969 self.displayhook.exec_result = None
2969
2970
2970 if store_history:
2971 if store_history:
2971 # Write output to the database. Does nothing unless
2972 # Write output to the database. Does nothing unless
2972 # history output logging is enabled.
2973 # history output logging is enabled.
2973 self.history_manager.store_output(self.execution_count)
2974 self.history_manager.store_output(self.execution_count)
2974 # Each cell is a *single* input, regardless of how many lines it has
2975 # Each cell is a *single* input, regardless of how many lines it has
2975 self.execution_count += 1
2976 self.execution_count += 1
2976
2977
2977 return result
2978 return result
2978
2979
2979 def transform_ast(self, node):
2980 def transform_ast(self, node):
2980 """Apply the AST transformations from self.ast_transformers
2981 """Apply the AST transformations from self.ast_transformers
2981
2982
2982 Parameters
2983 Parameters
2983 ----------
2984 ----------
2984 node : ast.Node
2985 node : ast.Node
2985 The root node to be transformed. Typically called with the ast.Module
2986 The root node to be transformed. Typically called with the ast.Module
2986 produced by parsing user input.
2987 produced by parsing user input.
2987
2988
2988 Returns
2989 Returns
2989 -------
2990 -------
2990 An ast.Node corresponding to the node it was called with. Note that it
2991 An ast.Node corresponding to the node it was called with. Note that it
2991 may also modify the passed object, so don't rely on references to the
2992 may also modify the passed object, so don't rely on references to the
2992 original AST.
2993 original AST.
2993 """
2994 """
2994 for transformer in self.ast_transformers:
2995 for transformer in self.ast_transformers:
2995 try:
2996 try:
2996 node = transformer.visit(node)
2997 node = transformer.visit(node)
2997 except InputRejected:
2998 except InputRejected:
2998 # User-supplied AST transformers can reject an input by raising
2999 # User-supplied AST transformers can reject an input by raising
2999 # an InputRejected. Short-circuit in this case so that we
3000 # an InputRejected. Short-circuit in this case so that we
3000 # don't unregister the transform.
3001 # don't unregister the transform.
3001 raise
3002 raise
3002 except Exception:
3003 except Exception:
3003 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
3004 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
3004 self.ast_transformers.remove(transformer)
3005 self.ast_transformers.remove(transformer)
3005
3006
3006 if self.ast_transformers:
3007 if self.ast_transformers:
3007 ast.fix_missing_locations(node)
3008 ast.fix_missing_locations(node)
3008 return node
3009 return node
3009
3010
3010 @asyncio.coroutine
3011 @asyncio.coroutine
3011 def run_ast_nodes(self, nodelist:ListType[AST], cell_name:str, interactivity='last_expr',
3012 def run_ast_nodes(self, nodelist:ListType[AST], cell_name:str, interactivity='last_expr',
3012 compiler=compile, result=None):
3013 compiler=compile, result=None):
3013 """Run a sequence of AST nodes. The execution mode depends on the
3014 """Run a sequence of AST nodes. The execution mode depends on the
3014 interactivity parameter.
3015 interactivity parameter.
3015
3016
3016 Parameters
3017 Parameters
3017 ----------
3018 ----------
3018 nodelist : list
3019 nodelist : list
3019 A sequence of AST nodes to run.
3020 A sequence of AST nodes to run.
3020 cell_name : str
3021 cell_name : str
3021 Will be passed to the compiler as the filename of the cell. Typically
3022 Will be passed to the compiler as the filename of the cell. Typically
3022 the value returned by ip.compile.cache(cell).
3023 the value returned by ip.compile.cache(cell).
3023 interactivity : str
3024 interactivity : str
3024 'all', 'last', 'last_expr' , 'last_expr_or_assign' or 'none',
3025 'all', 'last', 'last_expr' , 'last_expr_or_assign' or 'none',
3025 specifying which nodes should be run interactively (displaying output
3026 specifying which nodes should be run interactively (displaying output
3026 from expressions). 'last_expr' will run the last node interactively
3027 from expressions). 'last_expr' will run the last node interactively
3027 only if it is an expression (i.e. expressions in loops or other blocks
3028 only if it is an expression (i.e. expressions in loops or other blocks
3028 are not displayed) 'last_expr_or_assign' will run the last expression
3029 are not displayed) 'last_expr_or_assign' will run the last expression
3029 or the last assignment. Other values for this parameter will raise a
3030 or the last assignment. Other values for this parameter will raise a
3030 ValueError.
3031 ValueError.
3031
3032
3032 Experimental value: 'async' Will try to run top level interactive
3033 Experimental value: 'async' Will try to run top level interactive
3033 async/await code in default runner, this will not respect the
3034 async/await code in default runner, this will not respect the
3034 interactivty setting and will only run the last node if it is an
3035 interactivty setting and will only run the last node if it is an
3035 expression.
3036 expression.
3036
3037
3037 compiler : callable
3038 compiler : callable
3038 A function with the same interface as the built-in compile(), to turn
3039 A function with the same interface as the built-in compile(), to turn
3039 the AST nodes into code objects. Default is the built-in compile().
3040 the AST nodes into code objects. Default is the built-in compile().
3040 result : ExecutionResult, optional
3041 result : ExecutionResult, optional
3041 An object to store exceptions that occur during execution.
3042 An object to store exceptions that occur during execution.
3042
3043
3043 Returns
3044 Returns
3044 -------
3045 -------
3045 True if an exception occurred while running code, False if it finished
3046 True if an exception occurred while running code, False if it finished
3046 running.
3047 running.
3047 """
3048 """
3048 if not nodelist:
3049 if not nodelist:
3049 return
3050 return
3050 if interactivity == 'last_expr_or_assign':
3051 if interactivity == 'last_expr_or_assign':
3051 if isinstance(nodelist[-1], _assign_nodes):
3052 if isinstance(nodelist[-1], _assign_nodes):
3052 asg = nodelist[-1]
3053 asg = nodelist[-1]
3053 if isinstance(asg, ast.Assign) and len(asg.targets) == 1:
3054 if isinstance(asg, ast.Assign) and len(asg.targets) == 1:
3054 target = asg.targets[0]
3055 target = asg.targets[0]
3055 elif isinstance(asg, _single_targets_nodes):
3056 elif isinstance(asg, _single_targets_nodes):
3056 target = asg.target
3057 target = asg.target
3057 else:
3058 else:
3058 target = None
3059 target = None
3059 if isinstance(target, ast.Name):
3060 if isinstance(target, ast.Name):
3060 nnode = ast.Expr(ast.Name(target.id, ast.Load()))
3061 nnode = ast.Expr(ast.Name(target.id, ast.Load()))
3061 ast.fix_missing_locations(nnode)
3062 ast.fix_missing_locations(nnode)
3062 nodelist.append(nnode)
3063 nodelist.append(nnode)
3063 interactivity = 'last_expr'
3064 interactivity = 'last_expr'
3064
3065
3065 _async = False
3066 _async = False
3066 if interactivity == 'last_expr':
3067 if interactivity == 'last_expr':
3067 if isinstance(nodelist[-1], ast.Expr):
3068 if isinstance(nodelist[-1], ast.Expr):
3068 interactivity = "last"
3069 interactivity = "last"
3069 else:
3070 else:
3070 interactivity = "none"
3071 interactivity = "none"
3071
3072
3072 if interactivity == 'none':
3073 if interactivity == 'none':
3073 to_run_exec, to_run_interactive = nodelist, []
3074 to_run_exec, to_run_interactive = nodelist, []
3074 elif interactivity == 'last':
3075 elif interactivity == 'last':
3075 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
3076 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
3076 elif interactivity == 'all':
3077 elif interactivity == 'all':
3077 to_run_exec, to_run_interactive = [], nodelist
3078 to_run_exec, to_run_interactive = [], nodelist
3078 elif interactivity == 'async':
3079 elif interactivity == 'async':
3079 _async = True
3080 _async = True
3080 else:
3081 else:
3081 raise ValueError("Interactivity was %r" % interactivity)
3082 raise ValueError("Interactivity was %r" % interactivity)
3082 try:
3083 try:
3083 if _async:
3084 if _async:
3084 # If interactivity is async the semantics of run_code are
3085 # If interactivity is async the semantics of run_code are
3085 # completely different Skip usual machinery.
3086 # completely different Skip usual machinery.
3086 mod = ast.Module(nodelist)
3087 mod = ast.Module(nodelist)
3087 async_wrapper_code = compiler(mod, 'cell_name', 'exec')
3088 async_wrapper_code = compiler(mod, 'cell_name', 'exec')
3088 exec(async_wrapper_code, self.user_global_ns, self.user_ns)
3089 exec(async_wrapper_code, self.user_global_ns, self.user_ns)
3089 async_code = removed_co_newlocals(self.user_ns.pop('async-def-wrapper')).__code__
3090 async_code = removed_co_newlocals(self.user_ns.pop('async-def-wrapper')).__code__
3090 if (yield from self.run_code(async_code, result, async_=True)):
3091 if (yield from self.run_code(async_code, result, async_=True)):
3091 return True
3092 return True
3092 else:
3093 else:
3093 for i, node in enumerate(to_run_exec):
3094 for i, node in enumerate(to_run_exec):
3094 mod = ast.Module([node])
3095 mod = ast.Module([node])
3095 code = compiler(mod, cell_name, "exec")
3096 code = compiler(mod, cell_name, "exec")
3096 if (yield from self.run_code(code, result)):
3097 if (yield from self.run_code(code, result)):
3097 return True
3098 return True
3098
3099
3099 for i, node in enumerate(to_run_interactive):
3100 for i, node in enumerate(to_run_interactive):
3100 mod = ast.Interactive([node])
3101 mod = ast.Interactive([node])
3101 code = compiler(mod, cell_name, "single")
3102 code = compiler(mod, cell_name, "single")
3102 if (yield from self.run_code(code, result)):
3103 if (yield from self.run_code(code, result)):
3103 return True
3104 return True
3104
3105
3105 # Flush softspace
3106 # Flush softspace
3106 if softspace(sys.stdout, 0):
3107 if softspace(sys.stdout, 0):
3107 print()
3108 print()
3108
3109
3109 except:
3110 except:
3110 # It's possible to have exceptions raised here, typically by
3111 # It's possible to have exceptions raised here, typically by
3111 # compilation of odd code (such as a naked 'return' outside a
3112 # compilation of odd code (such as a naked 'return' outside a
3112 # function) that did parse but isn't valid. Typically the exception
3113 # function) that did parse but isn't valid. Typically the exception
3113 # is a SyntaxError, but it's safest just to catch anything and show
3114 # is a SyntaxError, but it's safest just to catch anything and show
3114 # the user a traceback.
3115 # the user a traceback.
3115
3116
3116 # We do only one try/except outside the loop to minimize the impact
3117 # We do only one try/except outside the loop to minimize the impact
3117 # on runtime, and also because if any node in the node list is
3118 # on runtime, and also because if any node in the node list is
3118 # broken, we should stop execution completely.
3119 # broken, we should stop execution completely.
3119 if result:
3120 if result:
3120 result.error_before_exec = sys.exc_info()[1]
3121 result.error_before_exec = sys.exc_info()[1]
3121 self.showtraceback()
3122 self.showtraceback()
3122 return True
3123 return True
3123
3124
3124 return False
3125 return False
3125
3126
3126 def _async_exec(self, code_obj: types.CodeType, user_ns: dict):
3127 def _async_exec(self, code_obj: types.CodeType, user_ns: dict):
3127 """
3128 """
3128 Evaluate an asynchronous code object using a code runner
3129 Evaluate an asynchronous code object using a code runner
3129
3130
3130 Fake asynchronous execution of code_object in a namespace via a proxy namespace.
3131 Fake asynchronous execution of code_object in a namespace via a proxy namespace.
3131
3132
3132 Returns coroutine object, which can be executed via async loop runner
3133 Returns coroutine object, which can be executed via async loop runner
3133
3134
3134 WARNING: The semantics of `async_exec` are quite different from `exec`,
3135 WARNING: The semantics of `async_exec` are quite different from `exec`,
3135 in particular you can only pass a single namespace. It also return a
3136 in particular you can only pass a single namespace. It also return a
3136 handle to the value of the last things returned by code_object.
3137 handle to the value of the last things returned by code_object.
3137 """
3138 """
3138
3139
3139 return eval(code_obj, user_ns)
3140 return eval(code_obj, user_ns)
3140
3141
3141 @asyncio.coroutine
3142 @asyncio.coroutine
3142 def run_code(self, code_obj, result=None, *, async_=False):
3143 def run_code(self, code_obj, result=None, *, async_=False):
3143 """Execute a code object.
3144 """Execute a code object.
3144
3145
3145 When an exception occurs, self.showtraceback() is called to display a
3146 When an exception occurs, self.showtraceback() is called to display a
3146 traceback.
3147 traceback.
3147
3148
3148 Parameters
3149 Parameters
3149 ----------
3150 ----------
3150 code_obj : code object
3151 code_obj : code object
3151 A compiled code object, to be executed
3152 A compiled code object, to be executed
3152 result : ExecutionResult, optional
3153 result : ExecutionResult, optional
3153 An object to store exceptions that occur during execution.
3154 An object to store exceptions that occur during execution.
3154 async_ : Bool (Experimental)
3155 async_ : Bool (Experimental)
3155 Attempt to run top-level asynchronous code in a default loop.
3156 Attempt to run top-level asynchronous code in a default loop.
3156
3157
3157 Returns
3158 Returns
3158 -------
3159 -------
3159 False : successful execution.
3160 False : successful execution.
3160 True : an error occurred.
3161 True : an error occurred.
3161 """
3162 """
3162 # Set our own excepthook in case the user code tries to call it
3163 # Set our own excepthook in case the user code tries to call it
3163 # directly, so that the IPython crash handler doesn't get triggered
3164 # directly, so that the IPython crash handler doesn't get triggered
3164 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
3165 old_excepthook, sys.excepthook = sys.excepthook, self.excepthook
3165
3166
3166 # we save the original sys.excepthook in the instance, in case config
3167 # we save the original sys.excepthook in the instance, in case config
3167 # code (such as magics) needs access to it.
3168 # code (such as magics) needs access to it.
3168 self.sys_excepthook = old_excepthook
3169 self.sys_excepthook = old_excepthook
3169 outflag = True # happens in more places, so it's easier as default
3170 outflag = True # happens in more places, so it's easier as default
3170 try:
3171 try:
3171 try:
3172 try:
3172 self.hooks.pre_run_code_hook()
3173 self.hooks.pre_run_code_hook()
3173 if async_:
3174 if async_:
3174 last_expr = (yield from self._async_exec(code_obj, self.user_ns))
3175 last_expr = (yield from self._async_exec(code_obj, self.user_ns))
3175 code = compile('last_expr', 'fake', "single")
3176 code = compile('last_expr', 'fake', "single")
3176 exec(code, {'last_expr': last_expr})
3177 exec(code, {'last_expr': last_expr})
3177 else:
3178 else:
3178 exec(code_obj, self.user_global_ns, self.user_ns)
3179 exec(code_obj, self.user_global_ns, self.user_ns)
3179 finally:
3180 finally:
3180 # Reset our crash handler in place
3181 # Reset our crash handler in place
3181 sys.excepthook = old_excepthook
3182 sys.excepthook = old_excepthook
3182 except SystemExit as e:
3183 except SystemExit as e:
3183 if result is not None:
3184 if result is not None:
3184 result.error_in_exec = e
3185 result.error_in_exec = e
3185 self.showtraceback(exception_only=True)
3186 self.showtraceback(exception_only=True)
3186 warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
3187 warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
3187 except self.custom_exceptions:
3188 except self.custom_exceptions:
3188 etype, value, tb = sys.exc_info()
3189 etype, value, tb = sys.exc_info()
3189 if result is not None:
3190 if result is not None:
3190 result.error_in_exec = value
3191 result.error_in_exec = value
3191 self.CustomTB(etype, value, tb)
3192 self.CustomTB(etype, value, tb)
3192 except:
3193 except:
3193 if result is not None:
3194 if result is not None:
3194 result.error_in_exec = sys.exc_info()[1]
3195 result.error_in_exec = sys.exc_info()[1]
3195 self.showtraceback(running_compiled_code=True)
3196 self.showtraceback(running_compiled_code=True)
3196 else:
3197 else:
3197 outflag = False
3198 outflag = False
3198 return outflag
3199 return outflag
3199
3200
3200 # For backwards compatibility
3201 # For backwards compatibility
3201 runcode = run_code
3202 runcode = run_code
3202
3203
3203 def check_complete(self, code):
3204 def check_complete(self, code):
3204 """Return whether a block of code is ready to execute, or should be continued
3205 """Return whether a block of code is ready to execute, or should be continued
3205
3206
3206 Parameters
3207 Parameters
3207 ----------
3208 ----------
3208 source : string
3209 source : string
3209 Python input code, which can be multiline.
3210 Python input code, which can be multiline.
3210
3211
3211 Returns
3212 Returns
3212 -------
3213 -------
3213 status : str
3214 status : str
3214 One of 'complete', 'incomplete', or 'invalid' if source is not a
3215 One of 'complete', 'incomplete', or 'invalid' if source is not a
3215 prefix of valid code.
3216 prefix of valid code.
3216 indent : str
3217 indent : str
3217 When status is 'incomplete', this is some whitespace to insert on
3218 When status is 'incomplete', this is some whitespace to insert on
3218 the next line of the prompt.
3219 the next line of the prompt.
3219 """
3220 """
3220 status, nspaces = self.input_splitter.check_complete(code)
3221 status, nspaces = self.input_splitter.check_complete(code)
3221 return status, ' ' * (nspaces or 0)
3222 return status, ' ' * (nspaces or 0)
3222
3223
3223 #-------------------------------------------------------------------------
3224 #-------------------------------------------------------------------------
3224 # Things related to GUI support and pylab
3225 # Things related to GUI support and pylab
3225 #-------------------------------------------------------------------------
3226 #-------------------------------------------------------------------------
3226
3227
3227 active_eventloop = None
3228 active_eventloop = None
3228
3229
3229 def enable_gui(self, gui=None):
3230 def enable_gui(self, gui=None):
3230 raise NotImplementedError('Implement enable_gui in a subclass')
3231 raise NotImplementedError('Implement enable_gui in a subclass')
3231
3232
3232 def enable_matplotlib(self, gui=None):
3233 def enable_matplotlib(self, gui=None):
3233 """Enable interactive matplotlib and inline figure support.
3234 """Enable interactive matplotlib and inline figure support.
3234
3235
3235 This takes the following steps:
3236 This takes the following steps:
3236
3237
3237 1. select the appropriate eventloop and matplotlib backend
3238 1. select the appropriate eventloop and matplotlib backend
3238 2. set up matplotlib for interactive use with that backend
3239 2. set up matplotlib for interactive use with that backend
3239 3. configure formatters for inline figure display
3240 3. configure formatters for inline figure display
3240 4. enable the selected gui eventloop
3241 4. enable the selected gui eventloop
3241
3242
3242 Parameters
3243 Parameters
3243 ----------
3244 ----------
3244 gui : optional, string
3245 gui : optional, string
3245 If given, dictates the choice of matplotlib GUI backend to use
3246 If given, dictates the choice of matplotlib GUI backend to use
3246 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3247 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3247 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3248 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3248 matplotlib (as dictated by the matplotlib build-time options plus the
3249 matplotlib (as dictated by the matplotlib build-time options plus the
3249 user's matplotlibrc configuration file). Note that not all backends
3250 user's matplotlibrc configuration file). Note that not all backends
3250 make sense in all contexts, for example a terminal ipython can't
3251 make sense in all contexts, for example a terminal ipython can't
3251 display figures inline.
3252 display figures inline.
3252 """
3253 """
3253 from IPython.core import pylabtools as pt
3254 from IPython.core import pylabtools as pt
3254 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
3255 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
3255
3256
3256 if gui != 'inline':
3257 if gui != 'inline':
3257 # If we have our first gui selection, store it
3258 # If we have our first gui selection, store it
3258 if self.pylab_gui_select is None:
3259 if self.pylab_gui_select is None:
3259 self.pylab_gui_select = gui
3260 self.pylab_gui_select = gui
3260 # Otherwise if they are different
3261 # Otherwise if they are different
3261 elif gui != self.pylab_gui_select:
3262 elif gui != self.pylab_gui_select:
3262 print('Warning: Cannot change to a different GUI toolkit: %s.'
3263 print('Warning: Cannot change to a different GUI toolkit: %s.'
3263 ' Using %s instead.' % (gui, self.pylab_gui_select))
3264 ' Using %s instead.' % (gui, self.pylab_gui_select))
3264 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
3265 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
3265
3266
3266 pt.activate_matplotlib(backend)
3267 pt.activate_matplotlib(backend)
3267 pt.configure_inline_support(self, backend)
3268 pt.configure_inline_support(self, backend)
3268
3269
3269 # Now we must activate the gui pylab wants to use, and fix %run to take
3270 # Now we must activate the gui pylab wants to use, and fix %run to take
3270 # plot updates into account
3271 # plot updates into account
3271 self.enable_gui(gui)
3272 self.enable_gui(gui)
3272 self.magics_manager.registry['ExecutionMagics'].default_runner = \
3273 self.magics_manager.registry['ExecutionMagics'].default_runner = \
3273 pt.mpl_runner(self.safe_execfile)
3274 pt.mpl_runner(self.safe_execfile)
3274
3275
3275 return gui, backend
3276 return gui, backend
3276
3277
3277 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
3278 def enable_pylab(self, gui=None, import_all=True, welcome_message=False):
3278 """Activate pylab support at runtime.
3279 """Activate pylab support at runtime.
3279
3280
3280 This turns on support for matplotlib, preloads into the interactive
3281 This turns on support for matplotlib, preloads into the interactive
3281 namespace all of numpy and pylab, and configures IPython to correctly
3282 namespace all of numpy and pylab, and configures IPython to correctly
3282 interact with the GUI event loop. The GUI backend to be used can be
3283 interact with the GUI event loop. The GUI backend to be used can be
3283 optionally selected with the optional ``gui`` argument.
3284 optionally selected with the optional ``gui`` argument.
3284
3285
3285 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
3286 This method only adds preloading the namespace to InteractiveShell.enable_matplotlib.
3286
3287
3287 Parameters
3288 Parameters
3288 ----------
3289 ----------
3289 gui : optional, string
3290 gui : optional, string
3290 If given, dictates the choice of matplotlib GUI backend to use
3291 If given, dictates the choice of matplotlib GUI backend to use
3291 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3292 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
3292 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3293 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
3293 matplotlib (as dictated by the matplotlib build-time options plus the
3294 matplotlib (as dictated by the matplotlib build-time options plus the
3294 user's matplotlibrc configuration file). Note that not all backends
3295 user's matplotlibrc configuration file). Note that not all backends
3295 make sense in all contexts, for example a terminal ipython can't
3296 make sense in all contexts, for example a terminal ipython can't
3296 display figures inline.
3297 display figures inline.
3297 import_all : optional, bool, default: True
3298 import_all : optional, bool, default: True
3298 Whether to do `from numpy import *` and `from pylab import *`
3299 Whether to do `from numpy import *` and `from pylab import *`
3299 in addition to module imports.
3300 in addition to module imports.
3300 welcome_message : deprecated
3301 welcome_message : deprecated
3301 This argument is ignored, no welcome message will be displayed.
3302 This argument is ignored, no welcome message will be displayed.
3302 """
3303 """
3303 from IPython.core.pylabtools import import_pylab
3304 from IPython.core.pylabtools import import_pylab
3304
3305
3305 gui, backend = self.enable_matplotlib(gui)
3306 gui, backend = self.enable_matplotlib(gui)
3306
3307
3307 # We want to prevent the loading of pylab to pollute the user's
3308 # We want to prevent the loading of pylab to pollute the user's
3308 # namespace as shown by the %who* magics, so we execute the activation
3309 # namespace as shown by the %who* magics, so we execute the activation
3309 # code in an empty namespace, and we update *both* user_ns and
3310 # code in an empty namespace, and we update *both* user_ns and
3310 # user_ns_hidden with this information.
3311 # user_ns_hidden with this information.
3311 ns = {}
3312 ns = {}
3312 import_pylab(ns, import_all)
3313 import_pylab(ns, import_all)
3313 # warn about clobbered names
3314 # warn about clobbered names
3314 ignored = {"__builtins__"}
3315 ignored = {"__builtins__"}
3315 both = set(ns).intersection(self.user_ns).difference(ignored)
3316 both = set(ns).intersection(self.user_ns).difference(ignored)
3316 clobbered = [ name for name in both if self.user_ns[name] is not ns[name] ]
3317 clobbered = [ name for name in both if self.user_ns[name] is not ns[name] ]
3317 self.user_ns.update(ns)
3318 self.user_ns.update(ns)
3318 self.user_ns_hidden.update(ns)
3319 self.user_ns_hidden.update(ns)
3319 return gui, backend, clobbered
3320 return gui, backend, clobbered
3320
3321
3321 #-------------------------------------------------------------------------
3322 #-------------------------------------------------------------------------
3322 # Utilities
3323 # Utilities
3323 #-------------------------------------------------------------------------
3324 #-------------------------------------------------------------------------
3324
3325
3325 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3326 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
3326 """Expand python variables in a string.
3327 """Expand python variables in a string.
3327
3328
3328 The depth argument indicates how many frames above the caller should
3329 The depth argument indicates how many frames above the caller should
3329 be walked to look for the local namespace where to expand variables.
3330 be walked to look for the local namespace where to expand variables.
3330
3331
3331 The global namespace for expansion is always the user's interactive
3332 The global namespace for expansion is always the user's interactive
3332 namespace.
3333 namespace.
3333 """
3334 """
3334 ns = self.user_ns.copy()
3335 ns = self.user_ns.copy()
3335 try:
3336 try:
3336 frame = sys._getframe(depth+1)
3337 frame = sys._getframe(depth+1)
3337 except ValueError:
3338 except ValueError:
3338 # This is thrown if there aren't that many frames on the stack,
3339 # This is thrown if there aren't that many frames on the stack,
3339 # e.g. if a script called run_line_magic() directly.
3340 # e.g. if a script called run_line_magic() directly.
3340 pass
3341 pass
3341 else:
3342 else:
3342 ns.update(frame.f_locals)
3343 ns.update(frame.f_locals)
3343
3344
3344 try:
3345 try:
3345 # We have to use .vformat() here, because 'self' is a valid and common
3346 # We have to use .vformat() here, because 'self' is a valid and common
3346 # name, and expanding **ns for .format() would make it collide with
3347 # name, and expanding **ns for .format() would make it collide with
3347 # the 'self' argument of the method.
3348 # the 'self' argument of the method.
3348 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3349 cmd = formatter.vformat(cmd, args=[], kwargs=ns)
3349 except Exception:
3350 except Exception:
3350 # if formatter couldn't format, just let it go untransformed
3351 # if formatter couldn't format, just let it go untransformed
3351 pass
3352 pass
3352 return cmd
3353 return cmd
3353
3354
3354 def mktempfile(self, data=None, prefix='ipython_edit_'):
3355 def mktempfile(self, data=None, prefix='ipython_edit_'):
3355 """Make a new tempfile and return its filename.
3356 """Make a new tempfile and return its filename.
3356
3357
3357 This makes a call to tempfile.mkstemp (created in a tempfile.mkdtemp),
3358 This makes a call to tempfile.mkstemp (created in a tempfile.mkdtemp),
3358 but it registers the created filename internally so ipython cleans it up
3359 but it registers the created filename internally so ipython cleans it up
3359 at exit time.
3360 at exit time.
3360
3361
3361 Optional inputs:
3362 Optional inputs:
3362
3363
3363 - data(None): if data is given, it gets written out to the temp file
3364 - data(None): if data is given, it gets written out to the temp file
3364 immediately, and the file is closed again."""
3365 immediately, and the file is closed again."""
3365
3366
3366 dirname = tempfile.mkdtemp(prefix=prefix)
3367 dirname = tempfile.mkdtemp(prefix=prefix)
3367 self.tempdirs.append(dirname)
3368 self.tempdirs.append(dirname)
3368
3369
3369 handle, filename = tempfile.mkstemp('.py', prefix, dir=dirname)
3370 handle, filename = tempfile.mkstemp('.py', prefix, dir=dirname)
3370 os.close(handle) # On Windows, there can only be one open handle on a file
3371 os.close(handle) # On Windows, there can only be one open handle on a file
3371 self.tempfiles.append(filename)
3372 self.tempfiles.append(filename)
3372
3373
3373 if data:
3374 if data:
3374 tmp_file = open(filename,'w')
3375 tmp_file = open(filename,'w')
3375 tmp_file.write(data)
3376 tmp_file.write(data)
3376 tmp_file.close()
3377 tmp_file.close()
3377 return filename
3378 return filename
3378
3379
3379 @undoc
3380 @undoc
3380 def write(self,data):
3381 def write(self,data):
3381 """DEPRECATED: Write a string to the default output"""
3382 """DEPRECATED: Write a string to the default output"""
3382 warn('InteractiveShell.write() is deprecated, use sys.stdout instead',
3383 warn('InteractiveShell.write() is deprecated, use sys.stdout instead',
3383 DeprecationWarning, stacklevel=2)
3384 DeprecationWarning, stacklevel=2)
3384 sys.stdout.write(data)
3385 sys.stdout.write(data)
3385
3386
3386 @undoc
3387 @undoc
3387 def write_err(self,data):
3388 def write_err(self,data):
3388 """DEPRECATED: Write a string to the default error output"""
3389 """DEPRECATED: Write a string to the default error output"""
3389 warn('InteractiveShell.write_err() is deprecated, use sys.stderr instead',
3390 warn('InteractiveShell.write_err() is deprecated, use sys.stderr instead',
3390 DeprecationWarning, stacklevel=2)
3391 DeprecationWarning, stacklevel=2)
3391 sys.stderr.write(data)
3392 sys.stderr.write(data)
3392
3393
3393 def ask_yes_no(self, prompt, default=None, interrupt=None):
3394 def ask_yes_no(self, prompt, default=None, interrupt=None):
3394 if self.quiet:
3395 if self.quiet:
3395 return True
3396 return True
3396 return ask_yes_no(prompt,default,interrupt)
3397 return ask_yes_no(prompt,default,interrupt)
3397
3398
3398 def show_usage(self):
3399 def show_usage(self):
3399 """Show a usage message"""
3400 """Show a usage message"""
3400 page.page(IPython.core.usage.interactive_usage)
3401 page.page(IPython.core.usage.interactive_usage)
3401
3402
3402 def extract_input_lines(self, range_str, raw=False):
3403 def extract_input_lines(self, range_str, raw=False):
3403 """Return as a string a set of input history slices.
3404 """Return as a string a set of input history slices.
3404
3405
3405 Parameters
3406 Parameters
3406 ----------
3407 ----------
3407 range_str : string
3408 range_str : string
3408 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3409 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
3409 since this function is for use by magic functions which get their
3410 since this function is for use by magic functions which get their
3410 arguments as strings. The number before the / is the session
3411 arguments as strings. The number before the / is the session
3411 number: ~n goes n back from the current session.
3412 number: ~n goes n back from the current session.
3412
3413
3413 raw : bool, optional
3414 raw : bool, optional
3414 By default, the processed input is used. If this is true, the raw
3415 By default, the processed input is used. If this is true, the raw
3415 input history is used instead.
3416 input history is used instead.
3416
3417
3417 Notes
3418 Notes
3418 -----
3419 -----
3419
3420
3420 Slices can be described with two notations:
3421 Slices can be described with two notations:
3421
3422
3422 * ``N:M`` -> standard python form, means including items N...(M-1).
3423 * ``N:M`` -> standard python form, means including items N...(M-1).
3423 * ``N-M`` -> include items N..M (closed endpoint).
3424 * ``N-M`` -> include items N..M (closed endpoint).
3424 """
3425 """
3425 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3426 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
3426 return "\n".join(x for _, _, x in lines)
3427 return "\n".join(x for _, _, x in lines)
3427
3428
3428 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3429 def find_user_code(self, target, raw=True, py_only=False, skip_encoding_cookie=True, search_ns=False):
3429 """Get a code string from history, file, url, or a string or macro.
3430 """Get a code string from history, file, url, or a string or macro.
3430
3431
3431 This is mainly used by magic functions.
3432 This is mainly used by magic functions.
3432
3433
3433 Parameters
3434 Parameters
3434 ----------
3435 ----------
3435
3436
3436 target : str
3437 target : str
3437
3438
3438 A string specifying code to retrieve. This will be tried respectively
3439 A string specifying code to retrieve. This will be tried respectively
3439 as: ranges of input history (see %history for syntax), url,
3440 as: ranges of input history (see %history for syntax), url,
3440 corresponding .py file, filename, or an expression evaluating to a
3441 corresponding .py file, filename, or an expression evaluating to a
3441 string or Macro in the user namespace.
3442 string or Macro in the user namespace.
3442
3443
3443 raw : bool
3444 raw : bool
3444 If true (default), retrieve raw history. Has no effect on the other
3445 If true (default), retrieve raw history. Has no effect on the other
3445 retrieval mechanisms.
3446 retrieval mechanisms.
3446
3447
3447 py_only : bool (default False)
3448 py_only : bool (default False)
3448 Only try to fetch python code, do not try alternative methods to decode file
3449 Only try to fetch python code, do not try alternative methods to decode file
3449 if unicode fails.
3450 if unicode fails.
3450
3451
3451 Returns
3452 Returns
3452 -------
3453 -------
3453 A string of code.
3454 A string of code.
3454
3455
3455 ValueError is raised if nothing is found, and TypeError if it evaluates
3456 ValueError is raised if nothing is found, and TypeError if it evaluates
3456 to an object of another type. In each case, .args[0] is a printable
3457 to an object of another type. In each case, .args[0] is a printable
3457 message.
3458 message.
3458 """
3459 """
3459 code = self.extract_input_lines(target, raw=raw) # Grab history
3460 code = self.extract_input_lines(target, raw=raw) # Grab history
3460 if code:
3461 if code:
3461 return code
3462 return code
3462 try:
3463 try:
3463 if target.startswith(('http://', 'https://')):
3464 if target.startswith(('http://', 'https://')):
3464 return openpy.read_py_url(target, skip_encoding_cookie=skip_encoding_cookie)
3465 return openpy.read_py_url(target, skip_encoding_cookie=skip_encoding_cookie)
3465 except UnicodeDecodeError:
3466 except UnicodeDecodeError:
3466 if not py_only :
3467 if not py_only :
3467 # Deferred import
3468 # Deferred import
3468 from urllib.request import urlopen
3469 from urllib.request import urlopen
3469 response = urlopen(target)
3470 response = urlopen(target)
3470 return response.read().decode('latin1')
3471 return response.read().decode('latin1')
3471 raise ValueError(("'%s' seem to be unreadable.") % target)
3472 raise ValueError(("'%s' seem to be unreadable.") % target)
3472
3473
3473 potential_target = [target]
3474 potential_target = [target]
3474 try :
3475 try :
3475 potential_target.insert(0,get_py_filename(target))
3476 potential_target.insert(0,get_py_filename(target))
3476 except IOError:
3477 except IOError:
3477 pass
3478 pass
3478
3479
3479 for tgt in potential_target :
3480 for tgt in potential_target :
3480 if os.path.isfile(tgt): # Read file
3481 if os.path.isfile(tgt): # Read file
3481 try :
3482 try :
3482 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3483 return openpy.read_py_file(tgt, skip_encoding_cookie=skip_encoding_cookie)
3483 except UnicodeDecodeError :
3484 except UnicodeDecodeError :
3484 if not py_only :
3485 if not py_only :
3485 with io_open(tgt,'r', encoding='latin1') as f :
3486 with io_open(tgt,'r', encoding='latin1') as f :
3486 return f.read()
3487 return f.read()
3487 raise ValueError(("'%s' seem to be unreadable.") % target)
3488 raise ValueError(("'%s' seem to be unreadable.") % target)
3488 elif os.path.isdir(os.path.expanduser(tgt)):
3489 elif os.path.isdir(os.path.expanduser(tgt)):
3489 raise ValueError("'%s' is a directory, not a regular file." % target)
3490 raise ValueError("'%s' is a directory, not a regular file." % target)
3490
3491
3491 if search_ns:
3492 if search_ns:
3492 # Inspect namespace to load object source
3493 # Inspect namespace to load object source
3493 object_info = self.object_inspect(target, detail_level=1)
3494 object_info = self.object_inspect(target, detail_level=1)
3494 if object_info['found'] and object_info['source']:
3495 if object_info['found'] and object_info['source']:
3495 return object_info['source']
3496 return object_info['source']
3496
3497
3497 try: # User namespace
3498 try: # User namespace
3498 codeobj = eval(target, self.user_ns)
3499 codeobj = eval(target, self.user_ns)
3499 except Exception:
3500 except Exception:
3500 raise ValueError(("'%s' was not found in history, as a file, url, "
3501 raise ValueError(("'%s' was not found in history, as a file, url, "
3501 "nor in the user namespace.") % target)
3502 "nor in the user namespace.") % target)
3502
3503
3503 if isinstance(codeobj, str):
3504 if isinstance(codeobj, str):
3504 return codeobj
3505 return codeobj
3505 elif isinstance(codeobj, Macro):
3506 elif isinstance(codeobj, Macro):
3506 return codeobj.value
3507 return codeobj.value
3507
3508
3508 raise TypeError("%s is neither a string nor a macro." % target,
3509 raise TypeError("%s is neither a string nor a macro." % target,
3509 codeobj)
3510 codeobj)
3510
3511
3511 #-------------------------------------------------------------------------
3512 #-------------------------------------------------------------------------
3512 # Things related to IPython exiting
3513 # Things related to IPython exiting
3513 #-------------------------------------------------------------------------
3514 #-------------------------------------------------------------------------
3514 def atexit_operations(self):
3515 def atexit_operations(self):
3515 """This will be executed at the time of exit.
3516 """This will be executed at the time of exit.
3516
3517
3517 Cleanup operations and saving of persistent data that is done
3518 Cleanup operations and saving of persistent data that is done
3518 unconditionally by IPython should be performed here.
3519 unconditionally by IPython should be performed here.
3519
3520
3520 For things that may depend on startup flags or platform specifics (such
3521 For things that may depend on startup flags or platform specifics (such
3521 as having readline or not), register a separate atexit function in the
3522 as having readline or not), register a separate atexit function in the
3522 code that has the appropriate information, rather than trying to
3523 code that has the appropriate information, rather than trying to
3523 clutter
3524 clutter
3524 """
3525 """
3525 # Close the history session (this stores the end time and line count)
3526 # Close the history session (this stores the end time and line count)
3526 # this must be *before* the tempfile cleanup, in case of temporary
3527 # this must be *before* the tempfile cleanup, in case of temporary
3527 # history db
3528 # history db
3528 self.history_manager.end_session()
3529 self.history_manager.end_session()
3529
3530
3530 # Cleanup all tempfiles and folders left around
3531 # Cleanup all tempfiles and folders left around
3531 for tfile in self.tempfiles:
3532 for tfile in self.tempfiles:
3532 try:
3533 try:
3533 os.unlink(tfile)
3534 os.unlink(tfile)
3534 except OSError:
3535 except OSError:
3535 pass
3536 pass
3536
3537
3537 for tdir in self.tempdirs:
3538 for tdir in self.tempdirs:
3538 try:
3539 try:
3539 os.rmdir(tdir)
3540 os.rmdir(tdir)
3540 except OSError:
3541 except OSError:
3541 pass
3542 pass
3542
3543
3543 # Clear all user namespaces to release all references cleanly.
3544 # Clear all user namespaces to release all references cleanly.
3544 self.reset(new_session=False)
3545 self.reset(new_session=False)
3545
3546
3546 # Run user hooks
3547 # Run user hooks
3547 self.hooks.shutdown_hook()
3548 self.hooks.shutdown_hook()
3548
3549
3549 def cleanup(self):
3550 def cleanup(self):
3550 self.restore_sys_module_state()
3551 self.restore_sys_module_state()
3551
3552
3552
3553
3553 # Overridden in terminal subclass to change prompts
3554 # Overridden in terminal subclass to change prompts
3554 def switch_doctest_mode(self, mode):
3555 def switch_doctest_mode(self, mode):
3555 pass
3556 pass
3556
3557
3557
3558
3558 class InteractiveShellABC(metaclass=abc.ABCMeta):
3559 class InteractiveShellABC(metaclass=abc.ABCMeta):
3559 """An abstract base class for InteractiveShell."""
3560 """An abstract base class for InteractiveShell."""
3560
3561
3561 InteractiveShellABC.register(InteractiveShell)
3562 InteractiveShellABC.register(InteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now