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