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