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