##// END OF EJS Templates
BUG: Don't use readline in the ZMQShell....
epatters -
Show More
@@ -1,2580 +1,2596 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
20 20 import __builtin__ as builtin_mod
21 21 import __future__
22 22 import abc
23 23 import ast
24 24 import atexit
25 25 import codeop
26 26 import inspect
27 27 import os
28 28 import re
29 29 import sys
30 30 import tempfile
31 31 import types
32 32 try:
33 33 from contextlib import nested
34 34 except:
35 35 from IPython.utils.nested_context import nested
36 36
37 37 from IPython.config.configurable import SingletonConfigurable
38 38 from IPython.core import debugger, oinspect
39 39 from IPython.core import history as ipcorehist
40 40 from IPython.core import page
41 41 from IPython.core import prefilter
42 42 from IPython.core import shadowns
43 43 from IPython.core import ultratb
44 44 from IPython.core.alias import AliasManager, AliasError
45 45 from IPython.core.autocall import ExitAutocall
46 46 from IPython.core.builtin_trap import BuiltinTrap
47 47 from IPython.core.compilerop import CachingCompiler
48 48 from IPython.core.display_trap import DisplayTrap
49 49 from IPython.core.displayhook import DisplayHook
50 50 from IPython.core.displaypub import DisplayPublisher
51 51 from IPython.core.error import TryNext, UsageError
52 52 from IPython.core.extensions import ExtensionManager
53 53 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
54 54 from IPython.core.formatters import DisplayFormatter
55 55 from IPython.core.history import HistoryManager
56 56 from IPython.core.inputsplitter import IPythonInputSplitter
57 57 from IPython.core.logger import Logger
58 58 from IPython.core.macro import Macro
59 59 from IPython.core.magic import Magic
60 60 from IPython.core.payload import PayloadManager
61 61 from IPython.core.plugin import PluginManager
62 62 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
63 63 from IPython.core.profiledir import ProfileDir
64 64 from IPython.external.Itpl import ItplNS
65 65 from IPython.utils import PyColorize
66 66 from IPython.utils import io
67 67 from IPython.utils import py3compat
68 68 from IPython.utils.doctestreload import doctest_reload
69 69 from IPython.utils.io import ask_yes_no, rprint
70 70 from IPython.utils.ipstruct import Struct
71 71 from IPython.utils.path import get_home_dir, get_ipython_dir, HomeDirError
72 72 from IPython.utils.pickleshare import PickleShareDB
73 73 from IPython.utils.process import system, getoutput
74 74 from IPython.utils.strdispatch import StrDispatch
75 75 from IPython.utils.syspathcontext import prepended_to_syspath
76 76 from IPython.utils.text import num_ini_spaces, format_screen, LSString, SList
77 77 from IPython.utils.traitlets import (Int, CBool, CaselessStrEnum, Enum,
78 78 List, Unicode, Instance, Type)
79 79 from IPython.utils.warn import warn, error, fatal
80 80 import IPython.core.hooks
81 81
82 82 #-----------------------------------------------------------------------------
83 83 # Globals
84 84 #-----------------------------------------------------------------------------
85 85
86 86 # compiled regexps for autoindent management
87 87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88 88
89 89 #-----------------------------------------------------------------------------
90 90 # Utilities
91 91 #-----------------------------------------------------------------------------
92 92
93 93 def softspace(file, newvalue):
94 94 """Copied from code.py, to remove the dependency"""
95 95
96 96 oldvalue = 0
97 97 try:
98 98 oldvalue = file.softspace
99 99 except AttributeError:
100 100 pass
101 101 try:
102 102 file.softspace = newvalue
103 103 except (AttributeError, TypeError):
104 104 # "attribute-less object" or "read-only attributes"
105 105 pass
106 106 return oldvalue
107 107
108 108
109 109 def no_op(*a, **kw): pass
110 110
111 class NoOpContext(object):
112 def __enter__(self): pass
113 def __exit__(self, type, value, traceback): pass
114 no_op_context = NoOpContext()
115
111 116 class SpaceInInput(Exception): pass
112 117
113 118 class Bunch: pass
114 119
115 120
116 121 def get_default_colors():
117 122 if sys.platform=='darwin':
118 123 return "LightBG"
119 124 elif os.name=='nt':
120 125 return 'Linux'
121 126 else:
122 127 return 'Linux'
123 128
124 129
125 130 class SeparateUnicode(Unicode):
126 131 """A Unicode subclass to validate separate_in, separate_out, etc.
127 132
128 133 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
129 134 """
130 135
131 136 def validate(self, obj, value):
132 137 if value == '0': value = ''
133 138 value = value.replace('\\n','\n')
134 139 return super(SeparateUnicode, self).validate(obj, value)
135 140
136 141
137 142 class ReadlineNoRecord(object):
138 143 """Context manager to execute some code, then reload readline history
139 144 so that interactive input to the code doesn't appear when pressing up."""
140 145 def __init__(self, shell):
141 146 self.shell = shell
142 147 self._nested_level = 0
143 148
144 149 def __enter__(self):
145 150 if self._nested_level == 0:
146 151 try:
147 152 self.orig_length = self.current_length()
148 153 self.readline_tail = self.get_readline_tail()
149 154 except (AttributeError, IndexError): # Can fail with pyreadline
150 155 self.orig_length, self.readline_tail = 999999, []
151 156 self._nested_level += 1
152 157
153 158 def __exit__(self, type, value, traceback):
154 159 self._nested_level -= 1
155 160 if self._nested_level == 0:
156 161 # Try clipping the end if it's got longer
157 162 try:
158 163 e = self.current_length() - self.orig_length
159 164 if e > 0:
160 165 for _ in range(e):
161 166 self.shell.readline.remove_history_item(self.orig_length)
162 167
163 168 # If it still doesn't match, just reload readline history.
164 169 if self.current_length() != self.orig_length \
165 170 or self.get_readline_tail() != self.readline_tail:
166 171 self.shell.refill_readline_hist()
167 172 except (AttributeError, IndexError):
168 173 pass
169 174 # Returning False will cause exceptions to propagate
170 175 return False
171 176
172 177 def current_length(self):
173 178 return self.shell.readline.get_current_history_length()
174 179
175 180 def get_readline_tail(self, n=10):
176 181 """Get the last n items in readline history."""
177 182 end = self.shell.readline.get_current_history_length() + 1
178 183 start = max(end-n, 1)
179 184 ghi = self.shell.readline.get_history_item
180 185 return [ghi(x) for x in range(start, end)]
181 186
182 187
183 188 _autocall_help = """
184 189 Make IPython automatically call any callable object even if
185 190 you didn't type explicit parentheses. For example, 'str 43' becomes 'str(43)'
186 191 automatically. The value can be '0' to disable the feature, '1' for 'smart'
187 192 autocall, where it is not applied if there are no more arguments on the line,
188 193 and '2' for 'full' autocall, where all callable objects are automatically
189 194 called (even if no arguments are present). The default is '1'.
190 195 """
191 196
192 197 #-----------------------------------------------------------------------------
193 198 # Main IPython class
194 199 #-----------------------------------------------------------------------------
195 200
196 201 class InteractiveShell(SingletonConfigurable, Magic):
197 202 """An enhanced, interactive shell for Python."""
198 203
199 204 _instance = None
200 205
201 206 autocall = Enum((0,1,2), default_value=1, config=True, help=
202 207 """
203 208 Make IPython automatically call any callable object even if you didn't
204 209 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
205 210 automatically. The value can be '0' to disable the feature, '1' for
206 211 'smart' autocall, where it is not applied if there are no more
207 212 arguments on the line, and '2' for 'full' autocall, where all callable
208 213 objects are automatically called (even if no arguments are present).
209 214 The default is '1'.
210 215 """
211 216 )
212 217 # TODO: remove all autoindent logic and put into frontends.
213 218 # We can't do this yet because even runlines uses the autoindent.
214 219 autoindent = CBool(True, config=True, help=
215 220 """
216 221 Autoindent IPython code entered interactively.
217 222 """
218 223 )
219 224 automagic = CBool(True, config=True, help=
220 225 """
221 226 Enable magic commands to be called without the leading %.
222 227 """
223 228 )
224 229 cache_size = Int(1000, config=True, help=
225 230 """
226 231 Set the size of the output cache. The default is 1000, you can
227 232 change it permanently in your config file. Setting it to 0 completely
228 233 disables the caching system, and the minimum value accepted is 20 (if
229 234 you provide a value less than 20, it is reset to 0 and a warning is
230 235 issued). This limit is defined because otherwise you'll spend more
231 236 time re-flushing a too small cache than working
232 237 """
233 238 )
234 239 color_info = CBool(True, config=True, help=
235 240 """
236 241 Use colors for displaying information about objects. Because this
237 242 information is passed through a pager (like 'less'), and some pagers
238 243 get confused with color codes, this capability can be turned off.
239 244 """
240 245 )
241 246 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
242 247 default_value=get_default_colors(), config=True,
243 248 help="Set the color scheme (NoColor, Linux, or LightBG)."
244 249 )
250 colors_force = CBool(False, help=
251 """
252 Force use of ANSI color codes, regardless of OS and readline
253 availability.
254 """
255 # FIXME: This is essentially a hack to allow ZMQShell to show colors
256 # without readline on Win32. When the ZMQ formatting system is
257 # refactored, this should be removed.
258 )
245 259 debug = CBool(False, config=True)
246 260 deep_reload = CBool(False, config=True, help=
247 261 """
248 262 Enable deep (recursive) reloading by default. IPython can use the
249 263 deep_reload module which reloads changes in modules recursively (it
250 264 replaces the reload() function, so you don't need to change anything to
251 265 use it). deep_reload() forces a full reload of modules whose code may
252 266 have changed, which the default reload() function does not. When
253 267 deep_reload is off, IPython will use the normal reload(), but
254 268 deep_reload will still be available as dreload().
255 269 """
256 270 )
257 271 display_formatter = Instance(DisplayFormatter)
258 272 displayhook_class = Type(DisplayHook)
259 273 display_pub_class = Type(DisplayPublisher)
260 274
261 275 exit_now = CBool(False)
262 276 exiter = Instance(ExitAutocall)
263 277 def _exiter_default(self):
264 278 return ExitAutocall(self)
265 279 # Monotonically increasing execution counter
266 280 execution_count = Int(1)
267 281 filename = Unicode("<ipython console>")
268 282 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
269 283
270 284 # Input splitter, to split entire cells of input into either individual
271 285 # interactive statements or whole blocks.
272 286 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
273 287 (), {})
274 288 logstart = CBool(False, config=True, help=
275 289 """
276 290 Start logging to the default log file.
277 291 """
278 292 )
279 293 logfile = Unicode('', config=True, help=
280 294 """
281 295 The name of the logfile to use.
282 296 """
283 297 )
284 298 logappend = Unicode('', config=True, help=
285 299 """
286 300 Start logging to the given file in append mode.
287 301 """
288 302 )
289 303 object_info_string_level = Enum((0,1,2), default_value=0,
290 304 config=True)
291 305 pdb = CBool(False, config=True, help=
292 306 """
293 307 Automatically call the pdb debugger after every exception.
294 308 """
295 309 )
296 310
297 311 prompt_in1 = Unicode('In [\\#]: ', config=True)
298 312 prompt_in2 = Unicode(' .\\D.: ', config=True)
299 313 prompt_out = Unicode('Out[\\#]: ', config=True)
300 314 prompts_pad_left = CBool(True, config=True)
301 315 quiet = CBool(False, config=True)
302 316
303 317 history_length = Int(10000, config=True)
304 318
305 319 # The readline stuff will eventually be moved to the terminal subclass
306 320 # but for now, we can't do that as readline is welded in everywhere.
307 321 readline_use = CBool(True, config=True)
308 322 readline_merge_completions = CBool(True, config=True)
309 323 readline_omit__names = Enum((0,1,2), default_value=2, config=True)
310 324 readline_remove_delims = Unicode('-/~', config=True)
311 325 # don't use \M- bindings by default, because they
312 326 # conflict with 8-bit encodings. See gh-58,gh-88
313 327 readline_parse_and_bind = List([
314 328 'tab: complete',
315 329 '"\C-l": clear-screen',
316 330 'set show-all-if-ambiguous on',
317 331 '"\C-o": tab-insert',
318 332 '"\C-r": reverse-search-history',
319 333 '"\C-s": forward-search-history',
320 334 '"\C-p": history-search-backward',
321 335 '"\C-n": history-search-forward',
322 336 '"\e[A": history-search-backward',
323 337 '"\e[B": history-search-forward',
324 338 '"\C-k": kill-line',
325 339 '"\C-u": unix-line-discard',
326 340 ], allow_none=False, config=True)
327 341
328 342 # TODO: this part of prompt management should be moved to the frontends.
329 343 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
330 344 separate_in = SeparateUnicode('\n', config=True)
331 345 separate_out = SeparateUnicode('', config=True)
332 346 separate_out2 = SeparateUnicode('', config=True)
333 347 wildcards_case_sensitive = CBool(True, config=True)
334 348 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
335 349 default_value='Context', config=True)
336 350
337 351 # Subcomponents of InteractiveShell
338 352 alias_manager = Instance('IPython.core.alias.AliasManager')
339 353 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
340 354 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
341 355 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
342 356 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
343 357 plugin_manager = Instance('IPython.core.plugin.PluginManager')
344 358 payload_manager = Instance('IPython.core.payload.PayloadManager')
345 359 history_manager = Instance('IPython.core.history.HistoryManager')
346 360
347 361 profile_dir = Instance('IPython.core.application.ProfileDir')
348 362 @property
349 363 def profile(self):
350 364 if self.profile_dir is not None:
351 365 name = os.path.basename(self.profile_dir.location)
352 366 return name.replace('profile_','')
353 367
354 368
355 369 # Private interface
356 370 _post_execute = Instance(dict)
357 371
358 372 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
359 373 user_ns=None, user_global_ns=None,
360 374 custom_exceptions=((), None)):
361 375
362 376 # This is where traits with a config_key argument are updated
363 377 # from the values on config.
364 378 super(InteractiveShell, self).__init__(config=config)
365 379
366 380 # These are relatively independent and stateless
367 381 self.init_ipython_dir(ipython_dir)
368 382 self.init_profile_dir(profile_dir)
369 383 self.init_instance_attrs()
370 384 self.init_environment()
371 385
372 386 # Create namespaces (user_ns, user_global_ns, etc.)
373 387 self.init_create_namespaces(user_ns, user_global_ns)
374 388 # This has to be done after init_create_namespaces because it uses
375 389 # something in self.user_ns, but before init_sys_modules, which
376 390 # is the first thing to modify sys.
377 391 # TODO: When we override sys.stdout and sys.stderr before this class
378 392 # is created, we are saving the overridden ones here. Not sure if this
379 393 # is what we want to do.
380 394 self.save_sys_module_state()
381 395 self.init_sys_modules()
382 396
383 397 # While we're trying to have each part of the code directly access what
384 398 # it needs without keeping redundant references to objects, we have too
385 399 # much legacy code that expects ip.db to exist.
386 400 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
387 401
388 402 self.init_history()
389 403 self.init_encoding()
390 404 self.init_prefilter()
391 405
392 406 Magic.__init__(self, self)
393 407
394 408 self.init_syntax_highlighting()
395 409 self.init_hooks()
396 410 self.init_pushd_popd_magic()
397 411 # self.init_traceback_handlers use to be here, but we moved it below
398 412 # because it and init_io have to come after init_readline.
399 413 self.init_user_ns()
400 414 self.init_logger()
401 415 self.init_alias()
402 416 self.init_builtins()
403 417
404 418 # pre_config_initialization
405 419
406 420 # The next section should contain everything that was in ipmaker.
407 421 self.init_logstart()
408 422
409 423 # The following was in post_config_initialization
410 424 self.init_inspector()
411 425 # init_readline() must come before init_io(), because init_io uses
412 426 # readline related things.
413 427 self.init_readline()
414 428 # We save this here in case user code replaces raw_input, but it needs
415 429 # to be after init_readline(), because PyPy's readline works by replacing
416 430 # raw_input.
417 431 if py3compat.PY3:
418 432 self.raw_input_original = input
419 433 else:
420 434 self.raw_input_original = raw_input
421 435 # init_completer must come after init_readline, because it needs to
422 436 # know whether readline is present or not system-wide to configure the
423 437 # completers, since the completion machinery can now operate
424 438 # independently of readline (e.g. over the network)
425 439 self.init_completer()
426 440 # TODO: init_io() needs to happen before init_traceback handlers
427 441 # because the traceback handlers hardcode the stdout/stderr streams.
428 442 # This logic in in debugger.Pdb and should eventually be changed.
429 443 self.init_io()
430 444 self.init_traceback_handlers(custom_exceptions)
431 445 self.init_prompts()
432 446 self.init_display_formatter()
433 447 self.init_display_pub()
434 448 self.init_displayhook()
435 449 self.init_reload_doctest()
436 450 self.init_magics()
437 451 self.init_pdb()
438 452 self.init_extension_manager()
439 453 self.init_plugin_manager()
440 454 self.init_payload()
441 455 self.hooks.late_startup_hook()
442 456 atexit.register(self.atexit_operations)
443 457
444 458 def get_ipython(self):
445 459 """Return the currently running IPython instance."""
446 460 return self
447 461
448 462 #-------------------------------------------------------------------------
449 463 # Trait changed handlers
450 464 #-------------------------------------------------------------------------
451 465
452 466 def _ipython_dir_changed(self, name, new):
453 467 if not os.path.isdir(new):
454 468 os.makedirs(new, mode = 0777)
455 469
456 470 def set_autoindent(self,value=None):
457 471 """Set the autoindent flag, checking for readline support.
458 472
459 473 If called with no arguments, it acts as a toggle."""
460 474
461 475 if not self.has_readline:
462 476 if os.name == 'posix':
463 477 warn("The auto-indent feature requires the readline library")
464 478 self.autoindent = 0
465 479 return
466 480 if value is None:
467 481 self.autoindent = not self.autoindent
468 482 else:
469 483 self.autoindent = value
470 484
471 485 #-------------------------------------------------------------------------
472 486 # init_* methods called by __init__
473 487 #-------------------------------------------------------------------------
474 488
475 489 def init_ipython_dir(self, ipython_dir):
476 490 if ipython_dir is not None:
477 491 self.ipython_dir = ipython_dir
478 492 return
479 493
480 494 self.ipython_dir = get_ipython_dir()
481 495
482 496 def init_profile_dir(self, profile_dir):
483 497 if profile_dir is not None:
484 498 self.profile_dir = profile_dir
485 499 return
486 500 self.profile_dir =\
487 501 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
488 502
489 503 def init_instance_attrs(self):
490 504 self.more = False
491 505
492 506 # command compiler
493 507 self.compile = CachingCompiler()
494 508
495 509 # Make an empty namespace, which extension writers can rely on both
496 510 # existing and NEVER being used by ipython itself. This gives them a
497 511 # convenient location for storing additional information and state
498 512 # their extensions may require, without fear of collisions with other
499 513 # ipython names that may develop later.
500 514 self.meta = Struct()
501 515
502 516 # Temporary files used for various purposes. Deleted at exit.
503 517 self.tempfiles = []
504 518
505 519 # Keep track of readline usage (later set by init_readline)
506 520 self.has_readline = False
507 521
508 522 # keep track of where we started running (mainly for crash post-mortem)
509 523 # This is not being used anywhere currently.
510 524 self.starting_dir = os.getcwdu()
511 525
512 526 # Indentation management
513 527 self.indent_current_nsp = 0
514 528
515 529 # Dict to track post-execution functions that have been registered
516 530 self._post_execute = {}
517 531
518 532 def init_environment(self):
519 533 """Any changes we need to make to the user's environment."""
520 534 pass
521 535
522 536 def init_encoding(self):
523 537 # Get system encoding at startup time. Certain terminals (like Emacs
524 538 # under Win32 have it set to None, and we need to have a known valid
525 539 # encoding to use in the raw_input() method
526 540 try:
527 541 self.stdin_encoding = sys.stdin.encoding or 'ascii'
528 542 except AttributeError:
529 543 self.stdin_encoding = 'ascii'
530 544
531 545 def init_syntax_highlighting(self):
532 546 # Python source parser/formatter for syntax highlighting
533 547 pyformat = PyColorize.Parser().format
534 548 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
535 549
536 550 def init_pushd_popd_magic(self):
537 551 # for pushd/popd management
538 552 try:
539 553 self.home_dir = get_home_dir()
540 554 except HomeDirError, msg:
541 555 fatal(msg)
542 556
543 557 self.dir_stack = []
544 558
545 559 def init_logger(self):
546 560 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
547 561 logmode='rotate')
548 562
549 563 def init_logstart(self):
550 564 """Initialize logging in case it was requested at the command line.
551 565 """
552 566 if self.logappend:
553 567 self.magic_logstart(self.logappend + ' append')
554 568 elif self.logfile:
555 569 self.magic_logstart(self.logfile)
556 570 elif self.logstart:
557 571 self.magic_logstart()
558 572
559 573 def init_builtins(self):
560 574 self.builtin_trap = BuiltinTrap(shell=self)
561 575
562 576 def init_inspector(self):
563 577 # Object inspector
564 578 self.inspector = oinspect.Inspector(oinspect.InspectColors,
565 579 PyColorize.ANSICodeColors,
566 580 'NoColor',
567 581 self.object_info_string_level)
568 582
569 583 def init_io(self):
570 584 # This will just use sys.stdout and sys.stderr. If you want to
571 585 # override sys.stdout and sys.stderr themselves, you need to do that
572 586 # *before* instantiating this class, because io holds onto
573 587 # references to the underlying streams.
574 588 if sys.platform == 'win32' and self.has_readline:
575 589 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
576 590 else:
577 591 io.stdout = io.IOStream(sys.stdout)
578 592 io.stderr = io.IOStream(sys.stderr)
579 593
580 594 def init_prompts(self):
581 595 # TODO: This is a pass for now because the prompts are managed inside
582 596 # the DisplayHook. Once there is a separate prompt manager, this
583 597 # will initialize that object and all prompt related information.
584 598 pass
585 599
586 600 def init_display_formatter(self):
587 601 self.display_formatter = DisplayFormatter(config=self.config)
588 602
589 603 def init_display_pub(self):
590 604 self.display_pub = self.display_pub_class(config=self.config)
591 605
592 606 def init_displayhook(self):
593 607 # Initialize displayhook, set in/out prompts and printing system
594 608 self.displayhook = self.displayhook_class(
595 609 config=self.config,
596 610 shell=self,
597 611 cache_size=self.cache_size,
598 612 input_sep = self.separate_in,
599 613 output_sep = self.separate_out,
600 614 output_sep2 = self.separate_out2,
601 615 ps1 = self.prompt_in1,
602 616 ps2 = self.prompt_in2,
603 617 ps_out = self.prompt_out,
604 618 pad_left = self.prompts_pad_left
605 619 )
606 620 # This is a context manager that installs/revmoes the displayhook at
607 621 # the appropriate time.
608 622 self.display_trap = DisplayTrap(hook=self.displayhook)
609 623
610 624 def init_reload_doctest(self):
611 625 # Do a proper resetting of doctest, including the necessary displayhook
612 626 # monkeypatching
613 627 try:
614 628 doctest_reload()
615 629 except ImportError:
616 630 warn("doctest module does not exist.")
617 631
618 632 #-------------------------------------------------------------------------
619 633 # Things related to injections into the sys module
620 634 #-------------------------------------------------------------------------
621 635
622 636 def save_sys_module_state(self):
623 637 """Save the state of hooks in the sys module.
624 638
625 639 This has to be called after self.user_ns is created.
626 640 """
627 641 self._orig_sys_module_state = {}
628 642 self._orig_sys_module_state['stdin'] = sys.stdin
629 643 self._orig_sys_module_state['stdout'] = sys.stdout
630 644 self._orig_sys_module_state['stderr'] = sys.stderr
631 645 self._orig_sys_module_state['excepthook'] = sys.excepthook
632 646 try:
633 647 self._orig_sys_modules_main_name = self.user_ns['__name__']
634 648 except KeyError:
635 649 pass
636 650
637 651 def restore_sys_module_state(self):
638 652 """Restore the state of the sys module."""
639 653 try:
640 654 for k, v in self._orig_sys_module_state.iteritems():
641 655 setattr(sys, k, v)
642 656 except AttributeError:
643 657 pass
644 658 # Reset what what done in self.init_sys_modules
645 659 try:
646 660 sys.modules[self.user_ns['__name__']] = self._orig_sys_modules_main_name
647 661 except (AttributeError, KeyError):
648 662 pass
649 663
650 664 #-------------------------------------------------------------------------
651 665 # Things related to hooks
652 666 #-------------------------------------------------------------------------
653 667
654 668 def init_hooks(self):
655 669 # hooks holds pointers used for user-side customizations
656 670 self.hooks = Struct()
657 671
658 672 self.strdispatchers = {}
659 673
660 674 # Set all default hooks, defined in the IPython.hooks module.
661 675 hooks = IPython.core.hooks
662 676 for hook_name in hooks.__all__:
663 677 # default hooks have priority 100, i.e. low; user hooks should have
664 678 # 0-100 priority
665 679 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
666 680
667 681 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
668 682 """set_hook(name,hook) -> sets an internal IPython hook.
669 683
670 684 IPython exposes some of its internal API as user-modifiable hooks. By
671 685 adding your function to one of these hooks, you can modify IPython's
672 686 behavior to call at runtime your own routines."""
673 687
674 688 # At some point in the future, this should validate the hook before it
675 689 # accepts it. Probably at least check that the hook takes the number
676 690 # of args it's supposed to.
677 691
678 692 f = types.MethodType(hook,self)
679 693
680 694 # check if the hook is for strdispatcher first
681 695 if str_key is not None:
682 696 sdp = self.strdispatchers.get(name, StrDispatch())
683 697 sdp.add_s(str_key, f, priority )
684 698 self.strdispatchers[name] = sdp
685 699 return
686 700 if re_key is not None:
687 701 sdp = self.strdispatchers.get(name, StrDispatch())
688 702 sdp.add_re(re.compile(re_key), f, priority )
689 703 self.strdispatchers[name] = sdp
690 704 return
691 705
692 706 dp = getattr(self.hooks, name, None)
693 707 if name not in IPython.core.hooks.__all__:
694 708 print "Warning! Hook '%s' is not one of %s" % \
695 709 (name, IPython.core.hooks.__all__ )
696 710 if not dp:
697 711 dp = IPython.core.hooks.CommandChainDispatcher()
698 712
699 713 try:
700 714 dp.add(f,priority)
701 715 except AttributeError:
702 716 # it was not commandchain, plain old func - replace
703 717 dp = f
704 718
705 719 setattr(self.hooks,name, dp)
706 720
707 721 def register_post_execute(self, func):
708 722 """Register a function for calling after code execution.
709 723 """
710 724 if not callable(func):
711 725 raise ValueError('argument %s must be callable' % func)
712 726 self._post_execute[func] = True
713 727
714 728 #-------------------------------------------------------------------------
715 729 # Things related to the "main" module
716 730 #-------------------------------------------------------------------------
717 731
718 732 def new_main_mod(self,ns=None):
719 733 """Return a new 'main' module object for user code execution.
720 734 """
721 735 main_mod = self._user_main_module
722 736 init_fakemod_dict(main_mod,ns)
723 737 return main_mod
724 738
725 739 def cache_main_mod(self,ns,fname):
726 740 """Cache a main module's namespace.
727 741
728 742 When scripts are executed via %run, we must keep a reference to the
729 743 namespace of their __main__ module (a FakeModule instance) around so
730 744 that Python doesn't clear it, rendering objects defined therein
731 745 useless.
732 746
733 747 This method keeps said reference in a private dict, keyed by the
734 748 absolute path of the module object (which corresponds to the script
735 749 path). This way, for multiple executions of the same script we only
736 750 keep one copy of the namespace (the last one), thus preventing memory
737 751 leaks from old references while allowing the objects from the last
738 752 execution to be accessible.
739 753
740 754 Note: we can not allow the actual FakeModule instances to be deleted,
741 755 because of how Python tears down modules (it hard-sets all their
742 756 references to None without regard for reference counts). This method
743 757 must therefore make a *copy* of the given namespace, to allow the
744 758 original module's __dict__ to be cleared and reused.
745 759
746 760
747 761 Parameters
748 762 ----------
749 763 ns : a namespace (a dict, typically)
750 764
751 765 fname : str
752 766 Filename associated with the namespace.
753 767
754 768 Examples
755 769 --------
756 770
757 771 In [10]: import IPython
758 772
759 773 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
760 774
761 775 In [12]: IPython.__file__ in _ip._main_ns_cache
762 776 Out[12]: True
763 777 """
764 778 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
765 779
766 780 def clear_main_mod_cache(self):
767 781 """Clear the cache of main modules.
768 782
769 783 Mainly for use by utilities like %reset.
770 784
771 785 Examples
772 786 --------
773 787
774 788 In [15]: import IPython
775 789
776 790 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
777 791
778 792 In [17]: len(_ip._main_ns_cache) > 0
779 793 Out[17]: True
780 794
781 795 In [18]: _ip.clear_main_mod_cache()
782 796
783 797 In [19]: len(_ip._main_ns_cache) == 0
784 798 Out[19]: True
785 799 """
786 800 self._main_ns_cache.clear()
787 801
788 802 #-------------------------------------------------------------------------
789 803 # Things related to debugging
790 804 #-------------------------------------------------------------------------
791 805
792 806 def init_pdb(self):
793 807 # Set calling of pdb on exceptions
794 808 # self.call_pdb is a property
795 809 self.call_pdb = self.pdb
796 810
797 811 def _get_call_pdb(self):
798 812 return self._call_pdb
799 813
800 814 def _set_call_pdb(self,val):
801 815
802 816 if val not in (0,1,False,True):
803 817 raise ValueError,'new call_pdb value must be boolean'
804 818
805 819 # store value in instance
806 820 self._call_pdb = val
807 821
808 822 # notify the actual exception handlers
809 823 self.InteractiveTB.call_pdb = val
810 824
811 825 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
812 826 'Control auto-activation of pdb at exceptions')
813 827
814 828 def debugger(self,force=False):
815 829 """Call the pydb/pdb debugger.
816 830
817 831 Keywords:
818 832
819 833 - force(False): by default, this routine checks the instance call_pdb
820 834 flag and does not actually invoke the debugger if the flag is false.
821 835 The 'force' option forces the debugger to activate even if the flag
822 836 is false.
823 837 """
824 838
825 839 if not (force or self.call_pdb):
826 840 return
827 841
828 842 if not hasattr(sys,'last_traceback'):
829 843 error('No traceback has been produced, nothing to debug.')
830 844 return
831 845
832 846 # use pydb if available
833 847 if debugger.has_pydb:
834 848 from pydb import pm
835 849 else:
836 850 # fallback to our internal debugger
837 851 pm = lambda : self.InteractiveTB.debugger(force=True)
838 852
839 853 with self.readline_no_record:
840 854 pm()
841 855
842 856 #-------------------------------------------------------------------------
843 857 # Things related to IPython's various namespaces
844 858 #-------------------------------------------------------------------------
845 859
846 860 def init_create_namespaces(self, user_ns=None, user_global_ns=None):
847 861 # Create the namespace where the user will operate. user_ns is
848 862 # normally the only one used, and it is passed to the exec calls as
849 863 # the locals argument. But we do carry a user_global_ns namespace
850 864 # given as the exec 'globals' argument, This is useful in embedding
851 865 # situations where the ipython shell opens in a context where the
852 866 # distinction between locals and globals is meaningful. For
853 867 # non-embedded contexts, it is just the same object as the user_ns dict.
854 868
855 869 # FIXME. For some strange reason, __builtins__ is showing up at user
856 870 # level as a dict instead of a module. This is a manual fix, but I
857 871 # should really track down where the problem is coming from. Alex
858 872 # Schmolck reported this problem first.
859 873
860 874 # A useful post by Alex Martelli on this topic:
861 875 # Re: inconsistent value from __builtins__
862 876 # Von: Alex Martelli <aleaxit@yahoo.com>
863 877 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
864 878 # Gruppen: comp.lang.python
865 879
866 880 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
867 881 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
868 882 # > <type 'dict'>
869 883 # > >>> print type(__builtins__)
870 884 # > <type 'module'>
871 885 # > Is this difference in return value intentional?
872 886
873 887 # Well, it's documented that '__builtins__' can be either a dictionary
874 888 # or a module, and it's been that way for a long time. Whether it's
875 889 # intentional (or sensible), I don't know. In any case, the idea is
876 890 # that if you need to access the built-in namespace directly, you
877 891 # should start with "import __builtin__" (note, no 's') which will
878 892 # definitely give you a module. Yeah, it's somewhat confusing:-(.
879 893
880 894 # These routines return properly built dicts as needed by the rest of
881 895 # the code, and can also be used by extension writers to generate
882 896 # properly initialized namespaces.
883 897 user_ns, user_global_ns = self.make_user_namespaces(user_ns,
884 898 user_global_ns)
885 899
886 900 # Assign namespaces
887 901 # This is the namespace where all normal user variables live
888 902 self.user_ns = user_ns
889 903 self.user_global_ns = user_global_ns
890 904
891 905 # An auxiliary namespace that checks what parts of the user_ns were
892 906 # loaded at startup, so we can list later only variables defined in
893 907 # actual interactive use. Since it is always a subset of user_ns, it
894 908 # doesn't need to be separately tracked in the ns_table.
895 909 self.user_ns_hidden = {}
896 910
897 911 # A namespace to keep track of internal data structures to prevent
898 912 # them from cluttering user-visible stuff. Will be updated later
899 913 self.internal_ns = {}
900 914
901 915 # Now that FakeModule produces a real module, we've run into a nasty
902 916 # problem: after script execution (via %run), the module where the user
903 917 # code ran is deleted. Now that this object is a true module (needed
904 918 # so docetst and other tools work correctly), the Python module
905 919 # teardown mechanism runs over it, and sets to None every variable
906 920 # present in that module. Top-level references to objects from the
907 921 # script survive, because the user_ns is updated with them. However,
908 922 # calling functions defined in the script that use other things from
909 923 # the script will fail, because the function's closure had references
910 924 # to the original objects, which are now all None. So we must protect
911 925 # these modules from deletion by keeping a cache.
912 926 #
913 927 # To avoid keeping stale modules around (we only need the one from the
914 928 # last run), we use a dict keyed with the full path to the script, so
915 929 # only the last version of the module is held in the cache. Note,
916 930 # however, that we must cache the module *namespace contents* (their
917 931 # __dict__). Because if we try to cache the actual modules, old ones
918 932 # (uncached) could be destroyed while still holding references (such as
919 933 # those held by GUI objects that tend to be long-lived)>
920 934 #
921 935 # The %reset command will flush this cache. See the cache_main_mod()
922 936 # and clear_main_mod_cache() methods for details on use.
923 937
924 938 # This is the cache used for 'main' namespaces
925 939 self._main_ns_cache = {}
926 940 # And this is the single instance of FakeModule whose __dict__ we keep
927 941 # copying and clearing for reuse on each %run
928 942 self._user_main_module = FakeModule()
929 943
930 944 # A table holding all the namespaces IPython deals with, so that
931 945 # introspection facilities can search easily.
932 946 self.ns_table = {'user':user_ns,
933 947 'user_global':user_global_ns,
934 948 'internal':self.internal_ns,
935 949 'builtin':builtin_mod.__dict__
936 950 }
937 951
938 952 # Similarly, track all namespaces where references can be held and that
939 953 # we can safely clear (so it can NOT include builtin). This one can be
940 954 # a simple list. Note that the main execution namespaces, user_ns and
941 955 # user_global_ns, can NOT be listed here, as clearing them blindly
942 956 # causes errors in object __del__ methods. Instead, the reset() method
943 957 # clears them manually and carefully.
944 958 self.ns_refs_table = [ self.user_ns_hidden,
945 959 self.internal_ns, self._main_ns_cache ]
946 960
947 961 def make_user_namespaces(self, user_ns=None, user_global_ns=None):
948 962 """Return a valid local and global user interactive namespaces.
949 963
950 964 This builds a dict with the minimal information needed to operate as a
951 965 valid IPython user namespace, which you can pass to the various
952 966 embedding classes in ipython. The default implementation returns the
953 967 same dict for both the locals and the globals to allow functions to
954 968 refer to variables in the namespace. Customized implementations can
955 969 return different dicts. The locals dictionary can actually be anything
956 970 following the basic mapping protocol of a dict, but the globals dict
957 971 must be a true dict, not even a subclass. It is recommended that any
958 972 custom object for the locals namespace synchronize with the globals
959 973 dict somehow.
960 974
961 975 Raises TypeError if the provided globals namespace is not a true dict.
962 976
963 977 Parameters
964 978 ----------
965 979 user_ns : dict-like, optional
966 980 The current user namespace. The items in this namespace should
967 981 be included in the output. If None, an appropriate blank
968 982 namespace should be created.
969 983 user_global_ns : dict, optional
970 984 The current user global namespace. The items in this namespace
971 985 should be included in the output. If None, an appropriate
972 986 blank namespace should be created.
973 987
974 988 Returns
975 989 -------
976 990 A pair of dictionary-like object to be used as the local namespace
977 991 of the interpreter and a dict to be used as the global namespace.
978 992 """
979 993
980 994
981 995 # We must ensure that __builtin__ (without the final 's') is always
982 996 # available and pointing to the __builtin__ *module*. For more details:
983 997 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
984 998
985 999 if user_ns is None:
986 1000 # Set __name__ to __main__ to better match the behavior of the
987 1001 # normal interpreter.
988 1002 user_ns = {'__name__' :'__main__',
989 1003 py3compat.builtin_mod_name: builtin_mod,
990 1004 '__builtins__' : builtin_mod,
991 1005 }
992 1006 else:
993 1007 user_ns.setdefault('__name__','__main__')
994 1008 user_ns.setdefault(py3compat.builtin_mod_name,builtin_mod)
995 1009 user_ns.setdefault('__builtins__',builtin_mod)
996 1010
997 1011 if user_global_ns is None:
998 1012 user_global_ns = user_ns
999 1013 if type(user_global_ns) is not dict:
1000 1014 raise TypeError("user_global_ns must be a true dict; got %r"
1001 1015 % type(user_global_ns))
1002 1016
1003 1017 return user_ns, user_global_ns
1004 1018
1005 1019 def init_sys_modules(self):
1006 1020 # We need to insert into sys.modules something that looks like a
1007 1021 # module but which accesses the IPython namespace, for shelve and
1008 1022 # pickle to work interactively. Normally they rely on getting
1009 1023 # everything out of __main__, but for embedding purposes each IPython
1010 1024 # instance has its own private namespace, so we can't go shoving
1011 1025 # everything into __main__.
1012 1026
1013 1027 # note, however, that we should only do this for non-embedded
1014 1028 # ipythons, which really mimic the __main__.__dict__ with their own
1015 1029 # namespace. Embedded instances, on the other hand, should not do
1016 1030 # this because they need to manage the user local/global namespaces
1017 1031 # only, but they live within a 'normal' __main__ (meaning, they
1018 1032 # shouldn't overtake the execution environment of the script they're
1019 1033 # embedded in).
1020 1034
1021 1035 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1022 1036
1023 1037 try:
1024 1038 main_name = self.user_ns['__name__']
1025 1039 except KeyError:
1026 1040 raise KeyError('user_ns dictionary MUST have a "__name__" key')
1027 1041 else:
1028 1042 sys.modules[main_name] = FakeModule(self.user_ns)
1029 1043
1030 1044 def init_user_ns(self):
1031 1045 """Initialize all user-visible namespaces to their minimum defaults.
1032 1046
1033 1047 Certain history lists are also initialized here, as they effectively
1034 1048 act as user namespaces.
1035 1049
1036 1050 Notes
1037 1051 -----
1038 1052 All data structures here are only filled in, they are NOT reset by this
1039 1053 method. If they were not empty before, data will simply be added to
1040 1054 therm.
1041 1055 """
1042 1056 # This function works in two parts: first we put a few things in
1043 1057 # user_ns, and we sync that contents into user_ns_hidden so that these
1044 1058 # initial variables aren't shown by %who. After the sync, we add the
1045 1059 # rest of what we *do* want the user to see with %who even on a new
1046 1060 # session (probably nothing, so theye really only see their own stuff)
1047 1061
1048 1062 # The user dict must *always* have a __builtin__ reference to the
1049 1063 # Python standard __builtin__ namespace, which must be imported.
1050 1064 # This is so that certain operations in prompt evaluation can be
1051 1065 # reliably executed with builtins. Note that we can NOT use
1052 1066 # __builtins__ (note the 's'), because that can either be a dict or a
1053 1067 # module, and can even mutate at runtime, depending on the context
1054 1068 # (Python makes no guarantees on it). In contrast, __builtin__ is
1055 1069 # always a module object, though it must be explicitly imported.
1056 1070
1057 1071 # For more details:
1058 1072 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1059 1073 ns = dict(__builtin__ = builtin_mod)
1060 1074
1061 1075 # Put 'help' in the user namespace
1062 1076 try:
1063 1077 from site import _Helper
1064 1078 ns['help'] = _Helper()
1065 1079 except ImportError:
1066 1080 warn('help() not available - check site.py')
1067 1081
1068 1082 # make global variables for user access to the histories
1069 1083 ns['_ih'] = self.history_manager.input_hist_parsed
1070 1084 ns['_oh'] = self.history_manager.output_hist
1071 1085 ns['_dh'] = self.history_manager.dir_hist
1072 1086
1073 1087 ns['_sh'] = shadowns
1074 1088
1075 1089 # user aliases to input and output histories. These shouldn't show up
1076 1090 # in %who, as they can have very large reprs.
1077 1091 ns['In'] = self.history_manager.input_hist_parsed
1078 1092 ns['Out'] = self.history_manager.output_hist
1079 1093
1080 1094 # Store myself as the public api!!!
1081 1095 ns['get_ipython'] = self.get_ipython
1082 1096
1083 1097 ns['exit'] = self.exiter
1084 1098 ns['quit'] = self.exiter
1085 1099
1086 1100 # Sync what we've added so far to user_ns_hidden so these aren't seen
1087 1101 # by %who
1088 1102 self.user_ns_hidden.update(ns)
1089 1103
1090 1104 # Anything put into ns now would show up in %who. Think twice before
1091 1105 # putting anything here, as we really want %who to show the user their
1092 1106 # stuff, not our variables.
1093 1107
1094 1108 # Finally, update the real user's namespace
1095 1109 self.user_ns.update(ns)
1096 1110
1097 1111 def reset(self, new_session=True):
1098 1112 """Clear all internal namespaces, and attempt to release references to
1099 1113 user objects.
1100 1114
1101 1115 If new_session is True, a new history session will be opened.
1102 1116 """
1103 1117 # Clear histories
1104 1118 self.history_manager.reset(new_session)
1105 1119 # Reset counter used to index all histories
1106 1120 if new_session:
1107 1121 self.execution_count = 1
1108 1122
1109 1123 # Flush cached output items
1110 1124 if self.displayhook.do_full_cache:
1111 1125 self.displayhook.flush()
1112 1126
1113 1127 # Restore the user namespaces to minimal usability
1114 1128 for ns in self.ns_refs_table:
1115 1129 ns.clear()
1116 1130
1117 1131 # The main execution namespaces must be cleared very carefully,
1118 1132 # skipping the deletion of the builtin-related keys, because doing so
1119 1133 # would cause errors in many object's __del__ methods.
1120 1134 for ns in [self.user_ns, self.user_global_ns]:
1121 1135 drop_keys = set(ns.keys())
1122 1136 drop_keys.discard('__builtin__')
1123 1137 drop_keys.discard('__builtins__')
1124 1138 for k in drop_keys:
1125 1139 del ns[k]
1126 1140
1127 1141 # Restore the user namespaces to minimal usability
1128 1142 self.init_user_ns()
1129 1143
1130 1144 # Restore the default and user aliases
1131 1145 self.alias_manager.clear_aliases()
1132 1146 self.alias_manager.init_aliases()
1133 1147
1134 1148 # Flush the private list of module references kept for script
1135 1149 # execution protection
1136 1150 self.clear_main_mod_cache()
1137 1151
1138 1152 # Clear out the namespace from the last %run
1139 1153 self.new_main_mod()
1140 1154
1141 1155 def del_var(self, varname, by_name=False):
1142 1156 """Delete a variable from the various namespaces, so that, as
1143 1157 far as possible, we're not keeping any hidden references to it.
1144 1158
1145 1159 Parameters
1146 1160 ----------
1147 1161 varname : str
1148 1162 The name of the variable to delete.
1149 1163 by_name : bool
1150 1164 If True, delete variables with the given name in each
1151 1165 namespace. If False (default), find the variable in the user
1152 1166 namespace, and delete references to it.
1153 1167 """
1154 1168 if varname in ('__builtin__', '__builtins__'):
1155 1169 raise ValueError("Refusing to delete %s" % varname)
1156 1170 ns_refs = self.ns_refs_table + [self.user_ns,
1157 1171 self.user_global_ns, self._user_main_module.__dict__] +\
1158 1172 self._main_ns_cache.values()
1159 1173
1160 1174 if by_name: # Delete by name
1161 1175 for ns in ns_refs:
1162 1176 try:
1163 1177 del ns[varname]
1164 1178 except KeyError:
1165 1179 pass
1166 1180 else: # Delete by object
1167 1181 try:
1168 1182 obj = self.user_ns[varname]
1169 1183 except KeyError:
1170 1184 raise NameError("name '%s' is not defined" % varname)
1171 1185 # Also check in output history
1172 1186 ns_refs.append(self.history_manager.output_hist)
1173 1187 for ns in ns_refs:
1174 1188 to_delete = [n for n, o in ns.iteritems() if o is obj]
1175 1189 for name in to_delete:
1176 1190 del ns[name]
1177 1191
1178 1192 # displayhook keeps extra references, but not in a dictionary
1179 1193 for name in ('_', '__', '___'):
1180 1194 if getattr(self.displayhook, name) is obj:
1181 1195 setattr(self.displayhook, name, None)
1182 1196
1183 1197 def reset_selective(self, regex=None):
1184 1198 """Clear selective variables from internal namespaces based on a
1185 1199 specified regular expression.
1186 1200
1187 1201 Parameters
1188 1202 ----------
1189 1203 regex : string or compiled pattern, optional
1190 1204 A regular expression pattern that will be used in searching
1191 1205 variable names in the users namespaces.
1192 1206 """
1193 1207 if regex is not None:
1194 1208 try:
1195 1209 m = re.compile(regex)
1196 1210 except TypeError:
1197 1211 raise TypeError('regex must be a string or compiled pattern')
1198 1212 # Search for keys in each namespace that match the given regex
1199 1213 # If a match is found, delete the key/value pair.
1200 1214 for ns in self.ns_refs_table:
1201 1215 for var in ns:
1202 1216 if m.search(var):
1203 1217 del ns[var]
1204 1218
1205 1219 def push(self, variables, interactive=True):
1206 1220 """Inject a group of variables into the IPython user namespace.
1207 1221
1208 1222 Parameters
1209 1223 ----------
1210 1224 variables : dict, str or list/tuple of str
1211 1225 The variables to inject into the user's namespace. If a dict, a
1212 1226 simple update is done. If a str, the string is assumed to have
1213 1227 variable names separated by spaces. A list/tuple of str can also
1214 1228 be used to give the variable names. If just the variable names are
1215 1229 give (list/tuple/str) then the variable values looked up in the
1216 1230 callers frame.
1217 1231 interactive : bool
1218 1232 If True (default), the variables will be listed with the ``who``
1219 1233 magic.
1220 1234 """
1221 1235 vdict = None
1222 1236
1223 1237 # We need a dict of name/value pairs to do namespace updates.
1224 1238 if isinstance(variables, dict):
1225 1239 vdict = variables
1226 1240 elif isinstance(variables, (basestring, list, tuple)):
1227 1241 if isinstance(variables, basestring):
1228 1242 vlist = variables.split()
1229 1243 else:
1230 1244 vlist = variables
1231 1245 vdict = {}
1232 1246 cf = sys._getframe(1)
1233 1247 for name in vlist:
1234 1248 try:
1235 1249 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1236 1250 except:
1237 1251 print ('Could not get variable %s from %s' %
1238 1252 (name,cf.f_code.co_name))
1239 1253 else:
1240 1254 raise ValueError('variables must be a dict/str/list/tuple')
1241 1255
1242 1256 # Propagate variables to user namespace
1243 1257 self.user_ns.update(vdict)
1244 1258
1245 1259 # And configure interactive visibility
1246 1260 config_ns = self.user_ns_hidden
1247 1261 if interactive:
1248 1262 for name, val in vdict.iteritems():
1249 1263 config_ns.pop(name, None)
1250 1264 else:
1251 1265 for name,val in vdict.iteritems():
1252 1266 config_ns[name] = val
1253 1267
1254 1268 #-------------------------------------------------------------------------
1255 1269 # Things related to object introspection
1256 1270 #-------------------------------------------------------------------------
1257 1271
1258 1272 def _ofind(self, oname, namespaces=None):
1259 1273 """Find an object in the available namespaces.
1260 1274
1261 1275 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1262 1276
1263 1277 Has special code to detect magic functions.
1264 1278 """
1265 1279 oname = oname.strip()
1266 1280 #print '1- oname: <%r>' % oname # dbg
1267 1281 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1268 1282 return dict(found=False)
1269 1283
1270 1284 alias_ns = None
1271 1285 if namespaces is None:
1272 1286 # Namespaces to search in:
1273 1287 # Put them in a list. The order is important so that we
1274 1288 # find things in the same order that Python finds them.
1275 1289 namespaces = [ ('Interactive', self.user_ns),
1276 1290 ('IPython internal', self.internal_ns),
1277 1291 ('Python builtin', builtin_mod.__dict__),
1278 1292 ('Alias', self.alias_manager.alias_table),
1279 1293 ]
1280 1294 alias_ns = self.alias_manager.alias_table
1281 1295
1282 1296 # initialize results to 'null'
1283 1297 found = False; obj = None; ospace = None; ds = None;
1284 1298 ismagic = False; isalias = False; parent = None
1285 1299
1286 1300 # We need to special-case 'print', which as of python2.6 registers as a
1287 1301 # function but should only be treated as one if print_function was
1288 1302 # loaded with a future import. In this case, just bail.
1289 1303 if (oname == 'print' and not py3compat.PY3 and not \
1290 1304 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1291 1305 return {'found':found, 'obj':obj, 'namespace':ospace,
1292 1306 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1293 1307
1294 1308 # Look for the given name by splitting it in parts. If the head is
1295 1309 # found, then we look for all the remaining parts as members, and only
1296 1310 # declare success if we can find them all.
1297 1311 oname_parts = oname.split('.')
1298 1312 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1299 1313 for nsname,ns in namespaces:
1300 1314 try:
1301 1315 obj = ns[oname_head]
1302 1316 except KeyError:
1303 1317 continue
1304 1318 else:
1305 1319 #print 'oname_rest:', oname_rest # dbg
1306 1320 for part in oname_rest:
1307 1321 try:
1308 1322 parent = obj
1309 1323 obj = getattr(obj,part)
1310 1324 except:
1311 1325 # Blanket except b/c some badly implemented objects
1312 1326 # allow __getattr__ to raise exceptions other than
1313 1327 # AttributeError, which then crashes IPython.
1314 1328 break
1315 1329 else:
1316 1330 # If we finish the for loop (no break), we got all members
1317 1331 found = True
1318 1332 ospace = nsname
1319 1333 if ns == alias_ns:
1320 1334 isalias = True
1321 1335 break # namespace loop
1322 1336
1323 1337 # Try to see if it's magic
1324 1338 if not found:
1325 1339 if oname.startswith(ESC_MAGIC):
1326 1340 oname = oname[1:]
1327 1341 obj = getattr(self,'magic_'+oname,None)
1328 1342 if obj is not None:
1329 1343 found = True
1330 1344 ospace = 'IPython internal'
1331 1345 ismagic = True
1332 1346
1333 1347 # Last try: special-case some literals like '', [], {}, etc:
1334 1348 if not found and oname_head in ["''",'""','[]','{}','()']:
1335 1349 obj = eval(oname_head)
1336 1350 found = True
1337 1351 ospace = 'Interactive'
1338 1352
1339 1353 return {'found':found, 'obj':obj, 'namespace':ospace,
1340 1354 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1341 1355
1342 1356 def _ofind_property(self, oname, info):
1343 1357 """Second part of object finding, to look for property details."""
1344 1358 if info.found:
1345 1359 # Get the docstring of the class property if it exists.
1346 1360 path = oname.split('.')
1347 1361 root = '.'.join(path[:-1])
1348 1362 if info.parent is not None:
1349 1363 try:
1350 1364 target = getattr(info.parent, '__class__')
1351 1365 # The object belongs to a class instance.
1352 1366 try:
1353 1367 target = getattr(target, path[-1])
1354 1368 # The class defines the object.
1355 1369 if isinstance(target, property):
1356 1370 oname = root + '.__class__.' + path[-1]
1357 1371 info = Struct(self._ofind(oname))
1358 1372 except AttributeError: pass
1359 1373 except AttributeError: pass
1360 1374
1361 1375 # We return either the new info or the unmodified input if the object
1362 1376 # hadn't been found
1363 1377 return info
1364 1378
1365 1379 def _object_find(self, oname, namespaces=None):
1366 1380 """Find an object and return a struct with info about it."""
1367 1381 inf = Struct(self._ofind(oname, namespaces))
1368 1382 return Struct(self._ofind_property(oname, inf))
1369 1383
1370 1384 def _inspect(self, meth, oname, namespaces=None, **kw):
1371 1385 """Generic interface to the inspector system.
1372 1386
1373 1387 This function is meant to be called by pdef, pdoc & friends."""
1374 1388 info = self._object_find(oname)
1375 1389 if info.found:
1376 1390 pmethod = getattr(self.inspector, meth)
1377 1391 formatter = format_screen if info.ismagic else None
1378 1392 if meth == 'pdoc':
1379 1393 pmethod(info.obj, oname, formatter)
1380 1394 elif meth == 'pinfo':
1381 1395 pmethod(info.obj, oname, formatter, info, **kw)
1382 1396 else:
1383 1397 pmethod(info.obj, oname)
1384 1398 else:
1385 1399 print 'Object `%s` not found.' % oname
1386 1400 return 'not found' # so callers can take other action
1387 1401
1388 1402 def object_inspect(self, oname):
1389 1403 with self.builtin_trap:
1390 1404 info = self._object_find(oname)
1391 1405 if info.found:
1392 1406 return self.inspector.info(info.obj, oname, info=info)
1393 1407 else:
1394 1408 return oinspect.object_info(name=oname, found=False)
1395 1409
1396 1410 #-------------------------------------------------------------------------
1397 1411 # Things related to history management
1398 1412 #-------------------------------------------------------------------------
1399 1413
1400 1414 def init_history(self):
1401 1415 """Sets up the command history, and starts regular autosaves."""
1402 1416 self.history_manager = HistoryManager(shell=self, config=self.config)
1403 1417
1404 1418 #-------------------------------------------------------------------------
1405 1419 # Things related to exception handling and tracebacks (not debugging)
1406 1420 #-------------------------------------------------------------------------
1407 1421
1408 1422 def init_traceback_handlers(self, custom_exceptions):
1409 1423 # Syntax error handler.
1410 1424 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1411 1425
1412 1426 # The interactive one is initialized with an offset, meaning we always
1413 1427 # want to remove the topmost item in the traceback, which is our own
1414 1428 # internal code. Valid modes: ['Plain','Context','Verbose']
1415 1429 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1416 1430 color_scheme='NoColor',
1417 1431 tb_offset = 1,
1418 1432 check_cache=self.compile.check_cache)
1419 1433
1420 1434 # The instance will store a pointer to the system-wide exception hook,
1421 1435 # so that runtime code (such as magics) can access it. This is because
1422 1436 # during the read-eval loop, it may get temporarily overwritten.
1423 1437 self.sys_excepthook = sys.excepthook
1424 1438
1425 1439 # and add any custom exception handlers the user may have specified
1426 1440 self.set_custom_exc(*custom_exceptions)
1427 1441
1428 1442 # Set the exception mode
1429 1443 self.InteractiveTB.set_mode(mode=self.xmode)
1430 1444
1431 1445 def set_custom_exc(self, exc_tuple, handler):
1432 1446 """set_custom_exc(exc_tuple,handler)
1433 1447
1434 1448 Set a custom exception handler, which will be called if any of the
1435 1449 exceptions in exc_tuple occur in the mainloop (specifically, in the
1436 1450 run_code() method.
1437 1451
1438 1452 Inputs:
1439 1453
1440 1454 - exc_tuple: a *tuple* of valid exceptions to call the defined
1441 1455 handler for. It is very important that you use a tuple, and NOT A
1442 1456 LIST here, because of the way Python's except statement works. If
1443 1457 you only want to trap a single exception, use a singleton tuple:
1444 1458
1445 1459 exc_tuple == (MyCustomException,)
1446 1460
1447 1461 - handler: this must be defined as a function with the following
1448 1462 basic interface::
1449 1463
1450 1464 def my_handler(self, etype, value, tb, tb_offset=None)
1451 1465 ...
1452 1466 # The return value must be
1453 1467 return structured_traceback
1454 1468
1455 1469 This will be made into an instance method (via types.MethodType)
1456 1470 of IPython itself, and it will be called if any of the exceptions
1457 1471 listed in the exc_tuple are caught. If the handler is None, an
1458 1472 internal basic one is used, which just prints basic info.
1459 1473
1460 1474 WARNING: by putting in your own exception handler into IPython's main
1461 1475 execution loop, you run a very good chance of nasty crashes. This
1462 1476 facility should only be used if you really know what you are doing."""
1463 1477
1464 1478 assert type(exc_tuple)==type(()) , \
1465 1479 "The custom exceptions must be given AS A TUPLE."
1466 1480
1467 1481 def dummy_handler(self,etype,value,tb):
1468 1482 print '*** Simple custom exception handler ***'
1469 1483 print 'Exception type :',etype
1470 1484 print 'Exception value:',value
1471 1485 print 'Traceback :',tb
1472 1486 #print 'Source code :','\n'.join(self.buffer)
1473 1487
1474 1488 if handler is None: handler = dummy_handler
1475 1489
1476 1490 self.CustomTB = types.MethodType(handler,self)
1477 1491 self.custom_exceptions = exc_tuple
1478 1492
1479 1493 def excepthook(self, etype, value, tb):
1480 1494 """One more defense for GUI apps that call sys.excepthook.
1481 1495
1482 1496 GUI frameworks like wxPython trap exceptions and call
1483 1497 sys.excepthook themselves. I guess this is a feature that
1484 1498 enables them to keep running after exceptions that would
1485 1499 otherwise kill their mainloop. This is a bother for IPython
1486 1500 which excepts to catch all of the program exceptions with a try:
1487 1501 except: statement.
1488 1502
1489 1503 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1490 1504 any app directly invokes sys.excepthook, it will look to the user like
1491 1505 IPython crashed. In order to work around this, we can disable the
1492 1506 CrashHandler and replace it with this excepthook instead, which prints a
1493 1507 regular traceback using our InteractiveTB. In this fashion, apps which
1494 1508 call sys.excepthook will generate a regular-looking exception from
1495 1509 IPython, and the CrashHandler will only be triggered by real IPython
1496 1510 crashes.
1497 1511
1498 1512 This hook should be used sparingly, only in places which are not likely
1499 1513 to be true IPython errors.
1500 1514 """
1501 1515 self.showtraceback((etype,value,tb),tb_offset=0)
1502 1516
1503 1517 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1504 1518 exception_only=False):
1505 1519 """Display the exception that just occurred.
1506 1520
1507 1521 If nothing is known about the exception, this is the method which
1508 1522 should be used throughout the code for presenting user tracebacks,
1509 1523 rather than directly invoking the InteractiveTB object.
1510 1524
1511 1525 A specific showsyntaxerror() also exists, but this method can take
1512 1526 care of calling it if needed, so unless you are explicitly catching a
1513 1527 SyntaxError exception, don't try to analyze the stack manually and
1514 1528 simply call this method."""
1515 1529
1516 1530 try:
1517 1531 if exc_tuple is None:
1518 1532 etype, value, tb = sys.exc_info()
1519 1533 else:
1520 1534 etype, value, tb = exc_tuple
1521 1535
1522 1536 if etype is None:
1523 1537 if hasattr(sys, 'last_type'):
1524 1538 etype, value, tb = sys.last_type, sys.last_value, \
1525 1539 sys.last_traceback
1526 1540 else:
1527 1541 self.write_err('No traceback available to show.\n')
1528 1542 return
1529 1543
1530 1544 if etype is SyntaxError:
1531 1545 # Though this won't be called by syntax errors in the input
1532 1546 # line, there may be SyntaxError cases with imported code.
1533 1547 self.showsyntaxerror(filename)
1534 1548 elif etype is UsageError:
1535 1549 print "UsageError:", value
1536 1550 else:
1537 1551 # WARNING: these variables are somewhat deprecated and not
1538 1552 # necessarily safe to use in a threaded environment, but tools
1539 1553 # like pdb depend on their existence, so let's set them. If we
1540 1554 # find problems in the field, we'll need to revisit their use.
1541 1555 sys.last_type = etype
1542 1556 sys.last_value = value
1543 1557 sys.last_traceback = tb
1544 1558 if etype in self.custom_exceptions:
1545 1559 # FIXME: Old custom traceback objects may just return a
1546 1560 # string, in that case we just put it into a list
1547 1561 stb = self.CustomTB(etype, value, tb, tb_offset)
1548 1562 if isinstance(ctb, basestring):
1549 1563 stb = [stb]
1550 1564 else:
1551 1565 if exception_only:
1552 1566 stb = ['An exception has occurred, use %tb to see '
1553 1567 'the full traceback.\n']
1554 1568 stb.extend(self.InteractiveTB.get_exception_only(etype,
1555 1569 value))
1556 1570 else:
1557 1571 stb = self.InteractiveTB.structured_traceback(etype,
1558 1572 value, tb, tb_offset=tb_offset)
1559 1573
1560 1574 if self.call_pdb:
1561 1575 # drop into debugger
1562 1576 self.debugger(force=True)
1563 1577
1564 1578 # Actually show the traceback
1565 1579 self._showtraceback(etype, value, stb)
1566 1580
1567 1581 except KeyboardInterrupt:
1568 1582 self.write_err("\nKeyboardInterrupt\n")
1569 1583
1570 1584 def _showtraceback(self, etype, evalue, stb):
1571 1585 """Actually show a traceback.
1572 1586
1573 1587 Subclasses may override this method to put the traceback on a different
1574 1588 place, like a side channel.
1575 1589 """
1576 1590 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1577 1591
1578 1592 def showsyntaxerror(self, filename=None):
1579 1593 """Display the syntax error that just occurred.
1580 1594
1581 1595 This doesn't display a stack trace because there isn't one.
1582 1596
1583 1597 If a filename is given, it is stuffed in the exception instead
1584 1598 of what was there before (because Python's parser always uses
1585 1599 "<string>" when reading from a string).
1586 1600 """
1587 1601 etype, value, last_traceback = sys.exc_info()
1588 1602
1589 1603 # See note about these variables in showtraceback() above
1590 1604 sys.last_type = etype
1591 1605 sys.last_value = value
1592 1606 sys.last_traceback = last_traceback
1593 1607
1594 1608 if filename and etype is SyntaxError:
1595 1609 # Work hard to stuff the correct filename in the exception
1596 1610 try:
1597 1611 msg, (dummy_filename, lineno, offset, line) = value
1598 1612 except:
1599 1613 # Not the format we expect; leave it alone
1600 1614 pass
1601 1615 else:
1602 1616 # Stuff in the right filename
1603 1617 try:
1604 1618 # Assume SyntaxError is a class exception
1605 1619 value = SyntaxError(msg, (filename, lineno, offset, line))
1606 1620 except:
1607 1621 # If that failed, assume SyntaxError is a string
1608 1622 value = msg, (filename, lineno, offset, line)
1609 1623 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1610 1624 self._showtraceback(etype, value, stb)
1611 1625
1612 1626 # This is overridden in TerminalInteractiveShell to show a message about
1613 1627 # the %paste magic.
1614 1628 def showindentationerror(self):
1615 1629 """Called by run_cell when there's an IndentationError in code entered
1616 1630 at the prompt.
1617 1631
1618 1632 This is overridden in TerminalInteractiveShell to show a message about
1619 1633 the %paste magic."""
1620 1634 self.showsyntaxerror()
1621 1635
1622 1636 #-------------------------------------------------------------------------
1623 1637 # Things related to readline
1624 1638 #-------------------------------------------------------------------------
1625 1639
1626 1640 def init_readline(self):
1627 1641 """Command history completion/saving/reloading."""
1628 1642
1629 1643 if self.readline_use:
1630 1644 import IPython.utils.rlineimpl as readline
1631 1645
1632 1646 self.rl_next_input = None
1633 1647 self.rl_do_indent = False
1634 1648
1635 1649 if not self.readline_use or not readline.have_readline:
1636 1650 self.has_readline = False
1637 1651 self.readline = None
1638 1652 # Set a number of methods that depend on readline to be no-op
1653 self.readline_no_record = no_op_context
1639 1654 self.set_readline_completer = no_op
1640 1655 self.set_custom_completer = no_op
1641 1656 self.set_completer_frame = no_op
1642 warn('Readline services not available or not loaded.')
1657 if self.readline_use:
1658 warn('Readline services not available or not loaded.')
1643 1659 else:
1644 1660 self.has_readline = True
1645 1661 self.readline = readline
1646 1662 sys.modules['readline'] = readline
1647 1663
1648 1664 # Platform-specific configuration
1649 1665 if os.name == 'nt':
1650 1666 # FIXME - check with Frederick to see if we can harmonize
1651 1667 # naming conventions with pyreadline to avoid this
1652 1668 # platform-dependent check
1653 1669 self.readline_startup_hook = readline.set_pre_input_hook
1654 1670 else:
1655 1671 self.readline_startup_hook = readline.set_startup_hook
1656 1672
1657 1673 # Load user's initrc file (readline config)
1658 1674 # Or if libedit is used, load editrc.
1659 1675 inputrc_name = os.environ.get('INPUTRC')
1660 1676 if inputrc_name is None:
1661 1677 home_dir = get_home_dir()
1662 1678 if home_dir is not None:
1663 1679 inputrc_name = '.inputrc'
1664 1680 if readline.uses_libedit:
1665 1681 inputrc_name = '.editrc'
1666 1682 inputrc_name = os.path.join(home_dir, inputrc_name)
1667 1683 if os.path.isfile(inputrc_name):
1668 1684 try:
1669 1685 readline.read_init_file(inputrc_name)
1670 1686 except:
1671 1687 warn('Problems reading readline initialization file <%s>'
1672 1688 % inputrc_name)
1673 1689
1674 1690 # Configure readline according to user's prefs
1675 1691 # This is only done if GNU readline is being used. If libedit
1676 1692 # is being used (as on Leopard) the readline config is
1677 1693 # not run as the syntax for libedit is different.
1678 1694 if not readline.uses_libedit:
1679 1695 for rlcommand in self.readline_parse_and_bind:
1680 1696 #print "loading rl:",rlcommand # dbg
1681 1697 readline.parse_and_bind(rlcommand)
1682 1698
1683 1699 # Remove some chars from the delimiters list. If we encounter
1684 1700 # unicode chars, discard them.
1685 1701 delims = readline.get_completer_delims()
1686 1702 if not py3compat.PY3:
1687 1703 delims = delims.encode("ascii", "ignore")
1688 1704 for d in self.readline_remove_delims:
1689 1705 delims = delims.replace(d, "")
1690 1706 delims = delims.replace(ESC_MAGIC, '')
1691 1707 readline.set_completer_delims(delims)
1692 1708 # otherwise we end up with a monster history after a while:
1693 1709 readline.set_history_length(self.history_length)
1694 1710
1695 1711 self.refill_readline_hist()
1696 1712 self.readline_no_record = ReadlineNoRecord(self)
1697 1713
1698 1714 # Configure auto-indent for all platforms
1699 1715 self.set_autoindent(self.autoindent)
1700 1716
1701 1717 def refill_readline_hist(self):
1702 1718 # Load the last 1000 lines from history
1703 1719 self.readline.clear_history()
1704 1720 stdin_encoding = sys.stdin.encoding or "utf-8"
1705 1721 for _, _, cell in self.history_manager.get_tail(1000,
1706 1722 include_latest=True):
1707 1723 if cell.strip(): # Ignore blank lines
1708 1724 for line in cell.splitlines():
1709 1725 self.readline.add_history(py3compat.unicode_to_str(line,
1710 1726 stdin_encoding))
1711 1727
1712 1728 def set_next_input(self, s):
1713 1729 """ Sets the 'default' input string for the next command line.
1714 1730
1715 1731 Requires readline.
1716 1732
1717 1733 Example:
1718 1734
1719 1735 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1720 1736 [D:\ipython]|2> Hello Word_ # cursor is here
1721 1737 """
1722 1738 if isinstance(s, unicode):
1723 1739 s = s.encode(self.stdin_encoding, 'replace')
1724 1740 self.rl_next_input = s
1725 1741
1726 1742 # Maybe move this to the terminal subclass?
1727 1743 def pre_readline(self):
1728 1744 """readline hook to be used at the start of each line.
1729 1745
1730 1746 Currently it handles auto-indent only."""
1731 1747
1732 1748 if self.rl_do_indent:
1733 1749 self.readline.insert_text(self._indent_current_str())
1734 1750 if self.rl_next_input is not None:
1735 1751 self.readline.insert_text(self.rl_next_input)
1736 1752 self.rl_next_input = None
1737 1753
1738 1754 def _indent_current_str(self):
1739 1755 """return the current level of indentation as a string"""
1740 1756 return self.input_splitter.indent_spaces * ' '
1741 1757
1742 1758 #-------------------------------------------------------------------------
1743 1759 # Things related to text completion
1744 1760 #-------------------------------------------------------------------------
1745 1761
1746 1762 def init_completer(self):
1747 1763 """Initialize the completion machinery.
1748 1764
1749 1765 This creates completion machinery that can be used by client code,
1750 1766 either interactively in-process (typically triggered by the readline
1751 1767 library), programatically (such as in test suites) or out-of-prcess
1752 1768 (typically over the network by remote frontends).
1753 1769 """
1754 1770 from IPython.core.completer import IPCompleter
1755 1771 from IPython.core.completerlib import (module_completer,
1756 1772 magic_run_completer, cd_completer)
1757 1773
1758 1774 self.Completer = IPCompleter(self,
1759 1775 self.user_ns,
1760 1776 self.user_global_ns,
1761 1777 self.readline_omit__names,
1762 1778 self.alias_manager.alias_table,
1763 1779 self.has_readline)
1764 1780
1765 1781 # Add custom completers to the basic ones built into IPCompleter
1766 1782 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1767 1783 self.strdispatchers['complete_command'] = sdisp
1768 1784 self.Completer.custom_completers = sdisp
1769 1785
1770 1786 self.set_hook('complete_command', module_completer, str_key = 'import')
1771 1787 self.set_hook('complete_command', module_completer, str_key = 'from')
1772 1788 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1773 1789 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1774 1790
1775 1791 # Only configure readline if we truly are using readline. IPython can
1776 1792 # do tab-completion over the network, in GUIs, etc, where readline
1777 1793 # itself may be absent
1778 1794 if self.has_readline:
1779 1795 self.set_readline_completer()
1780 1796
1781 1797 def complete(self, text, line=None, cursor_pos=None):
1782 1798 """Return the completed text and a list of completions.
1783 1799
1784 1800 Parameters
1785 1801 ----------
1786 1802
1787 1803 text : string
1788 1804 A string of text to be completed on. It can be given as empty and
1789 1805 instead a line/position pair are given. In this case, the
1790 1806 completer itself will split the line like readline does.
1791 1807
1792 1808 line : string, optional
1793 1809 The complete line that text is part of.
1794 1810
1795 1811 cursor_pos : int, optional
1796 1812 The position of the cursor on the input line.
1797 1813
1798 1814 Returns
1799 1815 -------
1800 1816 text : string
1801 1817 The actual text that was completed.
1802 1818
1803 1819 matches : list
1804 1820 A sorted list with all possible completions.
1805 1821
1806 1822 The optional arguments allow the completion to take more context into
1807 1823 account, and are part of the low-level completion API.
1808 1824
1809 1825 This is a wrapper around the completion mechanism, similar to what
1810 1826 readline does at the command line when the TAB key is hit. By
1811 1827 exposing it as a method, it can be used by other non-readline
1812 1828 environments (such as GUIs) for text completion.
1813 1829
1814 1830 Simple usage example:
1815 1831
1816 1832 In [1]: x = 'hello'
1817 1833
1818 1834 In [2]: _ip.complete('x.l')
1819 1835 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1820 1836 """
1821 1837
1822 1838 # Inject names into __builtin__ so we can complete on the added names.
1823 1839 with self.builtin_trap:
1824 1840 return self.Completer.complete(text, line, cursor_pos)
1825 1841
1826 1842 def set_custom_completer(self, completer, pos=0):
1827 1843 """Adds a new custom completer function.
1828 1844
1829 1845 The position argument (defaults to 0) is the index in the completers
1830 1846 list where you want the completer to be inserted."""
1831 1847
1832 1848 newcomp = types.MethodType(completer,self.Completer)
1833 1849 self.Completer.matchers.insert(pos,newcomp)
1834 1850
1835 1851 def set_readline_completer(self):
1836 1852 """Reset readline's completer to be our own."""
1837 1853 self.readline.set_completer(self.Completer.rlcomplete)
1838 1854
1839 1855 def set_completer_frame(self, frame=None):
1840 1856 """Set the frame of the completer."""
1841 1857 if frame:
1842 1858 self.Completer.namespace = frame.f_locals
1843 1859 self.Completer.global_namespace = frame.f_globals
1844 1860 else:
1845 1861 self.Completer.namespace = self.user_ns
1846 1862 self.Completer.global_namespace = self.user_global_ns
1847 1863
1848 1864 #-------------------------------------------------------------------------
1849 1865 # Things related to magics
1850 1866 #-------------------------------------------------------------------------
1851 1867
1852 1868 def init_magics(self):
1853 1869 # FIXME: Move the color initialization to the DisplayHook, which
1854 1870 # should be split into a prompt manager and displayhook. We probably
1855 1871 # even need a centralize colors management object.
1856 1872 self.magic_colors(self.colors)
1857 1873 # History was moved to a separate module
1858 1874 from . import history
1859 1875 history.init_ipython(self)
1860 1876
1861 1877 def magic(self, arg_s, next_input=None):
1862 1878 """Call a magic function by name.
1863 1879
1864 1880 Input: a string containing the name of the magic function to call and
1865 1881 any additional arguments to be passed to the magic.
1866 1882
1867 1883 magic('name -opt foo bar') is equivalent to typing at the ipython
1868 1884 prompt:
1869 1885
1870 1886 In[1]: %name -opt foo bar
1871 1887
1872 1888 To call a magic without arguments, simply use magic('name').
1873 1889
1874 1890 This provides a proper Python function to call IPython's magics in any
1875 1891 valid Python code you can type at the interpreter, including loops and
1876 1892 compound statements.
1877 1893 """
1878 1894 # Allow setting the next input - this is used if the user does `a=abs?`.
1879 1895 # We do this first so that magic functions can override it.
1880 1896 if next_input:
1881 1897 self.set_next_input(next_input)
1882 1898
1883 1899 args = arg_s.split(' ',1)
1884 1900 magic_name = args[0]
1885 1901 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
1886 1902
1887 1903 try:
1888 1904 magic_args = args[1]
1889 1905 except IndexError:
1890 1906 magic_args = ''
1891 1907 fn = getattr(self,'magic_'+magic_name,None)
1892 1908 if fn is None:
1893 1909 error("Magic function `%s` not found." % magic_name)
1894 1910 else:
1895 1911 magic_args = self.var_expand(magic_args,1)
1896 1912 # Grab local namespace if we need it:
1897 1913 if getattr(fn, "needs_local_scope", False):
1898 1914 self._magic_locals = sys._getframe(1).f_locals
1899 1915 with self.builtin_trap:
1900 1916 result = fn(magic_args)
1901 1917 # Ensure we're not keeping object references around:
1902 1918 self._magic_locals = {}
1903 1919 return result
1904 1920
1905 1921 def define_magic(self, magicname, func):
1906 1922 """Expose own function as magic function for ipython
1907 1923
1908 1924 def foo_impl(self,parameter_s=''):
1909 1925 'My very own magic!. (Use docstrings, IPython reads them).'
1910 1926 print 'Magic function. Passed parameter is between < >:'
1911 1927 print '<%s>' % parameter_s
1912 1928 print 'The self object is:',self
1913 1929
1914 1930 self.define_magic('foo',foo_impl)
1915 1931 """
1916 1932 im = types.MethodType(func,self)
1917 1933 old = getattr(self, "magic_" + magicname, None)
1918 1934 setattr(self, "magic_" + magicname, im)
1919 1935 return old
1920 1936
1921 1937 #-------------------------------------------------------------------------
1922 1938 # Things related to macros
1923 1939 #-------------------------------------------------------------------------
1924 1940
1925 1941 def define_macro(self, name, themacro):
1926 1942 """Define a new macro
1927 1943
1928 1944 Parameters
1929 1945 ----------
1930 1946 name : str
1931 1947 The name of the macro.
1932 1948 themacro : str or Macro
1933 1949 The action to do upon invoking the macro. If a string, a new
1934 1950 Macro object is created by passing the string to it.
1935 1951 """
1936 1952
1937 1953 from IPython.core import macro
1938 1954
1939 1955 if isinstance(themacro, basestring):
1940 1956 themacro = macro.Macro(themacro)
1941 1957 if not isinstance(themacro, macro.Macro):
1942 1958 raise ValueError('A macro must be a string or a Macro instance.')
1943 1959 self.user_ns[name] = themacro
1944 1960
1945 1961 #-------------------------------------------------------------------------
1946 1962 # Things related to the running of system commands
1947 1963 #-------------------------------------------------------------------------
1948 1964
1949 1965 def system_piped(self, cmd):
1950 1966 """Call the given cmd in a subprocess, piping stdout/err
1951 1967
1952 1968 Parameters
1953 1969 ----------
1954 1970 cmd : str
1955 1971 Command to execute (can not end in '&', as background processes are
1956 1972 not supported. Should not be a command that expects input
1957 1973 other than simple text.
1958 1974 """
1959 1975 if cmd.rstrip().endswith('&'):
1960 1976 # this is *far* from a rigorous test
1961 1977 # We do not support backgrounding processes because we either use
1962 1978 # pexpect or pipes to read from. Users can always just call
1963 1979 # os.system() or use ip.system=ip.system_raw
1964 1980 # if they really want a background process.
1965 1981 raise OSError("Background processes not supported.")
1966 1982
1967 1983 # we explicitly do NOT return the subprocess status code, because
1968 1984 # a non-None value would trigger :func:`sys.displayhook` calls.
1969 1985 # Instead, we store the exit_code in user_ns.
1970 1986 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
1971 1987
1972 1988 def system_raw(self, cmd):
1973 1989 """Call the given cmd in a subprocess using os.system
1974 1990
1975 1991 Parameters
1976 1992 ----------
1977 1993 cmd : str
1978 1994 Command to execute.
1979 1995 """
1980 1996 # We explicitly do NOT return the subprocess status code, because
1981 1997 # a non-None value would trigger :func:`sys.displayhook` calls.
1982 1998 # Instead, we store the exit_code in user_ns.
1983 1999 self.user_ns['_exit_code'] = os.system(self.var_expand(cmd, depth=2))
1984 2000
1985 2001 # use piped system by default, because it is better behaved
1986 2002 system = system_piped
1987 2003
1988 2004 def getoutput(self, cmd, split=True):
1989 2005 """Get output (possibly including stderr) from a subprocess.
1990 2006
1991 2007 Parameters
1992 2008 ----------
1993 2009 cmd : str
1994 2010 Command to execute (can not end in '&', as background processes are
1995 2011 not supported.
1996 2012 split : bool, optional
1997 2013
1998 2014 If True, split the output into an IPython SList. Otherwise, an
1999 2015 IPython LSString is returned. These are objects similar to normal
2000 2016 lists and strings, with a few convenience attributes for easier
2001 2017 manipulation of line-based output. You can use '?' on them for
2002 2018 details.
2003 2019 """
2004 2020 if cmd.rstrip().endswith('&'):
2005 2021 # this is *far* from a rigorous test
2006 2022 raise OSError("Background processes not supported.")
2007 2023 out = getoutput(self.var_expand(cmd, depth=2))
2008 2024 if split:
2009 2025 out = SList(out.splitlines())
2010 2026 else:
2011 2027 out = LSString(out)
2012 2028 return out
2013 2029
2014 2030 #-------------------------------------------------------------------------
2015 2031 # Things related to aliases
2016 2032 #-------------------------------------------------------------------------
2017 2033
2018 2034 def init_alias(self):
2019 2035 self.alias_manager = AliasManager(shell=self, config=self.config)
2020 2036 self.ns_table['alias'] = self.alias_manager.alias_table,
2021 2037
2022 2038 #-------------------------------------------------------------------------
2023 2039 # Things related to extensions and plugins
2024 2040 #-------------------------------------------------------------------------
2025 2041
2026 2042 def init_extension_manager(self):
2027 2043 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2028 2044
2029 2045 def init_plugin_manager(self):
2030 2046 self.plugin_manager = PluginManager(config=self.config)
2031 2047
2032 2048 #-------------------------------------------------------------------------
2033 2049 # Things related to payloads
2034 2050 #-------------------------------------------------------------------------
2035 2051
2036 2052 def init_payload(self):
2037 2053 self.payload_manager = PayloadManager(config=self.config)
2038 2054
2039 2055 #-------------------------------------------------------------------------
2040 2056 # Things related to the prefilter
2041 2057 #-------------------------------------------------------------------------
2042 2058
2043 2059 def init_prefilter(self):
2044 2060 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2045 2061 # Ultimately this will be refactored in the new interpreter code, but
2046 2062 # for now, we should expose the main prefilter method (there's legacy
2047 2063 # code out there that may rely on this).
2048 2064 self.prefilter = self.prefilter_manager.prefilter_lines
2049 2065
2050 2066 def auto_rewrite_input(self, cmd):
2051 2067 """Print to the screen the rewritten form of the user's command.
2052 2068
2053 2069 This shows visual feedback by rewriting input lines that cause
2054 2070 automatic calling to kick in, like::
2055 2071
2056 2072 /f x
2057 2073
2058 2074 into::
2059 2075
2060 2076 ------> f(x)
2061 2077
2062 2078 after the user's input prompt. This helps the user understand that the
2063 2079 input line was transformed automatically by IPython.
2064 2080 """
2065 2081 rw = self.displayhook.prompt1.auto_rewrite() + cmd
2066 2082
2067 2083 try:
2068 2084 # plain ascii works better w/ pyreadline, on some machines, so
2069 2085 # we use it and only print uncolored rewrite if we have unicode
2070 2086 rw = str(rw)
2071 2087 print >> io.stdout, rw
2072 2088 except UnicodeEncodeError:
2073 2089 print "------> " + cmd
2074 2090
2075 2091 #-------------------------------------------------------------------------
2076 2092 # Things related to extracting values/expressions from kernel and user_ns
2077 2093 #-------------------------------------------------------------------------
2078 2094
2079 2095 def _simple_error(self):
2080 2096 etype, value = sys.exc_info()[:2]
2081 2097 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2082 2098
2083 2099 def user_variables(self, names):
2084 2100 """Get a list of variable names from the user's namespace.
2085 2101
2086 2102 Parameters
2087 2103 ----------
2088 2104 names : list of strings
2089 2105 A list of names of variables to be read from the user namespace.
2090 2106
2091 2107 Returns
2092 2108 -------
2093 2109 A dict, keyed by the input names and with the repr() of each value.
2094 2110 """
2095 2111 out = {}
2096 2112 user_ns = self.user_ns
2097 2113 for varname in names:
2098 2114 try:
2099 2115 value = repr(user_ns[varname])
2100 2116 except:
2101 2117 value = self._simple_error()
2102 2118 out[varname] = value
2103 2119 return out
2104 2120
2105 2121 def user_expressions(self, expressions):
2106 2122 """Evaluate a dict of expressions in the user's namespace.
2107 2123
2108 2124 Parameters
2109 2125 ----------
2110 2126 expressions : dict
2111 2127 A dict with string keys and string values. The expression values
2112 2128 should be valid Python expressions, each of which will be evaluated
2113 2129 in the user namespace.
2114 2130
2115 2131 Returns
2116 2132 -------
2117 2133 A dict, keyed like the input expressions dict, with the repr() of each
2118 2134 value.
2119 2135 """
2120 2136 out = {}
2121 2137 user_ns = self.user_ns
2122 2138 global_ns = self.user_global_ns
2123 2139 for key, expr in expressions.iteritems():
2124 2140 try:
2125 2141 value = repr(eval(expr, global_ns, user_ns))
2126 2142 except:
2127 2143 value = self._simple_error()
2128 2144 out[key] = value
2129 2145 return out
2130 2146
2131 2147 #-------------------------------------------------------------------------
2132 2148 # Things related to the running of code
2133 2149 #-------------------------------------------------------------------------
2134 2150
2135 2151 def ex(self, cmd):
2136 2152 """Execute a normal python statement in user namespace."""
2137 2153 with self.builtin_trap:
2138 2154 exec cmd in self.user_global_ns, self.user_ns
2139 2155
2140 2156 def ev(self, expr):
2141 2157 """Evaluate python expression expr in user namespace.
2142 2158
2143 2159 Returns the result of evaluation
2144 2160 """
2145 2161 with self.builtin_trap:
2146 2162 return eval(expr, self.user_global_ns, self.user_ns)
2147 2163
2148 2164 def safe_execfile(self, fname, *where, **kw):
2149 2165 """A safe version of the builtin execfile().
2150 2166
2151 2167 This version will never throw an exception, but instead print
2152 2168 helpful error messages to the screen. This only works on pure
2153 2169 Python files with the .py extension.
2154 2170
2155 2171 Parameters
2156 2172 ----------
2157 2173 fname : string
2158 2174 The name of the file to be executed.
2159 2175 where : tuple
2160 2176 One or two namespaces, passed to execfile() as (globals,locals).
2161 2177 If only one is given, it is passed as both.
2162 2178 exit_ignore : bool (False)
2163 2179 If True, then silence SystemExit for non-zero status (it is always
2164 2180 silenced for zero status, as it is so common).
2165 2181 """
2166 2182 kw.setdefault('exit_ignore', False)
2167 2183
2168 2184 fname = os.path.abspath(os.path.expanduser(fname))
2169 2185
2170 2186 # Make sure we can open the file
2171 2187 try:
2172 2188 with open(fname) as thefile:
2173 2189 pass
2174 2190 except:
2175 2191 warn('Could not open file <%s> for safe execution.' % fname)
2176 2192 return
2177 2193
2178 2194 # Find things also in current directory. This is needed to mimic the
2179 2195 # behavior of running a script from the system command line, where
2180 2196 # Python inserts the script's directory into sys.path
2181 2197 dname = os.path.dirname(fname)
2182 2198
2183 2199 with prepended_to_syspath(dname):
2184 2200 try:
2185 2201 py3compat.execfile(fname,*where)
2186 2202 except SystemExit, status:
2187 2203 # If the call was made with 0 or None exit status (sys.exit(0)
2188 2204 # or sys.exit() ), don't bother showing a traceback, as both of
2189 2205 # these are considered normal by the OS:
2190 2206 # > python -c'import sys;sys.exit(0)'; echo $?
2191 2207 # 0
2192 2208 # > python -c'import sys;sys.exit()'; echo $?
2193 2209 # 0
2194 2210 # For other exit status, we show the exception unless
2195 2211 # explicitly silenced, but only in short form.
2196 2212 if status.code not in (0, None) and not kw['exit_ignore']:
2197 2213 self.showtraceback(exception_only=True)
2198 2214 except:
2199 2215 self.showtraceback()
2200 2216
2201 2217 def safe_execfile_ipy(self, fname):
2202 2218 """Like safe_execfile, but for .ipy files with IPython syntax.
2203 2219
2204 2220 Parameters
2205 2221 ----------
2206 2222 fname : str
2207 2223 The name of the file to execute. The filename must have a
2208 2224 .ipy extension.
2209 2225 """
2210 2226 fname = os.path.abspath(os.path.expanduser(fname))
2211 2227
2212 2228 # Make sure we can open the file
2213 2229 try:
2214 2230 with open(fname) as thefile:
2215 2231 pass
2216 2232 except:
2217 2233 warn('Could not open file <%s> for safe execution.' % fname)
2218 2234 return
2219 2235
2220 2236 # Find things also in current directory. This is needed to mimic the
2221 2237 # behavior of running a script from the system command line, where
2222 2238 # Python inserts the script's directory into sys.path
2223 2239 dname = os.path.dirname(fname)
2224 2240
2225 2241 with prepended_to_syspath(dname):
2226 2242 try:
2227 2243 with open(fname) as thefile:
2228 2244 # self.run_cell currently captures all exceptions
2229 2245 # raised in user code. It would be nice if there were
2230 2246 # versions of runlines, execfile that did raise, so
2231 2247 # we could catch the errors.
2232 2248 self.run_cell(thefile.read(), store_history=False)
2233 2249 except:
2234 2250 self.showtraceback()
2235 2251 warn('Unknown failure executing file: <%s>' % fname)
2236 2252
2237 2253 def run_cell(self, raw_cell, store_history=True):
2238 2254 """Run a complete IPython cell.
2239 2255
2240 2256 Parameters
2241 2257 ----------
2242 2258 raw_cell : str
2243 2259 The code (including IPython code such as %magic functions) to run.
2244 2260 store_history : bool
2245 2261 If True, the raw and translated cell will be stored in IPython's
2246 2262 history. For user code calling back into IPython's machinery, this
2247 2263 should be set to False.
2248 2264 """
2249 2265 if (not raw_cell) or raw_cell.isspace():
2250 2266 return
2251 2267
2252 2268 for line in raw_cell.splitlines():
2253 2269 self.input_splitter.push(line)
2254 2270 cell = self.input_splitter.source_reset()
2255 2271
2256 2272 with self.builtin_trap:
2257 2273 prefilter_failed = False
2258 2274 if len(cell.splitlines()) == 1:
2259 2275 try:
2260 2276 # use prefilter_lines to handle trailing newlines
2261 2277 # restore trailing newline for ast.parse
2262 2278 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2263 2279 except AliasError as e:
2264 2280 error(e)
2265 2281 prefilter_failed = True
2266 2282 except Exception:
2267 2283 # don't allow prefilter errors to crash IPython
2268 2284 self.showtraceback()
2269 2285 prefilter_failed = True
2270 2286
2271 2287 # Store raw and processed history
2272 2288 if store_history:
2273 2289 self.history_manager.store_inputs(self.execution_count,
2274 2290 cell, raw_cell)
2275 2291
2276 2292 self.logger.log(cell, raw_cell)
2277 2293
2278 2294 if not prefilter_failed:
2279 2295 # don't run if prefilter failed
2280 2296 cell_name = self.compile.cache(cell, self.execution_count)
2281 2297
2282 2298 with self.display_trap:
2283 2299 try:
2284 2300 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2285 2301 except IndentationError:
2286 2302 self.showindentationerror()
2287 2303 self.execution_count += 1
2288 2304 return None
2289 2305 except (OverflowError, SyntaxError, ValueError, TypeError,
2290 2306 MemoryError):
2291 2307 self.showsyntaxerror()
2292 2308 self.execution_count += 1
2293 2309 return None
2294 2310
2295 2311 self.run_ast_nodes(code_ast.body, cell_name,
2296 2312 interactivity="last_expr")
2297 2313
2298 2314 # Execute any registered post-execution functions.
2299 2315 for func, status in self._post_execute.iteritems():
2300 2316 if not status:
2301 2317 continue
2302 2318 try:
2303 2319 func()
2304 2320 except:
2305 2321 self.showtraceback()
2306 2322 # Deactivate failing function
2307 2323 self._post_execute[func] = False
2308 2324
2309 2325 if store_history:
2310 2326 # Write output to the database. Does nothing unless
2311 2327 # history output logging is enabled.
2312 2328 self.history_manager.store_output(self.execution_count)
2313 2329 # Each cell is a *single* input, regardless of how many lines it has
2314 2330 self.execution_count += 1
2315 2331
2316 2332 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2317 2333 """Run a sequence of AST nodes. The execution mode depends on the
2318 2334 interactivity parameter.
2319 2335
2320 2336 Parameters
2321 2337 ----------
2322 2338 nodelist : list
2323 2339 A sequence of AST nodes to run.
2324 2340 cell_name : str
2325 2341 Will be passed to the compiler as the filename of the cell. Typically
2326 2342 the value returned by ip.compile.cache(cell).
2327 2343 interactivity : str
2328 2344 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2329 2345 run interactively (displaying output from expressions). 'last_expr'
2330 2346 will run the last node interactively only if it is an expression (i.e.
2331 2347 expressions in loops or other blocks are not displayed. Other values
2332 2348 for this parameter will raise a ValueError.
2333 2349 """
2334 2350 if not nodelist:
2335 2351 return
2336 2352
2337 2353 if interactivity == 'last_expr':
2338 2354 if isinstance(nodelist[-1], ast.Expr):
2339 2355 interactivity = "last"
2340 2356 else:
2341 2357 interactivity = "none"
2342 2358
2343 2359 if interactivity == 'none':
2344 2360 to_run_exec, to_run_interactive = nodelist, []
2345 2361 elif interactivity == 'last':
2346 2362 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2347 2363 elif interactivity == 'all':
2348 2364 to_run_exec, to_run_interactive = [], nodelist
2349 2365 else:
2350 2366 raise ValueError("Interactivity was %r" % interactivity)
2351 2367
2352 2368 exec_count = self.execution_count
2353 2369
2354 2370 try:
2355 2371 for i, node in enumerate(to_run_exec):
2356 2372 mod = ast.Module([node])
2357 2373 code = self.compile(mod, cell_name, "exec")
2358 2374 if self.run_code(code):
2359 2375 return True
2360 2376
2361 2377 for i, node in enumerate(to_run_interactive):
2362 2378 mod = ast.Interactive([node])
2363 2379 code = self.compile(mod, cell_name, "single")
2364 2380 if self.run_code(code):
2365 2381 return True
2366 2382 except:
2367 2383 # It's possible to have exceptions raised here, typically by
2368 2384 # compilation of odd code (such as a naked 'return' outside a
2369 2385 # function) that did parse but isn't valid. Typically the exception
2370 2386 # is a SyntaxError, but it's safest just to catch anything and show
2371 2387 # the user a traceback.
2372 2388
2373 2389 # We do only one try/except outside the loop to minimize the impact
2374 2390 # on runtime, and also because if any node in the node list is
2375 2391 # broken, we should stop execution completely.
2376 2392 self.showtraceback()
2377 2393
2378 2394 return False
2379 2395
2380 2396 def run_code(self, code_obj):
2381 2397 """Execute a code object.
2382 2398
2383 2399 When an exception occurs, self.showtraceback() is called to display a
2384 2400 traceback.
2385 2401
2386 2402 Parameters
2387 2403 ----------
2388 2404 code_obj : code object
2389 2405 A compiled code object, to be executed
2390 2406 post_execute : bool [default: True]
2391 2407 whether to call post_execute hooks after this particular execution.
2392 2408
2393 2409 Returns
2394 2410 -------
2395 2411 False : successful execution.
2396 2412 True : an error occurred.
2397 2413 """
2398 2414
2399 2415 # Set our own excepthook in case the user code tries to call it
2400 2416 # directly, so that the IPython crash handler doesn't get triggered
2401 2417 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2402 2418
2403 2419 # we save the original sys.excepthook in the instance, in case config
2404 2420 # code (such as magics) needs access to it.
2405 2421 self.sys_excepthook = old_excepthook
2406 2422 outflag = 1 # happens in more places, so it's easier as default
2407 2423 try:
2408 2424 try:
2409 2425 self.hooks.pre_run_code_hook()
2410 2426 #rprint('Running code', repr(code_obj)) # dbg
2411 2427 exec code_obj in self.user_global_ns, self.user_ns
2412 2428 finally:
2413 2429 # Reset our crash handler in place
2414 2430 sys.excepthook = old_excepthook
2415 2431 except SystemExit:
2416 2432 self.showtraceback(exception_only=True)
2417 2433 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2418 2434 except self.custom_exceptions:
2419 2435 etype,value,tb = sys.exc_info()
2420 2436 self.CustomTB(etype,value,tb)
2421 2437 except:
2422 2438 self.showtraceback()
2423 2439 else:
2424 2440 outflag = 0
2425 2441 if softspace(sys.stdout, 0):
2426 2442 print
2427 2443
2428 2444 return outflag
2429 2445
2430 2446 # For backwards compatibility
2431 2447 runcode = run_code
2432 2448
2433 2449 #-------------------------------------------------------------------------
2434 2450 # Things related to GUI support and pylab
2435 2451 #-------------------------------------------------------------------------
2436 2452
2437 2453 def enable_pylab(self, gui=None, import_all=True):
2438 2454 raise NotImplementedError('Implement enable_pylab in a subclass')
2439 2455
2440 2456 #-------------------------------------------------------------------------
2441 2457 # Utilities
2442 2458 #-------------------------------------------------------------------------
2443 2459
2444 2460 def var_expand(self,cmd,depth=0):
2445 2461 """Expand python variables in a string.
2446 2462
2447 2463 The depth argument indicates how many frames above the caller should
2448 2464 be walked to look for the local namespace where to expand variables.
2449 2465
2450 2466 The global namespace for expansion is always the user's interactive
2451 2467 namespace.
2452 2468 """
2453 2469 res = ItplNS(cmd, self.user_ns, # globals
2454 2470 # Skip our own frame in searching for locals:
2455 2471 sys._getframe(depth+1).f_locals # locals
2456 2472 )
2457 2473 return py3compat.str_to_unicode(str(res), res.codec)
2458 2474
2459 2475 def mktempfile(self, data=None, prefix='ipython_edit_'):
2460 2476 """Make a new tempfile and return its filename.
2461 2477
2462 2478 This makes a call to tempfile.mktemp, but it registers the created
2463 2479 filename internally so ipython cleans it up at exit time.
2464 2480
2465 2481 Optional inputs:
2466 2482
2467 2483 - data(None): if data is given, it gets written out to the temp file
2468 2484 immediately, and the file is closed again."""
2469 2485
2470 2486 filename = tempfile.mktemp('.py', prefix)
2471 2487 self.tempfiles.append(filename)
2472 2488
2473 2489 if data:
2474 2490 tmp_file = open(filename,'w')
2475 2491 tmp_file.write(data)
2476 2492 tmp_file.close()
2477 2493 return filename
2478 2494
2479 2495 # TODO: This should be removed when Term is refactored.
2480 2496 def write(self,data):
2481 2497 """Write a string to the default output"""
2482 2498 io.stdout.write(data)
2483 2499
2484 2500 # TODO: This should be removed when Term is refactored.
2485 2501 def write_err(self,data):
2486 2502 """Write a string to the default error output"""
2487 2503 io.stderr.write(data)
2488 2504
2489 2505 def ask_yes_no(self,prompt,default=True):
2490 2506 if self.quiet:
2491 2507 return True
2492 2508 return ask_yes_no(prompt,default)
2493 2509
2494 2510 def show_usage(self):
2495 2511 """Show a usage message"""
2496 2512 page.page(IPython.core.usage.interactive_usage)
2497 2513
2498 2514 def find_user_code(self, target, raw=True):
2499 2515 """Get a code string from history, file, or a string or macro.
2500 2516
2501 2517 This is mainly used by magic functions.
2502 2518
2503 2519 Parameters
2504 2520 ----------
2505 2521 target : str
2506 2522 A string specifying code to retrieve. This will be tried respectively
2507 2523 as: ranges of input history (see %history for syntax), a filename, or
2508 2524 an expression evaluating to a string or Macro in the user namespace.
2509 2525 raw : bool
2510 2526 If true (default), retrieve raw history. Has no effect on the other
2511 2527 retrieval mechanisms.
2512 2528
2513 2529 Returns
2514 2530 -------
2515 2531 A string of code.
2516 2532
2517 2533 ValueError is raised if nothing is found, and TypeError if it evaluates
2518 2534 to an object of another type. In each case, .args[0] is a printable
2519 2535 message.
2520 2536 """
2521 2537 code = self.extract_input_lines(target, raw=raw) # Grab history
2522 2538 if code:
2523 2539 return code
2524 2540 if os.path.isfile(target): # Read file
2525 2541 return open(target, "r").read()
2526 2542
2527 2543 try: # User namespace
2528 2544 codeobj = eval(target, self.user_ns)
2529 2545 except Exception:
2530 2546 raise ValueError(("'%s' was not found in history, as a file, nor in"
2531 2547 " the user namespace.") % target)
2532 2548 if isinstance(codeobj, basestring):
2533 2549 return codeobj
2534 2550 elif isinstance(codeobj, Macro):
2535 2551 return codeobj.value
2536 2552
2537 2553 raise TypeError("%s is neither a string nor a macro." % target,
2538 2554 codeobj)
2539 2555
2540 2556 #-------------------------------------------------------------------------
2541 2557 # Things related to IPython exiting
2542 2558 #-------------------------------------------------------------------------
2543 2559 def atexit_operations(self):
2544 2560 """This will be executed at the time of exit.
2545 2561
2546 2562 Cleanup operations and saving of persistent data that is done
2547 2563 unconditionally by IPython should be performed here.
2548 2564
2549 2565 For things that may depend on startup flags or platform specifics (such
2550 2566 as having readline or not), register a separate atexit function in the
2551 2567 code that has the appropriate information, rather than trying to
2552 2568 clutter
2553 2569 """
2554 2570 # Close the history session (this stores the end time and line count)
2555 2571 # this must be *before* the tempfile cleanup, in case of temporary
2556 2572 # history db
2557 2573 self.history_manager.end_session()
2558 2574
2559 2575 # Cleanup all tempfiles left around
2560 2576 for tfile in self.tempfiles:
2561 2577 try:
2562 2578 os.unlink(tfile)
2563 2579 except OSError:
2564 2580 pass
2565 2581
2566 2582 # Clear all user namespaces to release all references cleanly.
2567 2583 self.reset(new_session=False)
2568 2584
2569 2585 # Run user hooks
2570 2586 self.hooks.shutdown_hook()
2571 2587
2572 2588 def cleanup(self):
2573 2589 self.restore_sys_module_state()
2574 2590
2575 2591
2576 2592 class InteractiveShellABC(object):
2577 2593 """An abstract base class for InteractiveShell."""
2578 2594 __metaclass__ = abc.ABCMeta
2579 2595
2580 2596 InteractiveShellABC.register(InteractiveShell)
@@ -1,3579 +1,3580 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-2007 Fernando Perez <fperez@colorado.edu>
8 8 # Copyright (C) 2008-2009 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
18 18 import __builtin__ as builtin_mod
19 19 import __future__
20 20 import bdb
21 21 import inspect
22 22 import os
23 23 import sys
24 24 import shutil
25 25 import re
26 26 import time
27 27 import textwrap
28 28 from StringIO import StringIO
29 29 from getopt import getopt,GetoptError
30 30 from pprint import pformat
31 31 from xmlrpclib import ServerProxy
32 32
33 33 # cProfile was added in Python2.5
34 34 try:
35 35 import cProfile as profile
36 36 import pstats
37 37 except ImportError:
38 38 # profile isn't bundled by default in Debian for license reasons
39 39 try:
40 40 import profile,pstats
41 41 except ImportError:
42 42 profile = pstats = None
43 43
44 44 import IPython
45 45 from IPython.core import debugger, oinspect
46 46 from IPython.core.error import TryNext
47 47 from IPython.core.error import UsageError
48 48 from IPython.core.fakemodule import FakeModule
49 49 from IPython.core.profiledir import ProfileDir
50 50 from IPython.core.macro import Macro
51 51 from IPython.core import magic_arguments, page
52 52 from IPython.core.prefilter import ESC_MAGIC
53 53 from IPython.lib.pylabtools import mpl_runner
54 54 from IPython.testing.skipdoctest import skip_doctest
55 55 from IPython.utils import py3compat
56 56 from IPython.utils.io import file_read, nlprint
57 57 from IPython.utils.path import get_py_filename, unquote_filename
58 58 from IPython.utils.process import arg_split, abbrev_cwd
59 59 from IPython.utils.terminal import set_term_title
60 60 from IPython.utils.text import LSString, SList, format_screen
61 61 from IPython.utils.timing import clock, clock2
62 62 from IPython.utils.warn import warn, error
63 63 from IPython.utils.ipstruct import Struct
64 64 from IPython.config.application import Application
65 65
66 66 #-----------------------------------------------------------------------------
67 67 # Utility functions
68 68 #-----------------------------------------------------------------------------
69 69
70 70 def on_off(tag):
71 71 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
72 72 return ['OFF','ON'][tag]
73 73
74 74 class Bunch: pass
75 75
76 76 def compress_dhist(dh):
77 77 head, tail = dh[:-10], dh[-10:]
78 78
79 79 newhead = []
80 80 done = set()
81 81 for h in head:
82 82 if h in done:
83 83 continue
84 84 newhead.append(h)
85 85 done.add(h)
86 86
87 87 return newhead + tail
88 88
89 89 def needs_local_scope(func):
90 90 """Decorator to mark magic functions which need to local scope to run."""
91 91 func.needs_local_scope = True
92 92 return func
93 93
94 94 # Used for exception handling in magic_edit
95 95 class MacroToEdit(ValueError): pass
96 96
97 97 #***************************************************************************
98 98 # Main class implementing Magic functionality
99 99
100 100 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
101 101 # on construction of the main InteractiveShell object. Something odd is going
102 102 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
103 103 # eventually this needs to be clarified.
104 104 # BG: This is because InteractiveShell inherits from this, but is itself a
105 105 # Configurable. This messes up the MRO in some way. The fix is that we need to
106 106 # make Magic a configurable that InteractiveShell does not subclass.
107 107
108 108 class Magic:
109 109 """Magic functions for InteractiveShell.
110 110
111 111 Shell functions which can be reached as %function_name. All magic
112 112 functions should accept a string, which they can parse for their own
113 113 needs. This can make some functions easier to type, eg `%cd ../`
114 114 vs. `%cd("../")`
115 115
116 116 ALL definitions MUST begin with the prefix magic_. The user won't need it
117 117 at the command line, but it is is needed in the definition. """
118 118
119 119 # class globals
120 120 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
121 121 'Automagic is ON, % prefix NOT needed for magic functions.']
122 122
123 123 #......................................................................
124 124 # some utility functions
125 125
126 126 def __init__(self,shell):
127 127
128 128 self.options_table = {}
129 129 if profile is None:
130 130 self.magic_prun = self.profile_missing_notice
131 131 self.shell = shell
132 132
133 133 # namespace for holding state we may need
134 134 self._magic_state = Bunch()
135 135
136 136 def profile_missing_notice(self, *args, **kwargs):
137 137 error("""\
138 138 The profile module could not be found. It has been removed from the standard
139 139 python packages because of its non-free license. To use profiling, install the
140 140 python-profiler package from non-free.""")
141 141
142 142 def default_option(self,fn,optstr):
143 143 """Make an entry in the options_table for fn, with value optstr"""
144 144
145 145 if fn not in self.lsmagic():
146 146 error("%s is not a magic function" % fn)
147 147 self.options_table[fn] = optstr
148 148
149 149 def lsmagic(self):
150 150 """Return a list of currently available magic functions.
151 151
152 152 Gives a list of the bare names after mangling (['ls','cd', ...], not
153 153 ['magic_ls','magic_cd',...]"""
154 154
155 155 # FIXME. This needs a cleanup, in the way the magics list is built.
156 156
157 157 # magics in class definition
158 158 class_magic = lambda fn: fn.startswith('magic_') and \
159 159 callable(Magic.__dict__[fn])
160 160 # in instance namespace (run-time user additions)
161 161 inst_magic = lambda fn: fn.startswith('magic_') and \
162 162 callable(self.__dict__[fn])
163 163 # and bound magics by user (so they can access self):
164 164 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
165 165 callable(self.__class__.__dict__[fn])
166 166 magics = filter(class_magic,Magic.__dict__.keys()) + \
167 167 filter(inst_magic,self.__dict__.keys()) + \
168 168 filter(inst_bound_magic,self.__class__.__dict__.keys())
169 169 out = []
170 170 for fn in set(magics):
171 171 out.append(fn.replace('magic_','',1))
172 172 out.sort()
173 173 return out
174 174
175 175 def extract_input_lines(self, range_str, raw=False):
176 176 """Return as a string a set of input history slices.
177 177
178 178 Inputs:
179 179
180 180 - range_str: the set of slices is given as a string, like
181 181 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
182 182 which get their arguments as strings. The number before the / is the
183 183 session number: ~n goes n back from the current session.
184 184
185 185 Optional inputs:
186 186
187 187 - raw(False): by default, the processed input is used. If this is
188 188 true, the raw input history is used instead.
189 189
190 190 Note that slices can be called with two notations:
191 191
192 192 N:M -> standard python form, means including items N...(M-1).
193 193
194 194 N-M -> include items N..M (closed endpoint)."""
195 195 lines = self.shell.history_manager.\
196 196 get_range_by_str(range_str, raw=raw)
197 197 return "\n".join(x for _, _, x in lines)
198 198
199 199 def arg_err(self,func):
200 200 """Print docstring if incorrect arguments were passed"""
201 201 print 'Error in arguments:'
202 202 print oinspect.getdoc(func)
203 203
204 204 def format_latex(self,strng):
205 205 """Format a string for latex inclusion."""
206 206
207 207 # Characters that need to be escaped for latex:
208 208 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
209 209 # Magic command names as headers:
210 210 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
211 211 re.MULTILINE)
212 212 # Magic commands
213 213 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
214 214 re.MULTILINE)
215 215 # Paragraph continue
216 216 par_re = re.compile(r'\\$',re.MULTILINE)
217 217
218 218 # The "\n" symbol
219 219 newline_re = re.compile(r'\\n')
220 220
221 221 # Now build the string for output:
222 222 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
223 223 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
224 224 strng)
225 225 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
226 226 strng = par_re.sub(r'\\\\',strng)
227 227 strng = escape_re.sub(r'\\\1',strng)
228 228 strng = newline_re.sub(r'\\textbackslash{}n',strng)
229 229 return strng
230 230
231 231 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
232 232 """Parse options passed to an argument string.
233 233
234 234 The interface is similar to that of getopt(), but it returns back a
235 235 Struct with the options as keys and the stripped argument string still
236 236 as a string.
237 237
238 238 arg_str is quoted as a true sys.argv vector by using shlex.split.
239 239 This allows us to easily expand variables, glob files, quote
240 240 arguments, etc.
241 241
242 242 Options:
243 243 -mode: default 'string'. If given as 'list', the argument string is
244 244 returned as a list (split on whitespace) instead of a string.
245 245
246 246 -list_all: put all option values in lists. Normally only options
247 247 appearing more than once are put in a list.
248 248
249 249 -posix (True): whether to split the input line in POSIX mode or not,
250 250 as per the conventions outlined in the shlex module from the
251 251 standard library."""
252 252
253 253 # inject default options at the beginning of the input line
254 254 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
255 255 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
256 256
257 257 mode = kw.get('mode','string')
258 258 if mode not in ['string','list']:
259 259 raise ValueError,'incorrect mode given: %s' % mode
260 260 # Get options
261 261 list_all = kw.get('list_all',0)
262 262 posix = kw.get('posix', os.name == 'posix')
263 263
264 264 # Check if we have more than one argument to warrant extra processing:
265 265 odict = {} # Dictionary with options
266 266 args = arg_str.split()
267 267 if len(args) >= 1:
268 268 # If the list of inputs only has 0 or 1 thing in it, there's no
269 269 # need to look for options
270 270 argv = arg_split(arg_str,posix)
271 271 # Do regular option processing
272 272 try:
273 273 opts,args = getopt(argv,opt_str,*long_opts)
274 274 except GetoptError,e:
275 275 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
276 276 " ".join(long_opts)))
277 277 for o,a in opts:
278 278 if o.startswith('--'):
279 279 o = o[2:]
280 280 else:
281 281 o = o[1:]
282 282 try:
283 283 odict[o].append(a)
284 284 except AttributeError:
285 285 odict[o] = [odict[o],a]
286 286 except KeyError:
287 287 if list_all:
288 288 odict[o] = [a]
289 289 else:
290 290 odict[o] = a
291 291
292 292 # Prepare opts,args for return
293 293 opts = Struct(odict)
294 294 if mode == 'string':
295 295 args = ' '.join(args)
296 296
297 297 return opts,args
298 298
299 299 #......................................................................
300 300 # And now the actual magic functions
301 301
302 302 # Functions for IPython shell work (vars,funcs, config, etc)
303 303 def magic_lsmagic(self, parameter_s = ''):
304 304 """List currently available magic functions."""
305 305 mesc = ESC_MAGIC
306 306 print 'Available magic functions:\n'+mesc+\
307 307 (' '+mesc).join(self.lsmagic())
308 308 print '\n' + Magic.auto_status[self.shell.automagic]
309 309 return None
310 310
311 311 def magic_magic(self, parameter_s = ''):
312 312 """Print information about the magic function system.
313 313
314 314 Supported formats: -latex, -brief, -rest
315 315 """
316 316
317 317 mode = ''
318 318 try:
319 319 if parameter_s.split()[0] == '-latex':
320 320 mode = 'latex'
321 321 if parameter_s.split()[0] == '-brief':
322 322 mode = 'brief'
323 323 if parameter_s.split()[0] == '-rest':
324 324 mode = 'rest'
325 325 rest_docs = []
326 326 except:
327 327 pass
328 328
329 329 magic_docs = []
330 330 for fname in self.lsmagic():
331 331 mname = 'magic_' + fname
332 332 for space in (Magic,self,self.__class__):
333 333 try:
334 334 fn = space.__dict__[mname]
335 335 except KeyError:
336 336 pass
337 337 else:
338 338 break
339 339 if mode == 'brief':
340 340 # only first line
341 341 if fn.__doc__:
342 342 fndoc = fn.__doc__.split('\n',1)[0]
343 343 else:
344 344 fndoc = 'No documentation'
345 345 else:
346 346 if fn.__doc__:
347 347 fndoc = fn.__doc__.rstrip()
348 348 else:
349 349 fndoc = 'No documentation'
350 350
351 351
352 352 if mode == 'rest':
353 353 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
354 354 fname,fndoc))
355 355
356 356 else:
357 357 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
358 358 fname,fndoc))
359 359
360 360 magic_docs = ''.join(magic_docs)
361 361
362 362 if mode == 'rest':
363 363 return "".join(rest_docs)
364 364
365 365 if mode == 'latex':
366 366 print self.format_latex(magic_docs)
367 367 return
368 368 else:
369 369 magic_docs = format_screen(magic_docs)
370 370 if mode == 'brief':
371 371 return magic_docs
372 372
373 373 outmsg = """
374 374 IPython's 'magic' functions
375 375 ===========================
376 376
377 377 The magic function system provides a series of functions which allow you to
378 378 control the behavior of IPython itself, plus a lot of system-type
379 379 features. All these functions are prefixed with a % character, but parameters
380 380 are given without parentheses or quotes.
381 381
382 382 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 383 %automagic function), you don't need to type in the % explicitly. By default,
384 384 IPython ships with automagic on, so you should only rarely need the % escape.
385 385
386 386 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 387 to 'mydir', if it exists.
388 388
389 389 For a list of the available magic functions, use %lsmagic. For a description
390 390 of any of them, type %magic_name?, e.g. '%cd?'.
391 391
392 392 Currently the magic system has the following functions:\n"""
393 393
394 394 mesc = ESC_MAGIC
395 395 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
396 396 "\n\n%s%s\n\n%s" % (outmsg,
397 397 magic_docs,mesc,mesc,
398 398 (' '+mesc).join(self.lsmagic()),
399 399 Magic.auto_status[self.shell.automagic] ) )
400 400 page.page(outmsg)
401 401
402 402 def magic_automagic(self, parameter_s = ''):
403 403 """Make magic functions callable without having to type the initial %.
404 404
405 405 Without argumentsl toggles on/off (when off, you must call it as
406 406 %automagic, of course). With arguments it sets the value, and you can
407 407 use any of (case insensitive):
408 408
409 409 - on,1,True: to activate
410 410
411 411 - off,0,False: to deactivate.
412 412
413 413 Note that magic functions have lowest priority, so if there's a
414 414 variable whose name collides with that of a magic fn, automagic won't
415 415 work for that function (you get the variable instead). However, if you
416 416 delete the variable (del var), the previously shadowed magic function
417 417 becomes visible to automagic again."""
418 418
419 419 arg = parameter_s.lower()
420 420 if parameter_s in ('on','1','true'):
421 421 self.shell.automagic = True
422 422 elif parameter_s in ('off','0','false'):
423 423 self.shell.automagic = False
424 424 else:
425 425 self.shell.automagic = not self.shell.automagic
426 426 print '\n' + Magic.auto_status[self.shell.automagic]
427 427
428 428 @skip_doctest
429 429 def magic_autocall(self, parameter_s = ''):
430 430 """Make functions callable without having to type parentheses.
431 431
432 432 Usage:
433 433
434 434 %autocall [mode]
435 435
436 436 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
437 437 value is toggled on and off (remembering the previous state).
438 438
439 439 In more detail, these values mean:
440 440
441 441 0 -> fully disabled
442 442
443 443 1 -> active, but do not apply if there are no arguments on the line.
444 444
445 445 In this mode, you get:
446 446
447 447 In [1]: callable
448 448 Out[1]: <built-in function callable>
449 449
450 450 In [2]: callable 'hello'
451 451 ------> callable('hello')
452 452 Out[2]: False
453 453
454 454 2 -> Active always. Even if no arguments are present, the callable
455 455 object is called:
456 456
457 457 In [2]: float
458 458 ------> float()
459 459 Out[2]: 0.0
460 460
461 461 Note that even with autocall off, you can still use '/' at the start of
462 462 a line to treat the first argument on the command line as a function
463 463 and add parentheses to it:
464 464
465 465 In [8]: /str 43
466 466 ------> str(43)
467 467 Out[8]: '43'
468 468
469 469 # all-random (note for auto-testing)
470 470 """
471 471
472 472 if parameter_s:
473 473 arg = int(parameter_s)
474 474 else:
475 475 arg = 'toggle'
476 476
477 477 if not arg in (0,1,2,'toggle'):
478 478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
479 479 return
480 480
481 481 if arg in (0,1,2):
482 482 self.shell.autocall = arg
483 483 else: # toggle
484 484 if self.shell.autocall:
485 485 self._magic_state.autocall_save = self.shell.autocall
486 486 self.shell.autocall = 0
487 487 else:
488 488 try:
489 489 self.shell.autocall = self._magic_state.autocall_save
490 490 except AttributeError:
491 491 self.shell.autocall = self._magic_state.autocall_save = 1
492 492
493 493 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
494 494
495 495
496 496 def magic_page(self, parameter_s=''):
497 497 """Pretty print the object and display it through a pager.
498 498
499 499 %page [options] OBJECT
500 500
501 501 If no object is given, use _ (last output).
502 502
503 503 Options:
504 504
505 505 -r: page str(object), don't pretty-print it."""
506 506
507 507 # After a function contributed by Olivier Aubert, slightly modified.
508 508
509 509 # Process options/args
510 510 opts,args = self.parse_options(parameter_s,'r')
511 511 raw = 'r' in opts
512 512
513 513 oname = args and args or '_'
514 514 info = self._ofind(oname)
515 515 if info['found']:
516 516 txt = (raw and str or pformat)( info['obj'] )
517 517 page.page(txt)
518 518 else:
519 519 print 'Object `%s` not found' % oname
520 520
521 521 def magic_profile(self, parameter_s=''):
522 522 """Print your currently active IPython profile."""
523 523 print self.shell.profile
524 524
525 525 def magic_pinfo(self, parameter_s='', namespaces=None):
526 526 """Provide detailed information about an object.
527 527
528 528 '%pinfo object' is just a synonym for object? or ?object."""
529 529
530 530 #print 'pinfo par: <%s>' % parameter_s # dbg
531 531
532 532
533 533 # detail_level: 0 -> obj? , 1 -> obj??
534 534 detail_level = 0
535 535 # We need to detect if we got called as 'pinfo pinfo foo', which can
536 536 # happen if the user types 'pinfo foo?' at the cmd line.
537 537 pinfo,qmark1,oname,qmark2 = \
538 538 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
539 539 if pinfo or qmark1 or qmark2:
540 540 detail_level = 1
541 541 if "*" in oname:
542 542 self.magic_psearch(oname)
543 543 else:
544 544 self.shell._inspect('pinfo', oname, detail_level=detail_level,
545 545 namespaces=namespaces)
546 546
547 547 def magic_pinfo2(self, parameter_s='', namespaces=None):
548 548 """Provide extra detailed information about an object.
549 549
550 550 '%pinfo2 object' is just a synonym for object?? or ??object."""
551 551 self.shell._inspect('pinfo', parameter_s, detail_level=1,
552 552 namespaces=namespaces)
553 553
554 554 @skip_doctest
555 555 def magic_pdef(self, parameter_s='', namespaces=None):
556 556 """Print the definition header for any callable object.
557 557
558 558 If the object is a class, print the constructor information.
559 559
560 560 Examples
561 561 --------
562 562 ::
563 563
564 564 In [3]: %pdef urllib.urlopen
565 565 urllib.urlopen(url, data=None, proxies=None)
566 566 """
567 567 self._inspect('pdef',parameter_s, namespaces)
568 568
569 569 def magic_pdoc(self, parameter_s='', namespaces=None):
570 570 """Print the docstring for an object.
571 571
572 572 If the given object is a class, it will print both the class and the
573 573 constructor docstrings."""
574 574 self._inspect('pdoc',parameter_s, namespaces)
575 575
576 576 def magic_psource(self, parameter_s='', namespaces=None):
577 577 """Print (or run through pager) the source code for an object."""
578 578 self._inspect('psource',parameter_s, namespaces)
579 579
580 580 def magic_pfile(self, parameter_s=''):
581 581 """Print (or run through pager) the file where an object is defined.
582 582
583 583 The file opens at the line where the object definition begins. IPython
584 584 will honor the environment variable PAGER if set, and otherwise will
585 585 do its best to print the file in a convenient form.
586 586
587 587 If the given argument is not an object currently defined, IPython will
588 588 try to interpret it as a filename (automatically adding a .py extension
589 589 if needed). You can thus use %pfile as a syntax highlighting code
590 590 viewer."""
591 591
592 592 # first interpret argument as an object name
593 593 out = self._inspect('pfile',parameter_s)
594 594 # if not, try the input as a filename
595 595 if out == 'not found':
596 596 try:
597 597 filename = get_py_filename(parameter_s)
598 598 except IOError,msg:
599 599 print msg
600 600 return
601 601 page.page(self.shell.inspector.format(file(filename).read()))
602 602
603 603 def magic_psearch(self, parameter_s=''):
604 604 """Search for object in namespaces by wildcard.
605 605
606 606 %psearch [options] PATTERN [OBJECT TYPE]
607 607
608 608 Note: ? can be used as a synonym for %psearch, at the beginning or at
609 609 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
610 610 rest of the command line must be unchanged (options come first), so
611 611 for example the following forms are equivalent
612 612
613 613 %psearch -i a* function
614 614 -i a* function?
615 615 ?-i a* function
616 616
617 617 Arguments:
618 618
619 619 PATTERN
620 620
621 621 where PATTERN is a string containing * as a wildcard similar to its
622 622 use in a shell. The pattern is matched in all namespaces on the
623 623 search path. By default objects starting with a single _ are not
624 624 matched, many IPython generated objects have a single
625 625 underscore. The default is case insensitive matching. Matching is
626 626 also done on the attributes of objects and not only on the objects
627 627 in a module.
628 628
629 629 [OBJECT TYPE]
630 630
631 631 Is the name of a python type from the types module. The name is
632 632 given in lowercase without the ending type, ex. StringType is
633 633 written string. By adding a type here only objects matching the
634 634 given type are matched. Using all here makes the pattern match all
635 635 types (this is the default).
636 636
637 637 Options:
638 638
639 639 -a: makes the pattern match even objects whose names start with a
640 640 single underscore. These names are normally ommitted from the
641 641 search.
642 642
643 643 -i/-c: make the pattern case insensitive/sensitive. If neither of
644 644 these options are given, the default is read from your configuration
645 645 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
646 646 If this option is not specified in your configuration file, IPython's
647 647 internal default is to do a case sensitive search.
648 648
649 649 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
650 650 specifiy can be searched in any of the following namespaces:
651 651 'builtin', 'user', 'user_global','internal', 'alias', where
652 652 'builtin' and 'user' are the search defaults. Note that you should
653 653 not use quotes when specifying namespaces.
654 654
655 655 'Builtin' contains the python module builtin, 'user' contains all
656 656 user data, 'alias' only contain the shell aliases and no python
657 657 objects, 'internal' contains objects used by IPython. The
658 658 'user_global' namespace is only used by embedded IPython instances,
659 659 and it contains module-level globals. You can add namespaces to the
660 660 search with -s or exclude them with -e (these options can be given
661 661 more than once).
662 662
663 663 Examples:
664 664
665 665 %psearch a* -> objects beginning with an a
666 666 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
667 667 %psearch a* function -> all functions beginning with an a
668 668 %psearch re.e* -> objects beginning with an e in module re
669 669 %psearch r*.e* -> objects that start with e in modules starting in r
670 670 %psearch r*.* string -> all strings in modules beginning with r
671 671
672 672 Case sensitve search:
673 673
674 674 %psearch -c a* list all object beginning with lower case a
675 675
676 676 Show objects beginning with a single _:
677 677
678 678 %psearch -a _* list objects beginning with a single underscore"""
679 679 try:
680 680 parameter_s.encode('ascii')
681 681 except UnicodeEncodeError:
682 682 print 'Python identifiers can only contain ascii characters.'
683 683 return
684 684
685 685 # default namespaces to be searched
686 686 def_search = ['user','builtin']
687 687
688 688 # Process options/args
689 689 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
690 690 opt = opts.get
691 691 shell = self.shell
692 692 psearch = shell.inspector.psearch
693 693
694 694 # select case options
695 695 if opts.has_key('i'):
696 696 ignore_case = True
697 697 elif opts.has_key('c'):
698 698 ignore_case = False
699 699 else:
700 700 ignore_case = not shell.wildcards_case_sensitive
701 701
702 702 # Build list of namespaces to search from user options
703 703 def_search.extend(opt('s',[]))
704 704 ns_exclude = ns_exclude=opt('e',[])
705 705 ns_search = [nm for nm in def_search if nm not in ns_exclude]
706 706
707 707 # Call the actual search
708 708 try:
709 709 psearch(args,shell.ns_table,ns_search,
710 710 show_all=opt('a'),ignore_case=ignore_case)
711 711 except:
712 712 shell.showtraceback()
713 713
714 714 @skip_doctest
715 715 def magic_who_ls(self, parameter_s=''):
716 716 """Return a sorted list of all interactive variables.
717 717
718 718 If arguments are given, only variables of types matching these
719 719 arguments are returned.
720 720
721 721 Examples
722 722 --------
723 723
724 724 Define two variables and list them with who_ls::
725 725
726 726 In [1]: alpha = 123
727 727
728 728 In [2]: beta = 'test'
729 729
730 730 In [3]: %who_ls
731 731 Out[3]: ['alpha', 'beta']
732 732
733 733 In [4]: %who_ls int
734 734 Out[4]: ['alpha']
735 735
736 736 In [5]: %who_ls str
737 737 Out[5]: ['beta']
738 738 """
739 739
740 740 user_ns = self.shell.user_ns
741 741 internal_ns = self.shell.internal_ns
742 742 user_ns_hidden = self.shell.user_ns_hidden
743 743 out = [ i for i in user_ns
744 744 if not i.startswith('_') \
745 745 and not (i in internal_ns or i in user_ns_hidden) ]
746 746
747 747 typelist = parameter_s.split()
748 748 if typelist:
749 749 typeset = set(typelist)
750 750 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
751 751
752 752 out.sort()
753 753 return out
754 754
755 755 @skip_doctest
756 756 def magic_who(self, parameter_s=''):
757 757 """Print all interactive variables, with some minimal formatting.
758 758
759 759 If any arguments are given, only variables whose type matches one of
760 760 these are printed. For example:
761 761
762 762 %who function str
763 763
764 764 will only list functions and strings, excluding all other types of
765 765 variables. To find the proper type names, simply use type(var) at a
766 766 command line to see how python prints type names. For example:
767 767
768 768 In [1]: type('hello')\\
769 769 Out[1]: <type 'str'>
770 770
771 771 indicates that the type name for strings is 'str'.
772 772
773 773 %who always excludes executed names loaded through your configuration
774 774 file and things which are internal to IPython.
775 775
776 776 This is deliberate, as typically you may load many modules and the
777 777 purpose of %who is to show you only what you've manually defined.
778 778
779 779 Examples
780 780 --------
781 781
782 782 Define two variables and list them with who::
783 783
784 784 In [1]: alpha = 123
785 785
786 786 In [2]: beta = 'test'
787 787
788 788 In [3]: %who
789 789 alpha beta
790 790
791 791 In [4]: %who int
792 792 alpha
793 793
794 794 In [5]: %who str
795 795 beta
796 796 """
797 797
798 798 varlist = self.magic_who_ls(parameter_s)
799 799 if not varlist:
800 800 if parameter_s:
801 801 print 'No variables match your requested type.'
802 802 else:
803 803 print 'Interactive namespace is empty.'
804 804 return
805 805
806 806 # if we have variables, move on...
807 807 count = 0
808 808 for i in varlist:
809 809 print i+'\t',
810 810 count += 1
811 811 if count > 8:
812 812 count = 0
813 813 print
814 814 print
815 815
816 816 @skip_doctest
817 817 def magic_whos(self, parameter_s=''):
818 818 """Like %who, but gives some extra information about each variable.
819 819
820 820 The same type filtering of %who can be applied here.
821 821
822 822 For all variables, the type is printed. Additionally it prints:
823 823
824 824 - For {},[],(): their length.
825 825
826 826 - For numpy arrays, a summary with shape, number of
827 827 elements, typecode and size in memory.
828 828
829 829 - Everything else: a string representation, snipping their middle if
830 830 too long.
831 831
832 832 Examples
833 833 --------
834 834
835 835 Define two variables and list them with whos::
836 836
837 837 In [1]: alpha = 123
838 838
839 839 In [2]: beta = 'test'
840 840
841 841 In [3]: %whos
842 842 Variable Type Data/Info
843 843 --------------------------------
844 844 alpha int 123
845 845 beta str test
846 846 """
847 847
848 848 varnames = self.magic_who_ls(parameter_s)
849 849 if not varnames:
850 850 if parameter_s:
851 851 print 'No variables match your requested type.'
852 852 else:
853 853 print 'Interactive namespace is empty.'
854 854 return
855 855
856 856 # if we have variables, move on...
857 857
858 858 # for these types, show len() instead of data:
859 859 seq_types = ['dict', 'list', 'tuple']
860 860
861 861 # for numpy/Numeric arrays, display summary info
862 862 try:
863 863 import numpy
864 864 except ImportError:
865 865 ndarray_type = None
866 866 else:
867 867 ndarray_type = numpy.ndarray.__name__
868 868 try:
869 869 import Numeric
870 870 except ImportError:
871 871 array_type = None
872 872 else:
873 873 array_type = Numeric.ArrayType.__name__
874 874
875 875 # Find all variable names and types so we can figure out column sizes
876 876 def get_vars(i):
877 877 return self.shell.user_ns[i]
878 878
879 879 # some types are well known and can be shorter
880 880 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
881 881 def type_name(v):
882 882 tn = type(v).__name__
883 883 return abbrevs.get(tn,tn)
884 884
885 885 varlist = map(get_vars,varnames)
886 886
887 887 typelist = []
888 888 for vv in varlist:
889 889 tt = type_name(vv)
890 890
891 891 if tt=='instance':
892 892 typelist.append( abbrevs.get(str(vv.__class__),
893 893 str(vv.__class__)))
894 894 else:
895 895 typelist.append(tt)
896 896
897 897 # column labels and # of spaces as separator
898 898 varlabel = 'Variable'
899 899 typelabel = 'Type'
900 900 datalabel = 'Data/Info'
901 901 colsep = 3
902 902 # variable format strings
903 903 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
904 904 aformat = "%s: %s elems, type `%s`, %s bytes"
905 905 # find the size of the columns to format the output nicely
906 906 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
907 907 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
908 908 # table header
909 909 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
910 910 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
911 911 # and the table itself
912 912 kb = 1024
913 913 Mb = 1048576 # kb**2
914 914 for vname,var,vtype in zip(varnames,varlist,typelist):
915 915 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
916 916 if vtype in seq_types:
917 917 print "n="+str(len(var))
918 918 elif vtype in [array_type,ndarray_type]:
919 919 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
920 920 if vtype==ndarray_type:
921 921 # numpy
922 922 vsize = var.size
923 923 vbytes = vsize*var.itemsize
924 924 vdtype = var.dtype
925 925 else:
926 926 # Numeric
927 927 vsize = Numeric.size(var)
928 928 vbytes = vsize*var.itemsize()
929 929 vdtype = var.typecode()
930 930
931 931 if vbytes < 100000:
932 932 print aformat % (vshape,vsize,vdtype,vbytes)
933 933 else:
934 934 print aformat % (vshape,vsize,vdtype,vbytes),
935 935 if vbytes < Mb:
936 936 print '(%s kb)' % (vbytes/kb,)
937 937 else:
938 938 print '(%s Mb)' % (vbytes/Mb,)
939 939 else:
940 940 try:
941 941 vstr = str(var)
942 942 except UnicodeEncodeError:
943 943 vstr = unicode(var).encode(sys.getdefaultencoding(),
944 944 'backslashreplace')
945 945 vstr = vstr.replace('\n','\\n')
946 946 if len(vstr) < 50:
947 947 print vstr
948 948 else:
949 949 print vstr[:25] + "<...>" + vstr[-25:]
950 950
951 951 def magic_reset(self, parameter_s=''):
952 952 """Resets the namespace by removing all names defined by the user.
953 953
954 954 Parameters
955 955 ----------
956 956 -f : force reset without asking for confirmation.
957 957
958 958 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
959 959 References to objects may be kept. By default (without this option),
960 960 we do a 'hard' reset, giving you a new session and removing all
961 961 references to objects from the current session.
962 962
963 963 Examples
964 964 --------
965 965 In [6]: a = 1
966 966
967 967 In [7]: a
968 968 Out[7]: 1
969 969
970 970 In [8]: 'a' in _ip.user_ns
971 971 Out[8]: True
972 972
973 973 In [9]: %reset -f
974 974
975 975 In [1]: 'a' in _ip.user_ns
976 976 Out[1]: False
977 977 """
978 978 opts, args = self.parse_options(parameter_s,'sf')
979 979 if 'f' in opts:
980 980 ans = True
981 981 else:
982 982 ans = self.shell.ask_yes_no(
983 983 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
984 984 if not ans:
985 985 print 'Nothing done.'
986 986 return
987 987
988 988 if 's' in opts: # Soft reset
989 989 user_ns = self.shell.user_ns
990 990 for i in self.magic_who_ls():
991 991 del(user_ns[i])
992 992
993 993 else: # Hard reset
994 994 self.shell.reset(new_session = False)
995 995
996 996
997 997
998 998 def magic_reset_selective(self, parameter_s=''):
999 999 """Resets the namespace by removing names defined by the user.
1000 1000
1001 1001 Input/Output history are left around in case you need them.
1002 1002
1003 1003 %reset_selective [-f] regex
1004 1004
1005 1005 No action is taken if regex is not included
1006 1006
1007 1007 Options
1008 1008 -f : force reset without asking for confirmation.
1009 1009
1010 1010 Examples
1011 1011 --------
1012 1012
1013 1013 We first fully reset the namespace so your output looks identical to
1014 1014 this example for pedagogical reasons; in practice you do not need a
1015 1015 full reset.
1016 1016
1017 1017 In [1]: %reset -f
1018 1018
1019 1019 Now, with a clean namespace we can make a few variables and use
1020 1020 %reset_selective to only delete names that match our regexp:
1021 1021
1022 1022 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1023 1023
1024 1024 In [3]: who_ls
1025 1025 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1026 1026
1027 1027 In [4]: %reset_selective -f b[2-3]m
1028 1028
1029 1029 In [5]: who_ls
1030 1030 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1031 1031
1032 1032 In [6]: %reset_selective -f d
1033 1033
1034 1034 In [7]: who_ls
1035 1035 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1036 1036
1037 1037 In [8]: %reset_selective -f c
1038 1038
1039 1039 In [9]: who_ls
1040 1040 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1041 1041
1042 1042 In [10]: %reset_selective -f b
1043 1043
1044 1044 In [11]: who_ls
1045 1045 Out[11]: ['a']
1046 1046 """
1047 1047
1048 1048 opts, regex = self.parse_options(parameter_s,'f')
1049 1049
1050 1050 if opts.has_key('f'):
1051 1051 ans = True
1052 1052 else:
1053 1053 ans = self.shell.ask_yes_no(
1054 1054 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1055 1055 if not ans:
1056 1056 print 'Nothing done.'
1057 1057 return
1058 1058 user_ns = self.shell.user_ns
1059 1059 if not regex:
1060 1060 print 'No regex pattern specified. Nothing done.'
1061 1061 return
1062 1062 else:
1063 1063 try:
1064 1064 m = re.compile(regex)
1065 1065 except TypeError:
1066 1066 raise TypeError('regex must be a string or compiled pattern')
1067 1067 for i in self.magic_who_ls():
1068 1068 if m.search(i):
1069 1069 del(user_ns[i])
1070 1070
1071 1071 def magic_xdel(self, parameter_s=''):
1072 1072 """Delete a variable, trying to clear it from anywhere that
1073 1073 IPython's machinery has references to it. By default, this uses
1074 1074 the identity of the named object in the user namespace to remove
1075 1075 references held under other names. The object is also removed
1076 1076 from the output history.
1077 1077
1078 1078 Options
1079 1079 -n : Delete the specified name from all namespaces, without
1080 1080 checking their identity.
1081 1081 """
1082 1082 opts, varname = self.parse_options(parameter_s,'n')
1083 1083 try:
1084 1084 self.shell.del_var(varname, ('n' in opts))
1085 1085 except (NameError, ValueError) as e:
1086 1086 print type(e).__name__ +": "+ str(e)
1087 1087
1088 1088 def magic_logstart(self,parameter_s=''):
1089 1089 """Start logging anywhere in a session.
1090 1090
1091 1091 %logstart [-o|-r|-t] [log_name [log_mode]]
1092 1092
1093 1093 If no name is given, it defaults to a file named 'ipython_log.py' in your
1094 1094 current directory, in 'rotate' mode (see below).
1095 1095
1096 1096 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1097 1097 history up to that point and then continues logging.
1098 1098
1099 1099 %logstart takes a second optional parameter: logging mode. This can be one
1100 1100 of (note that the modes are given unquoted):\\
1101 1101 append: well, that says it.\\
1102 1102 backup: rename (if exists) to name~ and start name.\\
1103 1103 global: single logfile in your home dir, appended to.\\
1104 1104 over : overwrite existing log.\\
1105 1105 rotate: create rotating logs name.1~, name.2~, etc.
1106 1106
1107 1107 Options:
1108 1108
1109 1109 -o: log also IPython's output. In this mode, all commands which
1110 1110 generate an Out[NN] prompt are recorded to the logfile, right after
1111 1111 their corresponding input line. The output lines are always
1112 1112 prepended with a '#[Out]# ' marker, so that the log remains valid
1113 1113 Python code.
1114 1114
1115 1115 Since this marker is always the same, filtering only the output from
1116 1116 a log is very easy, using for example a simple awk call:
1117 1117
1118 1118 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1119 1119
1120 1120 -r: log 'raw' input. Normally, IPython's logs contain the processed
1121 1121 input, so that user lines are logged in their final form, converted
1122 1122 into valid Python. For example, %Exit is logged as
1123 1123 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1124 1124 exactly as typed, with no transformations applied.
1125 1125
1126 1126 -t: put timestamps before each input line logged (these are put in
1127 1127 comments)."""
1128 1128
1129 1129 opts,par = self.parse_options(parameter_s,'ort')
1130 1130 log_output = 'o' in opts
1131 1131 log_raw_input = 'r' in opts
1132 1132 timestamp = 't' in opts
1133 1133
1134 1134 logger = self.shell.logger
1135 1135
1136 1136 # if no args are given, the defaults set in the logger constructor by
1137 1137 # ipytohn remain valid
1138 1138 if par:
1139 1139 try:
1140 1140 logfname,logmode = par.split()
1141 1141 except:
1142 1142 logfname = par
1143 1143 logmode = 'backup'
1144 1144 else:
1145 1145 logfname = logger.logfname
1146 1146 logmode = logger.logmode
1147 1147 # put logfname into rc struct as if it had been called on the command
1148 1148 # line, so it ends up saved in the log header Save it in case we need
1149 1149 # to restore it...
1150 1150 old_logfile = self.shell.logfile
1151 1151 if logfname:
1152 1152 logfname = os.path.expanduser(logfname)
1153 1153 self.shell.logfile = logfname
1154 1154
1155 1155 loghead = '# IPython log file\n\n'
1156 1156 try:
1157 1157 started = logger.logstart(logfname,loghead,logmode,
1158 1158 log_output,timestamp,log_raw_input)
1159 1159 except:
1160 1160 self.shell.logfile = old_logfile
1161 1161 warn("Couldn't start log: %s" % sys.exc_info()[1])
1162 1162 else:
1163 1163 # log input history up to this point, optionally interleaving
1164 1164 # output if requested
1165 1165
1166 1166 if timestamp:
1167 1167 # disable timestamping for the previous history, since we've
1168 1168 # lost those already (no time machine here).
1169 1169 logger.timestamp = False
1170 1170
1171 1171 if log_raw_input:
1172 1172 input_hist = self.shell.history_manager.input_hist_raw
1173 1173 else:
1174 1174 input_hist = self.shell.history_manager.input_hist_parsed
1175 1175
1176 1176 if log_output:
1177 1177 log_write = logger.log_write
1178 1178 output_hist = self.shell.history_manager.output_hist
1179 1179 for n in range(1,len(input_hist)-1):
1180 1180 log_write(input_hist[n].rstrip() + '\n')
1181 1181 if n in output_hist:
1182 1182 log_write(repr(output_hist[n]),'output')
1183 1183 else:
1184 1184 logger.log_write('\n'.join(input_hist[1:]))
1185 1185 logger.log_write('\n')
1186 1186 if timestamp:
1187 1187 # re-enable timestamping
1188 1188 logger.timestamp = True
1189 1189
1190 1190 print ('Activating auto-logging. '
1191 1191 'Current session state plus future input saved.')
1192 1192 logger.logstate()
1193 1193
1194 1194 def magic_logstop(self,parameter_s=''):
1195 1195 """Fully stop logging and close log file.
1196 1196
1197 1197 In order to start logging again, a new %logstart call needs to be made,
1198 1198 possibly (though not necessarily) with a new filename, mode and other
1199 1199 options."""
1200 1200 self.logger.logstop()
1201 1201
1202 1202 def magic_logoff(self,parameter_s=''):
1203 1203 """Temporarily stop logging.
1204 1204
1205 1205 You must have previously started logging."""
1206 1206 self.shell.logger.switch_log(0)
1207 1207
1208 1208 def magic_logon(self,parameter_s=''):
1209 1209 """Restart logging.
1210 1210
1211 1211 This function is for restarting logging which you've temporarily
1212 1212 stopped with %logoff. For starting logging for the first time, you
1213 1213 must use the %logstart function, which allows you to specify an
1214 1214 optional log filename."""
1215 1215
1216 1216 self.shell.logger.switch_log(1)
1217 1217
1218 1218 def magic_logstate(self,parameter_s=''):
1219 1219 """Print the status of the logging system."""
1220 1220
1221 1221 self.shell.logger.logstate()
1222 1222
1223 1223 def magic_pdb(self, parameter_s=''):
1224 1224 """Control the automatic calling of the pdb interactive debugger.
1225 1225
1226 1226 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1227 1227 argument it works as a toggle.
1228 1228
1229 1229 When an exception is triggered, IPython can optionally call the
1230 1230 interactive pdb debugger after the traceback printout. %pdb toggles
1231 1231 this feature on and off.
1232 1232
1233 1233 The initial state of this feature is set in your configuration
1234 1234 file (the option is ``InteractiveShell.pdb``).
1235 1235
1236 1236 If you want to just activate the debugger AFTER an exception has fired,
1237 1237 without having to type '%pdb on' and rerunning your code, you can use
1238 1238 the %debug magic."""
1239 1239
1240 1240 par = parameter_s.strip().lower()
1241 1241
1242 1242 if par:
1243 1243 try:
1244 1244 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1245 1245 except KeyError:
1246 1246 print ('Incorrect argument. Use on/1, off/0, '
1247 1247 'or nothing for a toggle.')
1248 1248 return
1249 1249 else:
1250 1250 # toggle
1251 1251 new_pdb = not self.shell.call_pdb
1252 1252
1253 1253 # set on the shell
1254 1254 self.shell.call_pdb = new_pdb
1255 1255 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1256 1256
1257 1257 def magic_debug(self, parameter_s=''):
1258 1258 """Activate the interactive debugger in post-mortem mode.
1259 1259
1260 1260 If an exception has just occurred, this lets you inspect its stack
1261 1261 frames interactively. Note that this will always work only on the last
1262 1262 traceback that occurred, so you must call this quickly after an
1263 1263 exception that you wish to inspect has fired, because if another one
1264 1264 occurs, it clobbers the previous one.
1265 1265
1266 1266 If you want IPython to automatically do this on every exception, see
1267 1267 the %pdb magic for more details.
1268 1268 """
1269 1269 self.shell.debugger(force=True)
1270 1270
1271 1271 @skip_doctest
1272 1272 def magic_prun(self, parameter_s ='',user_mode=1,
1273 1273 opts=None,arg_lst=None,prog_ns=None):
1274 1274
1275 1275 """Run a statement through the python code profiler.
1276 1276
1277 1277 Usage:
1278 1278 %prun [options] statement
1279 1279
1280 1280 The given statement (which doesn't require quote marks) is run via the
1281 1281 python profiler in a manner similar to the profile.run() function.
1282 1282 Namespaces are internally managed to work correctly; profile.run
1283 1283 cannot be used in IPython because it makes certain assumptions about
1284 1284 namespaces which do not hold under IPython.
1285 1285
1286 1286 Options:
1287 1287
1288 1288 -l <limit>: you can place restrictions on what or how much of the
1289 1289 profile gets printed. The limit value can be:
1290 1290
1291 1291 * A string: only information for function names containing this string
1292 1292 is printed.
1293 1293
1294 1294 * An integer: only these many lines are printed.
1295 1295
1296 1296 * A float (between 0 and 1): this fraction of the report is printed
1297 1297 (for example, use a limit of 0.4 to see the topmost 40% only).
1298 1298
1299 1299 You can combine several limits with repeated use of the option. For
1300 1300 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1301 1301 information about class constructors.
1302 1302
1303 1303 -r: return the pstats.Stats object generated by the profiling. This
1304 1304 object has all the information about the profile in it, and you can
1305 1305 later use it for further analysis or in other functions.
1306 1306
1307 1307 -s <key>: sort profile by given key. You can provide more than one key
1308 1308 by using the option several times: '-s key1 -s key2 -s key3...'. The
1309 1309 default sorting key is 'time'.
1310 1310
1311 1311 The following is copied verbatim from the profile documentation
1312 1312 referenced below:
1313 1313
1314 1314 When more than one key is provided, additional keys are used as
1315 1315 secondary criteria when the there is equality in all keys selected
1316 1316 before them.
1317 1317
1318 1318 Abbreviations can be used for any key names, as long as the
1319 1319 abbreviation is unambiguous. The following are the keys currently
1320 1320 defined:
1321 1321
1322 1322 Valid Arg Meaning
1323 1323 "calls" call count
1324 1324 "cumulative" cumulative time
1325 1325 "file" file name
1326 1326 "module" file name
1327 1327 "pcalls" primitive call count
1328 1328 "line" line number
1329 1329 "name" function name
1330 1330 "nfl" name/file/line
1331 1331 "stdname" standard name
1332 1332 "time" internal time
1333 1333
1334 1334 Note that all sorts on statistics are in descending order (placing
1335 1335 most time consuming items first), where as name, file, and line number
1336 1336 searches are in ascending order (i.e., alphabetical). The subtle
1337 1337 distinction between "nfl" and "stdname" is that the standard name is a
1338 1338 sort of the name as printed, which means that the embedded line
1339 1339 numbers get compared in an odd way. For example, lines 3, 20, and 40
1340 1340 would (if the file names were the same) appear in the string order
1341 1341 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1342 1342 line numbers. In fact, sort_stats("nfl") is the same as
1343 1343 sort_stats("name", "file", "line").
1344 1344
1345 1345 -T <filename>: save profile results as shown on screen to a text
1346 1346 file. The profile is still shown on screen.
1347 1347
1348 1348 -D <filename>: save (via dump_stats) profile statistics to given
1349 1349 filename. This data is in a format understod by the pstats module, and
1350 1350 is generated by a call to the dump_stats() method of profile
1351 1351 objects. The profile is still shown on screen.
1352 1352
1353 1353 If you want to run complete programs under the profiler's control, use
1354 1354 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1355 1355 contains profiler specific options as described here.
1356 1356
1357 1357 You can read the complete documentation for the profile module with::
1358 1358
1359 1359 In [1]: import profile; profile.help()
1360 1360 """
1361 1361
1362 1362 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1363 1363 # protect user quote marks
1364 1364 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1365 1365
1366 1366 if user_mode: # regular user call
1367 1367 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1368 1368 list_all=1)
1369 1369 namespace = self.shell.user_ns
1370 1370 else: # called to run a program by %run -p
1371 1371 try:
1372 1372 filename = get_py_filename(arg_lst[0])
1373 1373 except IOError,msg:
1374 1374 error(msg)
1375 1375 return
1376 1376
1377 1377 arg_str = 'execfile(filename,prog_ns)'
1378 1378 namespace = locals()
1379 1379
1380 1380 opts.merge(opts_def)
1381 1381
1382 1382 prof = profile.Profile()
1383 1383 try:
1384 1384 prof = prof.runctx(arg_str,namespace,namespace)
1385 1385 sys_exit = ''
1386 1386 except SystemExit:
1387 1387 sys_exit = """*** SystemExit exception caught in code being profiled."""
1388 1388
1389 1389 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1390 1390
1391 1391 lims = opts.l
1392 1392 if lims:
1393 1393 lims = [] # rebuild lims with ints/floats/strings
1394 1394 for lim in opts.l:
1395 1395 try:
1396 1396 lims.append(int(lim))
1397 1397 except ValueError:
1398 1398 try:
1399 1399 lims.append(float(lim))
1400 1400 except ValueError:
1401 1401 lims.append(lim)
1402 1402
1403 1403 # Trap output.
1404 1404 stdout_trap = StringIO()
1405 1405
1406 1406 if hasattr(stats,'stream'):
1407 1407 # In newer versions of python, the stats object has a 'stream'
1408 1408 # attribute to write into.
1409 1409 stats.stream = stdout_trap
1410 1410 stats.print_stats(*lims)
1411 1411 else:
1412 1412 # For older versions, we manually redirect stdout during printing
1413 1413 sys_stdout = sys.stdout
1414 1414 try:
1415 1415 sys.stdout = stdout_trap
1416 1416 stats.print_stats(*lims)
1417 1417 finally:
1418 1418 sys.stdout = sys_stdout
1419 1419
1420 1420 output = stdout_trap.getvalue()
1421 1421 output = output.rstrip()
1422 1422
1423 1423 page.page(output)
1424 1424 print sys_exit,
1425 1425
1426 1426 dump_file = opts.D[0]
1427 1427 text_file = opts.T[0]
1428 1428 if dump_file:
1429 1429 dump_file = unquote_filename(dump_file)
1430 1430 prof.dump_stats(dump_file)
1431 1431 print '\n*** Profile stats marshalled to file',\
1432 1432 `dump_file`+'.',sys_exit
1433 1433 if text_file:
1434 1434 text_file = unquote_filename(text_file)
1435 1435 pfile = file(text_file,'w')
1436 1436 pfile.write(output)
1437 1437 pfile.close()
1438 1438 print '\n*** Profile printout saved to text file',\
1439 1439 `text_file`+'.',sys_exit
1440 1440
1441 1441 if opts.has_key('r'):
1442 1442 return stats
1443 1443 else:
1444 1444 return None
1445 1445
1446 1446 @skip_doctest
1447 1447 def magic_run(self, parameter_s ='',runner=None,
1448 1448 file_finder=get_py_filename):
1449 1449 """Run the named file inside IPython as a program.
1450 1450
1451 1451 Usage:\\
1452 1452 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1453 1453
1454 1454 Parameters after the filename are passed as command-line arguments to
1455 1455 the program (put in sys.argv). Then, control returns to IPython's
1456 1456 prompt.
1457 1457
1458 1458 This is similar to running at a system prompt:\\
1459 1459 $ python file args\\
1460 1460 but with the advantage of giving you IPython's tracebacks, and of
1461 1461 loading all variables into your interactive namespace for further use
1462 1462 (unless -p is used, see below).
1463 1463
1464 1464 The file is executed in a namespace initially consisting only of
1465 1465 __name__=='__main__' and sys.argv constructed as indicated. It thus
1466 1466 sees its environment as if it were being run as a stand-alone program
1467 1467 (except for sharing global objects such as previously imported
1468 1468 modules). But after execution, the IPython interactive namespace gets
1469 1469 updated with all variables defined in the program (except for __name__
1470 1470 and sys.argv). This allows for very convenient loading of code for
1471 1471 interactive work, while giving each program a 'clean sheet' to run in.
1472 1472
1473 1473 Options:
1474 1474
1475 1475 -n: __name__ is NOT set to '__main__', but to the running file's name
1476 1476 without extension (as python does under import). This allows running
1477 1477 scripts and reloading the definitions in them without calling code
1478 1478 protected by an ' if __name__ == "__main__" ' clause.
1479 1479
1480 1480 -i: run the file in IPython's namespace instead of an empty one. This
1481 1481 is useful if you are experimenting with code written in a text editor
1482 1482 which depends on variables defined interactively.
1483 1483
1484 1484 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1485 1485 being run. This is particularly useful if IPython is being used to
1486 1486 run unittests, which always exit with a sys.exit() call. In such
1487 1487 cases you are interested in the output of the test results, not in
1488 1488 seeing a traceback of the unittest module.
1489 1489
1490 1490 -t: print timing information at the end of the run. IPython will give
1491 1491 you an estimated CPU time consumption for your script, which under
1492 1492 Unix uses the resource module to avoid the wraparound problems of
1493 1493 time.clock(). Under Unix, an estimate of time spent on system tasks
1494 1494 is also given (for Windows platforms this is reported as 0.0).
1495 1495
1496 1496 If -t is given, an additional -N<N> option can be given, where <N>
1497 1497 must be an integer indicating how many times you want the script to
1498 1498 run. The final timing report will include total and per run results.
1499 1499
1500 1500 For example (testing the script uniq_stable.py):
1501 1501
1502 1502 In [1]: run -t uniq_stable
1503 1503
1504 1504 IPython CPU timings (estimated):\\
1505 1505 User : 0.19597 s.\\
1506 1506 System: 0.0 s.\\
1507 1507
1508 1508 In [2]: run -t -N5 uniq_stable
1509 1509
1510 1510 IPython CPU timings (estimated):\\
1511 1511 Total runs performed: 5\\
1512 1512 Times : Total Per run\\
1513 1513 User : 0.910862 s, 0.1821724 s.\\
1514 1514 System: 0.0 s, 0.0 s.
1515 1515
1516 1516 -d: run your program under the control of pdb, the Python debugger.
1517 1517 This allows you to execute your program step by step, watch variables,
1518 1518 etc. Internally, what IPython does is similar to calling:
1519 1519
1520 1520 pdb.run('execfile("YOURFILENAME")')
1521 1521
1522 1522 with a breakpoint set on line 1 of your file. You can change the line
1523 1523 number for this automatic breakpoint to be <N> by using the -bN option
1524 1524 (where N must be an integer). For example:
1525 1525
1526 1526 %run -d -b40 myscript
1527 1527
1528 1528 will set the first breakpoint at line 40 in myscript.py. Note that
1529 1529 the first breakpoint must be set on a line which actually does
1530 1530 something (not a comment or docstring) for it to stop execution.
1531 1531
1532 1532 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1533 1533 first enter 'c' (without qoutes) to start execution up to the first
1534 1534 breakpoint.
1535 1535
1536 1536 Entering 'help' gives information about the use of the debugger. You
1537 1537 can easily see pdb's full documentation with "import pdb;pdb.help()"
1538 1538 at a prompt.
1539 1539
1540 1540 -p: run program under the control of the Python profiler module (which
1541 1541 prints a detailed report of execution times, function calls, etc).
1542 1542
1543 1543 You can pass other options after -p which affect the behavior of the
1544 1544 profiler itself. See the docs for %prun for details.
1545 1545
1546 1546 In this mode, the program's variables do NOT propagate back to the
1547 1547 IPython interactive namespace (because they remain in the namespace
1548 1548 where the profiler executes them).
1549 1549
1550 1550 Internally this triggers a call to %prun, see its documentation for
1551 1551 details on the options available specifically for profiling.
1552 1552
1553 1553 There is one special usage for which the text above doesn't apply:
1554 1554 if the filename ends with .ipy, the file is run as ipython script,
1555 1555 just as if the commands were written on IPython prompt.
1556 1556 """
1557 1557
1558 1558 # get arguments and set sys.argv for program to be run.
1559 1559 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1560 1560 mode='list',list_all=1)
1561 1561
1562 1562 try:
1563 1563 filename = file_finder(arg_lst[0])
1564 1564 except IndexError:
1565 1565 warn('you must provide at least a filename.')
1566 1566 print '\n%run:\n',oinspect.getdoc(self.magic_run)
1567 1567 return
1568 1568 except IOError,msg:
1569 1569 error(msg)
1570 1570 return
1571 1571
1572 1572 if filename.lower().endswith('.ipy'):
1573 1573 self.shell.safe_execfile_ipy(filename)
1574 1574 return
1575 1575
1576 1576 # Control the response to exit() calls made by the script being run
1577 1577 exit_ignore = opts.has_key('e')
1578 1578
1579 1579 # Make sure that the running script gets a proper sys.argv as if it
1580 1580 # were run from a system shell.
1581 1581 save_argv = sys.argv # save it for later restoring
1582 1582
1583 1583 # simulate shell expansion on arguments, at least tilde expansion
1584 1584 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1585 1585
1586 1586 sys.argv = [filename]+ args # put in the proper filename
1587 1587
1588 1588 if opts.has_key('i'):
1589 1589 # Run in user's interactive namespace
1590 1590 prog_ns = self.shell.user_ns
1591 1591 __name__save = self.shell.user_ns['__name__']
1592 1592 prog_ns['__name__'] = '__main__'
1593 1593 main_mod = self.shell.new_main_mod(prog_ns)
1594 1594 else:
1595 1595 # Run in a fresh, empty namespace
1596 1596 if opts.has_key('n'):
1597 1597 name = os.path.splitext(os.path.basename(filename))[0]
1598 1598 else:
1599 1599 name = '__main__'
1600 1600
1601 1601 main_mod = self.shell.new_main_mod()
1602 1602 prog_ns = main_mod.__dict__
1603 1603 prog_ns['__name__'] = name
1604 1604
1605 1605 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1606 1606 # set the __file__ global in the script's namespace
1607 1607 prog_ns['__file__'] = filename
1608 1608
1609 1609 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1610 1610 # that, if we overwrite __main__, we replace it at the end
1611 1611 main_mod_name = prog_ns['__name__']
1612 1612
1613 1613 if main_mod_name == '__main__':
1614 1614 restore_main = sys.modules['__main__']
1615 1615 else:
1616 1616 restore_main = False
1617 1617
1618 1618 # This needs to be undone at the end to prevent holding references to
1619 1619 # every single object ever created.
1620 1620 sys.modules[main_mod_name] = main_mod
1621 1621
1622 1622 try:
1623 1623 stats = None
1624 1624 with self.readline_no_record:
1625 1625 if opts.has_key('p'):
1626 1626 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1627 1627 else:
1628 1628 if opts.has_key('d'):
1629 1629 deb = debugger.Pdb(self.shell.colors)
1630 1630 # reset Breakpoint state, which is moronically kept
1631 1631 # in a class
1632 1632 bdb.Breakpoint.next = 1
1633 1633 bdb.Breakpoint.bplist = {}
1634 1634 bdb.Breakpoint.bpbynumber = [None]
1635 1635 # Set an initial breakpoint to stop execution
1636 1636 maxtries = 10
1637 1637 bp = int(opts.get('b',[1])[0])
1638 1638 checkline = deb.checkline(filename,bp)
1639 1639 if not checkline:
1640 1640 for bp in range(bp+1,bp+maxtries+1):
1641 1641 if deb.checkline(filename,bp):
1642 1642 break
1643 1643 else:
1644 1644 msg = ("\nI failed to find a valid line to set "
1645 1645 "a breakpoint\n"
1646 1646 "after trying up to line: %s.\n"
1647 1647 "Please set a valid breakpoint manually "
1648 1648 "with the -b option." % bp)
1649 1649 error(msg)
1650 1650 return
1651 1651 # if we find a good linenumber, set the breakpoint
1652 1652 deb.do_break('%s:%s' % (filename,bp))
1653 1653 # Start file run
1654 1654 print "NOTE: Enter 'c' at the",
1655 1655 print "%s prompt to start your script." % deb.prompt
1656 1656 try:
1657 1657 deb.run('execfile("%s")' % filename,prog_ns)
1658 1658
1659 1659 except:
1660 1660 etype, value, tb = sys.exc_info()
1661 1661 # Skip three frames in the traceback: the %run one,
1662 1662 # one inside bdb.py, and the command-line typed by the
1663 1663 # user (run by exec in pdb itself).
1664 1664 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1665 1665 else:
1666 1666 if runner is None:
1667 1667 runner = self.shell.safe_execfile
1668 1668 if opts.has_key('t'):
1669 1669 # timed execution
1670 1670 try:
1671 1671 nruns = int(opts['N'][0])
1672 1672 if nruns < 1:
1673 1673 error('Number of runs must be >=1')
1674 1674 return
1675 1675 except (KeyError):
1676 1676 nruns = 1
1677 1677 twall0 = time.time()
1678 1678 if nruns == 1:
1679 1679 t0 = clock2()
1680 1680 runner(filename,prog_ns,prog_ns,
1681 1681 exit_ignore=exit_ignore)
1682 1682 t1 = clock2()
1683 1683 t_usr = t1[0]-t0[0]
1684 1684 t_sys = t1[1]-t0[1]
1685 1685 print "\nIPython CPU timings (estimated):"
1686 1686 print " User : %10.2f s." % t_usr
1687 1687 print " System : %10.2f s." % t_sys
1688 1688 else:
1689 1689 runs = range(nruns)
1690 1690 t0 = clock2()
1691 1691 for nr in runs:
1692 1692 runner(filename,prog_ns,prog_ns,
1693 1693 exit_ignore=exit_ignore)
1694 1694 t1 = clock2()
1695 1695 t_usr = t1[0]-t0[0]
1696 1696 t_sys = t1[1]-t0[1]
1697 1697 print "\nIPython CPU timings (estimated):"
1698 1698 print "Total runs performed:",nruns
1699 1699 print " Times : %10.2f %10.2f" % ('Total','Per run')
1700 1700 print " User : %10.2f s, %10.2f s." % (t_usr,t_usr/nruns)
1701 1701 print " System : %10.2f s, %10.2f s." % (t_sys,t_sys/nruns)
1702 1702 twall1 = time.time()
1703 1703 print "Wall time: %10.2f s." % (twall1-twall0)
1704 1704
1705 1705 else:
1706 1706 # regular execution
1707 1707 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1708 1708
1709 1709 if opts.has_key('i'):
1710 1710 self.shell.user_ns['__name__'] = __name__save
1711 1711 else:
1712 1712 # The shell MUST hold a reference to prog_ns so after %run
1713 1713 # exits, the python deletion mechanism doesn't zero it out
1714 1714 # (leaving dangling references).
1715 1715 self.shell.cache_main_mod(prog_ns,filename)
1716 1716 # update IPython interactive namespace
1717 1717
1718 1718 # Some forms of read errors on the file may mean the
1719 1719 # __name__ key was never set; using pop we don't have to
1720 1720 # worry about a possible KeyError.
1721 1721 prog_ns.pop('__name__', None)
1722 1722
1723 1723 self.shell.user_ns.update(prog_ns)
1724 1724 finally:
1725 1725 # It's a bit of a mystery why, but __builtins__ can change from
1726 1726 # being a module to becoming a dict missing some key data after
1727 1727 # %run. As best I can see, this is NOT something IPython is doing
1728 1728 # at all, and similar problems have been reported before:
1729 1729 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1730 1730 # Since this seems to be done by the interpreter itself, the best
1731 1731 # we can do is to at least restore __builtins__ for the user on
1732 1732 # exit.
1733 1733 self.shell.user_ns['__builtins__'] = builtin_mod
1734 1734
1735 1735 # Ensure key global structures are restored
1736 1736 sys.argv = save_argv
1737 1737 if restore_main:
1738 1738 sys.modules['__main__'] = restore_main
1739 1739 else:
1740 1740 # Remove from sys.modules the reference to main_mod we'd
1741 1741 # added. Otherwise it will trap references to objects
1742 1742 # contained therein.
1743 1743 del sys.modules[main_mod_name]
1744 1744
1745 1745 return stats
1746 1746
1747 1747 @skip_doctest
1748 1748 def magic_timeit(self, parameter_s =''):
1749 1749 """Time execution of a Python statement or expression
1750 1750
1751 1751 Usage:\\
1752 1752 %timeit [-n<N> -r<R> [-t|-c]] statement
1753 1753
1754 1754 Time execution of a Python statement or expression using the timeit
1755 1755 module.
1756 1756
1757 1757 Options:
1758 1758 -n<N>: execute the given statement <N> times in a loop. If this value
1759 1759 is not given, a fitting value is chosen.
1760 1760
1761 1761 -r<R>: repeat the loop iteration <R> times and take the best result.
1762 1762 Default: 3
1763 1763
1764 1764 -t: use time.time to measure the time, which is the default on Unix.
1765 1765 This function measures wall time.
1766 1766
1767 1767 -c: use time.clock to measure the time, which is the default on
1768 1768 Windows and measures wall time. On Unix, resource.getrusage is used
1769 1769 instead and returns the CPU user time.
1770 1770
1771 1771 -p<P>: use a precision of <P> digits to display the timing result.
1772 1772 Default: 3
1773 1773
1774 1774
1775 1775 Examples:
1776 1776
1777 1777 In [1]: %timeit pass
1778 1778 10000000 loops, best of 3: 53.3 ns per loop
1779 1779
1780 1780 In [2]: u = None
1781 1781
1782 1782 In [3]: %timeit u is None
1783 1783 10000000 loops, best of 3: 184 ns per loop
1784 1784
1785 1785 In [4]: %timeit -r 4 u == None
1786 1786 1000000 loops, best of 4: 242 ns per loop
1787 1787
1788 1788 In [5]: import time
1789 1789
1790 1790 In [6]: %timeit -n1 time.sleep(2)
1791 1791 1 loops, best of 3: 2 s per loop
1792 1792
1793 1793
1794 1794 The times reported by %timeit will be slightly higher than those
1795 1795 reported by the timeit.py script when variables are accessed. This is
1796 1796 due to the fact that %timeit executes the statement in the namespace
1797 1797 of the shell, compared with timeit.py, which uses a single setup
1798 1798 statement to import function or create variables. Generally, the bias
1799 1799 does not matter as long as results from timeit.py are not mixed with
1800 1800 those from %timeit."""
1801 1801
1802 1802 import timeit
1803 1803 import math
1804 1804
1805 1805 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1806 1806 # certain terminals. Until we figure out a robust way of
1807 1807 # auto-detecting if the terminal can deal with it, use plain 'us' for
1808 1808 # microseconds. I am really NOT happy about disabling the proper
1809 1809 # 'micro' prefix, but crashing is worse... If anyone knows what the
1810 1810 # right solution for this is, I'm all ears...
1811 1811 #
1812 1812 # Note: using
1813 1813 #
1814 1814 # s = u'\xb5'
1815 1815 # s.encode(sys.getdefaultencoding())
1816 1816 #
1817 1817 # is not sufficient, as I've seen terminals where that fails but
1818 1818 # print s
1819 1819 #
1820 1820 # succeeds
1821 1821 #
1822 1822 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1823 1823
1824 1824 #units = [u"s", u"ms",u'\xb5',"ns"]
1825 1825 units = [u"s", u"ms",u'us',"ns"]
1826 1826
1827 1827 scaling = [1, 1e3, 1e6, 1e9]
1828 1828
1829 1829 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1830 1830 posix=False)
1831 1831 if stmt == "":
1832 1832 return
1833 1833 timefunc = timeit.default_timer
1834 1834 number = int(getattr(opts, "n", 0))
1835 1835 repeat = int(getattr(opts, "r", timeit.default_repeat))
1836 1836 precision = int(getattr(opts, "p", 3))
1837 1837 if hasattr(opts, "t"):
1838 1838 timefunc = time.time
1839 1839 if hasattr(opts, "c"):
1840 1840 timefunc = clock
1841 1841
1842 1842 timer = timeit.Timer(timer=timefunc)
1843 1843 # this code has tight coupling to the inner workings of timeit.Timer,
1844 1844 # but is there a better way to achieve that the code stmt has access
1845 1845 # to the shell namespace?
1846 1846
1847 1847 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1848 1848 'setup': "pass"}
1849 1849 # Track compilation time so it can be reported if too long
1850 1850 # Minimum time above which compilation time will be reported
1851 1851 tc_min = 0.1
1852 1852
1853 1853 t0 = clock()
1854 1854 code = compile(src, "<magic-timeit>", "exec")
1855 1855 tc = clock()-t0
1856 1856
1857 1857 ns = {}
1858 1858 exec code in self.shell.user_ns, ns
1859 1859 timer.inner = ns["inner"]
1860 1860
1861 1861 if number == 0:
1862 1862 # determine number so that 0.2 <= total time < 2.0
1863 1863 number = 1
1864 1864 for i in range(1, 10):
1865 1865 if timer.timeit(number) >= 0.2:
1866 1866 break
1867 1867 number *= 10
1868 1868
1869 1869 best = min(timer.repeat(repeat, number)) / number
1870 1870
1871 1871 if best > 0.0 and best < 1000.0:
1872 1872 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1873 1873 elif best >= 1000.0:
1874 1874 order = 0
1875 1875 else:
1876 1876 order = 3
1877 1877 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1878 1878 precision,
1879 1879 best * scaling[order],
1880 1880 units[order])
1881 1881 if tc > tc_min:
1882 1882 print "Compiler time: %.2f s" % tc
1883 1883
1884 1884 @skip_doctest
1885 1885 @needs_local_scope
1886 1886 def magic_time(self,parameter_s = ''):
1887 1887 """Time execution of a Python statement or expression.
1888 1888
1889 1889 The CPU and wall clock times are printed, and the value of the
1890 1890 expression (if any) is returned. Note that under Win32, system time
1891 1891 is always reported as 0, since it can not be measured.
1892 1892
1893 1893 This function provides very basic timing functionality. In Python
1894 1894 2.3, the timeit module offers more control and sophistication, so this
1895 1895 could be rewritten to use it (patches welcome).
1896 1896
1897 1897 Some examples:
1898 1898
1899 1899 In [1]: time 2**128
1900 1900 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1901 1901 Wall time: 0.00
1902 1902 Out[1]: 340282366920938463463374607431768211456L
1903 1903
1904 1904 In [2]: n = 1000000
1905 1905
1906 1906 In [3]: time sum(range(n))
1907 1907 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1908 1908 Wall time: 1.37
1909 1909 Out[3]: 499999500000L
1910 1910
1911 1911 In [4]: time print 'hello world'
1912 1912 hello world
1913 1913 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1914 1914 Wall time: 0.00
1915 1915
1916 1916 Note that the time needed by Python to compile the given expression
1917 1917 will be reported if it is more than 0.1s. In this example, the
1918 1918 actual exponentiation is done by Python at compilation time, so while
1919 1919 the expression can take a noticeable amount of time to compute, that
1920 1920 time is purely due to the compilation:
1921 1921
1922 1922 In [5]: time 3**9999;
1923 1923 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1924 1924 Wall time: 0.00 s
1925 1925
1926 1926 In [6]: time 3**999999;
1927 1927 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1928 1928 Wall time: 0.00 s
1929 1929 Compiler : 0.78 s
1930 1930 """
1931 1931
1932 1932 # fail immediately if the given expression can't be compiled
1933 1933
1934 1934 expr = self.shell.prefilter(parameter_s,False)
1935 1935
1936 1936 # Minimum time above which compilation time will be reported
1937 1937 tc_min = 0.1
1938 1938
1939 1939 try:
1940 1940 mode = 'eval'
1941 1941 t0 = clock()
1942 1942 code = compile(expr,'<timed eval>',mode)
1943 1943 tc = clock()-t0
1944 1944 except SyntaxError:
1945 1945 mode = 'exec'
1946 1946 t0 = clock()
1947 1947 code = compile(expr,'<timed exec>',mode)
1948 1948 tc = clock()-t0
1949 1949 # skew measurement as little as possible
1950 1950 glob = self.shell.user_ns
1951 1951 locs = self._magic_locals
1952 1952 clk = clock2
1953 1953 wtime = time.time
1954 1954 # time execution
1955 1955 wall_st = wtime()
1956 1956 if mode=='eval':
1957 1957 st = clk()
1958 1958 out = eval(code, glob, locs)
1959 1959 end = clk()
1960 1960 else:
1961 1961 st = clk()
1962 1962 exec code in glob, locs
1963 1963 end = clk()
1964 1964 out = None
1965 1965 wall_end = wtime()
1966 1966 # Compute actual times and report
1967 1967 wall_time = wall_end-wall_st
1968 1968 cpu_user = end[0]-st[0]
1969 1969 cpu_sys = end[1]-st[1]
1970 1970 cpu_tot = cpu_user+cpu_sys
1971 1971 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1972 1972 (cpu_user,cpu_sys,cpu_tot)
1973 1973 print "Wall time: %.2f s" % wall_time
1974 1974 if tc > tc_min:
1975 1975 print "Compiler : %.2f s" % tc
1976 1976 return out
1977 1977
1978 1978 @skip_doctest
1979 1979 def magic_macro(self,parameter_s = ''):
1980 1980 """Define a macro for future re-execution. It accepts ranges of history,
1981 1981 filenames or string objects.
1982 1982
1983 1983 Usage:\\
1984 1984 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1985 1985
1986 1986 Options:
1987 1987
1988 1988 -r: use 'raw' input. By default, the 'processed' history is used,
1989 1989 so that magics are loaded in their transformed version to valid
1990 1990 Python. If this option is given, the raw input as typed as the
1991 1991 command line is used instead.
1992 1992
1993 1993 This will define a global variable called `name` which is a string
1994 1994 made of joining the slices and lines you specify (n1,n2,... numbers
1995 1995 above) from your input history into a single string. This variable
1996 1996 acts like an automatic function which re-executes those lines as if
1997 1997 you had typed them. You just type 'name' at the prompt and the code
1998 1998 executes.
1999 1999
2000 2000 The syntax for indicating input ranges is described in %history.
2001 2001
2002 2002 Note: as a 'hidden' feature, you can also use traditional python slice
2003 2003 notation, where N:M means numbers N through M-1.
2004 2004
2005 2005 For example, if your history contains (%hist prints it):
2006 2006
2007 2007 44: x=1
2008 2008 45: y=3
2009 2009 46: z=x+y
2010 2010 47: print x
2011 2011 48: a=5
2012 2012 49: print 'x',x,'y',y
2013 2013
2014 2014 you can create a macro with lines 44 through 47 (included) and line 49
2015 2015 called my_macro with:
2016 2016
2017 2017 In [55]: %macro my_macro 44-47 49
2018 2018
2019 2019 Now, typing `my_macro` (without quotes) will re-execute all this code
2020 2020 in one pass.
2021 2021
2022 2022 You don't need to give the line-numbers in order, and any given line
2023 2023 number can appear multiple times. You can assemble macros with any
2024 2024 lines from your input history in any order.
2025 2025
2026 2026 The macro is a simple object which holds its value in an attribute,
2027 2027 but IPython's display system checks for macros and executes them as
2028 2028 code instead of printing them when you type their name.
2029 2029
2030 2030 You can view a macro's contents by explicitly printing it with:
2031 2031
2032 2032 'print macro_name'.
2033 2033
2034 2034 """
2035 2035 opts,args = self.parse_options(parameter_s,'r',mode='list')
2036 2036 if not args: # List existing macros
2037 2037 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2038 2038 isinstance(v, Macro))
2039 2039 if len(args) == 1:
2040 2040 raise UsageError(
2041 2041 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2042 2042 name, codefrom = args[0], " ".join(args[1:])
2043 2043
2044 2044 #print 'rng',ranges # dbg
2045 2045 try:
2046 2046 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2047 2047 except (ValueError, TypeError) as e:
2048 2048 print e.args[0]
2049 2049 return
2050 2050 macro = Macro(lines)
2051 2051 self.shell.define_macro(name, macro)
2052 2052 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2053 2053 print '=== Macro contents: ==='
2054 2054 print macro,
2055 2055
2056 2056 def magic_save(self,parameter_s = ''):
2057 2057 """Save a set of lines or a macro to a given filename.
2058 2058
2059 2059 Usage:\\
2060 2060 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2061 2061
2062 2062 Options:
2063 2063
2064 2064 -r: use 'raw' input. By default, the 'processed' history is used,
2065 2065 so that magics are loaded in their transformed version to valid
2066 2066 Python. If this option is given, the raw input as typed as the
2067 2067 command line is used instead.
2068 2068
2069 2069 This function uses the same syntax as %history for input ranges,
2070 2070 then saves the lines to the filename you specify.
2071 2071
2072 2072 It adds a '.py' extension to the file if you don't do so yourself, and
2073 2073 it asks for confirmation before overwriting existing files."""
2074 2074
2075 2075 opts,args = self.parse_options(parameter_s,'r',mode='list')
2076 2076 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2077 2077 if not fname.endswith('.py'):
2078 2078 fname += '.py'
2079 2079 if os.path.isfile(fname):
2080 2080 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2081 2081 if ans.lower() not in ['y','yes']:
2082 2082 print 'Operation cancelled.'
2083 2083 return
2084 2084 try:
2085 2085 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2086 2086 except (TypeError, ValueError) as e:
2087 2087 print e.args[0]
2088 2088 return
2089 2089 with py3compat.open(fname,'w', encoding="utf-8") as f:
2090 2090 f.write(u"# coding: utf-8\n")
2091 2091 f.write(py3compat.cast_unicode(cmds))
2092 2092 print 'The following commands were written to file `%s`:' % fname
2093 2093 print cmds
2094 2094
2095 2095 def magic_pastebin(self, parameter_s = ''):
2096 2096 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2097 2097 try:
2098 2098 code = self.shell.find_user_code(parameter_s)
2099 2099 except (ValueError, TypeError) as e:
2100 2100 print e.args[0]
2101 2101 return
2102 2102 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2103 2103 id = pbserver.pastes.newPaste("python", code)
2104 2104 return "http://paste.pocoo.org/show/" + id
2105 2105
2106 2106 def magic_loadpy(self, arg_s):
2107 2107 """Load a .py python script into the GUI console.
2108 2108
2109 2109 This magic command can either take a local filename or a url::
2110 2110
2111 2111 %loadpy myscript.py
2112 2112 %loadpy http://www.example.com/myscript.py
2113 2113 """
2114 2114 arg_s = unquote_filename(arg_s)
2115 2115 if not arg_s.endswith('.py'):
2116 2116 raise ValueError('%%load only works with .py files: %s' % arg_s)
2117 2117 if arg_s.startswith('http'):
2118 2118 import urllib2
2119 2119 response = urllib2.urlopen(arg_s)
2120 2120 content = response.read()
2121 2121 else:
2122 2122 with open(arg_s) as f:
2123 2123 content = f.read()
2124 2124 self.set_next_input(content)
2125 2125
2126 2126 def _find_edit_target(self, args, opts, last_call):
2127 2127 """Utility method used by magic_edit to find what to edit."""
2128 2128
2129 2129 def make_filename(arg):
2130 2130 "Make a filename from the given args"
2131 2131 arg = unquote_filename(arg)
2132 2132 try:
2133 2133 filename = get_py_filename(arg)
2134 2134 except IOError:
2135 2135 # If it ends with .py but doesn't already exist, assume we want
2136 2136 # a new file.
2137 2137 if arg.endswith('.py'):
2138 2138 filename = arg
2139 2139 else:
2140 2140 filename = None
2141 2141 return filename
2142 2142
2143 2143 # Set a few locals from the options for convenience:
2144 2144 opts_prev = 'p' in opts
2145 2145 opts_raw = 'r' in opts
2146 2146
2147 2147 # custom exceptions
2148 2148 class DataIsObject(Exception): pass
2149 2149
2150 2150 # Default line number value
2151 2151 lineno = opts.get('n',None)
2152 2152
2153 2153 if opts_prev:
2154 2154 args = '_%s' % last_call[0]
2155 2155 if not self.shell.user_ns.has_key(args):
2156 2156 args = last_call[1]
2157 2157
2158 2158 # use last_call to remember the state of the previous call, but don't
2159 2159 # let it be clobbered by successive '-p' calls.
2160 2160 try:
2161 2161 last_call[0] = self.shell.displayhook.prompt_count
2162 2162 if not opts_prev:
2163 2163 last_call[1] = parameter_s
2164 2164 except:
2165 2165 pass
2166 2166
2167 2167 # by default this is done with temp files, except when the given
2168 2168 # arg is a filename
2169 2169 use_temp = True
2170 2170
2171 2171 data = ''
2172 2172
2173 2173 # First, see if the arguments should be a filename.
2174 2174 filename = make_filename(args)
2175 2175 if filename:
2176 2176 use_temp = False
2177 2177 elif args:
2178 2178 # Mode where user specifies ranges of lines, like in %macro.
2179 2179 data = self.extract_input_lines(args, opts_raw)
2180 2180 if not data:
2181 2181 try:
2182 2182 # Load the parameter given as a variable. If not a string,
2183 2183 # process it as an object instead (below)
2184 2184
2185 2185 #print '*** args',args,'type',type(args) # dbg
2186 2186 data = eval(args, self.shell.user_ns)
2187 2187 if not isinstance(data, basestring):
2188 2188 raise DataIsObject
2189 2189
2190 2190 except (NameError,SyntaxError):
2191 2191 # given argument is not a variable, try as a filename
2192 2192 filename = make_filename(args)
2193 2193 if filename is None:
2194 2194 warn("Argument given (%s) can't be found as a variable "
2195 2195 "or as a filename." % args)
2196 2196 return
2197 2197 use_temp = False
2198 2198
2199 2199 except DataIsObject:
2200 2200 # macros have a special edit function
2201 2201 if isinstance(data, Macro):
2202 2202 raise MacroToEdit(data)
2203 2203
2204 2204 # For objects, try to edit the file where they are defined
2205 2205 try:
2206 2206 filename = inspect.getabsfile(data)
2207 2207 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2208 2208 # class created by %edit? Try to find source
2209 2209 # by looking for method definitions instead, the
2210 2210 # __module__ in those classes is FakeModule.
2211 2211 attrs = [getattr(data, aname) for aname in dir(data)]
2212 2212 for attr in attrs:
2213 2213 if not inspect.ismethod(attr):
2214 2214 continue
2215 2215 filename = inspect.getabsfile(attr)
2216 2216 if filename and 'fakemodule' not in filename.lower():
2217 2217 # change the attribute to be the edit target instead
2218 2218 data = attr
2219 2219 break
2220 2220
2221 2221 datafile = 1
2222 2222 except TypeError:
2223 2223 filename = make_filename(args)
2224 2224 datafile = 1
2225 2225 warn('Could not find file where `%s` is defined.\n'
2226 2226 'Opening a file named `%s`' % (args,filename))
2227 2227 # Now, make sure we can actually read the source (if it was in
2228 2228 # a temp file it's gone by now).
2229 2229 if datafile:
2230 2230 try:
2231 2231 if lineno is None:
2232 2232 lineno = inspect.getsourcelines(data)[1]
2233 2233 except IOError:
2234 2234 filename = make_filename(args)
2235 2235 if filename is None:
2236 2236 warn('The file `%s` where `%s` was defined cannot '
2237 2237 'be read.' % (filename,data))
2238 2238 return
2239 2239 use_temp = False
2240 2240
2241 2241 if use_temp:
2242 2242 filename = self.shell.mktempfile(data)
2243 2243 print 'IPython will make a temporary file named:',filename
2244 2244
2245 2245 return filename, lineno, use_temp
2246 2246
2247 2247 def _edit_macro(self,mname,macro):
2248 2248 """open an editor with the macro data in a file"""
2249 2249 filename = self.shell.mktempfile(macro.value)
2250 2250 self.shell.hooks.editor(filename)
2251 2251
2252 2252 # and make a new macro object, to replace the old one
2253 2253 mfile = open(filename)
2254 2254 mvalue = mfile.read()
2255 2255 mfile.close()
2256 2256 self.shell.user_ns[mname] = Macro(mvalue)
2257 2257
2258 2258 def magic_ed(self,parameter_s=''):
2259 2259 """Alias to %edit."""
2260 2260 return self.magic_edit(parameter_s)
2261 2261
2262 2262 @skip_doctest
2263 2263 def magic_edit(self,parameter_s='',last_call=['','']):
2264 2264 """Bring up an editor and execute the resulting code.
2265 2265
2266 2266 Usage:
2267 2267 %edit [options] [args]
2268 2268
2269 2269 %edit runs IPython's editor hook. The default version of this hook is
2270 2270 set to call the editor specified by your $EDITOR environment variable.
2271 2271 If this isn't found, it will default to vi under Linux/Unix and to
2272 2272 notepad under Windows. See the end of this docstring for how to change
2273 2273 the editor hook.
2274 2274
2275 2275 You can also set the value of this editor via the
2276 2276 ``TerminalInteractiveShell.editor`` option in your configuration file.
2277 2277 This is useful if you wish to use a different editor from your typical
2278 2278 default with IPython (and for Windows users who typically don't set
2279 2279 environment variables).
2280 2280
2281 2281 This command allows you to conveniently edit multi-line code right in
2282 2282 your IPython session.
2283 2283
2284 2284 If called without arguments, %edit opens up an empty editor with a
2285 2285 temporary file and will execute the contents of this file when you
2286 2286 close it (don't forget to save it!).
2287 2287
2288 2288
2289 2289 Options:
2290 2290
2291 2291 -n <number>: open the editor at a specified line number. By default,
2292 2292 the IPython editor hook uses the unix syntax 'editor +N filename', but
2293 2293 you can configure this by providing your own modified hook if your
2294 2294 favorite editor supports line-number specifications with a different
2295 2295 syntax.
2296 2296
2297 2297 -p: this will call the editor with the same data as the previous time
2298 2298 it was used, regardless of how long ago (in your current session) it
2299 2299 was.
2300 2300
2301 2301 -r: use 'raw' input. This option only applies to input taken from the
2302 2302 user's history. By default, the 'processed' history is used, so that
2303 2303 magics are loaded in their transformed version to valid Python. If
2304 2304 this option is given, the raw input as typed as the command line is
2305 2305 used instead. When you exit the editor, it will be executed by
2306 2306 IPython's own processor.
2307 2307
2308 2308 -x: do not execute the edited code immediately upon exit. This is
2309 2309 mainly useful if you are editing programs which need to be called with
2310 2310 command line arguments, which you can then do using %run.
2311 2311
2312 2312
2313 2313 Arguments:
2314 2314
2315 2315 If arguments are given, the following possibilites exist:
2316 2316
2317 2317 - If the argument is a filename, IPython will load that into the
2318 2318 editor. It will execute its contents with execfile() when you exit,
2319 2319 loading any code in the file into your interactive namespace.
2320 2320
2321 2321 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2322 2322 The syntax is the same as in the %history magic.
2323 2323
2324 2324 - If the argument is a string variable, its contents are loaded
2325 2325 into the editor. You can thus edit any string which contains
2326 2326 python code (including the result of previous edits).
2327 2327
2328 2328 - If the argument is the name of an object (other than a string),
2329 2329 IPython will try to locate the file where it was defined and open the
2330 2330 editor at the point where it is defined. You can use `%edit function`
2331 2331 to load an editor exactly at the point where 'function' is defined,
2332 2332 edit it and have the file be executed automatically.
2333 2333
2334 2334 - If the object is a macro (see %macro for details), this opens up your
2335 2335 specified editor with a temporary file containing the macro's data.
2336 2336 Upon exit, the macro is reloaded with the contents of the file.
2337 2337
2338 2338 Note: opening at an exact line is only supported under Unix, and some
2339 2339 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2340 2340 '+NUMBER' parameter necessary for this feature. Good editors like
2341 2341 (X)Emacs, vi, jed, pico and joe all do.
2342 2342
2343 2343 After executing your code, %edit will return as output the code you
2344 2344 typed in the editor (except when it was an existing file). This way
2345 2345 you can reload the code in further invocations of %edit as a variable,
2346 2346 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2347 2347 the output.
2348 2348
2349 2349 Note that %edit is also available through the alias %ed.
2350 2350
2351 2351 This is an example of creating a simple function inside the editor and
2352 2352 then modifying it. First, start up the editor:
2353 2353
2354 2354 In [1]: ed
2355 2355 Editing... done. Executing edited code...
2356 2356 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2357 2357
2358 2358 We can then call the function foo():
2359 2359
2360 2360 In [2]: foo()
2361 2361 foo() was defined in an editing session
2362 2362
2363 2363 Now we edit foo. IPython automatically loads the editor with the
2364 2364 (temporary) file where foo() was previously defined:
2365 2365
2366 2366 In [3]: ed foo
2367 2367 Editing... done. Executing edited code...
2368 2368
2369 2369 And if we call foo() again we get the modified version:
2370 2370
2371 2371 In [4]: foo()
2372 2372 foo() has now been changed!
2373 2373
2374 2374 Here is an example of how to edit a code snippet successive
2375 2375 times. First we call the editor:
2376 2376
2377 2377 In [5]: ed
2378 2378 Editing... done. Executing edited code...
2379 2379 hello
2380 2380 Out[5]: "print 'hello'n"
2381 2381
2382 2382 Now we call it again with the previous output (stored in _):
2383 2383
2384 2384 In [6]: ed _
2385 2385 Editing... done. Executing edited code...
2386 2386 hello world
2387 2387 Out[6]: "print 'hello world'n"
2388 2388
2389 2389 Now we call it with the output #8 (stored in _8, also as Out[8]):
2390 2390
2391 2391 In [7]: ed _8
2392 2392 Editing... done. Executing edited code...
2393 2393 hello again
2394 2394 Out[7]: "print 'hello again'n"
2395 2395
2396 2396
2397 2397 Changing the default editor hook:
2398 2398
2399 2399 If you wish to write your own editor hook, you can put it in a
2400 2400 configuration file which you load at startup time. The default hook
2401 2401 is defined in the IPython.core.hooks module, and you can use that as a
2402 2402 starting example for further modifications. That file also has
2403 2403 general instructions on how to set a new hook for use once you've
2404 2404 defined it."""
2405 2405 opts,args = self.parse_options(parameter_s,'prxn:')
2406 2406
2407 2407 try:
2408 2408 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2409 2409 except MacroToEdit as e:
2410 2410 self._edit_macro(args, e.args[0])
2411 2411 return
2412 2412
2413 2413 # do actual editing here
2414 2414 print 'Editing...',
2415 2415 sys.stdout.flush()
2416 2416 try:
2417 2417 # Quote filenames that may have spaces in them
2418 2418 if ' ' in filename:
2419 2419 filename = "'%s'" % filename
2420 2420 self.shell.hooks.editor(filename,lineno)
2421 2421 except TryNext:
2422 2422 warn('Could not open editor')
2423 2423 return
2424 2424
2425 2425 # XXX TODO: should this be generalized for all string vars?
2426 2426 # For now, this is special-cased to blocks created by cpaste
2427 2427 if args.strip() == 'pasted_block':
2428 2428 self.shell.user_ns['pasted_block'] = file_read(filename)
2429 2429
2430 2430 if 'x' in opts: # -x prevents actual execution
2431 2431 print
2432 2432 else:
2433 2433 print 'done. Executing edited code...'
2434 2434 if 'r' in opts: # Untranslated IPython code
2435 2435 self.shell.run_cell(file_read(filename),
2436 2436 store_history=False)
2437 2437 else:
2438 2438 self.shell.safe_execfile(filename,self.shell.user_ns,
2439 2439 self.shell.user_ns)
2440 2440
2441 2441 if is_temp:
2442 2442 try:
2443 2443 return open(filename).read()
2444 2444 except IOError,msg:
2445 2445 if msg.filename == filename:
2446 2446 warn('File not found. Did you forget to save?')
2447 2447 return
2448 2448 else:
2449 2449 self.shell.showtraceback()
2450 2450
2451 2451 def magic_xmode(self,parameter_s = ''):
2452 2452 """Switch modes for the exception handlers.
2453 2453
2454 2454 Valid modes: Plain, Context and Verbose.
2455 2455
2456 2456 If called without arguments, acts as a toggle."""
2457 2457
2458 2458 def xmode_switch_err(name):
2459 2459 warn('Error changing %s exception modes.\n%s' %
2460 2460 (name,sys.exc_info()[1]))
2461 2461
2462 2462 shell = self.shell
2463 2463 new_mode = parameter_s.strip().capitalize()
2464 2464 try:
2465 2465 shell.InteractiveTB.set_mode(mode=new_mode)
2466 2466 print 'Exception reporting mode:',shell.InteractiveTB.mode
2467 2467 except:
2468 2468 xmode_switch_err('user')
2469 2469
2470 2470 def magic_colors(self,parameter_s = ''):
2471 2471 """Switch color scheme for prompts, info system and exception handlers.
2472 2472
2473 2473 Currently implemented schemes: NoColor, Linux, LightBG.
2474 2474
2475 2475 Color scheme names are not case-sensitive.
2476 2476
2477 2477 Examples
2478 2478 --------
2479 2479 To get a plain black and white terminal::
2480 2480
2481 2481 %colors nocolor
2482 2482 """
2483 2483
2484 2484 def color_switch_err(name):
2485 2485 warn('Error changing %s color schemes.\n%s' %
2486 2486 (name,sys.exc_info()[1]))
2487 2487
2488 2488
2489 2489 new_scheme = parameter_s.strip()
2490 2490 if not new_scheme:
2491 2491 raise UsageError(
2492 2492 "%colors: you must specify a color scheme. See '%colors?'")
2493 2493 return
2494 2494 # local shortcut
2495 2495 shell = self.shell
2496 2496
2497 2497 import IPython.utils.rlineimpl as readline
2498 2498
2499 if not readline.have_readline and sys.platform == "win32":
2499 if not shell.colors_force and \
2500 not readline.have_readline and sys.platform == "win32":
2500 2501 msg = """\
2501 2502 Proper color support under MS Windows requires the pyreadline library.
2502 2503 You can find it at:
2503 2504 http://ipython.scipy.org/moin/PyReadline/Intro
2504 2505 Gary's readline needs the ctypes module, from:
2505 2506 http://starship.python.net/crew/theller/ctypes
2506 2507 (Note that ctypes is already part of Python versions 2.5 and newer).
2507 2508
2508 2509 Defaulting color scheme to 'NoColor'"""
2509 2510 new_scheme = 'NoColor'
2510 2511 warn(msg)
2511 2512
2512 2513 # readline option is 0
2513 if not shell.has_readline:
2514 if not shell.colors_force and not shell.has_readline:
2514 2515 new_scheme = 'NoColor'
2515 2516
2516 2517 # Set prompt colors
2517 2518 try:
2518 2519 shell.displayhook.set_colors(new_scheme)
2519 2520 except:
2520 2521 color_switch_err('prompt')
2521 2522 else:
2522 2523 shell.colors = \
2523 2524 shell.displayhook.color_table.active_scheme_name
2524 2525 # Set exception colors
2525 2526 try:
2526 2527 shell.InteractiveTB.set_colors(scheme = new_scheme)
2527 2528 shell.SyntaxTB.set_colors(scheme = new_scheme)
2528 2529 except:
2529 2530 color_switch_err('exception')
2530 2531
2531 2532 # Set info (for 'object?') colors
2532 2533 if shell.color_info:
2533 2534 try:
2534 2535 shell.inspector.set_active_scheme(new_scheme)
2535 2536 except:
2536 2537 color_switch_err('object inspector')
2537 2538 else:
2538 2539 shell.inspector.set_active_scheme('NoColor')
2539 2540
2540 2541 def magic_pprint(self, parameter_s=''):
2541 2542 """Toggle pretty printing on/off."""
2542 2543 ptformatter = self.shell.display_formatter.formatters['text/plain']
2543 2544 ptformatter.pprint = bool(1 - ptformatter.pprint)
2544 2545 print 'Pretty printing has been turned', \
2545 2546 ['OFF','ON'][ptformatter.pprint]
2546 2547
2547 2548 #......................................................................
2548 2549 # Functions to implement unix shell-type things
2549 2550
2550 2551 @skip_doctest
2551 2552 def magic_alias(self, parameter_s = ''):
2552 2553 """Define an alias for a system command.
2553 2554
2554 2555 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2555 2556
2556 2557 Then, typing 'alias_name params' will execute the system command 'cmd
2557 2558 params' (from your underlying operating system).
2558 2559
2559 2560 Aliases have lower precedence than magic functions and Python normal
2560 2561 variables, so if 'foo' is both a Python variable and an alias, the
2561 2562 alias can not be executed until 'del foo' removes the Python variable.
2562 2563
2563 2564 You can use the %l specifier in an alias definition to represent the
2564 2565 whole line when the alias is called. For example:
2565 2566
2566 2567 In [2]: alias bracket echo "Input in brackets: <%l>"
2567 2568 In [3]: bracket hello world
2568 2569 Input in brackets: <hello world>
2569 2570
2570 2571 You can also define aliases with parameters using %s specifiers (one
2571 2572 per parameter):
2572 2573
2573 2574 In [1]: alias parts echo first %s second %s
2574 2575 In [2]: %parts A B
2575 2576 first A second B
2576 2577 In [3]: %parts A
2577 2578 Incorrect number of arguments: 2 expected.
2578 2579 parts is an alias to: 'echo first %s second %s'
2579 2580
2580 2581 Note that %l and %s are mutually exclusive. You can only use one or
2581 2582 the other in your aliases.
2582 2583
2583 2584 Aliases expand Python variables just like system calls using ! or !!
2584 2585 do: all expressions prefixed with '$' get expanded. For details of
2585 2586 the semantic rules, see PEP-215:
2586 2587 http://www.python.org/peps/pep-0215.html. This is the library used by
2587 2588 IPython for variable expansion. If you want to access a true shell
2588 2589 variable, an extra $ is necessary to prevent its expansion by IPython:
2589 2590
2590 2591 In [6]: alias show echo
2591 2592 In [7]: PATH='A Python string'
2592 2593 In [8]: show $PATH
2593 2594 A Python string
2594 2595 In [9]: show $$PATH
2595 2596 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2596 2597
2597 2598 You can use the alias facility to acess all of $PATH. See the %rehash
2598 2599 and %rehashx functions, which automatically create aliases for the
2599 2600 contents of your $PATH.
2600 2601
2601 2602 If called with no parameters, %alias prints the current alias table."""
2602 2603
2603 2604 par = parameter_s.strip()
2604 2605 if not par:
2605 2606 stored = self.db.get('stored_aliases', {} )
2606 2607 aliases = sorted(self.shell.alias_manager.aliases)
2607 2608 # for k, v in stored:
2608 2609 # atab.append(k, v[0])
2609 2610
2610 2611 print "Total number of aliases:", len(aliases)
2611 2612 sys.stdout.flush()
2612 2613 return aliases
2613 2614
2614 2615 # Now try to define a new one
2615 2616 try:
2616 2617 alias,cmd = par.split(None, 1)
2617 2618 except:
2618 2619 print oinspect.getdoc(self.magic_alias)
2619 2620 else:
2620 2621 self.shell.alias_manager.soft_define_alias(alias, cmd)
2621 2622 # end magic_alias
2622 2623
2623 2624 def magic_unalias(self, parameter_s = ''):
2624 2625 """Remove an alias"""
2625 2626
2626 2627 aname = parameter_s.strip()
2627 2628 self.shell.alias_manager.undefine_alias(aname)
2628 2629 stored = self.db.get('stored_aliases', {} )
2629 2630 if aname in stored:
2630 2631 print "Removing %stored alias",aname
2631 2632 del stored[aname]
2632 2633 self.db['stored_aliases'] = stored
2633 2634
2634 2635 def magic_rehashx(self, parameter_s = ''):
2635 2636 """Update the alias table with all executable files in $PATH.
2636 2637
2637 2638 This version explicitly checks that every entry in $PATH is a file
2638 2639 with execute access (os.X_OK), so it is much slower than %rehash.
2639 2640
2640 2641 Under Windows, it checks executability as a match agains a
2641 2642 '|'-separated string of extensions, stored in the IPython config
2642 2643 variable win_exec_ext. This defaults to 'exe|com|bat'.
2643 2644
2644 2645 This function also resets the root module cache of module completer,
2645 2646 used on slow filesystems.
2646 2647 """
2647 2648 from IPython.core.alias import InvalidAliasError
2648 2649
2649 2650 # for the benefit of module completer in ipy_completers.py
2650 2651 del self.db['rootmodules']
2651 2652
2652 2653 path = [os.path.abspath(os.path.expanduser(p)) for p in
2653 2654 os.environ.get('PATH','').split(os.pathsep)]
2654 2655 path = filter(os.path.isdir,path)
2655 2656
2656 2657 syscmdlist = []
2657 2658 # Now define isexec in a cross platform manner.
2658 2659 if os.name == 'posix':
2659 2660 isexec = lambda fname:os.path.isfile(fname) and \
2660 2661 os.access(fname,os.X_OK)
2661 2662 else:
2662 2663 try:
2663 2664 winext = os.environ['pathext'].replace(';','|').replace('.','')
2664 2665 except KeyError:
2665 2666 winext = 'exe|com|bat|py'
2666 2667 if 'py' not in winext:
2667 2668 winext += '|py'
2668 2669 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2669 2670 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2670 2671 savedir = os.getcwdu()
2671 2672
2672 2673 # Now walk the paths looking for executables to alias.
2673 2674 try:
2674 2675 # write the whole loop for posix/Windows so we don't have an if in
2675 2676 # the innermost part
2676 2677 if os.name == 'posix':
2677 2678 for pdir in path:
2678 2679 os.chdir(pdir)
2679 2680 for ff in os.listdir(pdir):
2680 2681 if isexec(ff):
2681 2682 try:
2682 2683 # Removes dots from the name since ipython
2683 2684 # will assume names with dots to be python.
2684 2685 self.shell.alias_manager.define_alias(
2685 2686 ff.replace('.',''), ff)
2686 2687 except InvalidAliasError:
2687 2688 pass
2688 2689 else:
2689 2690 syscmdlist.append(ff)
2690 2691 else:
2691 2692 no_alias = self.shell.alias_manager.no_alias
2692 2693 for pdir in path:
2693 2694 os.chdir(pdir)
2694 2695 for ff in os.listdir(pdir):
2695 2696 base, ext = os.path.splitext(ff)
2696 2697 if isexec(ff) and base.lower() not in no_alias:
2697 2698 if ext.lower() == '.exe':
2698 2699 ff = base
2699 2700 try:
2700 2701 # Removes dots from the name since ipython
2701 2702 # will assume names with dots to be python.
2702 2703 self.shell.alias_manager.define_alias(
2703 2704 base.lower().replace('.',''), ff)
2704 2705 except InvalidAliasError:
2705 2706 pass
2706 2707 syscmdlist.append(ff)
2707 2708 db = self.db
2708 2709 db['syscmdlist'] = syscmdlist
2709 2710 finally:
2710 2711 os.chdir(savedir)
2711 2712
2712 2713 @skip_doctest
2713 2714 def magic_pwd(self, parameter_s = ''):
2714 2715 """Return the current working directory path.
2715 2716
2716 2717 Examples
2717 2718 --------
2718 2719 ::
2719 2720
2720 2721 In [9]: pwd
2721 2722 Out[9]: '/home/tsuser/sprint/ipython'
2722 2723 """
2723 2724 return os.getcwdu()
2724 2725
2725 2726 @skip_doctest
2726 2727 def magic_cd(self, parameter_s=''):
2727 2728 """Change the current working directory.
2728 2729
2729 2730 This command automatically maintains an internal list of directories
2730 2731 you visit during your IPython session, in the variable _dh. The
2731 2732 command %dhist shows this history nicely formatted. You can also
2732 2733 do 'cd -<tab>' to see directory history conveniently.
2733 2734
2734 2735 Usage:
2735 2736
2736 2737 cd 'dir': changes to directory 'dir'.
2737 2738
2738 2739 cd -: changes to the last visited directory.
2739 2740
2740 2741 cd -<n>: changes to the n-th directory in the directory history.
2741 2742
2742 2743 cd --foo: change to directory that matches 'foo' in history
2743 2744
2744 2745 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2745 2746 (note: cd <bookmark_name> is enough if there is no
2746 2747 directory <bookmark_name>, but a bookmark with the name exists.)
2747 2748 'cd -b <tab>' allows you to tab-complete bookmark names.
2748 2749
2749 2750 Options:
2750 2751
2751 2752 -q: quiet. Do not print the working directory after the cd command is
2752 2753 executed. By default IPython's cd command does print this directory,
2753 2754 since the default prompts do not display path information.
2754 2755
2755 2756 Note that !cd doesn't work for this purpose because the shell where
2756 2757 !command runs is immediately discarded after executing 'command'.
2757 2758
2758 2759 Examples
2759 2760 --------
2760 2761 ::
2761 2762
2762 2763 In [10]: cd parent/child
2763 2764 /home/tsuser/parent/child
2764 2765 """
2765 2766
2766 2767 parameter_s = parameter_s.strip()
2767 2768 #bkms = self.shell.persist.get("bookmarks",{})
2768 2769
2769 2770 oldcwd = os.getcwdu()
2770 2771 numcd = re.match(r'(-)(\d+)$',parameter_s)
2771 2772 # jump in directory history by number
2772 2773 if numcd:
2773 2774 nn = int(numcd.group(2))
2774 2775 try:
2775 2776 ps = self.shell.user_ns['_dh'][nn]
2776 2777 except IndexError:
2777 2778 print 'The requested directory does not exist in history.'
2778 2779 return
2779 2780 else:
2780 2781 opts = {}
2781 2782 elif parameter_s.startswith('--'):
2782 2783 ps = None
2783 2784 fallback = None
2784 2785 pat = parameter_s[2:]
2785 2786 dh = self.shell.user_ns['_dh']
2786 2787 # first search only by basename (last component)
2787 2788 for ent in reversed(dh):
2788 2789 if pat in os.path.basename(ent) and os.path.isdir(ent):
2789 2790 ps = ent
2790 2791 break
2791 2792
2792 2793 if fallback is None and pat in ent and os.path.isdir(ent):
2793 2794 fallback = ent
2794 2795
2795 2796 # if we have no last part match, pick the first full path match
2796 2797 if ps is None:
2797 2798 ps = fallback
2798 2799
2799 2800 if ps is None:
2800 2801 print "No matching entry in directory history"
2801 2802 return
2802 2803 else:
2803 2804 opts = {}
2804 2805
2805 2806
2806 2807 else:
2807 2808 #turn all non-space-escaping backslashes to slashes,
2808 2809 # for c:\windows\directory\names\
2809 2810 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2810 2811 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2811 2812 # jump to previous
2812 2813 if ps == '-':
2813 2814 try:
2814 2815 ps = self.shell.user_ns['_dh'][-2]
2815 2816 except IndexError:
2816 2817 raise UsageError('%cd -: No previous directory to change to.')
2817 2818 # jump to bookmark if needed
2818 2819 else:
2819 2820 if not os.path.isdir(ps) or opts.has_key('b'):
2820 2821 bkms = self.db.get('bookmarks', {})
2821 2822
2822 2823 if bkms.has_key(ps):
2823 2824 target = bkms[ps]
2824 2825 print '(bookmark:%s) -> %s' % (ps,target)
2825 2826 ps = target
2826 2827 else:
2827 2828 if opts.has_key('b'):
2828 2829 raise UsageError("Bookmark '%s' not found. "
2829 2830 "Use '%%bookmark -l' to see your bookmarks." % ps)
2830 2831
2831 2832 # strip extra quotes on Windows, because os.chdir doesn't like them
2832 2833 ps = unquote_filename(ps)
2833 2834 # at this point ps should point to the target dir
2834 2835 if ps:
2835 2836 try:
2836 2837 os.chdir(os.path.expanduser(ps))
2837 2838 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2838 2839 set_term_title('IPython: ' + abbrev_cwd())
2839 2840 except OSError:
2840 2841 print sys.exc_info()[1]
2841 2842 else:
2842 2843 cwd = os.getcwdu()
2843 2844 dhist = self.shell.user_ns['_dh']
2844 2845 if oldcwd != cwd:
2845 2846 dhist.append(cwd)
2846 2847 self.db['dhist'] = compress_dhist(dhist)[-100:]
2847 2848
2848 2849 else:
2849 2850 os.chdir(self.shell.home_dir)
2850 2851 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2851 2852 set_term_title('IPython: ' + '~')
2852 2853 cwd = os.getcwdu()
2853 2854 dhist = self.shell.user_ns['_dh']
2854 2855
2855 2856 if oldcwd != cwd:
2856 2857 dhist.append(cwd)
2857 2858 self.db['dhist'] = compress_dhist(dhist)[-100:]
2858 2859 if not 'q' in opts and self.shell.user_ns['_dh']:
2859 2860 print self.shell.user_ns['_dh'][-1]
2860 2861
2861 2862
2862 2863 def magic_env(self, parameter_s=''):
2863 2864 """List environment variables."""
2864 2865
2865 2866 return os.environ.data
2866 2867
2867 2868 def magic_pushd(self, parameter_s=''):
2868 2869 """Place the current dir on stack and change directory.
2869 2870
2870 2871 Usage:\\
2871 2872 %pushd ['dirname']
2872 2873 """
2873 2874
2874 2875 dir_s = self.shell.dir_stack
2875 2876 tgt = os.path.expanduser(unquote_filename(parameter_s))
2876 2877 cwd = os.getcwdu().replace(self.home_dir,'~')
2877 2878 if tgt:
2878 2879 self.magic_cd(parameter_s)
2879 2880 dir_s.insert(0,cwd)
2880 2881 return self.magic_dirs()
2881 2882
2882 2883 def magic_popd(self, parameter_s=''):
2883 2884 """Change to directory popped off the top of the stack.
2884 2885 """
2885 2886 if not self.shell.dir_stack:
2886 2887 raise UsageError("%popd on empty stack")
2887 2888 top = self.shell.dir_stack.pop(0)
2888 2889 self.magic_cd(top)
2889 2890 print "popd ->",top
2890 2891
2891 2892 def magic_dirs(self, parameter_s=''):
2892 2893 """Return the current directory stack."""
2893 2894
2894 2895 return self.shell.dir_stack
2895 2896
2896 2897 def magic_dhist(self, parameter_s=''):
2897 2898 """Print your history of visited directories.
2898 2899
2899 2900 %dhist -> print full history\\
2900 2901 %dhist n -> print last n entries only\\
2901 2902 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2902 2903
2903 2904 This history is automatically maintained by the %cd command, and
2904 2905 always available as the global list variable _dh. You can use %cd -<n>
2905 2906 to go to directory number <n>.
2906 2907
2907 2908 Note that most of time, you should view directory history by entering
2908 2909 cd -<TAB>.
2909 2910
2910 2911 """
2911 2912
2912 2913 dh = self.shell.user_ns['_dh']
2913 2914 if parameter_s:
2914 2915 try:
2915 2916 args = map(int,parameter_s.split())
2916 2917 except:
2917 2918 self.arg_err(Magic.magic_dhist)
2918 2919 return
2919 2920 if len(args) == 1:
2920 2921 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2921 2922 elif len(args) == 2:
2922 2923 ini,fin = args
2923 2924 else:
2924 2925 self.arg_err(Magic.magic_dhist)
2925 2926 return
2926 2927 else:
2927 2928 ini,fin = 0,len(dh)
2928 2929 nlprint(dh,
2929 2930 header = 'Directory history (kept in _dh)',
2930 2931 start=ini,stop=fin)
2931 2932
2932 2933 @skip_doctest
2933 2934 def magic_sc(self, parameter_s=''):
2934 2935 """Shell capture - execute a shell command and capture its output.
2935 2936
2936 2937 DEPRECATED. Suboptimal, retained for backwards compatibility.
2937 2938
2938 2939 You should use the form 'var = !command' instead. Example:
2939 2940
2940 2941 "%sc -l myfiles = ls ~" should now be written as
2941 2942
2942 2943 "myfiles = !ls ~"
2943 2944
2944 2945 myfiles.s, myfiles.l and myfiles.n still apply as documented
2945 2946 below.
2946 2947
2947 2948 --
2948 2949 %sc [options] varname=command
2949 2950
2950 2951 IPython will run the given command using commands.getoutput(), and
2951 2952 will then update the user's interactive namespace with a variable
2952 2953 called varname, containing the value of the call. Your command can
2953 2954 contain shell wildcards, pipes, etc.
2954 2955
2955 2956 The '=' sign in the syntax is mandatory, and the variable name you
2956 2957 supply must follow Python's standard conventions for valid names.
2957 2958
2958 2959 (A special format without variable name exists for internal use)
2959 2960
2960 2961 Options:
2961 2962
2962 2963 -l: list output. Split the output on newlines into a list before
2963 2964 assigning it to the given variable. By default the output is stored
2964 2965 as a single string.
2965 2966
2966 2967 -v: verbose. Print the contents of the variable.
2967 2968
2968 2969 In most cases you should not need to split as a list, because the
2969 2970 returned value is a special type of string which can automatically
2970 2971 provide its contents either as a list (split on newlines) or as a
2971 2972 space-separated string. These are convenient, respectively, either
2972 2973 for sequential processing or to be passed to a shell command.
2973 2974
2974 2975 For example:
2975 2976
2976 2977 # all-random
2977 2978
2978 2979 # Capture into variable a
2979 2980 In [1]: sc a=ls *py
2980 2981
2981 2982 # a is a string with embedded newlines
2982 2983 In [2]: a
2983 2984 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2984 2985
2985 2986 # which can be seen as a list:
2986 2987 In [3]: a.l
2987 2988 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2988 2989
2989 2990 # or as a whitespace-separated string:
2990 2991 In [4]: a.s
2991 2992 Out[4]: 'setup.py win32_manual_post_install.py'
2992 2993
2993 2994 # a.s is useful to pass as a single command line:
2994 2995 In [5]: !wc -l $a.s
2995 2996 146 setup.py
2996 2997 130 win32_manual_post_install.py
2997 2998 276 total
2998 2999
2999 3000 # while the list form is useful to loop over:
3000 3001 In [6]: for f in a.l:
3001 3002 ...: !wc -l $f
3002 3003 ...:
3003 3004 146 setup.py
3004 3005 130 win32_manual_post_install.py
3005 3006
3006 3007 Similiarly, the lists returned by the -l option are also special, in
3007 3008 the sense that you can equally invoke the .s attribute on them to
3008 3009 automatically get a whitespace-separated string from their contents:
3009 3010
3010 3011 In [7]: sc -l b=ls *py
3011 3012
3012 3013 In [8]: b
3013 3014 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3014 3015
3015 3016 In [9]: b.s
3016 3017 Out[9]: 'setup.py win32_manual_post_install.py'
3017 3018
3018 3019 In summary, both the lists and strings used for ouptut capture have
3019 3020 the following special attributes:
3020 3021
3021 3022 .l (or .list) : value as list.
3022 3023 .n (or .nlstr): value as newline-separated string.
3023 3024 .s (or .spstr): value as space-separated string.
3024 3025 """
3025 3026
3026 3027 opts,args = self.parse_options(parameter_s,'lv')
3027 3028 # Try to get a variable name and command to run
3028 3029 try:
3029 3030 # the variable name must be obtained from the parse_options
3030 3031 # output, which uses shlex.split to strip options out.
3031 3032 var,_ = args.split('=',1)
3032 3033 var = var.strip()
3033 3034 # But the the command has to be extracted from the original input
3034 3035 # parameter_s, not on what parse_options returns, to avoid the
3035 3036 # quote stripping which shlex.split performs on it.
3036 3037 _,cmd = parameter_s.split('=',1)
3037 3038 except ValueError:
3038 3039 var,cmd = '',''
3039 3040 # If all looks ok, proceed
3040 3041 split = 'l' in opts
3041 3042 out = self.shell.getoutput(cmd, split=split)
3042 3043 if opts.has_key('v'):
3043 3044 print '%s ==\n%s' % (var,pformat(out))
3044 3045 if var:
3045 3046 self.shell.user_ns.update({var:out})
3046 3047 else:
3047 3048 return out
3048 3049
3049 3050 def magic_sx(self, parameter_s=''):
3050 3051 """Shell execute - run a shell command and capture its output.
3051 3052
3052 3053 %sx command
3053 3054
3054 3055 IPython will run the given command using commands.getoutput(), and
3055 3056 return the result formatted as a list (split on '\\n'). Since the
3056 3057 output is _returned_, it will be stored in ipython's regular output
3057 3058 cache Out[N] and in the '_N' automatic variables.
3058 3059
3059 3060 Notes:
3060 3061
3061 3062 1) If an input line begins with '!!', then %sx is automatically
3062 3063 invoked. That is, while:
3063 3064 !ls
3064 3065 causes ipython to simply issue system('ls'), typing
3065 3066 !!ls
3066 3067 is a shorthand equivalent to:
3067 3068 %sx ls
3068 3069
3069 3070 2) %sx differs from %sc in that %sx automatically splits into a list,
3070 3071 like '%sc -l'. The reason for this is to make it as easy as possible
3071 3072 to process line-oriented shell output via further python commands.
3072 3073 %sc is meant to provide much finer control, but requires more
3073 3074 typing.
3074 3075
3075 3076 3) Just like %sc -l, this is a list with special attributes:
3076 3077
3077 3078 .l (or .list) : value as list.
3078 3079 .n (or .nlstr): value as newline-separated string.
3079 3080 .s (or .spstr): value as whitespace-separated string.
3080 3081
3081 3082 This is very useful when trying to use such lists as arguments to
3082 3083 system commands."""
3083 3084
3084 3085 if parameter_s:
3085 3086 return self.shell.getoutput(parameter_s)
3086 3087
3087 3088
3088 3089 def magic_bookmark(self, parameter_s=''):
3089 3090 """Manage IPython's bookmark system.
3090 3091
3091 3092 %bookmark <name> - set bookmark to current dir
3092 3093 %bookmark <name> <dir> - set bookmark to <dir>
3093 3094 %bookmark -l - list all bookmarks
3094 3095 %bookmark -d <name> - remove bookmark
3095 3096 %bookmark -r - remove all bookmarks
3096 3097
3097 3098 You can later on access a bookmarked folder with:
3098 3099 %cd -b <name>
3099 3100 or simply '%cd <name>' if there is no directory called <name> AND
3100 3101 there is such a bookmark defined.
3101 3102
3102 3103 Your bookmarks persist through IPython sessions, but they are
3103 3104 associated with each profile."""
3104 3105
3105 3106 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3106 3107 if len(args) > 2:
3107 3108 raise UsageError("%bookmark: too many arguments")
3108 3109
3109 3110 bkms = self.db.get('bookmarks',{})
3110 3111
3111 3112 if opts.has_key('d'):
3112 3113 try:
3113 3114 todel = args[0]
3114 3115 except IndexError:
3115 3116 raise UsageError(
3116 3117 "%bookmark -d: must provide a bookmark to delete")
3117 3118 else:
3118 3119 try:
3119 3120 del bkms[todel]
3120 3121 except KeyError:
3121 3122 raise UsageError(
3122 3123 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3123 3124
3124 3125 elif opts.has_key('r'):
3125 3126 bkms = {}
3126 3127 elif opts.has_key('l'):
3127 3128 bks = bkms.keys()
3128 3129 bks.sort()
3129 3130 if bks:
3130 3131 size = max(map(len,bks))
3131 3132 else:
3132 3133 size = 0
3133 3134 fmt = '%-'+str(size)+'s -> %s'
3134 3135 print 'Current bookmarks:'
3135 3136 for bk in bks:
3136 3137 print fmt % (bk,bkms[bk])
3137 3138 else:
3138 3139 if not args:
3139 3140 raise UsageError("%bookmark: You must specify the bookmark name")
3140 3141 elif len(args)==1:
3141 3142 bkms[args[0]] = os.getcwdu()
3142 3143 elif len(args)==2:
3143 3144 bkms[args[0]] = args[1]
3144 3145 self.db['bookmarks'] = bkms
3145 3146
3146 3147 def magic_pycat(self, parameter_s=''):
3147 3148 """Show a syntax-highlighted file through a pager.
3148 3149
3149 3150 This magic is similar to the cat utility, but it will assume the file
3150 3151 to be Python source and will show it with syntax highlighting. """
3151 3152
3152 3153 try:
3153 3154 filename = get_py_filename(parameter_s)
3154 3155 cont = file_read(filename)
3155 3156 except IOError:
3156 3157 try:
3157 3158 cont = eval(parameter_s,self.user_ns)
3158 3159 except NameError:
3159 3160 cont = None
3160 3161 if cont is None:
3161 3162 print "Error: no such file or variable"
3162 3163 return
3163 3164
3164 3165 page.page(self.shell.pycolorize(cont))
3165 3166
3166 3167 def _rerun_pasted(self):
3167 3168 """ Rerun a previously pasted command.
3168 3169 """
3169 3170 b = self.user_ns.get('pasted_block', None)
3170 3171 if b is None:
3171 3172 raise UsageError('No previous pasted block available')
3172 3173 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3173 3174 exec b in self.user_ns
3174 3175
3175 3176 def _get_pasted_lines(self, sentinel):
3176 3177 """ Yield pasted lines until the user enters the given sentinel value.
3177 3178 """
3178 3179 from IPython.core import interactiveshell
3179 3180 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3180 3181 while True:
3181 3182 l = self.shell.raw_input_original(':')
3182 3183 if l == sentinel:
3183 3184 return
3184 3185 else:
3185 3186 yield l
3186 3187
3187 3188 def _strip_pasted_lines_for_code(self, raw_lines):
3188 3189 """ Strip non-code parts of a sequence of lines to return a block of
3189 3190 code.
3190 3191 """
3191 3192 # Regular expressions that declare text we strip from the input:
3192 3193 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3193 3194 r'^\s*(\s?>)+', # Python input prompt
3194 3195 r'^\s*\.{3,}', # Continuation prompts
3195 3196 r'^\++',
3196 3197 ]
3197 3198
3198 3199 strip_from_start = map(re.compile,strip_re)
3199 3200
3200 3201 lines = []
3201 3202 for l in raw_lines:
3202 3203 for pat in strip_from_start:
3203 3204 l = pat.sub('',l)
3204 3205 lines.append(l)
3205 3206
3206 3207 block = "\n".join(lines) + '\n'
3207 3208 #print "block:\n",block
3208 3209 return block
3209 3210
3210 3211 def _execute_block(self, block, par):
3211 3212 """ Execute a block, or store it in a variable, per the user's request.
3212 3213 """
3213 3214 if not par:
3214 3215 b = textwrap.dedent(block)
3215 3216 self.user_ns['pasted_block'] = b
3216 3217 exec b in self.user_ns
3217 3218 else:
3218 3219 self.user_ns[par] = SList(block.splitlines())
3219 3220 print "Block assigned to '%s'" % par
3220 3221
3221 3222 def magic_quickref(self,arg):
3222 3223 """ Show a quick reference sheet """
3223 3224 import IPython.core.usage
3224 3225 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3225 3226
3226 3227 page.page(qr)
3227 3228
3228 3229 def magic_doctest_mode(self,parameter_s=''):
3229 3230 """Toggle doctest mode on and off.
3230 3231
3231 3232 This mode is intended to make IPython behave as much as possible like a
3232 3233 plain Python shell, from the perspective of how its prompts, exceptions
3233 3234 and output look. This makes it easy to copy and paste parts of a
3234 3235 session into doctests. It does so by:
3235 3236
3236 3237 - Changing the prompts to the classic ``>>>`` ones.
3237 3238 - Changing the exception reporting mode to 'Plain'.
3238 3239 - Disabling pretty-printing of output.
3239 3240
3240 3241 Note that IPython also supports the pasting of code snippets that have
3241 3242 leading '>>>' and '...' prompts in them. This means that you can paste
3242 3243 doctests from files or docstrings (even if they have leading
3243 3244 whitespace), and the code will execute correctly. You can then use
3244 3245 '%history -t' to see the translated history; this will give you the
3245 3246 input after removal of all the leading prompts and whitespace, which
3246 3247 can be pasted back into an editor.
3247 3248
3248 3249 With these features, you can switch into this mode easily whenever you
3249 3250 need to do testing and changes to doctests, without having to leave
3250 3251 your existing IPython session.
3251 3252 """
3252 3253
3253 3254 from IPython.utils.ipstruct import Struct
3254 3255
3255 3256 # Shorthands
3256 3257 shell = self.shell
3257 3258 oc = shell.displayhook
3258 3259 meta = shell.meta
3259 3260 disp_formatter = self.shell.display_formatter
3260 3261 ptformatter = disp_formatter.formatters['text/plain']
3261 3262 # dstore is a data store kept in the instance metadata bag to track any
3262 3263 # changes we make, so we can undo them later.
3263 3264 dstore = meta.setdefault('doctest_mode',Struct())
3264 3265 save_dstore = dstore.setdefault
3265 3266
3266 3267 # save a few values we'll need to recover later
3267 3268 mode = save_dstore('mode',False)
3268 3269 save_dstore('rc_pprint',ptformatter.pprint)
3269 3270 save_dstore('xmode',shell.InteractiveTB.mode)
3270 3271 save_dstore('rc_separate_out',shell.separate_out)
3271 3272 save_dstore('rc_separate_out2',shell.separate_out2)
3272 3273 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3273 3274 save_dstore('rc_separate_in',shell.separate_in)
3274 3275 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3275 3276
3276 3277 if mode == False:
3277 3278 # turn on
3278 3279 oc.prompt1.p_template = '>>> '
3279 3280 oc.prompt2.p_template = '... '
3280 3281 oc.prompt_out.p_template = ''
3281 3282
3282 3283 # Prompt separators like plain python
3283 3284 oc.input_sep = oc.prompt1.sep = ''
3284 3285 oc.output_sep = ''
3285 3286 oc.output_sep2 = ''
3286 3287
3287 3288 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3288 3289 oc.prompt_out.pad_left = False
3289 3290
3290 3291 ptformatter.pprint = False
3291 3292 disp_formatter.plain_text_only = True
3292 3293
3293 3294 shell.magic_xmode('Plain')
3294 3295 else:
3295 3296 # turn off
3296 3297 oc.prompt1.p_template = shell.prompt_in1
3297 3298 oc.prompt2.p_template = shell.prompt_in2
3298 3299 oc.prompt_out.p_template = shell.prompt_out
3299 3300
3300 3301 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3301 3302
3302 3303 oc.output_sep = dstore.rc_separate_out
3303 3304 oc.output_sep2 = dstore.rc_separate_out2
3304 3305
3305 3306 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3306 3307 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3307 3308
3308 3309 ptformatter.pprint = dstore.rc_pprint
3309 3310 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3310 3311
3311 3312 shell.magic_xmode(dstore.xmode)
3312 3313
3313 3314 # Store new mode and inform
3314 3315 dstore.mode = bool(1-int(mode))
3315 3316 mode_label = ['OFF','ON'][dstore.mode]
3316 3317 print 'Doctest mode is:', mode_label
3317 3318
3318 3319 def magic_gui(self, parameter_s=''):
3319 3320 """Enable or disable IPython GUI event loop integration.
3320 3321
3321 3322 %gui [GUINAME]
3322 3323
3323 3324 This magic replaces IPython's threaded shells that were activated
3324 3325 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3325 3326 can now be enabled, disabled and changed at runtime and keyboard
3326 3327 interrupts should work without any problems. The following toolkits
3327 3328 are supported: wxPython, PyQt4, PyGTK, and Tk::
3328 3329
3329 3330 %gui wx # enable wxPython event loop integration
3330 3331 %gui qt4|qt # enable PyQt4 event loop integration
3331 3332 %gui gtk # enable PyGTK event loop integration
3332 3333 %gui tk # enable Tk event loop integration
3333 3334 %gui # disable all event loop integration
3334 3335
3335 3336 WARNING: after any of these has been called you can simply create
3336 3337 an application object, but DO NOT start the event loop yourself, as
3337 3338 we have already handled that.
3338 3339 """
3339 3340 from IPython.lib.inputhook import enable_gui
3340 3341 opts, arg = self.parse_options(parameter_s, '')
3341 3342 if arg=='': arg = None
3342 3343 return enable_gui(arg)
3343 3344
3344 3345 def magic_load_ext(self, module_str):
3345 3346 """Load an IPython extension by its module name."""
3346 3347 return self.extension_manager.load_extension(module_str)
3347 3348
3348 3349 def magic_unload_ext(self, module_str):
3349 3350 """Unload an IPython extension by its module name."""
3350 3351 self.extension_manager.unload_extension(module_str)
3351 3352
3352 3353 def magic_reload_ext(self, module_str):
3353 3354 """Reload an IPython extension by its module name."""
3354 3355 self.extension_manager.reload_extension(module_str)
3355 3356
3356 3357 @skip_doctest
3357 3358 def magic_install_profiles(self, s):
3358 3359 """Install the default IPython profiles into the .ipython dir.
3359 3360
3360 3361 If the default profiles have already been installed, they will not
3361 3362 be overwritten. You can force overwriting them by using the ``-o``
3362 3363 option::
3363 3364
3364 3365 In [1]: %install_profiles -o
3365 3366 """
3366 3367 if '-o' in s:
3367 3368 overwrite = True
3368 3369 else:
3369 3370 overwrite = False
3370 3371 from IPython.config import profile
3371 3372 profile_dir = os.path.dirname(profile.__file__)
3372 3373 ipython_dir = self.ipython_dir
3373 3374 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3374 3375 for src in os.listdir(profile_dir):
3375 3376 if src.startswith('profile_'):
3376 3377 name = src.replace('profile_', '')
3377 3378 print " %s"%name
3378 3379 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3379 3380 pd.copy_config_file('ipython_config.py', path=src,
3380 3381 overwrite=overwrite)
3381 3382
3382 3383 @skip_doctest
3383 3384 def magic_install_default_config(self, s):
3384 3385 """Install IPython's default config file into the .ipython dir.
3385 3386
3386 3387 If the default config file (:file:`ipython_config.py`) is already
3387 3388 installed, it will not be overwritten. You can force overwriting
3388 3389 by using the ``-o`` option::
3389 3390
3390 3391 In [1]: %install_default_config
3391 3392 """
3392 3393 if '-o' in s:
3393 3394 overwrite = True
3394 3395 else:
3395 3396 overwrite = False
3396 3397 pd = self.shell.profile_dir
3397 3398 print "Installing default config file in: %s" % pd.location
3398 3399 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3399 3400
3400 3401 # Pylab support: simple wrappers that activate pylab, load gui input
3401 3402 # handling and modify slightly %run
3402 3403
3403 3404 @skip_doctest
3404 3405 def _pylab_magic_run(self, parameter_s=''):
3405 3406 Magic.magic_run(self, parameter_s,
3406 3407 runner=mpl_runner(self.shell.safe_execfile))
3407 3408
3408 3409 _pylab_magic_run.__doc__ = magic_run.__doc__
3409 3410
3410 3411 @skip_doctest
3411 3412 def magic_pylab(self, s):
3412 3413 """Load numpy and matplotlib to work interactively.
3413 3414
3414 3415 %pylab [GUINAME]
3415 3416
3416 3417 This function lets you activate pylab (matplotlib, numpy and
3417 3418 interactive support) at any point during an IPython session.
3418 3419
3419 3420 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3420 3421 pylab and mlab, as well as all names from numpy and pylab.
3421 3422
3422 3423 Parameters
3423 3424 ----------
3424 3425 guiname : optional
3425 3426 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3426 3427 'tk'). If given, the corresponding Matplotlib backend is used,
3427 3428 otherwise matplotlib's default (which you can override in your
3428 3429 matplotlib config file) is used.
3429 3430
3430 3431 Examples
3431 3432 --------
3432 3433 In this case, where the MPL default is TkAgg:
3433 3434 In [2]: %pylab
3434 3435
3435 3436 Welcome to pylab, a matplotlib-based Python environment.
3436 3437 Backend in use: TkAgg
3437 3438 For more information, type 'help(pylab)'.
3438 3439
3439 3440 But you can explicitly request a different backend:
3440 3441 In [3]: %pylab qt
3441 3442
3442 3443 Welcome to pylab, a matplotlib-based Python environment.
3443 3444 Backend in use: Qt4Agg
3444 3445 For more information, type 'help(pylab)'.
3445 3446 """
3446 3447
3447 3448 if Application.initialized():
3448 3449 app = Application.instance()
3449 3450 try:
3450 3451 import_all_status = app.pylab_import_all
3451 3452 except AttributeError:
3452 3453 import_all_status = True
3453 3454 else:
3454 3455 import_all_status = True
3455 3456
3456 3457 self.shell.enable_pylab(s,import_all=import_all_status)
3457 3458
3458 3459 def magic_tb(self, s):
3459 3460 """Print the last traceback with the currently active exception mode.
3460 3461
3461 3462 See %xmode for changing exception reporting modes."""
3462 3463 self.shell.showtraceback()
3463 3464
3464 3465 @skip_doctest
3465 3466 def magic_precision(self, s=''):
3466 3467 """Set floating point precision for pretty printing.
3467 3468
3468 3469 Can set either integer precision or a format string.
3469 3470
3470 3471 If numpy has been imported and precision is an int,
3471 3472 numpy display precision will also be set, via ``numpy.set_printoptions``.
3472 3473
3473 3474 If no argument is given, defaults will be restored.
3474 3475
3475 3476 Examples
3476 3477 --------
3477 3478 ::
3478 3479
3479 3480 In [1]: from math import pi
3480 3481
3481 3482 In [2]: %precision 3
3482 3483 Out[2]: u'%.3f'
3483 3484
3484 3485 In [3]: pi
3485 3486 Out[3]: 3.142
3486 3487
3487 3488 In [4]: %precision %i
3488 3489 Out[4]: u'%i'
3489 3490
3490 3491 In [5]: pi
3491 3492 Out[5]: 3
3492 3493
3493 3494 In [6]: %precision %e
3494 3495 Out[6]: u'%e'
3495 3496
3496 3497 In [7]: pi**10
3497 3498 Out[7]: 9.364805e+04
3498 3499
3499 3500 In [8]: %precision
3500 3501 Out[8]: u'%r'
3501 3502
3502 3503 In [9]: pi**10
3503 3504 Out[9]: 93648.047476082982
3504 3505
3505 3506 """
3506 3507
3507 3508 ptformatter = self.shell.display_formatter.formatters['text/plain']
3508 3509 ptformatter.float_precision = s
3509 3510 return ptformatter.float_format
3510 3511
3511 3512
3512 3513 @magic_arguments.magic_arguments()
3513 3514 @magic_arguments.argument(
3514 3515 '-e', '--export', action='store_true', default=False,
3515 3516 help='Export IPython history as a notebook. The filename argument '
3516 3517 'is used to specify the notebook name and format. For example '
3517 3518 'a filename of notebook.ipynb will result in a notebook name '
3518 3519 'of "notebook" and a format of "xml". Likewise using a ".json" '
3519 3520 'or ".py" file extension will write the notebook in the json '
3520 3521 'or py formats.'
3521 3522 )
3522 3523 @magic_arguments.argument(
3523 3524 '-f', '--format',
3524 3525 help='Convert an existing IPython notebook to a new format. This option '
3525 3526 'specifies the new format and can have the values: xml, json, py. '
3526 3527 'The target filename is choosen automatically based on the new '
3527 3528 'format. The filename argument gives the name of the source file.'
3528 3529 )
3529 3530 @magic_arguments.argument(
3530 3531 'filename', type=unicode,
3531 3532 help='Notebook name or filename'
3532 3533 )
3533 3534 def magic_notebook(self, s):
3534 3535 """Export and convert IPython notebooks.
3535 3536
3536 3537 This function can export the current IPython history to a notebook file
3537 3538 or can convert an existing notebook file into a different format. For
3538 3539 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3539 3540 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3540 3541 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3541 3542 formats include (json/ipynb, py).
3542 3543 """
3543 3544 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3544 3545
3545 3546 from IPython.nbformat import current
3546 3547 args.filename = unquote_filename(args.filename)
3547 3548 if args.export:
3548 3549 fname, name, format = current.parse_filename(args.filename)
3549 3550 cells = []
3550 3551 hist = list(self.history_manager.get_range())
3551 3552 for session, prompt_number, input in hist[:-1]:
3552 3553 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3553 3554 worksheet = current.new_worksheet(cells=cells)
3554 3555 nb = current.new_notebook(name=name,worksheets=[worksheet])
3555 3556 with open(fname, 'w') as f:
3556 3557 current.write(nb, f, format);
3557 3558 elif args.format is not None:
3558 3559 old_fname, old_name, old_format = current.parse_filename(args.filename)
3559 3560 new_format = args.format
3560 3561 if new_format == u'xml':
3561 3562 raise ValueError('Notebooks cannot be written as xml.')
3562 3563 elif new_format == u'ipynb' or new_format == u'json':
3563 3564 new_fname = old_name + u'.ipynb'
3564 3565 new_format = u'json'
3565 3566 elif new_format == u'py':
3566 3567 new_fname = old_name + u'.py'
3567 3568 else:
3568 3569 raise ValueError('Invalid notebook format: %s' % new_format)
3569 3570 with open(old_fname, 'r') as f:
3570 3571 s = f.read()
3571 3572 try:
3572 3573 nb = current.reads(s, old_format)
3573 3574 except:
3574 3575 nb = current.reads(s, u'xml')
3575 3576 with open(new_fname, 'w') as f:
3576 3577 current.write(nb, f, new_format)
3577 3578
3578 3579
3579 3580 # end Magic
@@ -1,442 +1,437 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 inspect
20 20 import os
21 21
22 22 # Our own
23 23 from IPython.core.interactiveshell import (
24 24 InteractiveShell, InteractiveShellABC
25 25 )
26 26 from IPython.core import page
27 27 from IPython.core.autocall import ZMQExitAutocall
28 28 from IPython.core.displaypub import DisplayPublisher
29 29 from IPython.core.macro import Macro
30 30 from IPython.core.magic import MacroToEdit
31 31 from IPython.core.payloadpage import install_payload_page
32 32 from IPython.utils import io
33 33 from IPython.utils.jsonutil import json_clean
34 34 from IPython.utils.path import get_py_filename
35 35 from IPython.utils.traitlets import Instance, Type, Dict, CBool
36 36 from IPython.utils.warn import warn
37 37 from IPython.zmq.displayhook import ZMQShellDisplayHook, _encode_binary
38 38 from IPython.zmq.session import extract_header
39 39 from session import Session
40 40
41 41 #-----------------------------------------------------------------------------
42 42 # Globals and side-effects
43 43 #-----------------------------------------------------------------------------
44 44
45 45 # Install the payload version of page.
46 46 install_payload_page()
47 47
48 48 #-----------------------------------------------------------------------------
49 49 # Functions and classes
50 50 #-----------------------------------------------------------------------------
51 51
52 52 class ZMQDisplayPublisher(DisplayPublisher):
53 53 """A display publisher that publishes data using a ZeroMQ PUB socket."""
54 54
55 55 session = Instance(Session)
56 56 pub_socket = Instance('zmq.Socket')
57 57 parent_header = Dict({})
58 58
59 59 def set_parent(self, parent):
60 60 """Set the parent for outbound messages."""
61 61 self.parent_header = extract_header(parent)
62 62
63 63 def publish(self, source, data, metadata=None):
64 64 if metadata is None:
65 65 metadata = {}
66 66 self._validate_data(source, data, metadata)
67 67 content = {}
68 68 content['source'] = source
69 69 _encode_binary(data)
70 70 content['data'] = data
71 71 content['metadata'] = metadata
72 72 self.session.send(
73 73 self.pub_socket, u'display_data', json_clean(content),
74 74 parent=self.parent_header
75 75 )
76 76
77 77
78 78 class ZMQInteractiveShell(InteractiveShell):
79 79 """A subclass of InteractiveShell for ZMQ."""
80 80
81 81 displayhook_class = Type(ZMQShellDisplayHook)
82 82 display_pub_class = Type(ZMQDisplayPublisher)
83 83
84 84 # Override the traitlet in the parent class, because there's no point using
85 85 # readline for the kernel. Can be removed when the readline code is moved
86 86 # to the terminal frontend.
87
88 # FIXME. This is disabled for now, even though it may cause problems under
89 # Windows, because it breaks %run in the Qt console. See gh-617 for more
90 # details. Re-enable once we've fully tested that %run works in the Qt
91 # console with syntax highlighting in tracebacks.
92 # readline_use = CBool(False)
93 # /FIXME
87 colors_force = CBool(True)
88 readline_use = CBool(False)
94 89
95 90 exiter = Instance(ZMQExitAutocall)
96 91 def _exiter_default(self):
97 92 return ZMQExitAutocall(self)
98 93
99 94 keepkernel_on_exit = None
100 95
101 96 def init_environment(self):
102 97 """Configure the user's environment.
103 98
104 99 """
105 100 env = os.environ
106 101 # These two ensure 'ls' produces nice coloring on BSD-derived systems
107 102 env['TERM'] = 'xterm-color'
108 103 env['CLICOLOR'] = '1'
109 104 # Since normal pagers don't work at all (over pexpect we don't have
110 105 # single-key control of the subprocess), try to disable paging in
111 106 # subprocesses as much as possible.
112 107 env['PAGER'] = 'cat'
113 108 env['GIT_PAGER'] = 'cat'
114 109
115 110 def auto_rewrite_input(self, cmd):
116 111 """Called to show the auto-rewritten input for autocall and friends.
117 112
118 113 FIXME: this payload is currently not correctly processed by the
119 114 frontend.
120 115 """
121 116 new = self.displayhook.prompt1.auto_rewrite() + cmd
122 117 payload = dict(
123 118 source='IPython.zmq.zmqshell.ZMQInteractiveShell.auto_rewrite_input',
124 119 transformed_input=new,
125 120 )
126 121 self.payload_manager.write_payload(payload)
127 122
128 123 def ask_exit(self):
129 124 """Engage the exit actions."""
130 125 payload = dict(
131 126 source='IPython.zmq.zmqshell.ZMQInteractiveShell.ask_exit',
132 127 exit=True,
133 128 keepkernel=self.keepkernel_on_exit,
134 129 )
135 130 self.payload_manager.write_payload(payload)
136 131
137 132 def _showtraceback(self, etype, evalue, stb):
138 133
139 134 exc_content = {
140 135 u'traceback' : stb,
141 136 u'ename' : unicode(etype.__name__),
142 137 u'evalue' : unicode(evalue)
143 138 }
144 139
145 140 dh = self.displayhook
146 141 # Send exception info over pub socket for other clients than the caller
147 142 # to pick up
148 143 exc_msg = dh.session.send(dh.pub_socket, u'pyerr', json_clean(exc_content), dh.parent_header)
149 144
150 145 # FIXME - Hack: store exception info in shell object. Right now, the
151 146 # caller is reading this info after the fact, we need to fix this logic
152 147 # to remove this hack. Even uglier, we need to store the error status
153 148 # here, because in the main loop, the logic that sets it is being
154 149 # skipped because runlines swallows the exceptions.
155 150 exc_content[u'status'] = u'error'
156 151 self._reply_content = exc_content
157 152 # /FIXME
158 153
159 154 return exc_content
160 155
161 156 #------------------------------------------------------------------------
162 157 # Magic overrides
163 158 #------------------------------------------------------------------------
164 159 # Once the base class stops inheriting from magic, this code needs to be
165 160 # moved into a separate machinery as well. For now, at least isolate here
166 161 # the magics which this class needs to implement differently from the base
167 162 # class, or that are unique to it.
168 163
169 164 def magic_doctest_mode(self,parameter_s=''):
170 165 """Toggle doctest mode on and off.
171 166
172 167 This mode is intended to make IPython behave as much as possible like a
173 168 plain Python shell, from the perspective of how its prompts, exceptions
174 169 and output look. This makes it easy to copy and paste parts of a
175 170 session into doctests. It does so by:
176 171
177 172 - Changing the prompts to the classic ``>>>`` ones.
178 173 - Changing the exception reporting mode to 'Plain'.
179 174 - Disabling pretty-printing of output.
180 175
181 176 Note that IPython also supports the pasting of code snippets that have
182 177 leading '>>>' and '...' prompts in them. This means that you can paste
183 178 doctests from files or docstrings (even if they have leading
184 179 whitespace), and the code will execute correctly. You can then use
185 180 '%history -t' to see the translated history; this will give you the
186 181 input after removal of all the leading prompts and whitespace, which
187 182 can be pasted back into an editor.
188 183
189 184 With these features, you can switch into this mode easily whenever you
190 185 need to do testing and changes to doctests, without having to leave
191 186 your existing IPython session.
192 187 """
193 188
194 189 from IPython.utils.ipstruct import Struct
195 190
196 191 # Shorthands
197 192 shell = self.shell
198 193 disp_formatter = self.shell.display_formatter
199 194 ptformatter = disp_formatter.formatters['text/plain']
200 195 # dstore is a data store kept in the instance metadata bag to track any
201 196 # changes we make, so we can undo them later.
202 197 dstore = shell.meta.setdefault('doctest_mode', Struct())
203 198 save_dstore = dstore.setdefault
204 199
205 200 # save a few values we'll need to recover later
206 201 mode = save_dstore('mode', False)
207 202 save_dstore('rc_pprint', ptformatter.pprint)
208 203 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
209 204 save_dstore('xmode', shell.InteractiveTB.mode)
210 205
211 206 if mode == False:
212 207 # turn on
213 208 ptformatter.pprint = False
214 209 disp_formatter.plain_text_only = True
215 210 shell.magic_xmode('Plain')
216 211 else:
217 212 # turn off
218 213 ptformatter.pprint = dstore.rc_pprint
219 214 disp_formatter.plain_text_only = dstore.rc_plain_text_only
220 215 shell.magic_xmode(dstore.xmode)
221 216
222 217 # Store new mode and inform on console
223 218 dstore.mode = bool(1-int(mode))
224 219 mode_label = ['OFF','ON'][dstore.mode]
225 220 print('Doctest mode is:', mode_label)
226 221
227 222 # Send the payload back so that clients can modify their prompt display
228 223 payload = dict(
229 224 source='IPython.zmq.zmqshell.ZMQInteractiveShell.magic_doctest_mode',
230 225 mode=dstore.mode)
231 226 self.payload_manager.write_payload(payload)
232 227
233 228 def magic_edit(self,parameter_s='',last_call=['','']):
234 229 """Bring up an editor and execute the resulting code.
235 230
236 231 Usage:
237 232 %edit [options] [args]
238 233
239 234 %edit runs an external text editor. You will need to set the command for
240 235 this editor via the ``TerminalInteractiveShell.editor`` option in your
241 236 configuration file before it will work.
242 237
243 238 This command allows you to conveniently edit multi-line code right in
244 239 your IPython session.
245 240
246 241 If called without arguments, %edit opens up an empty editor with a
247 242 temporary file and will execute the contents of this file when you
248 243 close it (don't forget to save it!).
249 244
250 245
251 246 Options:
252 247
253 248 -n <number>: open the editor at a specified line number. By default,
254 249 the IPython editor hook uses the unix syntax 'editor +N filename', but
255 250 you can configure this by providing your own modified hook if your
256 251 favorite editor supports line-number specifications with a different
257 252 syntax.
258 253
259 254 -p: this will call the editor with the same data as the previous time
260 255 it was used, regardless of how long ago (in your current session) it
261 256 was.
262 257
263 258 -r: use 'raw' input. This option only applies to input taken from the
264 259 user's history. By default, the 'processed' history is used, so that
265 260 magics are loaded in their transformed version to valid Python. If
266 261 this option is given, the raw input as typed as the command line is
267 262 used instead. When you exit the editor, it will be executed by
268 263 IPython's own processor.
269 264
270 265 -x: do not execute the edited code immediately upon exit. This is
271 266 mainly useful if you are editing programs which need to be called with
272 267 command line arguments, which you can then do using %run.
273 268
274 269
275 270 Arguments:
276 271
277 272 If arguments are given, the following possibilites exist:
278 273
279 274 - The arguments are numbers or pairs of colon-separated numbers (like
280 275 1 4:8 9). These are interpreted as lines of previous input to be
281 276 loaded into the editor. The syntax is the same of the %macro command.
282 277
283 278 - If the argument doesn't start with a number, it is evaluated as a
284 279 variable and its contents loaded into the editor. You can thus edit
285 280 any string which contains python code (including the result of
286 281 previous edits).
287 282
288 283 - If the argument is the name of an object (other than a string),
289 284 IPython will try to locate the file where it was defined and open the
290 285 editor at the point where it is defined. You can use `%edit function`
291 286 to load an editor exactly at the point where 'function' is defined,
292 287 edit it and have the file be executed automatically.
293 288
294 289 If the object is a macro (see %macro for details), this opens up your
295 290 specified editor with a temporary file containing the macro's data.
296 291 Upon exit, the macro is reloaded with the contents of the file.
297 292
298 293 Note: opening at an exact line is only supported under Unix, and some
299 294 editors (like kedit and gedit up to Gnome 2.8) do not understand the
300 295 '+NUMBER' parameter necessary for this feature. Good editors like
301 296 (X)Emacs, vi, jed, pico and joe all do.
302 297
303 298 - If the argument is not found as a variable, IPython will look for a
304 299 file with that name (adding .py if necessary) and load it into the
305 300 editor. It will execute its contents with execfile() when you exit,
306 301 loading any code in the file into your interactive namespace.
307 302
308 303 After executing your code, %edit will return as output the code you
309 304 typed in the editor (except when it was an existing file). This way
310 305 you can reload the code in further invocations of %edit as a variable,
311 306 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
312 307 the output.
313 308
314 309 Note that %edit is also available through the alias %ed.
315 310
316 311 This is an example of creating a simple function inside the editor and
317 312 then modifying it. First, start up the editor:
318 313
319 314 In [1]: ed
320 315 Editing... done. Executing edited code...
321 316 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
322 317
323 318 We can then call the function foo():
324 319
325 320 In [2]: foo()
326 321 foo() was defined in an editing session
327 322
328 323 Now we edit foo. IPython automatically loads the editor with the
329 324 (temporary) file where foo() was previously defined:
330 325
331 326 In [3]: ed foo
332 327 Editing... done. Executing edited code...
333 328
334 329 And if we call foo() again we get the modified version:
335 330
336 331 In [4]: foo()
337 332 foo() has now been changed!
338 333
339 334 Here is an example of how to edit a code snippet successive
340 335 times. First we call the editor:
341 336
342 337 In [5]: ed
343 338 Editing... done. Executing edited code...
344 339 hello
345 340 Out[5]: "print 'hello'n"
346 341
347 342 Now we call it again with the previous output (stored in _):
348 343
349 344 In [6]: ed _
350 345 Editing... done. Executing edited code...
351 346 hello world
352 347 Out[6]: "print 'hello world'n"
353 348
354 349 Now we call it with the output #8 (stored in _8, also as Out[8]):
355 350
356 351 In [7]: ed _8
357 352 Editing... done. Executing edited code...
358 353 hello again
359 354 Out[7]: "print 'hello again'n"
360 355 """
361 356
362 357 opts,args = self.parse_options(parameter_s,'prn:')
363 358
364 359 try:
365 360 filename, lineno, _ = self._find_edit_target(args, opts, last_call)
366 361 except MacroToEdit as e:
367 362 # TODO: Implement macro editing over 2 processes.
368 363 print("Macro editing not yet implemented in 2-process model.")
369 364 return
370 365
371 366 # Make sure we send to the client an absolute path, in case the working
372 367 # directory of client and kernel don't match
373 368 filename = os.path.abspath(filename)
374 369
375 370 payload = {
376 371 'source' : 'IPython.zmq.zmqshell.ZMQInteractiveShell.edit_magic',
377 372 'filename' : filename,
378 373 'line_number' : lineno
379 374 }
380 375 self.payload_manager.write_payload(payload)
381 376
382 377 def magic_gui(self, *args, **kwargs):
383 378 raise NotImplementedError(
384 379 'Kernel GUI support is not implemented yet, except for --pylab.')
385 380
386 381 def magic_pylab(self, *args, **kwargs):
387 382 raise NotImplementedError(
388 383 'pylab support must be enabled in command line options.')
389 384
390 385 # A few magics that are adapted to the specifics of using pexpect and a
391 386 # remote terminal
392 387
393 388 def magic_clear(self, arg_s):
394 389 """Clear the terminal."""
395 390 if os.name == 'posix':
396 391 self.shell.system("clear")
397 392 else:
398 393 self.shell.system("cls")
399 394
400 395 if os.name == 'nt':
401 396 # This is the usual name in windows
402 397 magic_cls = magic_clear
403 398
404 399 # Terminal pagers won't work over pexpect, but we do have our own pager
405 400
406 401 def magic_less(self, arg_s):
407 402 """Show a file through the pager.
408 403
409 404 Files ending in .py are syntax-highlighted."""
410 405 cont = open(arg_s).read()
411 406 if arg_s.endswith('.py'):
412 407 cont = self.shell.pycolorize(cont)
413 408 page.page(cont)
414 409
415 410 magic_more = magic_less
416 411
417 412 # Man calls a pager, so we also need to redefine it
418 413 if os.name == 'posix':
419 414 def magic_man(self, arg_s):
420 415 """Find the man page for the given command and display in pager."""
421 416 page.page(self.shell.getoutput('man %s | col -b' % arg_s,
422 417 split=False))
423 418
424 419 # FIXME: this is specific to the GUI, so we should let the gui app load
425 420 # magics at startup that are only for the gui. Once the gui app has proper
426 421 # profile and configuration management, we can have it initialize a kernel
427 422 # with a special config file that provides these.
428 423 def magic_guiref(self, arg_s):
429 424 """Show a basic reference about the GUI console."""
430 425 from IPython.core.usage import gui_reference
431 426 page.page(gui_reference, auto_html=True)
432 427
433 428 def set_next_input(self, text):
434 429 """Send the specified text to the frontend to be presented at the next
435 430 input cell."""
436 431 payload = dict(
437 432 source='IPython.zmq.zmqshell.ZMQInteractiveShell.set_next_input',
438 433 text=text
439 434 )
440 435 self.payload_manager.write_payload(payload)
441 436
442 437 InteractiveShellABC.register(ZMQInteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now