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