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