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