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