##// END OF EJS Templates
Moved init_io and init_traceback_handlers after readline_init.
Brian Granger -
Show More
@@ -1,2111 +1,2118 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-2010 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__
21 21 import abc
22 22 import codeop
23 23 import exceptions
24 24 import new
25 25 import os
26 26 import re
27 27 import string
28 28 import sys
29 29 import tempfile
30 30 from contextlib import nested
31 31
32 32 from IPython.core import debugger, oinspect
33 33 from IPython.core import history as ipcorehist
34 34 from IPython.core import prefilter
35 35 from IPython.core import shadowns
36 36 from IPython.core import ultratb
37 37 from IPython.core.alias import AliasManager
38 38 from IPython.core.builtin_trap import BuiltinTrap
39 39 from IPython.config.configurable import Configurable
40 40 from IPython.core.display_trap import DisplayTrap
41 41 from IPython.core.error import UsageError
42 42 from IPython.core.extensions import ExtensionManager
43 43 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
44 44 from IPython.core.inputlist import InputList
45 45 from IPython.core.logger import Logger
46 46 from IPython.core.magic import Magic
47 47 from IPython.core.plugin import PluginManager
48 48 from IPython.core.prefilter import PrefilterManager
49 49 from IPython.core.displayhook import DisplayHook
50 50 import IPython.core.hooks
51 51 from IPython.external.Itpl import ItplNS
52 52 from IPython.utils import PyColorize
53 53 from IPython.utils import pickleshare
54 54 from IPython.utils.doctestreload import doctest_reload
55 55 from IPython.utils.ipstruct import Struct
56 56 import IPython.utils.io
57 57 from IPython.utils.io import ask_yes_no
58 58 from IPython.utils.path import get_home_dir, get_ipython_dir, HomeDirError
59 59 from IPython.utils.process import getoutput, getoutputerror
60 60 from IPython.utils.strdispatch import StrDispatch
61 61 from IPython.utils.syspathcontext import prepended_to_syspath
62 62 from IPython.utils.text import num_ini_spaces
63 63 from IPython.utils.warn import warn, error, fatal
64 64 from IPython.utils.traitlets import (
65 65 Int, Str, CBool, CaselessStrEnum, Enum, List, Unicode, Instance, Type
66 66 )
67 67
68 68 # from IPython.utils import growl
69 69 # growl.start("IPython")
70 70
71 71 #-----------------------------------------------------------------------------
72 72 # Globals
73 73 #-----------------------------------------------------------------------------
74 74
75 75 # compiled regexps for autoindent management
76 76 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
77 77
78 78 #-----------------------------------------------------------------------------
79 79 # Utilities
80 80 #-----------------------------------------------------------------------------
81 81
82 82 # store the builtin raw_input globally, and use this always, in case user code
83 83 # overwrites it (like wx.py.PyShell does)
84 84 raw_input_original = raw_input
85 85
86 86 def softspace(file, newvalue):
87 87 """Copied from code.py, to remove the dependency"""
88 88
89 89 oldvalue = 0
90 90 try:
91 91 oldvalue = file.softspace
92 92 except AttributeError:
93 93 pass
94 94 try:
95 95 file.softspace = newvalue
96 96 except (AttributeError, TypeError):
97 97 # "attribute-less object" or "read-only attributes"
98 98 pass
99 99 return oldvalue
100 100
101 101
102 102 def no_op(*a, **kw): pass
103 103
104 104 class SpaceInInput(exceptions.Exception): pass
105 105
106 106 class Bunch: pass
107 107
108 108
109 109 def get_default_colors():
110 110 if sys.platform=='darwin':
111 111 return "LightBG"
112 112 elif os.name=='nt':
113 113 return 'Linux'
114 114 else:
115 115 return 'Linux'
116 116
117 117
118 118 class SeparateStr(Str):
119 119 """A Str subclass to validate separate_in, separate_out, etc.
120 120
121 121 This is a Str based trait that converts '0'->'' and '\\n'->'\n'.
122 122 """
123 123
124 124 def validate(self, obj, value):
125 125 if value == '0': value = ''
126 126 value = value.replace('\\n','\n')
127 127 return super(SeparateStr, self).validate(obj, value)
128 128
129 129 class MultipleInstanceError(Exception):
130 130 pass
131 131
132 132
133 133 #-----------------------------------------------------------------------------
134 134 # Main IPython class
135 135 #-----------------------------------------------------------------------------
136 136
137 137
138 138 class InteractiveShell(Configurable, Magic):
139 139 """An enhanced, interactive shell for Python."""
140 140
141 141 _instance = None
142 142 autocall = Enum((0,1,2), default_value=1, config=True)
143 143 # TODO: remove all autoindent logic and put into frontends.
144 144 # We can't do this yet because even runlines uses the autoindent.
145 145 autoindent = CBool(True, config=True)
146 146 automagic = CBool(True, config=True)
147 147 cache_size = Int(1000, config=True)
148 148 color_info = CBool(True, config=True)
149 149 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
150 150 default_value=get_default_colors(), config=True)
151 151 debug = CBool(False, config=True)
152 152 deep_reload = CBool(False, config=True)
153 153 displayhook_class = Type(DisplayHook)
154 154 filename = Str("<ipython console>")
155 155 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
156 156 logstart = CBool(False, config=True)
157 157 logfile = Str('', config=True)
158 158 logappend = Str('', config=True)
159 159 object_info_string_level = Enum((0,1,2), default_value=0,
160 160 config=True)
161 161 pdb = CBool(False, config=True)
162 162 pprint = CBool(True, config=True)
163 163 profile = Str('', config=True)
164 164 prompt_in1 = Str('In [\\#]: ', config=True)
165 165 prompt_in2 = Str(' .\\D.: ', config=True)
166 166 prompt_out = Str('Out[\\#]: ', config=True)
167 167 prompts_pad_left = CBool(True, config=True)
168 168 quiet = CBool(False, config=True)
169 169
170 170 # The readline stuff will eventually be moved to the terminal subclass
171 171 # but for now, we can't do that as readline is welded in everywhere.
172 172 readline_use = CBool(True, config=True)
173 173 readline_merge_completions = CBool(True, config=True)
174 174 readline_omit__names = Enum((0,1,2), default_value=0, config=True)
175 175 readline_remove_delims = Str('-/~', config=True)
176 176 readline_parse_and_bind = List([
177 177 'tab: complete',
178 178 '"\C-l": clear-screen',
179 179 'set show-all-if-ambiguous on',
180 180 '"\C-o": tab-insert',
181 181 '"\M-i": " "',
182 182 '"\M-o": "\d\d\d\d"',
183 183 '"\M-I": "\d\d\d\d"',
184 184 '"\C-r": reverse-search-history',
185 185 '"\C-s": forward-search-history',
186 186 '"\C-p": history-search-backward',
187 187 '"\C-n": history-search-forward',
188 188 '"\e[A": history-search-backward',
189 189 '"\e[B": history-search-forward',
190 190 '"\C-k": kill-line',
191 191 '"\C-u": unix-line-discard',
192 192 ], allow_none=False, config=True)
193 193
194 194 # TODO: this part of prompt management should be moved to the frontends.
195 195 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
196 196 separate_in = SeparateStr('\n', config=True)
197 197 separate_out = SeparateStr('\n', config=True)
198 198 separate_out2 = SeparateStr('\n', config=True)
199 199 system_header = Str('IPython system call: ', config=True)
200 200 system_verbose = CBool(False, config=True)
201 201 wildcards_case_sensitive = CBool(True, config=True)
202 202 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
203 203 default_value='Context', config=True)
204 204
205 205 # Subcomponents of InteractiveShell
206 206 alias_manager = Instance('IPython.core.alias.AliasManager')
207 207 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
208 208 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
209 209 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
210 210 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
211 211 plugin_manager = Instance('IPython.core.plugin.PluginManager')
212 212
213 213 def __init__(self, config=None, ipython_dir=None,
214 214 user_ns=None, user_global_ns=None,
215 215 custom_exceptions=((),None)):
216 216
217 217 # This is where traits with a config_key argument are updated
218 218 # from the values on config.
219 219 super(InteractiveShell, self).__init__(config=config)
220 220
221 221 # These are relatively independent and stateless
222 222 self.init_ipython_dir(ipython_dir)
223 223 self.init_instance_attrs()
224 224
225 225 # Create namespaces (user_ns, user_global_ns, etc.)
226 226 self.init_create_namespaces(user_ns, user_global_ns)
227 227 # This has to be done after init_create_namespaces because it uses
228 228 # something in self.user_ns, but before init_sys_modules, which
229 229 # is the first thing to modify sys.
230 # TODO: When we override sys.stdout and sys.stderr before this class
231 # is created, we are saving the overridden ones here. Not sure if this
232 # is what we want to do.
230 233 self.save_sys_module_state()
231 234 self.init_sys_modules()
232 235
233 236 self.init_history()
234 237 self.init_encoding()
235 238 self.init_prefilter()
236 239
237 240 Magic.__init__(self, self)
238 241
239 242 self.init_syntax_highlighting()
240 243 self.init_hooks()
241 244 self.init_pushd_popd_magic()
242 # TODO: init_io() needs to happen before init_traceback handlers
243 # because the traceback handlers hardcode the stdout/stderr streams.
244 # This logic in in debugger.Pdb and should eventually be changed.
245 self.init_io()
246 self.init_traceback_handlers(custom_exceptions)
245 # self.init_traceback_handlers use to be here, but we moved it below
246 # because it and init_io have to come after init_readline.
247 247 self.init_user_ns()
248 248 self.init_logger()
249 249 self.init_alias()
250 250 self.init_builtins()
251 251
252 252 # pre_config_initialization
253 253 self.init_shadow_hist()
254 254
255 255 # The next section should contain averything that was in ipmaker.
256 256 self.init_logstart()
257 257
258 258 # The following was in post_config_initialization
259 259 self.init_inspector()
260 # init_readline() must come before init_io(), because init_io uses
261 # readline related things.
260 262 self.init_readline()
263 # TODO: init_io() needs to happen before init_traceback handlers
264 # because the traceback handlers hardcode the stdout/stderr streams.
265 # This logic in in debugger.Pdb and should eventually be changed.
266 self.init_io()
267 self.init_traceback_handlers(custom_exceptions)
261 268 self.init_prompts()
262 269 self.init_displayhook()
263 270 self.init_reload_doctest()
264 271 self.init_magics()
265 272 self.init_pdb()
266 273 self.init_extension_manager()
267 274 self.init_plugin_manager()
268 275 self.hooks.late_startup_hook()
269 276
270 277 @classmethod
271 278 def instance(cls, *args, **kwargs):
272 279 """Returns a global InteractiveShell instance."""
273 280 if cls._instance is None:
274 281 inst = cls(*args, **kwargs)
275 282 # Now make sure that the instance will also be returned by
276 283 # the subclasses instance attribute.
277 284 for subclass in cls.mro():
278 285 if issubclass(cls, subclass) and issubclass(subclass, InteractiveShell):
279 286 subclass._instance = inst
280 287 else:
281 288 break
282 289 if isinstance(cls._instance, cls):
283 290 return cls._instance
284 291 else:
285 292 raise MultipleInstanceError(
286 293 'Multiple incompatible subclass instances of '
287 294 'InteractiveShell are being created.'
288 295 )
289 296
290 297 @classmethod
291 298 def initialized(cls):
292 299 return hasattr(cls, "_instance")
293 300
294 301 def get_ipython(self):
295 302 """Return the currently running IPython instance."""
296 303 return self
297 304
298 305 #-------------------------------------------------------------------------
299 306 # Trait changed handlers
300 307 #-------------------------------------------------------------------------
301 308
302 309 def _ipython_dir_changed(self, name, new):
303 310 if not os.path.isdir(new):
304 311 os.makedirs(new, mode = 0777)
305 312
306 313 def set_autoindent(self,value=None):
307 314 """Set the autoindent flag, checking for readline support.
308 315
309 316 If called with no arguments, it acts as a toggle."""
310 317
311 318 if not self.has_readline:
312 319 if os.name == 'posix':
313 320 warn("The auto-indent feature requires the readline library")
314 321 self.autoindent = 0
315 322 return
316 323 if value is None:
317 324 self.autoindent = not self.autoindent
318 325 else:
319 326 self.autoindent = value
320 327
321 328 #-------------------------------------------------------------------------
322 329 # init_* methods called by __init__
323 330 #-------------------------------------------------------------------------
324 331
325 332 def init_ipython_dir(self, ipython_dir):
326 333 if ipython_dir is not None:
327 334 self.ipython_dir = ipython_dir
328 335 self.config.Global.ipython_dir = self.ipython_dir
329 336 return
330 337
331 338 if hasattr(self.config.Global, 'ipython_dir'):
332 339 self.ipython_dir = self.config.Global.ipython_dir
333 340 else:
334 341 self.ipython_dir = get_ipython_dir()
335 342
336 343 # All children can just read this
337 344 self.config.Global.ipython_dir = self.ipython_dir
338 345
339 346 def init_instance_attrs(self):
340 347 self.more = False
341 348
342 349 # command compiler
343 350 self.compile = codeop.CommandCompiler()
344 351
345 352 # User input buffer
346 353 self.buffer = []
347 354
348 355 # Make an empty namespace, which extension writers can rely on both
349 356 # existing and NEVER being used by ipython itself. This gives them a
350 357 # convenient location for storing additional information and state
351 358 # their extensions may require, without fear of collisions with other
352 359 # ipython names that may develop later.
353 360 self.meta = Struct()
354 361
355 362 # Object variable to store code object waiting execution. This is
356 363 # used mainly by the multithreaded shells, but it can come in handy in
357 364 # other situations. No need to use a Queue here, since it's a single
358 365 # item which gets cleared once run.
359 366 self.code_to_run = None
360 367
361 368 # Temporary files used for various purposes. Deleted at exit.
362 369 self.tempfiles = []
363 370
364 371 # Keep track of readline usage (later set by init_readline)
365 372 self.has_readline = False
366 373
367 374 # keep track of where we started running (mainly for crash post-mortem)
368 375 # This is not being used anywhere currently.
369 376 self.starting_dir = os.getcwd()
370 377
371 378 # Indentation management
372 379 self.indent_current_nsp = 0
373 380
374 381 def init_encoding(self):
375 382 # Get system encoding at startup time. Certain terminals (like Emacs
376 383 # under Win32 have it set to None, and we need to have a known valid
377 384 # encoding to use in the raw_input() method
378 385 try:
379 386 self.stdin_encoding = sys.stdin.encoding or 'ascii'
380 387 except AttributeError:
381 388 self.stdin_encoding = 'ascii'
382 389
383 390 def init_syntax_highlighting(self):
384 391 # Python source parser/formatter for syntax highlighting
385 392 pyformat = PyColorize.Parser().format
386 393 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
387 394
388 395 def init_pushd_popd_magic(self):
389 396 # for pushd/popd management
390 397 try:
391 398 self.home_dir = get_home_dir()
392 399 except HomeDirError, msg:
393 400 fatal(msg)
394 401
395 402 self.dir_stack = []
396 403
397 404 def init_logger(self):
398 405 self.logger = Logger(self, logfname='ipython_log.py', logmode='rotate')
399 406 # local shortcut, this is used a LOT
400 407 self.log = self.logger.log
401 408
402 409 def init_logstart(self):
403 410 if self.logappend:
404 411 self.magic_logstart(self.logappend + ' append')
405 412 elif self.logfile:
406 413 self.magic_logstart(self.logfile)
407 414 elif self.logstart:
408 415 self.magic_logstart()
409 416
410 417 def init_builtins(self):
411 418 self.builtin_trap = BuiltinTrap(shell=self)
412 419
413 420 def init_inspector(self):
414 421 # Object inspector
415 422 self.inspector = oinspect.Inspector(oinspect.InspectColors,
416 423 PyColorize.ANSICodeColors,
417 424 'NoColor',
418 425 self.object_info_string_level)
419 426
420 427 def init_io(self):
421 428 import IPython.utils.io
422 429 if sys.platform == 'win32' and readline.have_readline and \
423 430 self.readline_use:
424 431 Term = IPython.utils.io.IOTerm(
425 432 cout=readline._outputfile,cerr=readline._outputfile
426 433 )
427 434 else:
428 435 Term = IPython.utils.io.IOTerm()
429 436 IPython.utils.io.Term = Term
430 437
431 438 def init_prompts(self):
432 439 # TODO: This is a pass for now because the prompts are managed inside
433 440 # the DisplayHook. Once there is a separate prompt manager, this
434 441 # will initialize that object and all prompt related information.
435 442 pass
436 443
437 444 def init_displayhook(self):
438 445 # Initialize displayhook, set in/out prompts and printing system
439 446 self.displayhook = self.displayhook_class(
440 447 shell=self,
441 448 cache_size=self.cache_size,
442 449 input_sep = self.separate_in,
443 450 output_sep = self.separate_out,
444 451 output_sep2 = self.separate_out2,
445 452 ps1 = self.prompt_in1,
446 453 ps2 = self.prompt_in2,
447 454 ps_out = self.prompt_out,
448 455 pad_left = self.prompts_pad_left
449 456 )
450 457 # This is a context manager that installs/revmoes the displayhook at
451 458 # the appropriate time.
452 459 self.display_trap = DisplayTrap(hook=self.displayhook)
453 460
454 461 def init_reload_doctest(self):
455 462 # Do a proper resetting of doctest, including the necessary displayhook
456 463 # monkeypatching
457 464 try:
458 465 doctest_reload()
459 466 except ImportError:
460 467 warn("doctest module does not exist.")
461 468
462 469 #-------------------------------------------------------------------------
463 470 # Things related to injections into the sys module
464 471 #-------------------------------------------------------------------------
465 472
466 473 def save_sys_module_state(self):
467 474 """Save the state of hooks in the sys module.
468 475
469 476 This has to be called after self.user_ns is created.
470 477 """
471 478 self._orig_sys_module_state = {}
472 479 self._orig_sys_module_state['stdin'] = sys.stdin
473 480 self._orig_sys_module_state['stdout'] = sys.stdout
474 481 self._orig_sys_module_state['stderr'] = sys.stderr
475 482 self._orig_sys_module_state['excepthook'] = sys.excepthook
476 483 try:
477 484 self._orig_sys_modules_main_name = self.user_ns['__name__']
478 485 except KeyError:
479 486 pass
480 487
481 488 def restore_sys_module_state(self):
482 489 """Restore the state of the sys module."""
483 490 try:
484 491 for k, v in self._orig_sys_module_state.items():
485 492 setattr(sys, k, v)
486 493 except AttributeError:
487 494 pass
488 495 try:
489 496 delattr(sys, 'ipcompleter')
490 497 except AttributeError:
491 498 pass
492 499 # Reset what what done in self.init_sys_modules
493 500 try:
494 501 sys.modules[self.user_ns['__name__']] = self._orig_sys_modules_main_name
495 502 except (AttributeError, KeyError):
496 503 pass
497 504
498 505 #-------------------------------------------------------------------------
499 506 # Things related to hooks
500 507 #-------------------------------------------------------------------------
501 508
502 509 def init_hooks(self):
503 510 # hooks holds pointers used for user-side customizations
504 511 self.hooks = Struct()
505 512
506 513 self.strdispatchers = {}
507 514
508 515 # Set all default hooks, defined in the IPython.hooks module.
509 516 hooks = IPython.core.hooks
510 517 for hook_name in hooks.__all__:
511 518 # default hooks have priority 100, i.e. low; user hooks should have
512 519 # 0-100 priority
513 520 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
514 521
515 522 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
516 523 """set_hook(name,hook) -> sets an internal IPython hook.
517 524
518 525 IPython exposes some of its internal API as user-modifiable hooks. By
519 526 adding your function to one of these hooks, you can modify IPython's
520 527 behavior to call at runtime your own routines."""
521 528
522 529 # At some point in the future, this should validate the hook before it
523 530 # accepts it. Probably at least check that the hook takes the number
524 531 # of args it's supposed to.
525 532
526 533 f = new.instancemethod(hook,self,self.__class__)
527 534
528 535 # check if the hook is for strdispatcher first
529 536 if str_key is not None:
530 537 sdp = self.strdispatchers.get(name, StrDispatch())
531 538 sdp.add_s(str_key, f, priority )
532 539 self.strdispatchers[name] = sdp
533 540 return
534 541 if re_key is not None:
535 542 sdp = self.strdispatchers.get(name, StrDispatch())
536 543 sdp.add_re(re.compile(re_key), f, priority )
537 544 self.strdispatchers[name] = sdp
538 545 return
539 546
540 547 dp = getattr(self.hooks, name, None)
541 548 if name not in IPython.core.hooks.__all__:
542 549 print "Warning! Hook '%s' is not one of %s" % (name, IPython.core.hooks.__all__ )
543 550 if not dp:
544 551 dp = IPython.core.hooks.CommandChainDispatcher()
545 552
546 553 try:
547 554 dp.add(f,priority)
548 555 except AttributeError:
549 556 # it was not commandchain, plain old func - replace
550 557 dp = f
551 558
552 559 setattr(self.hooks,name, dp)
553 560
554 561 #-------------------------------------------------------------------------
555 562 # Things related to the "main" module
556 563 #-------------------------------------------------------------------------
557 564
558 565 def new_main_mod(self,ns=None):
559 566 """Return a new 'main' module object for user code execution.
560 567 """
561 568 main_mod = self._user_main_module
562 569 init_fakemod_dict(main_mod,ns)
563 570 return main_mod
564 571
565 572 def cache_main_mod(self,ns,fname):
566 573 """Cache a main module's namespace.
567 574
568 575 When scripts are executed via %run, we must keep a reference to the
569 576 namespace of their __main__ module (a FakeModule instance) around so
570 577 that Python doesn't clear it, rendering objects defined therein
571 578 useless.
572 579
573 580 This method keeps said reference in a private dict, keyed by the
574 581 absolute path of the module object (which corresponds to the script
575 582 path). This way, for multiple executions of the same script we only
576 583 keep one copy of the namespace (the last one), thus preventing memory
577 584 leaks from old references while allowing the objects from the last
578 585 execution to be accessible.
579 586
580 587 Note: we can not allow the actual FakeModule instances to be deleted,
581 588 because of how Python tears down modules (it hard-sets all their
582 589 references to None without regard for reference counts). This method
583 590 must therefore make a *copy* of the given namespace, to allow the
584 591 original module's __dict__ to be cleared and reused.
585 592
586 593
587 594 Parameters
588 595 ----------
589 596 ns : a namespace (a dict, typically)
590 597
591 598 fname : str
592 599 Filename associated with the namespace.
593 600
594 601 Examples
595 602 --------
596 603
597 604 In [10]: import IPython
598 605
599 606 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
600 607
601 608 In [12]: IPython.__file__ in _ip._main_ns_cache
602 609 Out[12]: True
603 610 """
604 611 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
605 612
606 613 def clear_main_mod_cache(self):
607 614 """Clear the cache of main modules.
608 615
609 616 Mainly for use by utilities like %reset.
610 617
611 618 Examples
612 619 --------
613 620
614 621 In [15]: import IPython
615 622
616 623 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
617 624
618 625 In [17]: len(_ip._main_ns_cache) > 0
619 626 Out[17]: True
620 627
621 628 In [18]: _ip.clear_main_mod_cache()
622 629
623 630 In [19]: len(_ip._main_ns_cache) == 0
624 631 Out[19]: True
625 632 """
626 633 self._main_ns_cache.clear()
627 634
628 635 #-------------------------------------------------------------------------
629 636 # Things related to debugging
630 637 #-------------------------------------------------------------------------
631 638
632 639 def init_pdb(self):
633 640 # Set calling of pdb on exceptions
634 641 # self.call_pdb is a property
635 642 self.call_pdb = self.pdb
636 643
637 644 def _get_call_pdb(self):
638 645 return self._call_pdb
639 646
640 647 def _set_call_pdb(self,val):
641 648
642 649 if val not in (0,1,False,True):
643 650 raise ValueError,'new call_pdb value must be boolean'
644 651
645 652 # store value in instance
646 653 self._call_pdb = val
647 654
648 655 # notify the actual exception handlers
649 656 self.InteractiveTB.call_pdb = val
650 657
651 658 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
652 659 'Control auto-activation of pdb at exceptions')
653 660
654 661 def debugger(self,force=False):
655 662 """Call the pydb/pdb debugger.
656 663
657 664 Keywords:
658 665
659 666 - force(False): by default, this routine checks the instance call_pdb
660 667 flag and does not actually invoke the debugger if the flag is false.
661 668 The 'force' option forces the debugger to activate even if the flag
662 669 is false.
663 670 """
664 671
665 672 if not (force or self.call_pdb):
666 673 return
667 674
668 675 if not hasattr(sys,'last_traceback'):
669 676 error('No traceback has been produced, nothing to debug.')
670 677 return
671 678
672 679 # use pydb if available
673 680 if debugger.has_pydb:
674 681 from pydb import pm
675 682 else:
676 683 # fallback to our internal debugger
677 684 pm = lambda : self.InteractiveTB.debugger(force=True)
678 685 self.history_saving_wrapper(pm)()
679 686
680 687 #-------------------------------------------------------------------------
681 688 # Things related to IPython's various namespaces
682 689 #-------------------------------------------------------------------------
683 690
684 691 def init_create_namespaces(self, user_ns=None, user_global_ns=None):
685 692 # Create the namespace where the user will operate. user_ns is
686 693 # normally the only one used, and it is passed to the exec calls as
687 694 # the locals argument. But we do carry a user_global_ns namespace
688 695 # given as the exec 'globals' argument, This is useful in embedding
689 696 # situations where the ipython shell opens in a context where the
690 697 # distinction between locals and globals is meaningful. For
691 698 # non-embedded contexts, it is just the same object as the user_ns dict.
692 699
693 700 # FIXME. For some strange reason, __builtins__ is showing up at user
694 701 # level as a dict instead of a module. This is a manual fix, but I
695 702 # should really track down where the problem is coming from. Alex
696 703 # Schmolck reported this problem first.
697 704
698 705 # A useful post by Alex Martelli on this topic:
699 706 # Re: inconsistent value from __builtins__
700 707 # Von: Alex Martelli <aleaxit@yahoo.com>
701 708 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
702 709 # Gruppen: comp.lang.python
703 710
704 711 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
705 712 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
706 713 # > <type 'dict'>
707 714 # > >>> print type(__builtins__)
708 715 # > <type 'module'>
709 716 # > Is this difference in return value intentional?
710 717
711 718 # Well, it's documented that '__builtins__' can be either a dictionary
712 719 # or a module, and it's been that way for a long time. Whether it's
713 720 # intentional (or sensible), I don't know. In any case, the idea is
714 721 # that if you need to access the built-in namespace directly, you
715 722 # should start with "import __builtin__" (note, no 's') which will
716 723 # definitely give you a module. Yeah, it's somewhat confusing:-(.
717 724
718 725 # These routines return properly built dicts as needed by the rest of
719 726 # the code, and can also be used by extension writers to generate
720 727 # properly initialized namespaces.
721 728 user_ns, user_global_ns = self.make_user_namespaces(user_ns, user_global_ns)
722 729
723 730 # Assign namespaces
724 731 # This is the namespace where all normal user variables live
725 732 self.user_ns = user_ns
726 733 self.user_global_ns = user_global_ns
727 734
728 735 # An auxiliary namespace that checks what parts of the user_ns were
729 736 # loaded at startup, so we can list later only variables defined in
730 737 # actual interactive use. Since it is always a subset of user_ns, it
731 738 # doesn't need to be separately tracked in the ns_table.
732 739 self.user_ns_hidden = {}
733 740
734 741 # A namespace to keep track of internal data structures to prevent
735 742 # them from cluttering user-visible stuff. Will be updated later
736 743 self.internal_ns = {}
737 744
738 745 # Now that FakeModule produces a real module, we've run into a nasty
739 746 # problem: after script execution (via %run), the module where the user
740 747 # code ran is deleted. Now that this object is a true module (needed
741 748 # so docetst and other tools work correctly), the Python module
742 749 # teardown mechanism runs over it, and sets to None every variable
743 750 # present in that module. Top-level references to objects from the
744 751 # script survive, because the user_ns is updated with them. However,
745 752 # calling functions defined in the script that use other things from
746 753 # the script will fail, because the function's closure had references
747 754 # to the original objects, which are now all None. So we must protect
748 755 # these modules from deletion by keeping a cache.
749 756 #
750 757 # To avoid keeping stale modules around (we only need the one from the
751 758 # last run), we use a dict keyed with the full path to the script, so
752 759 # only the last version of the module is held in the cache. Note,
753 760 # however, that we must cache the module *namespace contents* (their
754 761 # __dict__). Because if we try to cache the actual modules, old ones
755 762 # (uncached) could be destroyed while still holding references (such as
756 763 # those held by GUI objects that tend to be long-lived)>
757 764 #
758 765 # The %reset command will flush this cache. See the cache_main_mod()
759 766 # and clear_main_mod_cache() methods for details on use.
760 767
761 768 # This is the cache used for 'main' namespaces
762 769 self._main_ns_cache = {}
763 770 # And this is the single instance of FakeModule whose __dict__ we keep
764 771 # copying and clearing for reuse on each %run
765 772 self._user_main_module = FakeModule()
766 773
767 774 # A table holding all the namespaces IPython deals with, so that
768 775 # introspection facilities can search easily.
769 776 self.ns_table = {'user':user_ns,
770 777 'user_global':user_global_ns,
771 778 'internal':self.internal_ns,
772 779 'builtin':__builtin__.__dict__
773 780 }
774 781
775 782 # Similarly, track all namespaces where references can be held and that
776 783 # we can safely clear (so it can NOT include builtin). This one can be
777 784 # a simple list.
778 785 self.ns_refs_table = [ user_ns, user_global_ns, self.user_ns_hidden,
779 786 self.internal_ns, self._main_ns_cache ]
780 787
781 788 def make_user_namespaces(self, user_ns=None, user_global_ns=None):
782 789 """Return a valid local and global user interactive namespaces.
783 790
784 791 This builds a dict with the minimal information needed to operate as a
785 792 valid IPython user namespace, which you can pass to the various
786 793 embedding classes in ipython. The default implementation returns the
787 794 same dict for both the locals and the globals to allow functions to
788 795 refer to variables in the namespace. Customized implementations can
789 796 return different dicts. The locals dictionary can actually be anything
790 797 following the basic mapping protocol of a dict, but the globals dict
791 798 must be a true dict, not even a subclass. It is recommended that any
792 799 custom object for the locals namespace synchronize with the globals
793 800 dict somehow.
794 801
795 802 Raises TypeError if the provided globals namespace is not a true dict.
796 803
797 804 Parameters
798 805 ----------
799 806 user_ns : dict-like, optional
800 807 The current user namespace. The items in this namespace should
801 808 be included in the output. If None, an appropriate blank
802 809 namespace should be created.
803 810 user_global_ns : dict, optional
804 811 The current user global namespace. The items in this namespace
805 812 should be included in the output. If None, an appropriate
806 813 blank namespace should be created.
807 814
808 815 Returns
809 816 -------
810 817 A pair of dictionary-like object to be used as the local namespace
811 818 of the interpreter and a dict to be used as the global namespace.
812 819 """
813 820
814 821
815 822 # We must ensure that __builtin__ (without the final 's') is always
816 823 # available and pointing to the __builtin__ *module*. For more details:
817 824 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
818 825
819 826 if user_ns is None:
820 827 # Set __name__ to __main__ to better match the behavior of the
821 828 # normal interpreter.
822 829 user_ns = {'__name__' :'__main__',
823 830 '__builtin__' : __builtin__,
824 831 '__builtins__' : __builtin__,
825 832 }
826 833 else:
827 834 user_ns.setdefault('__name__','__main__')
828 835 user_ns.setdefault('__builtin__',__builtin__)
829 836 user_ns.setdefault('__builtins__',__builtin__)
830 837
831 838 if user_global_ns is None:
832 839 user_global_ns = user_ns
833 840 if type(user_global_ns) is not dict:
834 841 raise TypeError("user_global_ns must be a true dict; got %r"
835 842 % type(user_global_ns))
836 843
837 844 return user_ns, user_global_ns
838 845
839 846 def init_sys_modules(self):
840 847 # We need to insert into sys.modules something that looks like a
841 848 # module but which accesses the IPython namespace, for shelve and
842 849 # pickle to work interactively. Normally they rely on getting
843 850 # everything out of __main__, but for embedding purposes each IPython
844 851 # instance has its own private namespace, so we can't go shoving
845 852 # everything into __main__.
846 853
847 854 # note, however, that we should only do this for non-embedded
848 855 # ipythons, which really mimic the __main__.__dict__ with their own
849 856 # namespace. Embedded instances, on the other hand, should not do
850 857 # this because they need to manage the user local/global namespaces
851 858 # only, but they live within a 'normal' __main__ (meaning, they
852 859 # shouldn't overtake the execution environment of the script they're
853 860 # embedded in).
854 861
855 862 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
856 863
857 864 try:
858 865 main_name = self.user_ns['__name__']
859 866 except KeyError:
860 867 raise KeyError('user_ns dictionary MUST have a "__name__" key')
861 868 else:
862 869 sys.modules[main_name] = FakeModule(self.user_ns)
863 870
864 871 def init_user_ns(self):
865 872 """Initialize all user-visible namespaces to their minimum defaults.
866 873
867 874 Certain history lists are also initialized here, as they effectively
868 875 act as user namespaces.
869 876
870 877 Notes
871 878 -----
872 879 All data structures here are only filled in, they are NOT reset by this
873 880 method. If they were not empty before, data will simply be added to
874 881 therm.
875 882 """
876 883 # This function works in two parts: first we put a few things in
877 884 # user_ns, and we sync that contents into user_ns_hidden so that these
878 885 # initial variables aren't shown by %who. After the sync, we add the
879 886 # rest of what we *do* want the user to see with %who even on a new
880 887 # session (probably nothing, so theye really only see their own stuff)
881 888
882 889 # The user dict must *always* have a __builtin__ reference to the
883 890 # Python standard __builtin__ namespace, which must be imported.
884 891 # This is so that certain operations in prompt evaluation can be
885 892 # reliably executed with builtins. Note that we can NOT use
886 893 # __builtins__ (note the 's'), because that can either be a dict or a
887 894 # module, and can even mutate at runtime, depending on the context
888 895 # (Python makes no guarantees on it). In contrast, __builtin__ is
889 896 # always a module object, though it must be explicitly imported.
890 897
891 898 # For more details:
892 899 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
893 900 ns = dict(__builtin__ = __builtin__)
894 901
895 902 # Put 'help' in the user namespace
896 903 try:
897 904 from site import _Helper
898 905 ns['help'] = _Helper()
899 906 except ImportError:
900 907 warn('help() not available - check site.py')
901 908
902 909 # make global variables for user access to the histories
903 910 ns['_ih'] = self.input_hist
904 911 ns['_oh'] = self.output_hist
905 912 ns['_dh'] = self.dir_hist
906 913
907 914 ns['_sh'] = shadowns
908 915
909 916 # user aliases to input and output histories. These shouldn't show up
910 917 # in %who, as they can have very large reprs.
911 918 ns['In'] = self.input_hist
912 919 ns['Out'] = self.output_hist
913 920
914 921 # Store myself as the public api!!!
915 922 ns['get_ipython'] = self.get_ipython
916 923
917 924 # Sync what we've added so far to user_ns_hidden so these aren't seen
918 925 # by %who
919 926 self.user_ns_hidden.update(ns)
920 927
921 928 # Anything put into ns now would show up in %who. Think twice before
922 929 # putting anything here, as we really want %who to show the user their
923 930 # stuff, not our variables.
924 931
925 932 # Finally, update the real user's namespace
926 933 self.user_ns.update(ns)
927 934
928 935
929 936 def reset(self):
930 937 """Clear all internal namespaces.
931 938
932 939 Note that this is much more aggressive than %reset, since it clears
933 940 fully all namespaces, as well as all input/output lists.
934 941 """
935 942 for ns in self.ns_refs_table:
936 943 ns.clear()
937 944
938 945 self.alias_manager.clear_aliases()
939 946
940 947 # Clear input and output histories
941 948 self.input_hist[:] = []
942 949 self.input_hist_raw[:] = []
943 950 self.output_hist.clear()
944 951
945 952 # Restore the user namespaces to minimal usability
946 953 self.init_user_ns()
947 954
948 955 # Restore the default and user aliases
949 956 self.alias_manager.init_aliases()
950 957
951 958 def reset_selective(self, regex=None):
952 959 """Clear selective variables from internal namespaces based on a specified regular expression.
953 960
954 961 Parameters
955 962 ----------
956 963 regex : string or compiled pattern, optional
957 964 A regular expression pattern that will be used in searching variable names in the users
958 965 namespaces.
959 966 """
960 967 if regex is not None:
961 968 try:
962 969 m = re.compile(regex)
963 970 except TypeError:
964 971 raise TypeError('regex must be a string or compiled pattern')
965 972 # Search for keys in each namespace that match the given regex
966 973 # If a match is found, delete the key/value pair.
967 974 for ns in self.ns_refs_table:
968 975 for var in ns:
969 976 if m.search(var):
970 977 del ns[var]
971 978
972 979 def push(self, variables, interactive=True):
973 980 """Inject a group of variables into the IPython user namespace.
974 981
975 982 Parameters
976 983 ----------
977 984 variables : dict, str or list/tuple of str
978 985 The variables to inject into the user's namespace. If a dict,
979 986 a simple update is done. If a str, the string is assumed to
980 987 have variable names separated by spaces. A list/tuple of str
981 988 can also be used to give the variable names. If just the variable
982 989 names are give (list/tuple/str) then the variable values looked
983 990 up in the callers frame.
984 991 interactive : bool
985 992 If True (default), the variables will be listed with the ``who``
986 993 magic.
987 994 """
988 995 vdict = None
989 996
990 997 # We need a dict of name/value pairs to do namespace updates.
991 998 if isinstance(variables, dict):
992 999 vdict = variables
993 1000 elif isinstance(variables, (basestring, list, tuple)):
994 1001 if isinstance(variables, basestring):
995 1002 vlist = variables.split()
996 1003 else:
997 1004 vlist = variables
998 1005 vdict = {}
999 1006 cf = sys._getframe(1)
1000 1007 for name in vlist:
1001 1008 try:
1002 1009 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1003 1010 except:
1004 1011 print ('Could not get variable %s from %s' %
1005 1012 (name,cf.f_code.co_name))
1006 1013 else:
1007 1014 raise ValueError('variables must be a dict/str/list/tuple')
1008 1015
1009 1016 # Propagate variables to user namespace
1010 1017 self.user_ns.update(vdict)
1011 1018
1012 1019 # And configure interactive visibility
1013 1020 config_ns = self.user_ns_hidden
1014 1021 if interactive:
1015 1022 for name, val in vdict.iteritems():
1016 1023 config_ns.pop(name, None)
1017 1024 else:
1018 1025 for name,val in vdict.iteritems():
1019 1026 config_ns[name] = val
1020 1027
1021 1028 #-------------------------------------------------------------------------
1022 1029 # Things related to history management
1023 1030 #-------------------------------------------------------------------------
1024 1031
1025 1032 def init_history(self):
1026 1033 # List of input with multi-line handling.
1027 1034 self.input_hist = InputList()
1028 1035 # This one will hold the 'raw' input history, without any
1029 1036 # pre-processing. This will allow users to retrieve the input just as
1030 1037 # it was exactly typed in by the user, with %hist -r.
1031 1038 self.input_hist_raw = InputList()
1032 1039
1033 1040 # list of visited directories
1034 1041 try:
1035 1042 self.dir_hist = [os.getcwd()]
1036 1043 except OSError:
1037 1044 self.dir_hist = []
1038 1045
1039 1046 # dict of output history
1040 1047 self.output_hist = {}
1041 1048
1042 1049 # Now the history file
1043 1050 if self.profile:
1044 1051 histfname = 'history-%s' % self.profile
1045 1052 else:
1046 1053 histfname = 'history'
1047 1054 self.histfile = os.path.join(self.ipython_dir, histfname)
1048 1055
1049 1056 # Fill the history zero entry, user counter starts at 1
1050 1057 self.input_hist.append('\n')
1051 1058 self.input_hist_raw.append('\n')
1052 1059
1053 1060 def init_shadow_hist(self):
1054 1061 try:
1055 1062 self.db = pickleshare.PickleShareDB(self.ipython_dir + "/db")
1056 1063 except exceptions.UnicodeDecodeError:
1057 1064 print "Your ipython_dir can't be decoded to unicode!"
1058 1065 print "Please set HOME environment variable to something that"
1059 1066 print r"only has ASCII characters, e.g. c:\home"
1060 1067 print "Now it is", self.ipython_dir
1061 1068 sys.exit()
1062 1069 self.shadowhist = ipcorehist.ShadowHist(self.db)
1063 1070
1064 1071 def savehist(self):
1065 1072 """Save input history to a file (via readline library)."""
1066 1073
1067 1074 try:
1068 1075 self.readline.write_history_file(self.histfile)
1069 1076 except:
1070 1077 print 'Unable to save IPython command history to file: ' + \
1071 1078 `self.histfile`
1072 1079
1073 1080 def reloadhist(self):
1074 1081 """Reload the input history from disk file."""
1075 1082
1076 1083 try:
1077 1084 self.readline.clear_history()
1078 1085 self.readline.read_history_file(self.shell.histfile)
1079 1086 except AttributeError:
1080 1087 pass
1081 1088
1082 1089 def history_saving_wrapper(self, func):
1083 1090 """ Wrap func for readline history saving
1084 1091
1085 1092 Convert func into callable that saves & restores
1086 1093 history around the call """
1087 1094
1088 1095 if self.has_readline:
1089 1096 from IPython.utils import rlineimpl as readline
1090 1097 else:
1091 1098 return func
1092 1099
1093 1100 def wrapper():
1094 1101 self.savehist()
1095 1102 try:
1096 1103 func()
1097 1104 finally:
1098 1105 readline.read_history_file(self.histfile)
1099 1106 return wrapper
1100 1107
1101 1108 def get_history(self, index=None, raw=False, output=True):
1102 1109 """Get the history list.
1103 1110
1104 1111 Get the input and output history.
1105 1112
1106 1113 Parameters
1107 1114 ----------
1108 1115 index : n or (n1, n2) or None
1109 1116 If n, then the last entries. If a tuple, then all in
1110 1117 range(n1, n2). If None, then all entries. Raises IndexError if
1111 1118 the format of index is incorrect.
1112 1119 raw : bool
1113 1120 If True, return the raw input.
1114 1121 output : bool
1115 1122 If True, then return the output as well.
1116 1123
1117 1124 Returns
1118 1125 -------
1119 1126 If output is True, then return a dict of tuples, keyed by the prompt
1120 1127 numbers and with values of (input, output). If output is False, then
1121 1128 a dict, keyed by the prompt number with the values of input. Raises
1122 1129 IndexError if no history is found.
1123 1130 """
1124 1131 if raw:
1125 1132 input_hist = self.input_hist_raw
1126 1133 else:
1127 1134 input_hist = self.input_hist
1128 1135 if output:
1129 1136 output_hist = self.user_ns['Out']
1130 1137 n = len(input_hist)
1131 1138 if index is None:
1132 1139 start=0; stop=n
1133 1140 elif isinstance(index, int):
1134 1141 start=n-index; stop=n
1135 1142 elif isinstance(index, tuple) and len(index) == 2:
1136 1143 start=index[0]; stop=index[1]
1137 1144 else:
1138 1145 raise IndexError('Not a valid index for the input history: %r' % index)
1139 1146 hist = {}
1140 1147 for i in range(start, stop):
1141 1148 if output:
1142 1149 hist[i] = (input_hist[i], output_hist.get(i))
1143 1150 else:
1144 1151 hist[i] = input_hist[i]
1145 1152 if len(hist)==0:
1146 1153 raise IndexError('No history for range of indices: %r' % index)
1147 1154 return hist
1148 1155
1149 1156 #-------------------------------------------------------------------------
1150 1157 # Things related to exception handling and tracebacks (not debugging)
1151 1158 #-------------------------------------------------------------------------
1152 1159
1153 1160 def init_traceback_handlers(self, custom_exceptions):
1154 1161 # Syntax error handler.
1155 1162 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1156 1163
1157 1164 # The interactive one is initialized with an offset, meaning we always
1158 1165 # want to remove the topmost item in the traceback, which is our own
1159 1166 # internal code. Valid modes: ['Plain','Context','Verbose']
1160 1167 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1161 1168 color_scheme='NoColor',
1162 1169 tb_offset = 1)
1163 1170
1164 1171 # The instance will store a pointer to the system-wide exception hook,
1165 1172 # so that runtime code (such as magics) can access it. This is because
1166 1173 # during the read-eval loop, it may get temporarily overwritten.
1167 1174 self.sys_excepthook = sys.excepthook
1168 1175
1169 1176 # and add any custom exception handlers the user may have specified
1170 1177 self.set_custom_exc(*custom_exceptions)
1171 1178
1172 1179 # Set the exception mode
1173 1180 self.InteractiveTB.set_mode(mode=self.xmode)
1174 1181
1175 1182 def set_custom_exc(self,exc_tuple,handler):
1176 1183 """set_custom_exc(exc_tuple,handler)
1177 1184
1178 1185 Set a custom exception handler, which will be called if any of the
1179 1186 exceptions in exc_tuple occur in the mainloop (specifically, in the
1180 1187 runcode() method.
1181 1188
1182 1189 Inputs:
1183 1190
1184 1191 - exc_tuple: a *tuple* of valid exceptions to call the defined
1185 1192 handler for. It is very important that you use a tuple, and NOT A
1186 1193 LIST here, because of the way Python's except statement works. If
1187 1194 you only want to trap a single exception, use a singleton tuple:
1188 1195
1189 1196 exc_tuple == (MyCustomException,)
1190 1197
1191 1198 - handler: this must be defined as a function with the following
1192 1199 basic interface: def my_handler(self,etype,value,tb).
1193 1200
1194 1201 This will be made into an instance method (via new.instancemethod)
1195 1202 of IPython itself, and it will be called if any of the exceptions
1196 1203 listed in the exc_tuple are caught. If the handler is None, an
1197 1204 internal basic one is used, which just prints basic info.
1198 1205
1199 1206 WARNING: by putting in your own exception handler into IPython's main
1200 1207 execution loop, you run a very good chance of nasty crashes. This
1201 1208 facility should only be used if you really know what you are doing."""
1202 1209
1203 1210 assert type(exc_tuple)==type(()) , \
1204 1211 "The custom exceptions must be given AS A TUPLE."
1205 1212
1206 1213 def dummy_handler(self,etype,value,tb):
1207 1214 print '*** Simple custom exception handler ***'
1208 1215 print 'Exception type :',etype
1209 1216 print 'Exception value:',value
1210 1217 print 'Traceback :',tb
1211 1218 print 'Source code :','\n'.join(self.buffer)
1212 1219
1213 1220 if handler is None: handler = dummy_handler
1214 1221
1215 1222 self.CustomTB = new.instancemethod(handler,self,self.__class__)
1216 1223 self.custom_exceptions = exc_tuple
1217 1224
1218 1225 def excepthook(self, etype, value, tb):
1219 1226 """One more defense for GUI apps that call sys.excepthook.
1220 1227
1221 1228 GUI frameworks like wxPython trap exceptions and call
1222 1229 sys.excepthook themselves. I guess this is a feature that
1223 1230 enables them to keep running after exceptions that would
1224 1231 otherwise kill their mainloop. This is a bother for IPython
1225 1232 which excepts to catch all of the program exceptions with a try:
1226 1233 except: statement.
1227 1234
1228 1235 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1229 1236 any app directly invokes sys.excepthook, it will look to the user like
1230 1237 IPython crashed. In order to work around this, we can disable the
1231 1238 CrashHandler and replace it with this excepthook instead, which prints a
1232 1239 regular traceback using our InteractiveTB. In this fashion, apps which
1233 1240 call sys.excepthook will generate a regular-looking exception from
1234 1241 IPython, and the CrashHandler will only be triggered by real IPython
1235 1242 crashes.
1236 1243
1237 1244 This hook should be used sparingly, only in places which are not likely
1238 1245 to be true IPython errors.
1239 1246 """
1240 1247 self.showtraceback((etype,value,tb),tb_offset=0)
1241 1248
1242 1249 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1243 1250 exception_only=False):
1244 1251 """Display the exception that just occurred.
1245 1252
1246 1253 If nothing is known about the exception, this is the method which
1247 1254 should be used throughout the code for presenting user tracebacks,
1248 1255 rather than directly invoking the InteractiveTB object.
1249 1256
1250 1257 A specific showsyntaxerror() also exists, but this method can take
1251 1258 care of calling it if needed, so unless you are explicitly catching a
1252 1259 SyntaxError exception, don't try to analyze the stack manually and
1253 1260 simply call this method."""
1254 1261
1255 1262 try:
1256 1263 if exc_tuple is None:
1257 1264 etype, value, tb = sys.exc_info()
1258 1265 else:
1259 1266 etype, value, tb = exc_tuple
1260 1267
1261 1268 if etype is None:
1262 1269 if hasattr(sys, 'last_type'):
1263 1270 etype, value, tb = sys.last_type, sys.last_value, \
1264 1271 sys.last_traceback
1265 1272 else:
1266 1273 self.write('No traceback available to show.\n')
1267 1274 return
1268 1275
1269 1276 if etype is SyntaxError:
1270 1277 # Though this won't be called by syntax errors in the input
1271 1278 # line, there may be SyntaxError cases whith imported code.
1272 1279 self.showsyntaxerror(filename)
1273 1280 elif etype is UsageError:
1274 1281 print "UsageError:", value
1275 1282 else:
1276 1283 # WARNING: these variables are somewhat deprecated and not
1277 1284 # necessarily safe to use in a threaded environment, but tools
1278 1285 # like pdb depend on their existence, so let's set them. If we
1279 1286 # find problems in the field, we'll need to revisit their use.
1280 1287 sys.last_type = etype
1281 1288 sys.last_value = value
1282 1289 sys.last_traceback = tb
1283 1290
1284 1291 if etype in self.custom_exceptions:
1285 1292 self.CustomTB(etype,value,tb)
1286 1293 else:
1287 1294 if exception_only:
1288 1295 m = ('An exception has occurred, use %tb to see the '
1289 1296 'full traceback.')
1290 1297 print m
1291 1298 self.InteractiveTB.show_exception_only(etype, value)
1292 1299 else:
1293 1300 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1294 1301 if self.InteractiveTB.call_pdb:
1295 1302 # pdb mucks up readline, fix it back
1296 1303 self.set_completer()
1297 1304
1298 1305 except KeyboardInterrupt:
1299 1306 self.write("\nKeyboardInterrupt\n")
1300 1307
1301 1308
1302 1309 def showsyntaxerror(self, filename=None):
1303 1310 """Display the syntax error that just occurred.
1304 1311
1305 1312 This doesn't display a stack trace because there isn't one.
1306 1313
1307 1314 If a filename is given, it is stuffed in the exception instead
1308 1315 of what was there before (because Python's parser always uses
1309 1316 "<string>" when reading from a string).
1310 1317 """
1311 1318 etype, value, last_traceback = sys.exc_info()
1312 1319
1313 1320 # See note about these variables in showtraceback() above
1314 1321 sys.last_type = etype
1315 1322 sys.last_value = value
1316 1323 sys.last_traceback = last_traceback
1317 1324
1318 1325 if filename and etype is SyntaxError:
1319 1326 # Work hard to stuff the correct filename in the exception
1320 1327 try:
1321 1328 msg, (dummy_filename, lineno, offset, line) = value
1322 1329 except:
1323 1330 # Not the format we expect; leave it alone
1324 1331 pass
1325 1332 else:
1326 1333 # Stuff in the right filename
1327 1334 try:
1328 1335 # Assume SyntaxError is a class exception
1329 1336 value = SyntaxError(msg, (filename, lineno, offset, line))
1330 1337 except:
1331 1338 # If that failed, assume SyntaxError is a string
1332 1339 value = msg, (filename, lineno, offset, line)
1333 1340 self.SyntaxTB(etype,value,[])
1334 1341
1335 1342 #-------------------------------------------------------------------------
1336 1343 # Things related to tab completion
1337 1344 #-------------------------------------------------------------------------
1338 1345
1339 1346 def complete(self, text):
1340 1347 """Return a sorted list of all possible completions on text.
1341 1348
1342 1349 Inputs:
1343 1350
1344 1351 - text: a string of text to be completed on.
1345 1352
1346 1353 This is a wrapper around the completion mechanism, similar to what
1347 1354 readline does at the command line when the TAB key is hit. By
1348 1355 exposing it as a method, it can be used by other non-readline
1349 1356 environments (such as GUIs) for text completion.
1350 1357
1351 1358 Simple usage example:
1352 1359
1353 1360 In [7]: x = 'hello'
1354 1361
1355 1362 In [8]: x
1356 1363 Out[8]: 'hello'
1357 1364
1358 1365 In [9]: print x
1359 1366 hello
1360 1367
1361 1368 In [10]: _ip.complete('x.l')
1362 1369 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1363 1370 """
1364 1371
1365 1372 # Inject names into __builtin__ so we can complete on the added names.
1366 1373 with self.builtin_trap:
1367 1374 complete = self.Completer.complete
1368 1375 state = 0
1369 1376 # use a dict so we get unique keys, since ipyhton's multiple
1370 1377 # completers can return duplicates. When we make 2.4 a requirement,
1371 1378 # start using sets instead, which are faster.
1372 1379 comps = {}
1373 1380 while True:
1374 1381 newcomp = complete(text,state,line_buffer=text)
1375 1382 if newcomp is None:
1376 1383 break
1377 1384 comps[newcomp] = 1
1378 1385 state += 1
1379 1386 outcomps = comps.keys()
1380 1387 outcomps.sort()
1381 1388 #print "T:",text,"OC:",outcomps # dbg
1382 1389 #print "vars:",self.user_ns.keys()
1383 1390 return outcomps
1384 1391
1385 1392 def set_custom_completer(self,completer,pos=0):
1386 1393 """Adds a new custom completer function.
1387 1394
1388 1395 The position argument (defaults to 0) is the index in the completers
1389 1396 list where you want the completer to be inserted."""
1390 1397
1391 1398 newcomp = new.instancemethod(completer,self.Completer,
1392 1399 self.Completer.__class__)
1393 1400 self.Completer.matchers.insert(pos,newcomp)
1394 1401
1395 1402 def set_completer(self):
1396 1403 """Reset readline's completer to be our own."""
1397 1404 self.readline.set_completer(self.Completer.complete)
1398 1405
1399 1406 def set_completer_frame(self, frame=None):
1400 1407 """Set the frame of the completer."""
1401 1408 if frame:
1402 1409 self.Completer.namespace = frame.f_locals
1403 1410 self.Completer.global_namespace = frame.f_globals
1404 1411 else:
1405 1412 self.Completer.namespace = self.user_ns
1406 1413 self.Completer.global_namespace = self.user_global_ns
1407 1414
1408 1415 #-------------------------------------------------------------------------
1409 1416 # Things related to readline
1410 1417 #-------------------------------------------------------------------------
1411 1418
1412 1419 def init_readline(self):
1413 1420 """Command history completion/saving/reloading."""
1414 1421
1415 1422 if self.readline_use:
1416 1423 import IPython.utils.rlineimpl as readline
1417 1424
1418 1425 self.rl_next_input = None
1419 1426 self.rl_do_indent = False
1420 1427
1421 1428 if not self.readline_use or not readline.have_readline:
1422 1429 self.has_readline = False
1423 1430 self.readline = None
1424 1431 # Set a number of methods that depend on readline to be no-op
1425 1432 self.savehist = no_op
1426 1433 self.reloadhist = no_op
1427 1434 self.set_completer = no_op
1428 1435 self.set_custom_completer = no_op
1429 1436 self.set_completer_frame = no_op
1430 1437 warn('Readline services not available or not loaded.')
1431 1438 else:
1432 1439 self.has_readline = True
1433 1440 self.readline = readline
1434 1441 sys.modules['readline'] = readline
1435 1442 import atexit
1436 1443 from IPython.core.completer import IPCompleter
1437 1444 self.Completer = IPCompleter(self,
1438 1445 self.user_ns,
1439 1446 self.user_global_ns,
1440 1447 self.readline_omit__names,
1441 1448 self.alias_manager.alias_table)
1442 1449 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1443 1450 self.strdispatchers['complete_command'] = sdisp
1444 1451 self.Completer.custom_completers = sdisp
1445 1452 # Platform-specific configuration
1446 1453 if os.name == 'nt':
1447 1454 self.readline_startup_hook = readline.set_pre_input_hook
1448 1455 else:
1449 1456 self.readline_startup_hook = readline.set_startup_hook
1450 1457
1451 1458 # Load user's initrc file (readline config)
1452 1459 # Or if libedit is used, load editrc.
1453 1460 inputrc_name = os.environ.get('INPUTRC')
1454 1461 if inputrc_name is None:
1455 1462 home_dir = get_home_dir()
1456 1463 if home_dir is not None:
1457 1464 inputrc_name = '.inputrc'
1458 1465 if readline.uses_libedit:
1459 1466 inputrc_name = '.editrc'
1460 1467 inputrc_name = os.path.join(home_dir, inputrc_name)
1461 1468 if os.path.isfile(inputrc_name):
1462 1469 try:
1463 1470 readline.read_init_file(inputrc_name)
1464 1471 except:
1465 1472 warn('Problems reading readline initialization file <%s>'
1466 1473 % inputrc_name)
1467 1474
1468 1475 # save this in sys so embedded copies can restore it properly
1469 1476 sys.ipcompleter = self.Completer.complete
1470 1477 self.set_completer()
1471 1478
1472 1479 # Configure readline according to user's prefs
1473 1480 # This is only done if GNU readline is being used. If libedit
1474 1481 # is being used (as on Leopard) the readline config is
1475 1482 # not run as the syntax for libedit is different.
1476 1483 if not readline.uses_libedit:
1477 1484 for rlcommand in self.readline_parse_and_bind:
1478 1485 #print "loading rl:",rlcommand # dbg
1479 1486 readline.parse_and_bind(rlcommand)
1480 1487
1481 1488 # Remove some chars from the delimiters list. If we encounter
1482 1489 # unicode chars, discard them.
1483 1490 delims = readline.get_completer_delims().encode("ascii", "ignore")
1484 1491 delims = delims.translate(string._idmap,
1485 1492 self.readline_remove_delims)
1486 1493 readline.set_completer_delims(delims)
1487 1494 # otherwise we end up with a monster history after a while:
1488 1495 readline.set_history_length(1000)
1489 1496 try:
1490 1497 #print '*** Reading readline history' # dbg
1491 1498 readline.read_history_file(self.histfile)
1492 1499 except IOError:
1493 1500 pass # It doesn't exist yet.
1494 1501
1495 1502 atexit.register(self.atexit_operations)
1496 1503 del atexit
1497 1504
1498 1505 # Configure auto-indent for all platforms
1499 1506 self.set_autoindent(self.autoindent)
1500 1507
1501 1508 def set_next_input(self, s):
1502 1509 """ Sets the 'default' input string for the next command line.
1503 1510
1504 1511 Requires readline.
1505 1512
1506 1513 Example:
1507 1514
1508 1515 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1509 1516 [D:\ipython]|2> Hello Word_ # cursor is here
1510 1517 """
1511 1518
1512 1519 self.rl_next_input = s
1513 1520
1514 1521 # Maybe move this to the terminal subclass?
1515 1522 def pre_readline(self):
1516 1523 """readline hook to be used at the start of each line.
1517 1524
1518 1525 Currently it handles auto-indent only."""
1519 1526
1520 1527 if self.rl_do_indent:
1521 1528 self.readline.insert_text(self._indent_current_str())
1522 1529 if self.rl_next_input is not None:
1523 1530 self.readline.insert_text(self.rl_next_input)
1524 1531 self.rl_next_input = None
1525 1532
1526 1533 def _indent_current_str(self):
1527 1534 """return the current level of indentation as a string"""
1528 1535 return self.indent_current_nsp * ' '
1529 1536
1530 1537 #-------------------------------------------------------------------------
1531 1538 # Things related to magics
1532 1539 #-------------------------------------------------------------------------
1533 1540
1534 1541 def init_magics(self):
1535 1542 # FIXME: Move the color initialization to the DisplayHook, which
1536 1543 # should be split into a prompt manager and displayhook. We probably
1537 1544 # even need a centralize colors management object.
1538 1545 self.magic_colors(self.colors)
1539 1546 # History was moved to a separate module
1540 1547 from . import history
1541 1548 history.init_ipython(self)
1542 1549
1543 1550 def magic(self,arg_s):
1544 1551 """Call a magic function by name.
1545 1552
1546 1553 Input: a string containing the name of the magic function to call and any
1547 1554 additional arguments to be passed to the magic.
1548 1555
1549 1556 magic('name -opt foo bar') is equivalent to typing at the ipython
1550 1557 prompt:
1551 1558
1552 1559 In[1]: %name -opt foo bar
1553 1560
1554 1561 To call a magic without arguments, simply use magic('name').
1555 1562
1556 1563 This provides a proper Python function to call IPython's magics in any
1557 1564 valid Python code you can type at the interpreter, including loops and
1558 1565 compound statements.
1559 1566 """
1560 1567 args = arg_s.split(' ',1)
1561 1568 magic_name = args[0]
1562 1569 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
1563 1570
1564 1571 try:
1565 1572 magic_args = args[1]
1566 1573 except IndexError:
1567 1574 magic_args = ''
1568 1575 fn = getattr(self,'magic_'+magic_name,None)
1569 1576 if fn is None:
1570 1577 error("Magic function `%s` not found." % magic_name)
1571 1578 else:
1572 1579 magic_args = self.var_expand(magic_args,1)
1573 1580 with nested(self.builtin_trap,):
1574 1581 result = fn(magic_args)
1575 1582 return result
1576 1583
1577 1584 def define_magic(self, magicname, func):
1578 1585 """Expose own function as magic function for ipython
1579 1586
1580 1587 def foo_impl(self,parameter_s=''):
1581 1588 'My very own magic!. (Use docstrings, IPython reads them).'
1582 1589 print 'Magic function. Passed parameter is between < >:'
1583 1590 print '<%s>' % parameter_s
1584 1591 print 'The self object is:',self
1585 1592
1586 1593 self.define_magic('foo',foo_impl)
1587 1594 """
1588 1595
1589 1596 import new
1590 1597 im = new.instancemethod(func,self, self.__class__)
1591 1598 old = getattr(self, "magic_" + magicname, None)
1592 1599 setattr(self, "magic_" + magicname, im)
1593 1600 return old
1594 1601
1595 1602 #-------------------------------------------------------------------------
1596 1603 # Things related to macros
1597 1604 #-------------------------------------------------------------------------
1598 1605
1599 1606 def define_macro(self, name, themacro):
1600 1607 """Define a new macro
1601 1608
1602 1609 Parameters
1603 1610 ----------
1604 1611 name : str
1605 1612 The name of the macro.
1606 1613 themacro : str or Macro
1607 1614 The action to do upon invoking the macro. If a string, a new
1608 1615 Macro object is created by passing the string to it.
1609 1616 """
1610 1617
1611 1618 from IPython.core import macro
1612 1619
1613 1620 if isinstance(themacro, basestring):
1614 1621 themacro = macro.Macro(themacro)
1615 1622 if not isinstance(themacro, macro.Macro):
1616 1623 raise ValueError('A macro must be a string or a Macro instance.')
1617 1624 self.user_ns[name] = themacro
1618 1625
1619 1626 #-------------------------------------------------------------------------
1620 1627 # Things related to the running of system commands
1621 1628 #-------------------------------------------------------------------------
1622 1629
1623 1630 def system(self, cmd):
1624 1631 """Make a system call, using IPython."""
1625 1632 return self.hooks.shell_hook(self.var_expand(cmd, depth=2))
1626 1633
1627 1634 #-------------------------------------------------------------------------
1628 1635 # Things related to aliases
1629 1636 #-------------------------------------------------------------------------
1630 1637
1631 1638 def init_alias(self):
1632 1639 self.alias_manager = AliasManager(shell=self, config=self.config)
1633 1640 self.ns_table['alias'] = self.alias_manager.alias_table,
1634 1641
1635 1642 #-------------------------------------------------------------------------
1636 1643 # Things related to extensions and plugins
1637 1644 #-------------------------------------------------------------------------
1638 1645
1639 1646 def init_extension_manager(self):
1640 1647 self.extension_manager = ExtensionManager(shell=self, config=self.config)
1641 1648
1642 1649 def init_plugin_manager(self):
1643 1650 self.plugin_manager = PluginManager(config=self.config)
1644 1651
1645 1652 #-------------------------------------------------------------------------
1646 1653 # Things related to the prefilter
1647 1654 #-------------------------------------------------------------------------
1648 1655
1649 1656 def init_prefilter(self):
1650 1657 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
1651 1658 # Ultimately this will be refactored in the new interpreter code, but
1652 1659 # for now, we should expose the main prefilter method (there's legacy
1653 1660 # code out there that may rely on this).
1654 1661 self.prefilter = self.prefilter_manager.prefilter_lines
1655 1662
1656 1663 #-------------------------------------------------------------------------
1657 1664 # Things related to the running of code
1658 1665 #-------------------------------------------------------------------------
1659 1666
1660 1667 def ex(self, cmd):
1661 1668 """Execute a normal python statement in user namespace."""
1662 1669 with nested(self.builtin_trap,):
1663 1670 exec cmd in self.user_global_ns, self.user_ns
1664 1671
1665 1672 def ev(self, expr):
1666 1673 """Evaluate python expression expr in user namespace.
1667 1674
1668 1675 Returns the result of evaluation
1669 1676 """
1670 1677 with nested(self.builtin_trap,):
1671 1678 return eval(expr, self.user_global_ns, self.user_ns)
1672 1679
1673 1680 def safe_execfile(self, fname, *where, **kw):
1674 1681 """A safe version of the builtin execfile().
1675 1682
1676 1683 This version will never throw an exception, but instead print
1677 1684 helpful error messages to the screen. This only works on pure
1678 1685 Python files with the .py extension.
1679 1686
1680 1687 Parameters
1681 1688 ----------
1682 1689 fname : string
1683 1690 The name of the file to be executed.
1684 1691 where : tuple
1685 1692 One or two namespaces, passed to execfile() as (globals,locals).
1686 1693 If only one is given, it is passed as both.
1687 1694 exit_ignore : bool (False)
1688 1695 If True, then silence SystemExit for non-zero status (it is always
1689 1696 silenced for zero status, as it is so common).
1690 1697 """
1691 1698 kw.setdefault('exit_ignore', False)
1692 1699
1693 1700 fname = os.path.abspath(os.path.expanduser(fname))
1694 1701
1695 1702 # Make sure we have a .py file
1696 1703 if not fname.endswith('.py'):
1697 1704 warn('File must end with .py to be run using execfile: <%s>' % fname)
1698 1705
1699 1706 # Make sure we can open the file
1700 1707 try:
1701 1708 with open(fname) as thefile:
1702 1709 pass
1703 1710 except:
1704 1711 warn('Could not open file <%s> for safe execution.' % fname)
1705 1712 return
1706 1713
1707 1714 # Find things also in current directory. This is needed to mimic the
1708 1715 # behavior of running a script from the system command line, where
1709 1716 # Python inserts the script's directory into sys.path
1710 1717 dname = os.path.dirname(fname)
1711 1718
1712 1719 with prepended_to_syspath(dname):
1713 1720 try:
1714 1721 execfile(fname,*where)
1715 1722 except SystemExit, status:
1716 1723 # If the call was made with 0 or None exit status (sys.exit(0)
1717 1724 # or sys.exit() ), don't bother showing a traceback, as both of
1718 1725 # these are considered normal by the OS:
1719 1726 # > python -c'import sys;sys.exit(0)'; echo $?
1720 1727 # 0
1721 1728 # > python -c'import sys;sys.exit()'; echo $?
1722 1729 # 0
1723 1730 # For other exit status, we show the exception unless
1724 1731 # explicitly silenced, but only in short form.
1725 1732 if status.code not in (0, None) and not kw['exit_ignore']:
1726 1733 self.showtraceback(exception_only=True)
1727 1734 except:
1728 1735 self.showtraceback()
1729 1736
1730 1737 def safe_execfile_ipy(self, fname):
1731 1738 """Like safe_execfile, but for .ipy files with IPython syntax.
1732 1739
1733 1740 Parameters
1734 1741 ----------
1735 1742 fname : str
1736 1743 The name of the file to execute. The filename must have a
1737 1744 .ipy extension.
1738 1745 """
1739 1746 fname = os.path.abspath(os.path.expanduser(fname))
1740 1747
1741 1748 # Make sure we have a .py file
1742 1749 if not fname.endswith('.ipy'):
1743 1750 warn('File must end with .py to be run using execfile: <%s>' % fname)
1744 1751
1745 1752 # Make sure we can open the file
1746 1753 try:
1747 1754 with open(fname) as thefile:
1748 1755 pass
1749 1756 except:
1750 1757 warn('Could not open file <%s> for safe execution.' % fname)
1751 1758 return
1752 1759
1753 1760 # Find things also in current directory. This is needed to mimic the
1754 1761 # behavior of running a script from the system command line, where
1755 1762 # Python inserts the script's directory into sys.path
1756 1763 dname = os.path.dirname(fname)
1757 1764
1758 1765 with prepended_to_syspath(dname):
1759 1766 try:
1760 1767 with open(fname) as thefile:
1761 1768 script = thefile.read()
1762 1769 # self.runlines currently captures all exceptions
1763 1770 # raise in user code. It would be nice if there were
1764 1771 # versions of runlines, execfile that did raise, so
1765 1772 # we could catch the errors.
1766 1773 self.runlines(script, clean=True)
1767 1774 except:
1768 1775 self.showtraceback()
1769 1776 warn('Unknown failure executing file: <%s>' % fname)
1770 1777
1771 1778 def runlines(self, lines, clean=False):
1772 1779 """Run a string of one or more lines of source.
1773 1780
1774 1781 This method is capable of running a string containing multiple source
1775 1782 lines, as if they had been entered at the IPython prompt. Since it
1776 1783 exposes IPython's processing machinery, the given strings can contain
1777 1784 magic calls (%magic), special shell access (!cmd), etc.
1778 1785 """
1779 1786
1780 1787 if isinstance(lines, (list, tuple)):
1781 1788 lines = '\n'.join(lines)
1782 1789
1783 1790 if clean:
1784 1791 lines = self._cleanup_ipy_script(lines)
1785 1792
1786 1793 # We must start with a clean buffer, in case this is run from an
1787 1794 # interactive IPython session (via a magic, for example).
1788 1795 self.resetbuffer()
1789 1796 lines = lines.splitlines()
1790 1797 more = 0
1791 1798
1792 1799 with nested(self.builtin_trap, self.display_trap):
1793 1800 for line in lines:
1794 1801 # skip blank lines so we don't mess up the prompt counter, but do
1795 1802 # NOT skip even a blank line if we are in a code block (more is
1796 1803 # true)
1797 1804
1798 1805 if line or more:
1799 1806 # push to raw history, so hist line numbers stay in sync
1800 1807 self.input_hist_raw.append("# " + line + "\n")
1801 1808 prefiltered = self.prefilter_manager.prefilter_lines(line,more)
1802 1809 more = self.push_line(prefiltered)
1803 1810 # IPython's runsource returns None if there was an error
1804 1811 # compiling the code. This allows us to stop processing right
1805 1812 # away, so the user gets the error message at the right place.
1806 1813 if more is None:
1807 1814 break
1808 1815 else:
1809 1816 self.input_hist_raw.append("\n")
1810 1817 # final newline in case the input didn't have it, so that the code
1811 1818 # actually does get executed
1812 1819 if more:
1813 1820 self.push_line('\n')
1814 1821
1815 1822 def runsource(self, source, filename='<input>', symbol='single'):
1816 1823 """Compile and run some source in the interpreter.
1817 1824
1818 1825 Arguments are as for compile_command().
1819 1826
1820 1827 One several things can happen:
1821 1828
1822 1829 1) The input is incorrect; compile_command() raised an
1823 1830 exception (SyntaxError or OverflowError). A syntax traceback
1824 1831 will be printed by calling the showsyntaxerror() method.
1825 1832
1826 1833 2) The input is incomplete, and more input is required;
1827 1834 compile_command() returned None. Nothing happens.
1828 1835
1829 1836 3) The input is complete; compile_command() returned a code
1830 1837 object. The code is executed by calling self.runcode() (which
1831 1838 also handles run-time exceptions, except for SystemExit).
1832 1839
1833 1840 The return value is:
1834 1841
1835 1842 - True in case 2
1836 1843
1837 1844 - False in the other cases, unless an exception is raised, where
1838 1845 None is returned instead. This can be used by external callers to
1839 1846 know whether to continue feeding input or not.
1840 1847
1841 1848 The return value can be used to decide whether to use sys.ps1 or
1842 1849 sys.ps2 to prompt the next line."""
1843 1850
1844 1851 # if the source code has leading blanks, add 'if 1:\n' to it
1845 1852 # this allows execution of indented pasted code. It is tempting
1846 1853 # to add '\n' at the end of source to run commands like ' a=1'
1847 1854 # directly, but this fails for more complicated scenarios
1848 1855 source=source.encode(self.stdin_encoding)
1849 1856 if source[:1] in [' ', '\t']:
1850 1857 source = 'if 1:\n%s' % source
1851 1858
1852 1859 try:
1853 1860 code = self.compile(source,filename,symbol)
1854 1861 except (OverflowError, SyntaxError, ValueError, TypeError, MemoryError):
1855 1862 # Case 1
1856 1863 self.showsyntaxerror(filename)
1857 1864 return None
1858 1865
1859 1866 if code is None:
1860 1867 # Case 2
1861 1868 return True
1862 1869
1863 1870 # Case 3
1864 1871 # We store the code object so that threaded shells and
1865 1872 # custom exception handlers can access all this info if needed.
1866 1873 # The source corresponding to this can be obtained from the
1867 1874 # buffer attribute as '\n'.join(self.buffer).
1868 1875 self.code_to_run = code
1869 1876 # now actually execute the code object
1870 1877 if self.runcode(code) == 0:
1871 1878 return False
1872 1879 else:
1873 1880 return None
1874 1881
1875 1882 def runcode(self,code_obj):
1876 1883 """Execute a code object.
1877 1884
1878 1885 When an exception occurs, self.showtraceback() is called to display a
1879 1886 traceback.
1880 1887
1881 1888 Return value: a flag indicating whether the code to be run completed
1882 1889 successfully:
1883 1890
1884 1891 - 0: successful execution.
1885 1892 - 1: an error occurred.
1886 1893 """
1887 1894
1888 1895 # Set our own excepthook in case the user code tries to call it
1889 1896 # directly, so that the IPython crash handler doesn't get triggered
1890 1897 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1891 1898
1892 1899 # we save the original sys.excepthook in the instance, in case config
1893 1900 # code (such as magics) needs access to it.
1894 1901 self.sys_excepthook = old_excepthook
1895 1902 outflag = 1 # happens in more places, so it's easier as default
1896 1903 try:
1897 1904 try:
1898 1905 self.hooks.pre_runcode_hook()
1899 1906 exec code_obj in self.user_global_ns, self.user_ns
1900 1907 finally:
1901 1908 # Reset our crash handler in place
1902 1909 sys.excepthook = old_excepthook
1903 1910 except SystemExit:
1904 1911 self.resetbuffer()
1905 1912 self.showtraceback(exception_only=True)
1906 1913 warn("To exit: use any of 'exit', 'quit', %Exit or Ctrl-D.", level=1)
1907 1914 except self.custom_exceptions:
1908 1915 etype,value,tb = sys.exc_info()
1909 1916 self.CustomTB(etype,value,tb)
1910 1917 except:
1911 1918 self.showtraceback()
1912 1919 else:
1913 1920 outflag = 0
1914 1921 if softspace(sys.stdout, 0):
1915 1922 print
1916 1923 # Flush out code object which has been run (and source)
1917 1924 self.code_to_run = None
1918 1925 return outflag
1919 1926
1920 1927 def push_line(self, line):
1921 1928 """Push a line to the interpreter.
1922 1929
1923 1930 The line should not have a trailing newline; it may have
1924 1931 internal newlines. The line is appended to a buffer and the
1925 1932 interpreter's runsource() method is called with the
1926 1933 concatenated contents of the buffer as source. If this
1927 1934 indicates that the command was executed or invalid, the buffer
1928 1935 is reset; otherwise, the command is incomplete, and the buffer
1929 1936 is left as it was after the line was appended. The return
1930 1937 value is 1 if more input is required, 0 if the line was dealt
1931 1938 with in some way (this is the same as runsource()).
1932 1939 """
1933 1940
1934 1941 # autoindent management should be done here, and not in the
1935 1942 # interactive loop, since that one is only seen by keyboard input. We
1936 1943 # need this done correctly even for code run via runlines (which uses
1937 1944 # push).
1938 1945
1939 1946 #print 'push line: <%s>' % line # dbg
1940 1947 for subline in line.splitlines():
1941 1948 self._autoindent_update(subline)
1942 1949 self.buffer.append(line)
1943 1950 more = self.runsource('\n'.join(self.buffer), self.filename)
1944 1951 if not more:
1945 1952 self.resetbuffer()
1946 1953 return more
1947 1954
1948 1955 def resetbuffer(self):
1949 1956 """Reset the input buffer."""
1950 1957 self.buffer[:] = []
1951 1958
1952 1959 def _is_secondary_block_start(self, s):
1953 1960 if not s.endswith(':'):
1954 1961 return False
1955 1962 if (s.startswith('elif') or
1956 1963 s.startswith('else') or
1957 1964 s.startswith('except') or
1958 1965 s.startswith('finally')):
1959 1966 return True
1960 1967
1961 1968 def _cleanup_ipy_script(self, script):
1962 1969 """Make a script safe for self.runlines()
1963 1970
1964 1971 Currently, IPython is lines based, with blocks being detected by
1965 1972 empty lines. This is a problem for block based scripts that may
1966 1973 not have empty lines after blocks. This script adds those empty
1967 1974 lines to make scripts safe for running in the current line based
1968 1975 IPython.
1969 1976 """
1970 1977 res = []
1971 1978 lines = script.splitlines()
1972 1979 level = 0
1973 1980
1974 1981 for l in lines:
1975 1982 lstripped = l.lstrip()
1976 1983 stripped = l.strip()
1977 1984 if not stripped:
1978 1985 continue
1979 1986 newlevel = len(l) - len(lstripped)
1980 1987 if level > 0 and newlevel == 0 and \
1981 1988 not self._is_secondary_block_start(stripped):
1982 1989 # add empty line
1983 1990 res.append('')
1984 1991 res.append(l)
1985 1992 level = newlevel
1986 1993
1987 1994 return '\n'.join(res) + '\n'
1988 1995
1989 1996 def _autoindent_update(self,line):
1990 1997 """Keep track of the indent level."""
1991 1998
1992 1999 #debugx('line')
1993 2000 #debugx('self.indent_current_nsp')
1994 2001 if self.autoindent:
1995 2002 if line:
1996 2003 inisp = num_ini_spaces(line)
1997 2004 if inisp < self.indent_current_nsp:
1998 2005 self.indent_current_nsp = inisp
1999 2006
2000 2007 if line[-1] == ':':
2001 2008 self.indent_current_nsp += 4
2002 2009 elif dedent_re.match(line):
2003 2010 self.indent_current_nsp -= 4
2004 2011 else:
2005 2012 self.indent_current_nsp = 0
2006 2013
2007 2014 #-------------------------------------------------------------------------
2008 2015 # Things related to GUI support and pylab
2009 2016 #-------------------------------------------------------------------------
2010 2017
2011 2018 def enable_pylab(self, gui=None):
2012 2019 raise NotImplementedError('Implement enable_pylab in a subclass')
2013 2020
2014 2021 #-------------------------------------------------------------------------
2015 2022 # Utilities
2016 2023 #-------------------------------------------------------------------------
2017 2024
2018 2025 def getoutput(self, cmd):
2019 2026 return getoutput(self.var_expand(cmd,depth=2),
2020 2027 header=self.system_header,
2021 2028 verbose=self.system_verbose)
2022 2029
2023 2030 def getoutputerror(self, cmd):
2024 2031 return getoutputerror(self.var_expand(cmd,depth=2),
2025 2032 header=self.system_header,
2026 2033 verbose=self.system_verbose)
2027 2034
2028 2035 def var_expand(self,cmd,depth=0):
2029 2036 """Expand python variables in a string.
2030 2037
2031 2038 The depth argument indicates how many frames above the caller should
2032 2039 be walked to look for the local namespace where to expand variables.
2033 2040
2034 2041 The global namespace for expansion is always the user's interactive
2035 2042 namespace.
2036 2043 """
2037 2044
2038 2045 return str(ItplNS(cmd,
2039 2046 self.user_ns, # globals
2040 2047 # Skip our own frame in searching for locals:
2041 2048 sys._getframe(depth+1).f_locals # locals
2042 2049 ))
2043 2050
2044 2051 def mktempfile(self,data=None):
2045 2052 """Make a new tempfile and return its filename.
2046 2053
2047 2054 This makes a call to tempfile.mktemp, but it registers the created
2048 2055 filename internally so ipython cleans it up at exit time.
2049 2056
2050 2057 Optional inputs:
2051 2058
2052 2059 - data(None): if data is given, it gets written out to the temp file
2053 2060 immediately, and the file is closed again."""
2054 2061
2055 2062 filename = tempfile.mktemp('.py','ipython_edit_')
2056 2063 self.tempfiles.append(filename)
2057 2064
2058 2065 if data:
2059 2066 tmp_file = open(filename,'w')
2060 2067 tmp_file.write(data)
2061 2068 tmp_file.close()
2062 2069 return filename
2063 2070
2064 2071 # TODO: This should be removed when Term is refactored.
2065 2072 def write(self,data):
2066 2073 """Write a string to the default output"""
2067 2074 IPython.utils.io.Term.cout.write(data)
2068 2075
2069 2076 # TODO: This should be removed when Term is refactored.
2070 2077 def write_err(self,data):
2071 2078 """Write a string to the default error output"""
2072 2079 IPython.utils.io.Term.cerr.write(data)
2073 2080
2074 2081 def ask_yes_no(self,prompt,default=True):
2075 2082 if self.quiet:
2076 2083 return True
2077 2084 return ask_yes_no(prompt,default)
2078 2085
2079 2086 #-------------------------------------------------------------------------
2080 2087 # Things related to IPython exiting
2081 2088 #-------------------------------------------------------------------------
2082 2089
2083 2090 def atexit_operations(self):
2084 2091 """This will be executed at the time of exit.
2085 2092
2086 2093 Saving of persistent data should be performed here.
2087 2094 """
2088 2095 self.savehist()
2089 2096
2090 2097 # Cleanup all tempfiles left around
2091 2098 for tfile in self.tempfiles:
2092 2099 try:
2093 2100 os.unlink(tfile)
2094 2101 except OSError:
2095 2102 pass
2096 2103
2097 2104 # Clear all user namespaces to release all references cleanly.
2098 2105 self.reset()
2099 2106
2100 2107 # Run user hooks
2101 2108 self.hooks.shutdown_hook()
2102 2109
2103 2110 def cleanup(self):
2104 2111 self.restore_sys_module_state()
2105 2112
2106 2113
2107 2114 class InteractiveShellABC(object):
2108 2115 """An abstract base class for InteractiveShell."""
2109 2116 __metaclass__ = abc.ABCMeta
2110 2117
2111 2118 InteractiveShellABC.register(InteractiveShell)
General Comments 0
You need to be logged in to leave comments. Login now