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