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