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