##// END OF EJS Templates
TryNext editor if editor hook fails. Patch by Lukasz Pankowski
Ville M. Vainio -
Show More
@@ -1,84 +1,85 b''
1 1 """ 'editor' hooks for common editors that work well with ipython
2 2
3 3 They should honor the line number argument, at least.
4 4
5 5 Contributions are *very* welcome.
6 6 """
7 7
8 8 import IPython.ipapi
9 9 ip = IPython.ipapi.get()
10 10
11 11 from IPython.Itpl import itplns
12 12 import os
13 13
14 14 def install_editor(run_template, wait = False):
15 15 """ Gets a template in format "myeditor bah bah $file bah bah $line"
16 16
17 17 $file will be replaced by file name, $line by line number (or 0).
18 18 Installs the editor that is called by IPython, instead of the default
19 19 notepad or vi.
20 20
21 21 If wait is true, wait until the user presses enter before returning,
22 22 to facilitate non-blocking editors that exit immediately after
23 23 the call.
24 24 """
25 25
26 26 def call_editor(self, file, line=0):
27 27 if line is None:
28 28 line = 0
29 29 cmd = itplns(run_template, locals())
30 30 print ">",cmd
31 os.system(cmd)
31 if os.system(cmd) != 0:
32 raise IPython.ipapi.TryNext()
32 33 if wait:
33 34 raw_input("Press Enter when done editing:")
34 35
35 36 ip.set_hook('editor',call_editor)
36 37
37 38
38 39 # in these, exe is always the path/name of the executable. Useful
39 40 # if you don't have the editor directory in your path
40 41
41 42 def komodo(exe = 'komodo'):
42 43 """ Activestate Komodo [Edit] """
43 44 install_editor(exe + ' -l $line "$file"', wait = True)
44 45
45 46 def scite(exe = "scite"):
46 47 """ SciTE or Sc1 """
47 48 install_editor(exe + ' "$file" -goto:$line')
48 49
49 50 def notepadplusplus(exe = 'notepad++'):
50 51 """ Notepad++ http://notepad-plus.sourceforge.net """
51 52 install_editor(exe + ' -n$line "$file"')
52 53
53 54 def jed(exe = 'jed'):
54 55 """ JED, the lightweight emacsish editor """
55 56 install_editor(exe + ' +$line "$file"')
56 57
57 58 def idle(exe = None):
58 59 """ Idle, the editor bundled with python
59 60
60 61 Should be pretty smart about finding the executable.
61 62 """
62 63 if exe is None:
63 64 import idlelib
64 65 p = os.path.dirname(idlelib.__file__)
65 66 exe = p + '/idle.py'
66 67 install_editor(exe + ' "$file"')
67 68
68 69
69 70 # these are untested, report any problems
70 71
71 72 def emacs(exe = 'emacs'):
72 73 install_editor(exe + ' +$line "$file"')
73 74
74 75 def gnuclient(exe= 'gnuclient'):
75 76 install_editor(exe + ' -nw +$line "$file"')
76 77
77 78 def crimson_editor(exe = 'cedt.exe'):
78 79 install_editor(exe + ' /L:$line "$file"')
79 80
80 81 def kate(exe = 'kate'):
81 82 install_editor(exe + ' -u -l $line "$file"')
82 83
83 84
84 85 No newline at end of file
@@ -1,3401 +1,3405 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 4 $Id: Magic.py 2996 2008-01-30 06:31:39Z fperez $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import sys
30 30 import re
31 31 import tempfile
32 32 import time
33 33 import cPickle as pickle
34 34 import textwrap
35 35 from cStringIO import StringIO
36 36 from getopt import getopt,GetoptError
37 37 from pprint import pprint, pformat
38 38 from sets import Set
39 39
40 40 # cProfile was added in Python2.5
41 41 try:
42 42 import cProfile as profile
43 43 import pstats
44 44 except ImportError:
45 45 # profile isn't bundled by default in Debian for license reasons
46 46 try:
47 47 import profile,pstats
48 48 except ImportError:
49 49 profile = pstats = None
50 50
51 51 # Homebrewed
52 52 import IPython
53 53 from IPython import Debugger, OInspect, wildcard
54 54 from IPython.FakeModule import FakeModule
55 55 from IPython.Itpl import Itpl, itpl, printpl,itplns
56 56 from IPython.PyColorize import Parser
57 57 from IPython.ipstruct import Struct
58 58 from IPython.macro import Macro
59 59 from IPython.genutils import *
60 60 from IPython import platutils
61 61 import IPython.generics
62 62 import IPython.ipapi
63 63 from IPython.ipapi import UsageError
64 64 from IPython.testing import decorators as testdec
65 65
66 66 #***************************************************************************
67 67 # Utility functions
68 68 def on_off(tag):
69 69 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
70 70 return ['OFF','ON'][tag]
71 71
72 72 class Bunch: pass
73 73
74 74 def compress_dhist(dh):
75 75 head, tail = dh[:-10], dh[-10:]
76 76
77 77 newhead = []
78 78 done = Set()
79 79 for h in head:
80 80 if h in done:
81 81 continue
82 82 newhead.append(h)
83 83 done.add(h)
84 84
85 85 return newhead + tail
86 86
87 87
88 88 #***************************************************************************
89 89 # Main class implementing Magic functionality
90 90 class Magic:
91 91 """Magic functions for InteractiveShell.
92 92
93 93 Shell functions which can be reached as %function_name. All magic
94 94 functions should accept a string, which they can parse for their own
95 95 needs. This can make some functions easier to type, eg `%cd ../`
96 96 vs. `%cd("../")`
97 97
98 98 ALL definitions MUST begin with the prefix magic_. The user won't need it
99 99 at the command line, but it is is needed in the definition. """
100 100
101 101 # class globals
102 102 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
103 103 'Automagic is ON, % prefix NOT needed for magic functions.']
104 104
105 105 #......................................................................
106 106 # some utility functions
107 107
108 108 def __init__(self,shell):
109 109
110 110 self.options_table = {}
111 111 if profile is None:
112 112 self.magic_prun = self.profile_missing_notice
113 113 self.shell = shell
114 114
115 115 # namespace for holding state we may need
116 116 self._magic_state = Bunch()
117 117
118 118 def profile_missing_notice(self, *args, **kwargs):
119 119 error("""\
120 120 The profile module could not be found. It has been removed from the standard
121 121 python packages because of its non-free license. To use profiling, install the
122 122 python-profiler package from non-free.""")
123 123
124 124 def default_option(self,fn,optstr):
125 125 """Make an entry in the options_table for fn, with value optstr"""
126 126
127 127 if fn not in self.lsmagic():
128 128 error("%s is not a magic function" % fn)
129 129 self.options_table[fn] = optstr
130 130
131 131 def lsmagic(self):
132 132 """Return a list of currently available magic functions.
133 133
134 134 Gives a list of the bare names after mangling (['ls','cd', ...], not
135 135 ['magic_ls','magic_cd',...]"""
136 136
137 137 # FIXME. This needs a cleanup, in the way the magics list is built.
138 138
139 139 # magics in class definition
140 140 class_magic = lambda fn: fn.startswith('magic_') and \
141 141 callable(Magic.__dict__[fn])
142 142 # in instance namespace (run-time user additions)
143 143 inst_magic = lambda fn: fn.startswith('magic_') and \
144 144 callable(self.__dict__[fn])
145 145 # and bound magics by user (so they can access self):
146 146 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
147 147 callable(self.__class__.__dict__[fn])
148 148 magics = filter(class_magic,Magic.__dict__.keys()) + \
149 149 filter(inst_magic,self.__dict__.keys()) + \
150 150 filter(inst_bound_magic,self.__class__.__dict__.keys())
151 151 out = []
152 152 for fn in Set(magics):
153 153 out.append(fn.replace('magic_','',1))
154 154 out.sort()
155 155 return out
156 156
157 157 def extract_input_slices(self,slices,raw=False):
158 158 """Return as a string a set of input history slices.
159 159
160 160 Inputs:
161 161
162 162 - slices: the set of slices is given as a list of strings (like
163 163 ['1','4:8','9'], since this function is for use by magic functions
164 164 which get their arguments as strings.
165 165
166 166 Optional inputs:
167 167
168 168 - raw(False): by default, the processed input is used. If this is
169 169 true, the raw input history is used instead.
170 170
171 171 Note that slices can be called with two notations:
172 172
173 173 N:M -> standard python form, means including items N...(M-1).
174 174
175 175 N-M -> include items N..M (closed endpoint)."""
176 176
177 177 if raw:
178 178 hist = self.shell.input_hist_raw
179 179 else:
180 180 hist = self.shell.input_hist
181 181
182 182 cmds = []
183 183 for chunk in slices:
184 184 if ':' in chunk:
185 185 ini,fin = map(int,chunk.split(':'))
186 186 elif '-' in chunk:
187 187 ini,fin = map(int,chunk.split('-'))
188 188 fin += 1
189 189 else:
190 190 ini = int(chunk)
191 191 fin = ini+1
192 192 cmds.append(hist[ini:fin])
193 193 return cmds
194 194
195 195 def _ofind(self, oname, namespaces=None):
196 196 """Find an object in the available namespaces.
197 197
198 198 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
199 199
200 200 Has special code to detect magic functions.
201 201 """
202 202
203 203 oname = oname.strip()
204 204
205 205 alias_ns = None
206 206 if namespaces is None:
207 207 # Namespaces to search in:
208 208 # Put them in a list. The order is important so that we
209 209 # find things in the same order that Python finds them.
210 210 namespaces = [ ('Interactive', self.shell.user_ns),
211 211 ('IPython internal', self.shell.internal_ns),
212 212 ('Python builtin', __builtin__.__dict__),
213 213 ('Alias', self.shell.alias_table),
214 214 ]
215 215 alias_ns = self.shell.alias_table
216 216
217 217 # initialize results to 'null'
218 218 found = 0; obj = None; ospace = None; ds = None;
219 219 ismagic = 0; isalias = 0; parent = None
220 220
221 221 # Look for the given name by splitting it in parts. If the head is
222 222 # found, then we look for all the remaining parts as members, and only
223 223 # declare success if we can find them all.
224 224 oname_parts = oname.split('.')
225 225 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
226 226 for nsname,ns in namespaces:
227 227 try:
228 228 obj = ns[oname_head]
229 229 except KeyError:
230 230 continue
231 231 else:
232 232 #print 'oname_rest:', oname_rest # dbg
233 233 for part in oname_rest:
234 234 try:
235 235 parent = obj
236 236 obj = getattr(obj,part)
237 237 except:
238 238 # Blanket except b/c some badly implemented objects
239 239 # allow __getattr__ to raise exceptions other than
240 240 # AttributeError, which then crashes IPython.
241 241 break
242 242 else:
243 243 # If we finish the for loop (no break), we got all members
244 244 found = 1
245 245 ospace = nsname
246 246 if ns == alias_ns:
247 247 isalias = 1
248 248 break # namespace loop
249 249
250 250 # Try to see if it's magic
251 251 if not found:
252 252 if oname.startswith(self.shell.ESC_MAGIC):
253 253 oname = oname[1:]
254 254 obj = getattr(self,'magic_'+oname,None)
255 255 if obj is not None:
256 256 found = 1
257 257 ospace = 'IPython internal'
258 258 ismagic = 1
259 259
260 260 # Last try: special-case some literals like '', [], {}, etc:
261 261 if not found and oname_head in ["''",'""','[]','{}','()']:
262 262 obj = eval(oname_head)
263 263 found = 1
264 264 ospace = 'Interactive'
265 265
266 266 return {'found':found, 'obj':obj, 'namespace':ospace,
267 267 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
268 268
269 269 def arg_err(self,func):
270 270 """Print docstring if incorrect arguments were passed"""
271 271 print 'Error in arguments:'
272 272 print OInspect.getdoc(func)
273 273
274 274 def format_latex(self,strng):
275 275 """Format a string for latex inclusion."""
276 276
277 277 # Characters that need to be escaped for latex:
278 278 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
279 279 # Magic command names as headers:
280 280 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
281 281 re.MULTILINE)
282 282 # Magic commands
283 283 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
284 284 re.MULTILINE)
285 285 # Paragraph continue
286 286 par_re = re.compile(r'\\$',re.MULTILINE)
287 287
288 288 # The "\n" symbol
289 289 newline_re = re.compile(r'\\n')
290 290
291 291 # Now build the string for output:
292 292 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
293 293 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
294 294 strng)
295 295 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
296 296 strng = par_re.sub(r'\\\\',strng)
297 297 strng = escape_re.sub(r'\\\1',strng)
298 298 strng = newline_re.sub(r'\\textbackslash{}n',strng)
299 299 return strng
300 300
301 301 def format_screen(self,strng):
302 302 """Format a string for screen printing.
303 303
304 304 This removes some latex-type format codes."""
305 305 # Paragraph continue
306 306 par_re = re.compile(r'\\$',re.MULTILINE)
307 307 strng = par_re.sub('',strng)
308 308 return strng
309 309
310 310 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
311 311 """Parse options passed to an argument string.
312 312
313 313 The interface is similar to that of getopt(), but it returns back a
314 314 Struct with the options as keys and the stripped argument string still
315 315 as a string.
316 316
317 317 arg_str is quoted as a true sys.argv vector by using shlex.split.
318 318 This allows us to easily expand variables, glob files, quote
319 319 arguments, etc.
320 320
321 321 Options:
322 322 -mode: default 'string'. If given as 'list', the argument string is
323 323 returned as a list (split on whitespace) instead of a string.
324 324
325 325 -list_all: put all option values in lists. Normally only options
326 326 appearing more than once are put in a list.
327 327
328 328 -posix (True): whether to split the input line in POSIX mode or not,
329 329 as per the conventions outlined in the shlex module from the
330 330 standard library."""
331 331
332 332 # inject default options at the beginning of the input line
333 333 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
334 334 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
335 335
336 336 mode = kw.get('mode','string')
337 337 if mode not in ['string','list']:
338 338 raise ValueError,'incorrect mode given: %s' % mode
339 339 # Get options
340 340 list_all = kw.get('list_all',0)
341 341 posix = kw.get('posix',True)
342 342
343 343 # Check if we have more than one argument to warrant extra processing:
344 344 odict = {} # Dictionary with options
345 345 args = arg_str.split()
346 346 if len(args) >= 1:
347 347 # If the list of inputs only has 0 or 1 thing in it, there's no
348 348 # need to look for options
349 349 argv = arg_split(arg_str,posix)
350 350 # Do regular option processing
351 351 try:
352 352 opts,args = getopt(argv,opt_str,*long_opts)
353 353 except GetoptError,e:
354 354 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
355 355 " ".join(long_opts)))
356 356 for o,a in opts:
357 357 if o.startswith('--'):
358 358 o = o[2:]
359 359 else:
360 360 o = o[1:]
361 361 try:
362 362 odict[o].append(a)
363 363 except AttributeError:
364 364 odict[o] = [odict[o],a]
365 365 except KeyError:
366 366 if list_all:
367 367 odict[o] = [a]
368 368 else:
369 369 odict[o] = a
370 370
371 371 # Prepare opts,args for return
372 372 opts = Struct(odict)
373 373 if mode == 'string':
374 374 args = ' '.join(args)
375 375
376 376 return opts,args
377 377
378 378 #......................................................................
379 379 # And now the actual magic functions
380 380
381 381 # Functions for IPython shell work (vars,funcs, config, etc)
382 382 def magic_lsmagic(self, parameter_s = ''):
383 383 """List currently available magic functions."""
384 384 mesc = self.shell.ESC_MAGIC
385 385 print 'Available magic functions:\n'+mesc+\
386 386 (' '+mesc).join(self.lsmagic())
387 387 print '\n' + Magic.auto_status[self.shell.rc.automagic]
388 388 return None
389 389
390 390 def magic_magic(self, parameter_s = ''):
391 391 """Print information about the magic function system.
392 392
393 393 Supported formats: -latex, -brief, -rest
394 394 """
395 395
396 396 mode = ''
397 397 try:
398 398 if parameter_s.split()[0] == '-latex':
399 399 mode = 'latex'
400 400 if parameter_s.split()[0] == '-brief':
401 401 mode = 'brief'
402 402 if parameter_s.split()[0] == '-rest':
403 403 mode = 'rest'
404 404 rest_docs = []
405 405 except:
406 406 pass
407 407
408 408 magic_docs = []
409 409 for fname in self.lsmagic():
410 410 mname = 'magic_' + fname
411 411 for space in (Magic,self,self.__class__):
412 412 try:
413 413 fn = space.__dict__[mname]
414 414 except KeyError:
415 415 pass
416 416 else:
417 417 break
418 418 if mode == 'brief':
419 419 # only first line
420 420 if fn.__doc__:
421 421 fndoc = fn.__doc__.split('\n',1)[0]
422 422 else:
423 423 fndoc = 'No documentation'
424 424 else:
425 425 if fn.__doc__:
426 426 fndoc = fn.__doc__.rstrip()
427 427 else:
428 428 fndoc = 'No documentation'
429 429
430 430
431 431 if mode == 'rest':
432 432 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
433 433 fname,fndoc))
434 434
435 435 else:
436 436 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
437 437 fname,fndoc))
438 438
439 439 magic_docs = ''.join(magic_docs)
440 440
441 441 if mode == 'rest':
442 442 return "".join(rest_docs)
443 443
444 444 if mode == 'latex':
445 445 print self.format_latex(magic_docs)
446 446 return
447 447 else:
448 448 magic_docs = self.format_screen(magic_docs)
449 449 if mode == 'brief':
450 450 return magic_docs
451 451
452 452 outmsg = """
453 453 IPython's 'magic' functions
454 454 ===========================
455 455
456 456 The magic function system provides a series of functions which allow you to
457 457 control the behavior of IPython itself, plus a lot of system-type
458 458 features. All these functions are prefixed with a % character, but parameters
459 459 are given without parentheses or quotes.
460 460
461 461 NOTE: If you have 'automagic' enabled (via the command line option or with the
462 462 %automagic function), you don't need to type in the % explicitly. By default,
463 463 IPython ships with automagic on, so you should only rarely need the % escape.
464 464
465 465 Example: typing '%cd mydir' (without the quotes) changes you working directory
466 466 to 'mydir', if it exists.
467 467
468 468 You can define your own magic functions to extend the system. See the supplied
469 469 ipythonrc and example-magic.py files for details (in your ipython
470 470 configuration directory, typically $HOME/.ipython/).
471 471
472 472 You can also define your own aliased names for magic functions. In your
473 473 ipythonrc file, placing a line like:
474 474
475 475 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
476 476
477 477 will define %pf as a new name for %profile.
478 478
479 479 You can also call magics in code using the ipmagic() function, which IPython
480 480 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
481 481
482 482 For a list of the available magic functions, use %lsmagic. For a description
483 483 of any of them, type %magic_name?, e.g. '%cd?'.
484 484
485 485 Currently the magic system has the following functions:\n"""
486 486
487 487 mesc = self.shell.ESC_MAGIC
488 488 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
489 489 "\n\n%s%s\n\n%s" % (outmsg,
490 490 magic_docs,mesc,mesc,
491 491 (' '+mesc).join(self.lsmagic()),
492 492 Magic.auto_status[self.shell.rc.automagic] ) )
493 493
494 494 page(outmsg,screen_lines=self.shell.rc.screen_length)
495 495
496 496
497 497 def magic_autoindent(self, parameter_s = ''):
498 498 """Toggle autoindent on/off (if available)."""
499 499
500 500 self.shell.set_autoindent()
501 501 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
502 502
503 503
504 504 def magic_automagic(self, parameter_s = ''):
505 505 """Make magic functions callable without having to type the initial %.
506 506
507 507 Without argumentsl toggles on/off (when off, you must call it as
508 508 %automagic, of course). With arguments it sets the value, and you can
509 509 use any of (case insensitive):
510 510
511 511 - on,1,True: to activate
512 512
513 513 - off,0,False: to deactivate.
514 514
515 515 Note that magic functions have lowest priority, so if there's a
516 516 variable whose name collides with that of a magic fn, automagic won't
517 517 work for that function (you get the variable instead). However, if you
518 518 delete the variable (del var), the previously shadowed magic function
519 519 becomes visible to automagic again."""
520 520
521 521 rc = self.shell.rc
522 522 arg = parameter_s.lower()
523 523 if parameter_s in ('on','1','true'):
524 524 rc.automagic = True
525 525 elif parameter_s in ('off','0','false'):
526 526 rc.automagic = False
527 527 else:
528 528 rc.automagic = not rc.automagic
529 529 print '\n' + Magic.auto_status[rc.automagic]
530 530
531 531 @testdec.skip_doctest
532 532 def magic_autocall(self, parameter_s = ''):
533 533 """Make functions callable without having to type parentheses.
534 534
535 535 Usage:
536 536
537 537 %autocall [mode]
538 538
539 539 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
540 540 value is toggled on and off (remembering the previous state).
541 541
542 542 In more detail, these values mean:
543 543
544 544 0 -> fully disabled
545 545
546 546 1 -> active, but do not apply if there are no arguments on the line.
547 547
548 548 In this mode, you get:
549 549
550 550 In [1]: callable
551 551 Out[1]: <built-in function callable>
552 552
553 553 In [2]: callable 'hello'
554 554 ------> callable('hello')
555 555 Out[2]: False
556 556
557 557 2 -> Active always. Even if no arguments are present, the callable
558 558 object is called:
559 559
560 560 In [2]: float
561 561 ------> float()
562 562 Out[2]: 0.0
563 563
564 564 Note that even with autocall off, you can still use '/' at the start of
565 565 a line to treat the first argument on the command line as a function
566 566 and add parentheses to it:
567 567
568 568 In [8]: /str 43
569 569 ------> str(43)
570 570 Out[8]: '43'
571 571
572 572 # all-random (note for auto-testing)
573 573 """
574 574
575 575 rc = self.shell.rc
576 576
577 577 if parameter_s:
578 578 arg = int(parameter_s)
579 579 else:
580 580 arg = 'toggle'
581 581
582 582 if not arg in (0,1,2,'toggle'):
583 583 error('Valid modes: (0->Off, 1->Smart, 2->Full')
584 584 return
585 585
586 586 if arg in (0,1,2):
587 587 rc.autocall = arg
588 588 else: # toggle
589 589 if rc.autocall:
590 590 self._magic_state.autocall_save = rc.autocall
591 591 rc.autocall = 0
592 592 else:
593 593 try:
594 594 rc.autocall = self._magic_state.autocall_save
595 595 except AttributeError:
596 596 rc.autocall = self._magic_state.autocall_save = 1
597 597
598 598 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
599 599
600 600 def magic_system_verbose(self, parameter_s = ''):
601 601 """Set verbose printing of system calls.
602 602
603 603 If called without an argument, act as a toggle"""
604 604
605 605 if parameter_s:
606 606 val = bool(eval(parameter_s))
607 607 else:
608 608 val = None
609 609
610 610 self.shell.rc_set_toggle('system_verbose',val)
611 611 print "System verbose printing is:",\
612 612 ['OFF','ON'][self.shell.rc.system_verbose]
613 613
614 614
615 615 def magic_page(self, parameter_s=''):
616 616 """Pretty print the object and display it through a pager.
617 617
618 618 %page [options] OBJECT
619 619
620 620 If no object is given, use _ (last output).
621 621
622 622 Options:
623 623
624 624 -r: page str(object), don't pretty-print it."""
625 625
626 626 # After a function contributed by Olivier Aubert, slightly modified.
627 627
628 628 # Process options/args
629 629 opts,args = self.parse_options(parameter_s,'r')
630 630 raw = 'r' in opts
631 631
632 632 oname = args and args or '_'
633 633 info = self._ofind(oname)
634 634 if info['found']:
635 635 txt = (raw and str or pformat)( info['obj'] )
636 636 page(txt)
637 637 else:
638 638 print 'Object `%s` not found' % oname
639 639
640 640 def magic_profile(self, parameter_s=''):
641 641 """Print your currently active IPyhton profile."""
642 642 if self.shell.rc.profile:
643 643 printpl('Current IPython profile: $self.shell.rc.profile.')
644 644 else:
645 645 print 'No profile active.'
646 646
647 647 def magic_pinfo(self, parameter_s='', namespaces=None):
648 648 """Provide detailed information about an object.
649 649
650 650 '%pinfo object' is just a synonym for object? or ?object."""
651 651
652 652 #print 'pinfo par: <%s>' % parameter_s # dbg
653 653
654 654
655 655 # detail_level: 0 -> obj? , 1 -> obj??
656 656 detail_level = 0
657 657 # We need to detect if we got called as 'pinfo pinfo foo', which can
658 658 # happen if the user types 'pinfo foo?' at the cmd line.
659 659 pinfo,qmark1,oname,qmark2 = \
660 660 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
661 661 if pinfo or qmark1 or qmark2:
662 662 detail_level = 1
663 663 if "*" in oname:
664 664 self.magic_psearch(oname)
665 665 else:
666 666 self._inspect('pinfo', oname, detail_level=detail_level,
667 667 namespaces=namespaces)
668 668
669 669 def magic_pdef(self, parameter_s='', namespaces=None):
670 670 """Print the definition header for any callable object.
671 671
672 672 If the object is a class, print the constructor information."""
673 673 self._inspect('pdef',parameter_s, namespaces)
674 674
675 675 def magic_pdoc(self, parameter_s='', namespaces=None):
676 676 """Print the docstring for an object.
677 677
678 678 If the given object is a class, it will print both the class and the
679 679 constructor docstrings."""
680 680 self._inspect('pdoc',parameter_s, namespaces)
681 681
682 682 def magic_psource(self, parameter_s='', namespaces=None):
683 683 """Print (or run through pager) the source code for an object."""
684 684 self._inspect('psource',parameter_s, namespaces)
685 685
686 686 def magic_pfile(self, parameter_s=''):
687 687 """Print (or run through pager) the file where an object is defined.
688 688
689 689 The file opens at the line where the object definition begins. IPython
690 690 will honor the environment variable PAGER if set, and otherwise will
691 691 do its best to print the file in a convenient form.
692 692
693 693 If the given argument is not an object currently defined, IPython will
694 694 try to interpret it as a filename (automatically adding a .py extension
695 695 if needed). You can thus use %pfile as a syntax highlighting code
696 696 viewer."""
697 697
698 698 # first interpret argument as an object name
699 699 out = self._inspect('pfile',parameter_s)
700 700 # if not, try the input as a filename
701 701 if out == 'not found':
702 702 try:
703 703 filename = get_py_filename(parameter_s)
704 704 except IOError,msg:
705 705 print msg
706 706 return
707 707 page(self.shell.inspector.format(file(filename).read()))
708 708
709 709 def _inspect(self,meth,oname,namespaces=None,**kw):
710 710 """Generic interface to the inspector system.
711 711
712 712 This function is meant to be called by pdef, pdoc & friends."""
713 713
714 714 #oname = oname.strip()
715 715 #print '1- oname: <%r>' % oname # dbg
716 716 try:
717 717 oname = oname.strip().encode('ascii')
718 718 #print '2- oname: <%r>' % oname # dbg
719 719 except UnicodeEncodeError:
720 720 print 'Python identifiers can only contain ascii characters.'
721 721 return 'not found'
722 722
723 723 info = Struct(self._ofind(oname, namespaces))
724 724
725 725 if info.found:
726 726 try:
727 727 IPython.generics.inspect_object(info.obj)
728 728 return
729 729 except IPython.ipapi.TryNext:
730 730 pass
731 731 # Get the docstring of the class property if it exists.
732 732 path = oname.split('.')
733 733 root = '.'.join(path[:-1])
734 734 if info.parent is not None:
735 735 try:
736 736 target = getattr(info.parent, '__class__')
737 737 # The object belongs to a class instance.
738 738 try:
739 739 target = getattr(target, path[-1])
740 740 # The class defines the object.
741 741 if isinstance(target, property):
742 742 oname = root + '.__class__.' + path[-1]
743 743 info = Struct(self._ofind(oname))
744 744 except AttributeError: pass
745 745 except AttributeError: pass
746 746
747 747 pmethod = getattr(self.shell.inspector,meth)
748 748 formatter = info.ismagic and self.format_screen or None
749 749 if meth == 'pdoc':
750 750 pmethod(info.obj,oname,formatter)
751 751 elif meth == 'pinfo':
752 752 pmethod(info.obj,oname,formatter,info,**kw)
753 753 else:
754 754 pmethod(info.obj,oname)
755 755 else:
756 756 print 'Object `%s` not found.' % oname
757 757 return 'not found' # so callers can take other action
758 758
759 759 def magic_psearch(self, parameter_s=''):
760 760 """Search for object in namespaces by wildcard.
761 761
762 762 %psearch [options] PATTERN [OBJECT TYPE]
763 763
764 764 Note: ? can be used as a synonym for %psearch, at the beginning or at
765 765 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
766 766 rest of the command line must be unchanged (options come first), so
767 767 for example the following forms are equivalent
768 768
769 769 %psearch -i a* function
770 770 -i a* function?
771 771 ?-i a* function
772 772
773 773 Arguments:
774 774
775 775 PATTERN
776 776
777 777 where PATTERN is a string containing * as a wildcard similar to its
778 778 use in a shell. The pattern is matched in all namespaces on the
779 779 search path. By default objects starting with a single _ are not
780 780 matched, many IPython generated objects have a single
781 781 underscore. The default is case insensitive matching. Matching is
782 782 also done on the attributes of objects and not only on the objects
783 783 in a module.
784 784
785 785 [OBJECT TYPE]
786 786
787 787 Is the name of a python type from the types module. The name is
788 788 given in lowercase without the ending type, ex. StringType is
789 789 written string. By adding a type here only objects matching the
790 790 given type are matched. Using all here makes the pattern match all
791 791 types (this is the default).
792 792
793 793 Options:
794 794
795 795 -a: makes the pattern match even objects whose names start with a
796 796 single underscore. These names are normally ommitted from the
797 797 search.
798 798
799 799 -i/-c: make the pattern case insensitive/sensitive. If neither of
800 800 these options is given, the default is read from your ipythonrc
801 801 file. The option name which sets this value is
802 802 'wildcards_case_sensitive'. If this option is not specified in your
803 803 ipythonrc file, IPython's internal default is to do a case sensitive
804 804 search.
805 805
806 806 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
807 807 specifiy can be searched in any of the following namespaces:
808 808 'builtin', 'user', 'user_global','internal', 'alias', where
809 809 'builtin' and 'user' are the search defaults. Note that you should
810 810 not use quotes when specifying namespaces.
811 811
812 812 'Builtin' contains the python module builtin, 'user' contains all
813 813 user data, 'alias' only contain the shell aliases and no python
814 814 objects, 'internal' contains objects used by IPython. The
815 815 'user_global' namespace is only used by embedded IPython instances,
816 816 and it contains module-level globals. You can add namespaces to the
817 817 search with -s or exclude them with -e (these options can be given
818 818 more than once).
819 819
820 820 Examples:
821 821
822 822 %psearch a* -> objects beginning with an a
823 823 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
824 824 %psearch a* function -> all functions beginning with an a
825 825 %psearch re.e* -> objects beginning with an e in module re
826 826 %psearch r*.e* -> objects that start with e in modules starting in r
827 827 %psearch r*.* string -> all strings in modules beginning with r
828 828
829 829 Case sensitve search:
830 830
831 831 %psearch -c a* list all object beginning with lower case a
832 832
833 833 Show objects beginning with a single _:
834 834
835 835 %psearch -a _* list objects beginning with a single underscore"""
836 836 try:
837 837 parameter_s = parameter_s.encode('ascii')
838 838 except UnicodeEncodeError:
839 839 print 'Python identifiers can only contain ascii characters.'
840 840 return
841 841
842 842 # default namespaces to be searched
843 843 def_search = ['user','builtin']
844 844
845 845 # Process options/args
846 846 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
847 847 opt = opts.get
848 848 shell = self.shell
849 849 psearch = shell.inspector.psearch
850 850
851 851 # select case options
852 852 if opts.has_key('i'):
853 853 ignore_case = True
854 854 elif opts.has_key('c'):
855 855 ignore_case = False
856 856 else:
857 857 ignore_case = not shell.rc.wildcards_case_sensitive
858 858
859 859 # Build list of namespaces to search from user options
860 860 def_search.extend(opt('s',[]))
861 861 ns_exclude = ns_exclude=opt('e',[])
862 862 ns_search = [nm for nm in def_search if nm not in ns_exclude]
863 863
864 864 # Call the actual search
865 865 try:
866 866 psearch(args,shell.ns_table,ns_search,
867 867 show_all=opt('a'),ignore_case=ignore_case)
868 868 except:
869 869 shell.showtraceback()
870 870
871 871 def magic_who_ls(self, parameter_s=''):
872 872 """Return a sorted list of all interactive variables.
873 873
874 874 If arguments are given, only variables of types matching these
875 875 arguments are returned."""
876 876
877 877 user_ns = self.shell.user_ns
878 878 internal_ns = self.shell.internal_ns
879 879 user_config_ns = self.shell.user_config_ns
880 880 out = []
881 881 typelist = parameter_s.split()
882 882
883 883 for i in user_ns:
884 884 if not (i.startswith('_') or i.startswith('_i')) \
885 885 and not (i in internal_ns or i in user_config_ns):
886 886 if typelist:
887 887 if type(user_ns[i]).__name__ in typelist:
888 888 out.append(i)
889 889 else:
890 890 out.append(i)
891 891 out.sort()
892 892 return out
893 893
894 894 def magic_who(self, parameter_s=''):
895 895 """Print all interactive variables, with some minimal formatting.
896 896
897 897 If any arguments are given, only variables whose type matches one of
898 898 these are printed. For example:
899 899
900 900 %who function str
901 901
902 902 will only list functions and strings, excluding all other types of
903 903 variables. To find the proper type names, simply use type(var) at a
904 904 command line to see how python prints type names. For example:
905 905
906 906 In [1]: type('hello')\\
907 907 Out[1]: <type 'str'>
908 908
909 909 indicates that the type name for strings is 'str'.
910 910
911 911 %who always excludes executed names loaded through your configuration
912 912 file and things which are internal to IPython.
913 913
914 914 This is deliberate, as typically you may load many modules and the
915 915 purpose of %who is to show you only what you've manually defined."""
916 916
917 917 varlist = self.magic_who_ls(parameter_s)
918 918 if not varlist:
919 919 if parameter_s:
920 920 print 'No variables match your requested type.'
921 921 else:
922 922 print 'Interactive namespace is empty.'
923 923 return
924 924
925 925 # if we have variables, move on...
926 926 count = 0
927 927 for i in varlist:
928 928 print i+'\t',
929 929 count += 1
930 930 if count > 8:
931 931 count = 0
932 932 print
933 933 print
934 934
935 935 def magic_whos(self, parameter_s=''):
936 936 """Like %who, but gives some extra information about each variable.
937 937
938 938 The same type filtering of %who can be applied here.
939 939
940 940 For all variables, the type is printed. Additionally it prints:
941 941
942 942 - For {},[],(): their length.
943 943
944 944 - For numpy and Numeric arrays, a summary with shape, number of
945 945 elements, typecode and size in memory.
946 946
947 947 - Everything else: a string representation, snipping their middle if
948 948 too long."""
949 949
950 950 varnames = self.magic_who_ls(parameter_s)
951 951 if not varnames:
952 952 if parameter_s:
953 953 print 'No variables match your requested type.'
954 954 else:
955 955 print 'Interactive namespace is empty.'
956 956 return
957 957
958 958 # if we have variables, move on...
959 959
960 960 # for these types, show len() instead of data:
961 961 seq_types = [types.DictType,types.ListType,types.TupleType]
962 962
963 963 # for numpy/Numeric arrays, display summary info
964 964 try:
965 965 import numpy
966 966 except ImportError:
967 967 ndarray_type = None
968 968 else:
969 969 ndarray_type = numpy.ndarray.__name__
970 970 try:
971 971 import Numeric
972 972 except ImportError:
973 973 array_type = None
974 974 else:
975 975 array_type = Numeric.ArrayType.__name__
976 976
977 977 # Find all variable names and types so we can figure out column sizes
978 978 def get_vars(i):
979 979 return self.shell.user_ns[i]
980 980
981 981 # some types are well known and can be shorter
982 982 abbrevs = {'IPython.macro.Macro' : 'Macro'}
983 983 def type_name(v):
984 984 tn = type(v).__name__
985 985 return abbrevs.get(tn,tn)
986 986
987 987 varlist = map(get_vars,varnames)
988 988
989 989 typelist = []
990 990 for vv in varlist:
991 991 tt = type_name(vv)
992 992
993 993 if tt=='instance':
994 994 typelist.append( abbrevs.get(str(vv.__class__),
995 995 str(vv.__class__)))
996 996 else:
997 997 typelist.append(tt)
998 998
999 999 # column labels and # of spaces as separator
1000 1000 varlabel = 'Variable'
1001 1001 typelabel = 'Type'
1002 1002 datalabel = 'Data/Info'
1003 1003 colsep = 3
1004 1004 # variable format strings
1005 1005 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1006 1006 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1007 1007 aformat = "%s: %s elems, type `%s`, %s bytes"
1008 1008 # find the size of the columns to format the output nicely
1009 1009 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1010 1010 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1011 1011 # table header
1012 1012 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1013 1013 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1014 1014 # and the table itself
1015 1015 kb = 1024
1016 1016 Mb = 1048576 # kb**2
1017 1017 for vname,var,vtype in zip(varnames,varlist,typelist):
1018 1018 print itpl(vformat),
1019 1019 if vtype in seq_types:
1020 1020 print len(var)
1021 1021 elif vtype in [array_type,ndarray_type]:
1022 1022 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1023 1023 if vtype==ndarray_type:
1024 1024 # numpy
1025 1025 vsize = var.size
1026 1026 vbytes = vsize*var.itemsize
1027 1027 vdtype = var.dtype
1028 1028 else:
1029 1029 # Numeric
1030 1030 vsize = Numeric.size(var)
1031 1031 vbytes = vsize*var.itemsize()
1032 1032 vdtype = var.typecode()
1033 1033
1034 1034 if vbytes < 100000:
1035 1035 print aformat % (vshape,vsize,vdtype,vbytes)
1036 1036 else:
1037 1037 print aformat % (vshape,vsize,vdtype,vbytes),
1038 1038 if vbytes < Mb:
1039 1039 print '(%s kb)' % (vbytes/kb,)
1040 1040 else:
1041 1041 print '(%s Mb)' % (vbytes/Mb,)
1042 1042 else:
1043 1043 try:
1044 1044 vstr = str(var)
1045 1045 except UnicodeEncodeError:
1046 1046 vstr = unicode(var).encode(sys.getdefaultencoding(),
1047 1047 'backslashreplace')
1048 1048 vstr = vstr.replace('\n','\\n')
1049 1049 if len(vstr) < 50:
1050 1050 print vstr
1051 1051 else:
1052 1052 printpl(vfmt_short)
1053 1053
1054 1054 def magic_reset(self, parameter_s=''):
1055 1055 """Resets the namespace by removing all names defined by the user.
1056 1056
1057 1057 Input/Output history are left around in case you need them."""
1058 1058
1059 1059 ans = self.shell.ask_yes_no(
1060 1060 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1061 1061 if not ans:
1062 1062 print 'Nothing done.'
1063 1063 return
1064 1064 user_ns = self.shell.user_ns
1065 1065 for i in self.magic_who_ls():
1066 1066 del(user_ns[i])
1067 1067
1068 1068 # Also flush the private list of module references kept for script
1069 1069 # execution protection
1070 1070 self.shell._user_main_modules[:] = []
1071 1071
1072 1072 def magic_logstart(self,parameter_s=''):
1073 1073 """Start logging anywhere in a session.
1074 1074
1075 1075 %logstart [-o|-r|-t] [log_name [log_mode]]
1076 1076
1077 1077 If no name is given, it defaults to a file named 'ipython_log.py' in your
1078 1078 current directory, in 'rotate' mode (see below).
1079 1079
1080 1080 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1081 1081 history up to that point and then continues logging.
1082 1082
1083 1083 %logstart takes a second optional parameter: logging mode. This can be one
1084 1084 of (note that the modes are given unquoted):\\
1085 1085 append: well, that says it.\\
1086 1086 backup: rename (if exists) to name~ and start name.\\
1087 1087 global: single logfile in your home dir, appended to.\\
1088 1088 over : overwrite existing log.\\
1089 1089 rotate: create rotating logs name.1~, name.2~, etc.
1090 1090
1091 1091 Options:
1092 1092
1093 1093 -o: log also IPython's output. In this mode, all commands which
1094 1094 generate an Out[NN] prompt are recorded to the logfile, right after
1095 1095 their corresponding input line. The output lines are always
1096 1096 prepended with a '#[Out]# ' marker, so that the log remains valid
1097 1097 Python code.
1098 1098
1099 1099 Since this marker is always the same, filtering only the output from
1100 1100 a log is very easy, using for example a simple awk call:
1101 1101
1102 1102 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1103 1103
1104 1104 -r: log 'raw' input. Normally, IPython's logs contain the processed
1105 1105 input, so that user lines are logged in their final form, converted
1106 1106 into valid Python. For example, %Exit is logged as
1107 1107 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1108 1108 exactly as typed, with no transformations applied.
1109 1109
1110 1110 -t: put timestamps before each input line logged (these are put in
1111 1111 comments)."""
1112 1112
1113 1113 opts,par = self.parse_options(parameter_s,'ort')
1114 1114 log_output = 'o' in opts
1115 1115 log_raw_input = 'r' in opts
1116 1116 timestamp = 't' in opts
1117 1117
1118 1118 rc = self.shell.rc
1119 1119 logger = self.shell.logger
1120 1120
1121 1121 # if no args are given, the defaults set in the logger constructor by
1122 1122 # ipytohn remain valid
1123 1123 if par:
1124 1124 try:
1125 1125 logfname,logmode = par.split()
1126 1126 except:
1127 1127 logfname = par
1128 1128 logmode = 'backup'
1129 1129 else:
1130 1130 logfname = logger.logfname
1131 1131 logmode = logger.logmode
1132 1132 # put logfname into rc struct as if it had been called on the command
1133 1133 # line, so it ends up saved in the log header Save it in case we need
1134 1134 # to restore it...
1135 1135 old_logfile = rc.opts.get('logfile','')
1136 1136 if logfname:
1137 1137 logfname = os.path.expanduser(logfname)
1138 1138 rc.opts.logfile = logfname
1139 1139 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1140 1140 try:
1141 1141 started = logger.logstart(logfname,loghead,logmode,
1142 1142 log_output,timestamp,log_raw_input)
1143 1143 except:
1144 1144 rc.opts.logfile = old_logfile
1145 1145 warn("Couldn't start log: %s" % sys.exc_info()[1])
1146 1146 else:
1147 1147 # log input history up to this point, optionally interleaving
1148 1148 # output if requested
1149 1149
1150 1150 if timestamp:
1151 1151 # disable timestamping for the previous history, since we've
1152 1152 # lost those already (no time machine here).
1153 1153 logger.timestamp = False
1154 1154
1155 1155 if log_raw_input:
1156 1156 input_hist = self.shell.input_hist_raw
1157 1157 else:
1158 1158 input_hist = self.shell.input_hist
1159 1159
1160 1160 if log_output:
1161 1161 log_write = logger.log_write
1162 1162 output_hist = self.shell.output_hist
1163 1163 for n in range(1,len(input_hist)-1):
1164 1164 log_write(input_hist[n].rstrip())
1165 1165 if n in output_hist:
1166 1166 log_write(repr(output_hist[n]),'output')
1167 1167 else:
1168 1168 logger.log_write(input_hist[1:])
1169 1169 if timestamp:
1170 1170 # re-enable timestamping
1171 1171 logger.timestamp = True
1172 1172
1173 1173 print ('Activating auto-logging. '
1174 1174 'Current session state plus future input saved.')
1175 1175 logger.logstate()
1176 1176
1177 1177 def magic_logstop(self,parameter_s=''):
1178 1178 """Fully stop logging and close log file.
1179 1179
1180 1180 In order to start logging again, a new %logstart call needs to be made,
1181 1181 possibly (though not necessarily) with a new filename, mode and other
1182 1182 options."""
1183 1183 self.logger.logstop()
1184 1184
1185 1185 def magic_logoff(self,parameter_s=''):
1186 1186 """Temporarily stop logging.
1187 1187
1188 1188 You must have previously started logging."""
1189 1189 self.shell.logger.switch_log(0)
1190 1190
1191 1191 def magic_logon(self,parameter_s=''):
1192 1192 """Restart logging.
1193 1193
1194 1194 This function is for restarting logging which you've temporarily
1195 1195 stopped with %logoff. For starting logging for the first time, you
1196 1196 must use the %logstart function, which allows you to specify an
1197 1197 optional log filename."""
1198 1198
1199 1199 self.shell.logger.switch_log(1)
1200 1200
1201 1201 def magic_logstate(self,parameter_s=''):
1202 1202 """Print the status of the logging system."""
1203 1203
1204 1204 self.shell.logger.logstate()
1205 1205
1206 1206 def magic_pdb(self, parameter_s=''):
1207 1207 """Control the automatic calling of the pdb interactive debugger.
1208 1208
1209 1209 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1210 1210 argument it works as a toggle.
1211 1211
1212 1212 When an exception is triggered, IPython can optionally call the
1213 1213 interactive pdb debugger after the traceback printout. %pdb toggles
1214 1214 this feature on and off.
1215 1215
1216 1216 The initial state of this feature is set in your ipythonrc
1217 1217 configuration file (the variable is called 'pdb').
1218 1218
1219 1219 If you want to just activate the debugger AFTER an exception has fired,
1220 1220 without having to type '%pdb on' and rerunning your code, you can use
1221 1221 the %debug magic."""
1222 1222
1223 1223 par = parameter_s.strip().lower()
1224 1224
1225 1225 if par:
1226 1226 try:
1227 1227 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1228 1228 except KeyError:
1229 1229 print ('Incorrect argument. Use on/1, off/0, '
1230 1230 'or nothing for a toggle.')
1231 1231 return
1232 1232 else:
1233 1233 # toggle
1234 1234 new_pdb = not self.shell.call_pdb
1235 1235
1236 1236 # set on the shell
1237 1237 self.shell.call_pdb = new_pdb
1238 1238 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1239 1239
1240 1240 def magic_debug(self, parameter_s=''):
1241 1241 """Activate the interactive debugger in post-mortem mode.
1242 1242
1243 1243 If an exception has just occurred, this lets you inspect its stack
1244 1244 frames interactively. Note that this will always work only on the last
1245 1245 traceback that occurred, so you must call this quickly after an
1246 1246 exception that you wish to inspect has fired, because if another one
1247 1247 occurs, it clobbers the previous one.
1248 1248
1249 1249 If you want IPython to automatically do this on every exception, see
1250 1250 the %pdb magic for more details.
1251 1251 """
1252 1252
1253 1253 self.shell.debugger(force=True)
1254 1254
1255 1255 @testdec.skip_doctest
1256 1256 def magic_prun(self, parameter_s ='',user_mode=1,
1257 1257 opts=None,arg_lst=None,prog_ns=None):
1258 1258
1259 1259 """Run a statement through the python code profiler.
1260 1260
1261 1261 Usage:
1262 1262 %prun [options] statement
1263 1263
1264 1264 The given statement (which doesn't require quote marks) is run via the
1265 1265 python profiler in a manner similar to the profile.run() function.
1266 1266 Namespaces are internally managed to work correctly; profile.run
1267 1267 cannot be used in IPython because it makes certain assumptions about
1268 1268 namespaces which do not hold under IPython.
1269 1269
1270 1270 Options:
1271 1271
1272 1272 -l <limit>: you can place restrictions on what or how much of the
1273 1273 profile gets printed. The limit value can be:
1274 1274
1275 1275 * A string: only information for function names containing this string
1276 1276 is printed.
1277 1277
1278 1278 * An integer: only these many lines are printed.
1279 1279
1280 1280 * A float (between 0 and 1): this fraction of the report is printed
1281 1281 (for example, use a limit of 0.4 to see the topmost 40% only).
1282 1282
1283 1283 You can combine several limits with repeated use of the option. For
1284 1284 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1285 1285 information about class constructors.
1286 1286
1287 1287 -r: return the pstats.Stats object generated by the profiling. This
1288 1288 object has all the information about the profile in it, and you can
1289 1289 later use it for further analysis or in other functions.
1290 1290
1291 1291 -s <key>: sort profile by given key. You can provide more than one key
1292 1292 by using the option several times: '-s key1 -s key2 -s key3...'. The
1293 1293 default sorting key is 'time'.
1294 1294
1295 1295 The following is copied verbatim from the profile documentation
1296 1296 referenced below:
1297 1297
1298 1298 When more than one key is provided, additional keys are used as
1299 1299 secondary criteria when the there is equality in all keys selected
1300 1300 before them.
1301 1301
1302 1302 Abbreviations can be used for any key names, as long as the
1303 1303 abbreviation is unambiguous. The following are the keys currently
1304 1304 defined:
1305 1305
1306 1306 Valid Arg Meaning
1307 1307 "calls" call count
1308 1308 "cumulative" cumulative time
1309 1309 "file" file name
1310 1310 "module" file name
1311 1311 "pcalls" primitive call count
1312 1312 "line" line number
1313 1313 "name" function name
1314 1314 "nfl" name/file/line
1315 1315 "stdname" standard name
1316 1316 "time" internal time
1317 1317
1318 1318 Note that all sorts on statistics are in descending order (placing
1319 1319 most time consuming items first), where as name, file, and line number
1320 1320 searches are in ascending order (i.e., alphabetical). The subtle
1321 1321 distinction between "nfl" and "stdname" is that the standard name is a
1322 1322 sort of the name as printed, which means that the embedded line
1323 1323 numbers get compared in an odd way. For example, lines 3, 20, and 40
1324 1324 would (if the file names were the same) appear in the string order
1325 1325 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1326 1326 line numbers. In fact, sort_stats("nfl") is the same as
1327 1327 sort_stats("name", "file", "line").
1328 1328
1329 1329 -T <filename>: save profile results as shown on screen to a text
1330 1330 file. The profile is still shown on screen.
1331 1331
1332 1332 -D <filename>: save (via dump_stats) profile statistics to given
1333 1333 filename. This data is in a format understod by the pstats module, and
1334 1334 is generated by a call to the dump_stats() method of profile
1335 1335 objects. The profile is still shown on screen.
1336 1336
1337 1337 If you want to run complete programs under the profiler's control, use
1338 1338 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1339 1339 contains profiler specific options as described here.
1340 1340
1341 1341 You can read the complete documentation for the profile module with::
1342 1342
1343 1343 In [1]: import profile; profile.help()
1344 1344 """
1345 1345
1346 1346 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1347 1347 # protect user quote marks
1348 1348 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1349 1349
1350 1350 if user_mode: # regular user call
1351 1351 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1352 1352 list_all=1)
1353 1353 namespace = self.shell.user_ns
1354 1354 else: # called to run a program by %run -p
1355 1355 try:
1356 1356 filename = get_py_filename(arg_lst[0])
1357 1357 except IOError,msg:
1358 1358 error(msg)
1359 1359 return
1360 1360
1361 1361 arg_str = 'execfile(filename,prog_ns)'
1362 1362 namespace = locals()
1363 1363
1364 1364 opts.merge(opts_def)
1365 1365
1366 1366 prof = profile.Profile()
1367 1367 try:
1368 1368 prof = prof.runctx(arg_str,namespace,namespace)
1369 1369 sys_exit = ''
1370 1370 except SystemExit:
1371 1371 sys_exit = """*** SystemExit exception caught in code being profiled."""
1372 1372
1373 1373 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1374 1374
1375 1375 lims = opts.l
1376 1376 if lims:
1377 1377 lims = [] # rebuild lims with ints/floats/strings
1378 1378 for lim in opts.l:
1379 1379 try:
1380 1380 lims.append(int(lim))
1381 1381 except ValueError:
1382 1382 try:
1383 1383 lims.append(float(lim))
1384 1384 except ValueError:
1385 1385 lims.append(lim)
1386 1386
1387 1387 # Trap output.
1388 1388 stdout_trap = StringIO()
1389 1389
1390 1390 if hasattr(stats,'stream'):
1391 1391 # In newer versions of python, the stats object has a 'stream'
1392 1392 # attribute to write into.
1393 1393 stats.stream = stdout_trap
1394 1394 stats.print_stats(*lims)
1395 1395 else:
1396 1396 # For older versions, we manually redirect stdout during printing
1397 1397 sys_stdout = sys.stdout
1398 1398 try:
1399 1399 sys.stdout = stdout_trap
1400 1400 stats.print_stats(*lims)
1401 1401 finally:
1402 1402 sys.stdout = sys_stdout
1403 1403
1404 1404 output = stdout_trap.getvalue()
1405 1405 output = output.rstrip()
1406 1406
1407 1407 page(output,screen_lines=self.shell.rc.screen_length)
1408 1408 print sys_exit,
1409 1409
1410 1410 dump_file = opts.D[0]
1411 1411 text_file = opts.T[0]
1412 1412 if dump_file:
1413 1413 prof.dump_stats(dump_file)
1414 1414 print '\n*** Profile stats marshalled to file',\
1415 1415 `dump_file`+'.',sys_exit
1416 1416 if text_file:
1417 1417 pfile = file(text_file,'w')
1418 1418 pfile.write(output)
1419 1419 pfile.close()
1420 1420 print '\n*** Profile printout saved to text file',\
1421 1421 `text_file`+'.',sys_exit
1422 1422
1423 1423 if opts.has_key('r'):
1424 1424 return stats
1425 1425 else:
1426 1426 return None
1427 1427
1428 1428 @testdec.skip_doctest
1429 1429 def magic_run(self, parameter_s ='',runner=None):
1430 1430 """Run the named file inside IPython as a program.
1431 1431
1432 1432 Usage:\\
1433 1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1434 1434
1435 1435 Parameters after the filename are passed as command-line arguments to
1436 1436 the program (put in sys.argv). Then, control returns to IPython's
1437 1437 prompt.
1438 1438
1439 1439 This is similar to running at a system prompt:\\
1440 1440 $ python file args\\
1441 1441 but with the advantage of giving you IPython's tracebacks, and of
1442 1442 loading all variables into your interactive namespace for further use
1443 1443 (unless -p is used, see below).
1444 1444
1445 1445 The file is executed in a namespace initially consisting only of
1446 1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1447 1447 sees its environment as if it were being run as a stand-alone program
1448 1448 (except for sharing global objects such as previously imported
1449 1449 modules). But after execution, the IPython interactive namespace gets
1450 1450 updated with all variables defined in the program (except for __name__
1451 1451 and sys.argv). This allows for very convenient loading of code for
1452 1452 interactive work, while giving each program a 'clean sheet' to run in.
1453 1453
1454 1454 Options:
1455 1455
1456 1456 -n: __name__ is NOT set to '__main__', but to the running file's name
1457 1457 without extension (as python does under import). This allows running
1458 1458 scripts and reloading the definitions in them without calling code
1459 1459 protected by an ' if __name__ == "__main__" ' clause.
1460 1460
1461 1461 -i: run the file in IPython's namespace instead of an empty one. This
1462 1462 is useful if you are experimenting with code written in a text editor
1463 1463 which depends on variables defined interactively.
1464 1464
1465 1465 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1466 1466 being run. This is particularly useful if IPython is being used to
1467 1467 run unittests, which always exit with a sys.exit() call. In such
1468 1468 cases you are interested in the output of the test results, not in
1469 1469 seeing a traceback of the unittest module.
1470 1470
1471 1471 -t: print timing information at the end of the run. IPython will give
1472 1472 you an estimated CPU time consumption for your script, which under
1473 1473 Unix uses the resource module to avoid the wraparound problems of
1474 1474 time.clock(). Under Unix, an estimate of time spent on system tasks
1475 1475 is also given (for Windows platforms this is reported as 0.0).
1476 1476
1477 1477 If -t is given, an additional -N<N> option can be given, where <N>
1478 1478 must be an integer indicating how many times you want the script to
1479 1479 run. The final timing report will include total and per run results.
1480 1480
1481 1481 For example (testing the script uniq_stable.py):
1482 1482
1483 1483 In [1]: run -t uniq_stable
1484 1484
1485 1485 IPython CPU timings (estimated):\\
1486 1486 User : 0.19597 s.\\
1487 1487 System: 0.0 s.\\
1488 1488
1489 1489 In [2]: run -t -N5 uniq_stable
1490 1490
1491 1491 IPython CPU timings (estimated):\\
1492 1492 Total runs performed: 5\\
1493 1493 Times : Total Per run\\
1494 1494 User : 0.910862 s, 0.1821724 s.\\
1495 1495 System: 0.0 s, 0.0 s.
1496 1496
1497 1497 -d: run your program under the control of pdb, the Python debugger.
1498 1498 This allows you to execute your program step by step, watch variables,
1499 1499 etc. Internally, what IPython does is similar to calling:
1500 1500
1501 1501 pdb.run('execfile("YOURFILENAME")')
1502 1502
1503 1503 with a breakpoint set on line 1 of your file. You can change the line
1504 1504 number for this automatic breakpoint to be <N> by using the -bN option
1505 1505 (where N must be an integer). For example:
1506 1506
1507 1507 %run -d -b40 myscript
1508 1508
1509 1509 will set the first breakpoint at line 40 in myscript.py. Note that
1510 1510 the first breakpoint must be set on a line which actually does
1511 1511 something (not a comment or docstring) for it to stop execution.
1512 1512
1513 1513 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1514 1514 first enter 'c' (without qoutes) to start execution up to the first
1515 1515 breakpoint.
1516 1516
1517 1517 Entering 'help' gives information about the use of the debugger. You
1518 1518 can easily see pdb's full documentation with "import pdb;pdb.help()"
1519 1519 at a prompt.
1520 1520
1521 1521 -p: run program under the control of the Python profiler module (which
1522 1522 prints a detailed report of execution times, function calls, etc).
1523 1523
1524 1524 You can pass other options after -p which affect the behavior of the
1525 1525 profiler itself. See the docs for %prun for details.
1526 1526
1527 1527 In this mode, the program's variables do NOT propagate back to the
1528 1528 IPython interactive namespace (because they remain in the namespace
1529 1529 where the profiler executes them).
1530 1530
1531 1531 Internally this triggers a call to %prun, see its documentation for
1532 1532 details on the options available specifically for profiling.
1533 1533
1534 1534 There is one special usage for which the text above doesn't apply:
1535 1535 if the filename ends with .ipy, the file is run as ipython script,
1536 1536 just as if the commands were written on IPython prompt.
1537 1537 """
1538 1538
1539 1539 # get arguments and set sys.argv for program to be run.
1540 1540 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1541 1541 mode='list',list_all=1)
1542 1542
1543 1543 try:
1544 1544 filename = get_py_filename(arg_lst[0])
1545 1545 except IndexError:
1546 1546 warn('you must provide at least a filename.')
1547 1547 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1548 1548 return
1549 1549 except IOError,msg:
1550 1550 error(msg)
1551 1551 return
1552 1552
1553 1553 if filename.lower().endswith('.ipy'):
1554 1554 self.api.runlines(open(filename).read())
1555 1555 return
1556 1556
1557 1557 # Control the response to exit() calls made by the script being run
1558 1558 exit_ignore = opts.has_key('e')
1559 1559
1560 1560 # Make sure that the running script gets a proper sys.argv as if it
1561 1561 # were run from a system shell.
1562 1562 save_argv = sys.argv # save it for later restoring
1563 1563 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1564 1564
1565 1565 if opts.has_key('i'):
1566 1566 # Run in user's interactive namespace
1567 1567 prog_ns = self.shell.user_ns
1568 1568 __name__save = self.shell.user_ns['__name__']
1569 1569 prog_ns['__name__'] = '__main__'
1570 1570 main_mod = FakeModule(prog_ns)
1571 1571 else:
1572 1572 # Run in a fresh, empty namespace
1573 1573 if opts.has_key('n'):
1574 1574 name = os.path.splitext(os.path.basename(filename))[0]
1575 1575 else:
1576 1576 name = '__main__'
1577 1577 main_mod = FakeModule()
1578 1578 prog_ns = main_mod.__dict__
1579 1579 prog_ns['__name__'] = name
1580 1580 # The shell MUST hold a reference to main_mod so after %run exits,
1581 1581 # the python deletion mechanism doesn't zero it out (leaving
1582 1582 # dangling references)
1583 1583 self.shell._user_main_modules.append(main_mod)
1584 1584
1585 1585 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1586 1586 # set the __file__ global in the script's namespace
1587 1587 prog_ns['__file__'] = filename
1588 1588
1589 1589 # pickle fix. See iplib for an explanation. But we need to make sure
1590 1590 # that, if we overwrite __main__, we replace it at the end
1591 1591 main_mod_name = prog_ns['__name__']
1592 1592
1593 1593 if main_mod_name == '__main__':
1594 1594 restore_main = sys.modules['__main__']
1595 1595 else:
1596 1596 restore_main = False
1597 1597
1598 1598 # This needs to be undone at the end to prevent holding references to
1599 1599 # every single object ever created.
1600 1600 sys.modules[main_mod_name] = main_mod
1601 1601
1602 1602 stats = None
1603 1603 try:
1604 1604 self.shell.savehist()
1605 1605
1606 1606 if opts.has_key('p'):
1607 1607 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1608 1608 else:
1609 1609 if opts.has_key('d'):
1610 1610 deb = Debugger.Pdb(self.shell.rc.colors)
1611 1611 # reset Breakpoint state, which is moronically kept
1612 1612 # in a class
1613 1613 bdb.Breakpoint.next = 1
1614 1614 bdb.Breakpoint.bplist = {}
1615 1615 bdb.Breakpoint.bpbynumber = [None]
1616 1616 # Set an initial breakpoint to stop execution
1617 1617 maxtries = 10
1618 1618 bp = int(opts.get('b',[1])[0])
1619 1619 checkline = deb.checkline(filename,bp)
1620 1620 if not checkline:
1621 1621 for bp in range(bp+1,bp+maxtries+1):
1622 1622 if deb.checkline(filename,bp):
1623 1623 break
1624 1624 else:
1625 1625 msg = ("\nI failed to find a valid line to set "
1626 1626 "a breakpoint\n"
1627 1627 "after trying up to line: %s.\n"
1628 1628 "Please set a valid breakpoint manually "
1629 1629 "with the -b option." % bp)
1630 1630 error(msg)
1631 1631 return
1632 1632 # if we find a good linenumber, set the breakpoint
1633 1633 deb.do_break('%s:%s' % (filename,bp))
1634 1634 # Start file run
1635 1635 print "NOTE: Enter 'c' at the",
1636 1636 print "%s prompt to start your script." % deb.prompt
1637 1637 try:
1638 1638 deb.run('execfile("%s")' % filename,prog_ns)
1639 1639
1640 1640 except:
1641 1641 etype, value, tb = sys.exc_info()
1642 1642 # Skip three frames in the traceback: the %run one,
1643 1643 # one inside bdb.py, and the command-line typed by the
1644 1644 # user (run by exec in pdb itself).
1645 1645 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1646 1646 else:
1647 1647 if runner is None:
1648 1648 runner = self.shell.safe_execfile
1649 1649 if opts.has_key('t'):
1650 1650 # timed execution
1651 1651 try:
1652 1652 nruns = int(opts['N'][0])
1653 1653 if nruns < 1:
1654 1654 error('Number of runs must be >=1')
1655 1655 return
1656 1656 except (KeyError):
1657 1657 nruns = 1
1658 1658 if nruns == 1:
1659 1659 t0 = clock2()
1660 1660 runner(filename,prog_ns,prog_ns,
1661 1661 exit_ignore=exit_ignore)
1662 1662 t1 = clock2()
1663 1663 t_usr = t1[0]-t0[0]
1664 1664 t_sys = t1[1]-t1[1]
1665 1665 print "\nIPython CPU timings (estimated):"
1666 1666 print " User : %10s s." % t_usr
1667 1667 print " System: %10s s." % t_sys
1668 1668 else:
1669 1669 runs = range(nruns)
1670 1670 t0 = clock2()
1671 1671 for nr in runs:
1672 1672 runner(filename,prog_ns,prog_ns,
1673 1673 exit_ignore=exit_ignore)
1674 1674 t1 = clock2()
1675 1675 t_usr = t1[0]-t0[0]
1676 1676 t_sys = t1[1]-t1[1]
1677 1677 print "\nIPython CPU timings (estimated):"
1678 1678 print "Total runs performed:",nruns
1679 1679 print " Times : %10s %10s" % ('Total','Per run')
1680 1680 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1681 1681 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1682 1682
1683 1683 else:
1684 1684 # regular execution
1685 1685 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1686 1686 if opts.has_key('i'):
1687 1687 self.shell.user_ns['__name__'] = __name__save
1688 1688 else:
1689 1689 # update IPython interactive namespace
1690 1690 del prog_ns['__name__']
1691 1691 self.shell.user_ns.update(prog_ns)
1692 1692 finally:
1693 1693 # Ensure key global structures are restored
1694 1694 sys.argv = save_argv
1695 1695 if restore_main:
1696 1696 sys.modules['__main__'] = restore_main
1697 1697 else:
1698 1698 # Remove from sys.modules the reference to main_mod we'd
1699 1699 # added. Otherwise it will trap references to objects
1700 1700 # contained therein.
1701 1701 del sys.modules[main_mod_name]
1702 1702 self.shell.reloadhist()
1703 1703
1704 1704 return stats
1705 1705
1706 1706 def magic_runlog(self, parameter_s =''):
1707 1707 """Run files as logs.
1708 1708
1709 1709 Usage:\\
1710 1710 %runlog file1 file2 ...
1711 1711
1712 1712 Run the named files (treating them as log files) in sequence inside
1713 1713 the interpreter, and return to the prompt. This is much slower than
1714 1714 %run because each line is executed in a try/except block, but it
1715 1715 allows running files with syntax errors in them.
1716 1716
1717 1717 Normally IPython will guess when a file is one of its own logfiles, so
1718 1718 you can typically use %run even for logs. This shorthand allows you to
1719 1719 force any file to be treated as a log file."""
1720 1720
1721 1721 for f in parameter_s.split():
1722 1722 self.shell.safe_execfile(f,self.shell.user_ns,
1723 1723 self.shell.user_ns,islog=1)
1724 1724
1725 1725 @testdec.skip_doctest
1726 1726 def magic_timeit(self, parameter_s =''):
1727 1727 """Time execution of a Python statement or expression
1728 1728
1729 1729 Usage:\\
1730 1730 %timeit [-n<N> -r<R> [-t|-c]] statement
1731 1731
1732 1732 Time execution of a Python statement or expression using the timeit
1733 1733 module.
1734 1734
1735 1735 Options:
1736 1736 -n<N>: execute the given statement <N> times in a loop. If this value
1737 1737 is not given, a fitting value is chosen.
1738 1738
1739 1739 -r<R>: repeat the loop iteration <R> times and take the best result.
1740 1740 Default: 3
1741 1741
1742 1742 -t: use time.time to measure the time, which is the default on Unix.
1743 1743 This function measures wall time.
1744 1744
1745 1745 -c: use time.clock to measure the time, which is the default on
1746 1746 Windows and measures wall time. On Unix, resource.getrusage is used
1747 1747 instead and returns the CPU user time.
1748 1748
1749 1749 -p<P>: use a precision of <P> digits to display the timing result.
1750 1750 Default: 3
1751 1751
1752 1752
1753 1753 Examples:
1754 1754
1755 1755 In [1]: %timeit pass
1756 1756 10000000 loops, best of 3: 53.3 ns per loop
1757 1757
1758 1758 In [2]: u = None
1759 1759
1760 1760 In [3]: %timeit u is None
1761 1761 10000000 loops, best of 3: 184 ns per loop
1762 1762
1763 1763 In [4]: %timeit -r 4 u == None
1764 1764 1000000 loops, best of 4: 242 ns per loop
1765 1765
1766 1766 In [5]: import time
1767 1767
1768 1768 In [6]: %timeit -n1 time.sleep(2)
1769 1769 1 loops, best of 3: 2 s per loop
1770 1770
1771 1771
1772 1772 The times reported by %timeit will be slightly higher than those
1773 1773 reported by the timeit.py script when variables are accessed. This is
1774 1774 due to the fact that %timeit executes the statement in the namespace
1775 1775 of the shell, compared with timeit.py, which uses a single setup
1776 1776 statement to import function or create variables. Generally, the bias
1777 1777 does not matter as long as results from timeit.py are not mixed with
1778 1778 those from %timeit."""
1779 1779
1780 1780 import timeit
1781 1781 import math
1782 1782
1783 1783 units = [u"s", u"ms", u"\xb5s", u"ns"]
1784 1784 scaling = [1, 1e3, 1e6, 1e9]
1785 1785
1786 1786 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1787 1787 posix=False)
1788 1788 if stmt == "":
1789 1789 return
1790 1790 timefunc = timeit.default_timer
1791 1791 number = int(getattr(opts, "n", 0))
1792 1792 repeat = int(getattr(opts, "r", timeit.default_repeat))
1793 1793 precision = int(getattr(opts, "p", 3))
1794 1794 if hasattr(opts, "t"):
1795 1795 timefunc = time.time
1796 1796 if hasattr(opts, "c"):
1797 1797 timefunc = clock
1798 1798
1799 1799 timer = timeit.Timer(timer=timefunc)
1800 1800 # this code has tight coupling to the inner workings of timeit.Timer,
1801 1801 # but is there a better way to achieve that the code stmt has access
1802 1802 # to the shell namespace?
1803 1803
1804 1804 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1805 1805 'setup': "pass"}
1806 1806 # Track compilation time so it can be reported if too long
1807 1807 # Minimum time above which compilation time will be reported
1808 1808 tc_min = 0.1
1809 1809
1810 1810 t0 = clock()
1811 1811 code = compile(src, "<magic-timeit>", "exec")
1812 1812 tc = clock()-t0
1813 1813
1814 1814 ns = {}
1815 1815 exec code in self.shell.user_ns, ns
1816 1816 timer.inner = ns["inner"]
1817 1817
1818 1818 if number == 0:
1819 1819 # determine number so that 0.2 <= total time < 2.0
1820 1820 number = 1
1821 1821 for i in range(1, 10):
1822 1822 number *= 10
1823 1823 if timer.timeit(number) >= 0.2:
1824 1824 break
1825 1825
1826 1826 best = min(timer.repeat(repeat, number)) / number
1827 1827
1828 1828 if best > 0.0:
1829 1829 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1830 1830 else:
1831 1831 order = 3
1832 1832 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1833 1833 precision,
1834 1834 best * scaling[order],
1835 1835 units[order])
1836 1836 if tc > tc_min:
1837 1837 print "Compiler time: %.2f s" % tc
1838 1838
1839 1839 @testdec.skip_doctest
1840 1840 def magic_time(self,parameter_s = ''):
1841 1841 """Time execution of a Python statement or expression.
1842 1842
1843 1843 The CPU and wall clock times are printed, and the value of the
1844 1844 expression (if any) is returned. Note that under Win32, system time
1845 1845 is always reported as 0, since it can not be measured.
1846 1846
1847 1847 This function provides very basic timing functionality. In Python
1848 1848 2.3, the timeit module offers more control and sophistication, so this
1849 1849 could be rewritten to use it (patches welcome).
1850 1850
1851 1851 Some examples:
1852 1852
1853 1853 In [1]: time 2**128
1854 1854 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1855 1855 Wall time: 0.00
1856 1856 Out[1]: 340282366920938463463374607431768211456L
1857 1857
1858 1858 In [2]: n = 1000000
1859 1859
1860 1860 In [3]: time sum(range(n))
1861 1861 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1862 1862 Wall time: 1.37
1863 1863 Out[3]: 499999500000L
1864 1864
1865 1865 In [4]: time print 'hello world'
1866 1866 hello world
1867 1867 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1868 1868 Wall time: 0.00
1869 1869
1870 1870 Note that the time needed by Python to compile the given expression
1871 1871 will be reported if it is more than 0.1s. In this example, the
1872 1872 actual exponentiation is done by Python at compilation time, so while
1873 1873 the expression can take a noticeable amount of time to compute, that
1874 1874 time is purely due to the compilation:
1875 1875
1876 1876 In [5]: time 3**9999;
1877 1877 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1878 1878 Wall time: 0.00 s
1879 1879
1880 1880 In [6]: time 3**999999;
1881 1881 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1882 1882 Wall time: 0.00 s
1883 1883 Compiler : 0.78 s
1884 1884 """
1885 1885
1886 1886 # fail immediately if the given expression can't be compiled
1887 1887
1888 1888 expr = self.shell.prefilter(parameter_s,False)
1889 1889
1890 1890 # Minimum time above which compilation time will be reported
1891 1891 tc_min = 0.1
1892 1892
1893 1893 try:
1894 1894 mode = 'eval'
1895 1895 t0 = clock()
1896 1896 code = compile(expr,'<timed eval>',mode)
1897 1897 tc = clock()-t0
1898 1898 except SyntaxError:
1899 1899 mode = 'exec'
1900 1900 t0 = clock()
1901 1901 code = compile(expr,'<timed exec>',mode)
1902 1902 tc = clock()-t0
1903 1903 # skew measurement as little as possible
1904 1904 glob = self.shell.user_ns
1905 1905 clk = clock2
1906 1906 wtime = time.time
1907 1907 # time execution
1908 1908 wall_st = wtime()
1909 1909 if mode=='eval':
1910 1910 st = clk()
1911 1911 out = eval(code,glob)
1912 1912 end = clk()
1913 1913 else:
1914 1914 st = clk()
1915 1915 exec code in glob
1916 1916 end = clk()
1917 1917 out = None
1918 1918 wall_end = wtime()
1919 1919 # Compute actual times and report
1920 1920 wall_time = wall_end-wall_st
1921 1921 cpu_user = end[0]-st[0]
1922 1922 cpu_sys = end[1]-st[1]
1923 1923 cpu_tot = cpu_user+cpu_sys
1924 1924 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1925 1925 (cpu_user,cpu_sys,cpu_tot)
1926 1926 print "Wall time: %.2f s" % wall_time
1927 1927 if tc > tc_min:
1928 1928 print "Compiler : %.2f s" % tc
1929 1929 return out
1930 1930
1931 1931 @testdec.skip_doctest
1932 1932 def magic_macro(self,parameter_s = ''):
1933 1933 """Define a set of input lines as a macro for future re-execution.
1934 1934
1935 1935 Usage:\\
1936 1936 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1937 1937
1938 1938 Options:
1939 1939
1940 1940 -r: use 'raw' input. By default, the 'processed' history is used,
1941 1941 so that magics are loaded in their transformed version to valid
1942 1942 Python. If this option is given, the raw input as typed as the
1943 1943 command line is used instead.
1944 1944
1945 1945 This will define a global variable called `name` which is a string
1946 1946 made of joining the slices and lines you specify (n1,n2,... numbers
1947 1947 above) from your input history into a single string. This variable
1948 1948 acts like an automatic function which re-executes those lines as if
1949 1949 you had typed them. You just type 'name' at the prompt and the code
1950 1950 executes.
1951 1951
1952 1952 The notation for indicating number ranges is: n1-n2 means 'use line
1953 1953 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1954 1954 using the lines numbered 5,6 and 7.
1955 1955
1956 1956 Note: as a 'hidden' feature, you can also use traditional python slice
1957 1957 notation, where N:M means numbers N through M-1.
1958 1958
1959 1959 For example, if your history contains (%hist prints it):
1960 1960
1961 1961 44: x=1
1962 1962 45: y=3
1963 1963 46: z=x+y
1964 1964 47: print x
1965 1965 48: a=5
1966 1966 49: print 'x',x,'y',y
1967 1967
1968 1968 you can create a macro with lines 44 through 47 (included) and line 49
1969 1969 called my_macro with:
1970 1970
1971 1971 In [55]: %macro my_macro 44-47 49
1972 1972
1973 1973 Now, typing `my_macro` (without quotes) will re-execute all this code
1974 1974 in one pass.
1975 1975
1976 1976 You don't need to give the line-numbers in order, and any given line
1977 1977 number can appear multiple times. You can assemble macros with any
1978 1978 lines from your input history in any order.
1979 1979
1980 1980 The macro is a simple object which holds its value in an attribute,
1981 1981 but IPython's display system checks for macros and executes them as
1982 1982 code instead of printing them when you type their name.
1983 1983
1984 1984 You can view a macro's contents by explicitly printing it with:
1985 1985
1986 1986 'print macro_name'.
1987 1987
1988 1988 For one-off cases which DON'T contain magic function calls in them you
1989 1989 can obtain similar results by explicitly executing slices from your
1990 1990 input history with:
1991 1991
1992 1992 In [60]: exec In[44:48]+In[49]"""
1993 1993
1994 1994 opts,args = self.parse_options(parameter_s,'r',mode='list')
1995 1995 if not args:
1996 1996 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
1997 1997 macs.sort()
1998 1998 return macs
1999 1999 if len(args) == 1:
2000 2000 raise UsageError(
2001 2001 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2002 2002 name,ranges = args[0], args[1:]
2003 2003
2004 2004 #print 'rng',ranges # dbg
2005 2005 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2006 2006 macro = Macro(lines)
2007 2007 self.shell.user_ns.update({name:macro})
2008 2008 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2009 2009 print 'Macro contents:'
2010 2010 print macro,
2011 2011
2012 2012 def magic_save(self,parameter_s = ''):
2013 2013 """Save a set of lines to a given filename.
2014 2014
2015 2015 Usage:\\
2016 2016 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2017 2017
2018 2018 Options:
2019 2019
2020 2020 -r: use 'raw' input. By default, the 'processed' history is used,
2021 2021 so that magics are loaded in their transformed version to valid
2022 2022 Python. If this option is given, the raw input as typed as the
2023 2023 command line is used instead.
2024 2024
2025 2025 This function uses the same syntax as %macro for line extraction, but
2026 2026 instead of creating a macro it saves the resulting string to the
2027 2027 filename you specify.
2028 2028
2029 2029 It adds a '.py' extension to the file if you don't do so yourself, and
2030 2030 it asks for confirmation before overwriting existing files."""
2031 2031
2032 2032 opts,args = self.parse_options(parameter_s,'r',mode='list')
2033 2033 fname,ranges = args[0], args[1:]
2034 2034 if not fname.endswith('.py'):
2035 2035 fname += '.py'
2036 2036 if os.path.isfile(fname):
2037 2037 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2038 2038 if ans.lower() not in ['y','yes']:
2039 2039 print 'Operation cancelled.'
2040 2040 return
2041 2041 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2042 2042 f = file(fname,'w')
2043 2043 f.write(cmds)
2044 2044 f.close()
2045 2045 print 'The following commands were written to file `%s`:' % fname
2046 2046 print cmds
2047 2047
2048 2048 def _edit_macro(self,mname,macro):
2049 2049 """open an editor with the macro data in a file"""
2050 2050 filename = self.shell.mktempfile(macro.value)
2051 2051 self.shell.hooks.editor(filename)
2052 2052
2053 2053 # and make a new macro object, to replace the old one
2054 2054 mfile = open(filename)
2055 2055 mvalue = mfile.read()
2056 2056 mfile.close()
2057 2057 self.shell.user_ns[mname] = Macro(mvalue)
2058 2058
2059 2059 def magic_ed(self,parameter_s=''):
2060 2060 """Alias to %edit."""
2061 2061 return self.magic_edit(parameter_s)
2062 2062
2063 2063 @testdec.skip_doctest
2064 2064 def magic_edit(self,parameter_s='',last_call=['','']):
2065 2065 """Bring up an editor and execute the resulting code.
2066 2066
2067 2067 Usage:
2068 2068 %edit [options] [args]
2069 2069
2070 2070 %edit runs IPython's editor hook. The default version of this hook is
2071 2071 set to call the __IPYTHON__.rc.editor command. This is read from your
2072 2072 environment variable $EDITOR. If this isn't found, it will default to
2073 2073 vi under Linux/Unix and to notepad under Windows. See the end of this
2074 2074 docstring for how to change the editor hook.
2075 2075
2076 2076 You can also set the value of this editor via the command line option
2077 2077 '-editor' or in your ipythonrc file. This is useful if you wish to use
2078 2078 specifically for IPython an editor different from your typical default
2079 2079 (and for Windows users who typically don't set environment variables).
2080 2080
2081 2081 This command allows you to conveniently edit multi-line code right in
2082 2082 your IPython session.
2083 2083
2084 2084 If called without arguments, %edit opens up an empty editor with a
2085 2085 temporary file and will execute the contents of this file when you
2086 2086 close it (don't forget to save it!).
2087 2087
2088 2088
2089 2089 Options:
2090 2090
2091 2091 -n <number>: open the editor at a specified line number. By default,
2092 2092 the IPython editor hook uses the unix syntax 'editor +N filename', but
2093 2093 you can configure this by providing your own modified hook if your
2094 2094 favorite editor supports line-number specifications with a different
2095 2095 syntax.
2096 2096
2097 2097 -p: this will call the editor with the same data as the previous time
2098 2098 it was used, regardless of how long ago (in your current session) it
2099 2099 was.
2100 2100
2101 2101 -r: use 'raw' input. This option only applies to input taken from the
2102 2102 user's history. By default, the 'processed' history is used, so that
2103 2103 magics are loaded in their transformed version to valid Python. If
2104 2104 this option is given, the raw input as typed as the command line is
2105 2105 used instead. When you exit the editor, it will be executed by
2106 2106 IPython's own processor.
2107 2107
2108 2108 -x: do not execute the edited code immediately upon exit. This is
2109 2109 mainly useful if you are editing programs which need to be called with
2110 2110 command line arguments, which you can then do using %run.
2111 2111
2112 2112
2113 2113 Arguments:
2114 2114
2115 2115 If arguments are given, the following possibilites exist:
2116 2116
2117 2117 - The arguments are numbers or pairs of colon-separated numbers (like
2118 2118 1 4:8 9). These are interpreted as lines of previous input to be
2119 2119 loaded into the editor. The syntax is the same of the %macro command.
2120 2120
2121 2121 - If the argument doesn't start with a number, it is evaluated as a
2122 2122 variable and its contents loaded into the editor. You can thus edit
2123 2123 any string which contains python code (including the result of
2124 2124 previous edits).
2125 2125
2126 2126 - If the argument is the name of an object (other than a string),
2127 2127 IPython will try to locate the file where it was defined and open the
2128 2128 editor at the point where it is defined. You can use `%edit function`
2129 2129 to load an editor exactly at the point where 'function' is defined,
2130 2130 edit it and have the file be executed automatically.
2131 2131
2132 2132 If the object is a macro (see %macro for details), this opens up your
2133 2133 specified editor with a temporary file containing the macro's data.
2134 2134 Upon exit, the macro is reloaded with the contents of the file.
2135 2135
2136 2136 Note: opening at an exact line is only supported under Unix, and some
2137 2137 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2138 2138 '+NUMBER' parameter necessary for this feature. Good editors like
2139 2139 (X)Emacs, vi, jed, pico and joe all do.
2140 2140
2141 2141 - If the argument is not found as a variable, IPython will look for a
2142 2142 file with that name (adding .py if necessary) and load it into the
2143 2143 editor. It will execute its contents with execfile() when you exit,
2144 2144 loading any code in the file into your interactive namespace.
2145 2145
2146 2146 After executing your code, %edit will return as output the code you
2147 2147 typed in the editor (except when it was an existing file). This way
2148 2148 you can reload the code in further invocations of %edit as a variable,
2149 2149 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2150 2150 the output.
2151 2151
2152 2152 Note that %edit is also available through the alias %ed.
2153 2153
2154 2154 This is an example of creating a simple function inside the editor and
2155 2155 then modifying it. First, start up the editor:
2156 2156
2157 2157 In [1]: ed
2158 2158 Editing... done. Executing edited code...
2159 2159 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2160 2160
2161 2161 We can then call the function foo():
2162 2162
2163 2163 In [2]: foo()
2164 2164 foo() was defined in an editing session
2165 2165
2166 2166 Now we edit foo. IPython automatically loads the editor with the
2167 2167 (temporary) file where foo() was previously defined:
2168 2168
2169 2169 In [3]: ed foo
2170 2170 Editing... done. Executing edited code...
2171 2171
2172 2172 And if we call foo() again we get the modified version:
2173 2173
2174 2174 In [4]: foo()
2175 2175 foo() has now been changed!
2176 2176
2177 2177 Here is an example of how to edit a code snippet successive
2178 2178 times. First we call the editor:
2179 2179
2180 2180 In [5]: ed
2181 2181 Editing... done. Executing edited code...
2182 2182 hello
2183 2183 Out[5]: "print 'hello'n"
2184 2184
2185 2185 Now we call it again with the previous output (stored in _):
2186 2186
2187 2187 In [6]: ed _
2188 2188 Editing... done. Executing edited code...
2189 2189 hello world
2190 2190 Out[6]: "print 'hello world'n"
2191 2191
2192 2192 Now we call it with the output #8 (stored in _8, also as Out[8]):
2193 2193
2194 2194 In [7]: ed _8
2195 2195 Editing... done. Executing edited code...
2196 2196 hello again
2197 2197 Out[7]: "print 'hello again'n"
2198 2198
2199 2199
2200 2200 Changing the default editor hook:
2201 2201
2202 2202 If you wish to write your own editor hook, you can put it in a
2203 2203 configuration file which you load at startup time. The default hook
2204 2204 is defined in the IPython.hooks module, and you can use that as a
2205 2205 starting example for further modifications. That file also has
2206 2206 general instructions on how to set a new hook for use once you've
2207 2207 defined it."""
2208 2208
2209 2209 # FIXME: This function has become a convoluted mess. It needs a
2210 2210 # ground-up rewrite with clean, simple logic.
2211 2211
2212 2212 def make_filename(arg):
2213 2213 "Make a filename from the given args"
2214 2214 try:
2215 2215 filename = get_py_filename(arg)
2216 2216 except IOError:
2217 2217 if args.endswith('.py'):
2218 2218 filename = arg
2219 2219 else:
2220 2220 filename = None
2221 2221 return filename
2222 2222
2223 2223 # custom exceptions
2224 2224 class DataIsObject(Exception): pass
2225 2225
2226 2226 opts,args = self.parse_options(parameter_s,'prxn:')
2227 2227 # Set a few locals from the options for convenience:
2228 2228 opts_p = opts.has_key('p')
2229 2229 opts_r = opts.has_key('r')
2230 2230
2231 2231 # Default line number value
2232 2232 lineno = opts.get('n',None)
2233 2233
2234 2234 if opts_p:
2235 2235 args = '_%s' % last_call[0]
2236 2236 if not self.shell.user_ns.has_key(args):
2237 2237 args = last_call[1]
2238 2238
2239 2239 # use last_call to remember the state of the previous call, but don't
2240 2240 # let it be clobbered by successive '-p' calls.
2241 2241 try:
2242 2242 last_call[0] = self.shell.outputcache.prompt_count
2243 2243 if not opts_p:
2244 2244 last_call[1] = parameter_s
2245 2245 except:
2246 2246 pass
2247 2247
2248 2248 # by default this is done with temp files, except when the given
2249 2249 # arg is a filename
2250 2250 use_temp = 1
2251 2251
2252 2252 if re.match(r'\d',args):
2253 2253 # Mode where user specifies ranges of lines, like in %macro.
2254 2254 # This means that you can't edit files whose names begin with
2255 2255 # numbers this way. Tough.
2256 2256 ranges = args.split()
2257 2257 data = ''.join(self.extract_input_slices(ranges,opts_r))
2258 2258 elif args.endswith('.py'):
2259 2259 filename = make_filename(args)
2260 2260 data = ''
2261 2261 use_temp = 0
2262 2262 elif args:
2263 2263 try:
2264 2264 # Load the parameter given as a variable. If not a string,
2265 2265 # process it as an object instead (below)
2266 2266
2267 2267 #print '*** args',args,'type',type(args) # dbg
2268 2268 data = eval(args,self.shell.user_ns)
2269 2269 if not type(data) in StringTypes:
2270 2270 raise DataIsObject
2271 2271
2272 2272 except (NameError,SyntaxError):
2273 2273 # given argument is not a variable, try as a filename
2274 2274 filename = make_filename(args)
2275 2275 if filename is None:
2276 2276 warn("Argument given (%s) can't be found as a variable "
2277 2277 "or as a filename." % args)
2278 2278 return
2279 2279
2280 2280 data = ''
2281 2281 use_temp = 0
2282 2282 except DataIsObject:
2283 2283
2284 2284 # macros have a special edit function
2285 2285 if isinstance(data,Macro):
2286 2286 self._edit_macro(args,data)
2287 2287 return
2288 2288
2289 2289 # For objects, try to edit the file where they are defined
2290 2290 try:
2291 2291 filename = inspect.getabsfile(data)
2292 2292 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2293 2293 # class created by %edit? Try to find source
2294 2294 # by looking for method definitions instead, the
2295 2295 # __module__ in those classes is FakeModule.
2296 2296 attrs = [getattr(data, aname) for aname in dir(data)]
2297 2297 for attr in attrs:
2298 2298 if not inspect.ismethod(attr):
2299 2299 continue
2300 2300 filename = inspect.getabsfile(attr)
2301 2301 if filename and 'fakemodule' not in filename.lower():
2302 2302 # change the attribute to be the edit target instead
2303 2303 data = attr
2304 2304 break
2305 2305
2306 2306 datafile = 1
2307 2307 except TypeError:
2308 2308 filename = make_filename(args)
2309 2309 datafile = 1
2310 2310 warn('Could not find file where `%s` is defined.\n'
2311 2311 'Opening a file named `%s`' % (args,filename))
2312 2312 # Now, make sure we can actually read the source (if it was in
2313 2313 # a temp file it's gone by now).
2314 2314 if datafile:
2315 2315 try:
2316 2316 if lineno is None:
2317 2317 lineno = inspect.getsourcelines(data)[1]
2318 2318 except IOError:
2319 2319 filename = make_filename(args)
2320 2320 if filename is None:
2321 2321 warn('The file `%s` where `%s` was defined cannot '
2322 2322 'be read.' % (filename,data))
2323 2323 return
2324 2324 use_temp = 0
2325 2325 else:
2326 2326 data = ''
2327 2327
2328 2328 if use_temp:
2329 2329 filename = self.shell.mktempfile(data)
2330 2330 print 'IPython will make a temporary file named:',filename
2331 2331
2332 2332 # do actual editing here
2333 2333 print 'Editing...',
2334 2334 sys.stdout.flush()
2335 self.shell.hooks.editor(filename,lineno)
2335 try:
2336 self.shell.hooks.editor(filename,lineno)
2337 except IPython.ipapi.TryNext:
2338 warn('Could not open editor')
2339 return
2336 2340
2337 2341 # XXX TODO: should this be generalized for all string vars?
2338 2342 # For now, this is special-cased to blocks created by cpaste
2339 2343 if args.strip() == 'pasted_block':
2340 2344 self.shell.user_ns['pasted_block'] = file_read(filename)
2341 2345
2342 2346 if opts.has_key('x'): # -x prevents actual execution
2343 2347 print
2344 2348 else:
2345 2349 print 'done. Executing edited code...'
2346 2350 if opts_r:
2347 2351 self.shell.runlines(file_read(filename))
2348 2352 else:
2349 2353 self.shell.safe_execfile(filename,self.shell.user_ns,
2350 2354 self.shell.user_ns)
2351 2355
2352 2356
2353 2357 if use_temp:
2354 2358 try:
2355 2359 return open(filename).read()
2356 2360 except IOError,msg:
2357 2361 if msg.filename == filename:
2358 2362 warn('File not found. Did you forget to save?')
2359 2363 return
2360 2364 else:
2361 2365 self.shell.showtraceback()
2362 2366
2363 2367 def magic_xmode(self,parameter_s = ''):
2364 2368 """Switch modes for the exception handlers.
2365 2369
2366 2370 Valid modes: Plain, Context and Verbose.
2367 2371
2368 2372 If called without arguments, acts as a toggle."""
2369 2373
2370 2374 def xmode_switch_err(name):
2371 2375 warn('Error changing %s exception modes.\n%s' %
2372 2376 (name,sys.exc_info()[1]))
2373 2377
2374 2378 shell = self.shell
2375 2379 new_mode = parameter_s.strip().capitalize()
2376 2380 try:
2377 2381 shell.InteractiveTB.set_mode(mode=new_mode)
2378 2382 print 'Exception reporting mode:',shell.InteractiveTB.mode
2379 2383 except:
2380 2384 xmode_switch_err('user')
2381 2385
2382 2386 # threaded shells use a special handler in sys.excepthook
2383 2387 if shell.isthreaded:
2384 2388 try:
2385 2389 shell.sys_excepthook.set_mode(mode=new_mode)
2386 2390 except:
2387 2391 xmode_switch_err('threaded')
2388 2392
2389 2393 def magic_colors(self,parameter_s = ''):
2390 2394 """Switch color scheme for prompts, info system and exception handlers.
2391 2395
2392 2396 Currently implemented schemes: NoColor, Linux, LightBG.
2393 2397
2394 2398 Color scheme names are not case-sensitive."""
2395 2399
2396 2400 def color_switch_err(name):
2397 2401 warn('Error changing %s color schemes.\n%s' %
2398 2402 (name,sys.exc_info()[1]))
2399 2403
2400 2404
2401 2405 new_scheme = parameter_s.strip()
2402 2406 if not new_scheme:
2403 2407 raise UsageError(
2404 2408 "%colors: you must specify a color scheme. See '%colors?'")
2405 2409 return
2406 2410 # local shortcut
2407 2411 shell = self.shell
2408 2412
2409 2413 import IPython.rlineimpl as readline
2410 2414
2411 2415 if not readline.have_readline and sys.platform == "win32":
2412 2416 msg = """\
2413 2417 Proper color support under MS Windows requires the pyreadline library.
2414 2418 You can find it at:
2415 2419 http://ipython.scipy.org/moin/PyReadline/Intro
2416 2420 Gary's readline needs the ctypes module, from:
2417 2421 http://starship.python.net/crew/theller/ctypes
2418 2422 (Note that ctypes is already part of Python versions 2.5 and newer).
2419 2423
2420 2424 Defaulting color scheme to 'NoColor'"""
2421 2425 new_scheme = 'NoColor'
2422 2426 warn(msg)
2423 2427
2424 2428 # readline option is 0
2425 2429 if not shell.has_readline:
2426 2430 new_scheme = 'NoColor'
2427 2431
2428 2432 # Set prompt colors
2429 2433 try:
2430 2434 shell.outputcache.set_colors(new_scheme)
2431 2435 except:
2432 2436 color_switch_err('prompt')
2433 2437 else:
2434 2438 shell.rc.colors = \
2435 2439 shell.outputcache.color_table.active_scheme_name
2436 2440 # Set exception colors
2437 2441 try:
2438 2442 shell.InteractiveTB.set_colors(scheme = new_scheme)
2439 2443 shell.SyntaxTB.set_colors(scheme = new_scheme)
2440 2444 except:
2441 2445 color_switch_err('exception')
2442 2446
2443 2447 # threaded shells use a verbose traceback in sys.excepthook
2444 2448 if shell.isthreaded:
2445 2449 try:
2446 2450 shell.sys_excepthook.set_colors(scheme=new_scheme)
2447 2451 except:
2448 2452 color_switch_err('system exception handler')
2449 2453
2450 2454 # Set info (for 'object?') colors
2451 2455 if shell.rc.color_info:
2452 2456 try:
2453 2457 shell.inspector.set_active_scheme(new_scheme)
2454 2458 except:
2455 2459 color_switch_err('object inspector')
2456 2460 else:
2457 2461 shell.inspector.set_active_scheme('NoColor')
2458 2462
2459 2463 def magic_color_info(self,parameter_s = ''):
2460 2464 """Toggle color_info.
2461 2465
2462 2466 The color_info configuration parameter controls whether colors are
2463 2467 used for displaying object details (by things like %psource, %pfile or
2464 2468 the '?' system). This function toggles this value with each call.
2465 2469
2466 2470 Note that unless you have a fairly recent pager (less works better
2467 2471 than more) in your system, using colored object information displays
2468 2472 will not work properly. Test it and see."""
2469 2473
2470 2474 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2471 2475 self.magic_colors(self.shell.rc.colors)
2472 2476 print 'Object introspection functions have now coloring:',
2473 2477 print ['OFF','ON'][self.shell.rc.color_info]
2474 2478
2475 2479 def magic_Pprint(self, parameter_s=''):
2476 2480 """Toggle pretty printing on/off."""
2477 2481
2478 2482 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2479 2483 print 'Pretty printing has been turned', \
2480 2484 ['OFF','ON'][self.shell.rc.pprint]
2481 2485
2482 2486 def magic_exit(self, parameter_s=''):
2483 2487 """Exit IPython, confirming if configured to do so.
2484 2488
2485 2489 You can configure whether IPython asks for confirmation upon exit by
2486 2490 setting the confirm_exit flag in the ipythonrc file."""
2487 2491
2488 2492 self.shell.exit()
2489 2493
2490 2494 def magic_quit(self, parameter_s=''):
2491 2495 """Exit IPython, confirming if configured to do so (like %exit)"""
2492 2496
2493 2497 self.shell.exit()
2494 2498
2495 2499 def magic_Exit(self, parameter_s=''):
2496 2500 """Exit IPython without confirmation."""
2497 2501
2498 2502 self.shell.ask_exit()
2499 2503
2500 2504 #......................................................................
2501 2505 # Functions to implement unix shell-type things
2502 2506
2503 2507 @testdec.skip_doctest
2504 2508 def magic_alias(self, parameter_s = ''):
2505 2509 """Define an alias for a system command.
2506 2510
2507 2511 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2508 2512
2509 2513 Then, typing 'alias_name params' will execute the system command 'cmd
2510 2514 params' (from your underlying operating system).
2511 2515
2512 2516 Aliases have lower precedence than magic functions and Python normal
2513 2517 variables, so if 'foo' is both a Python variable and an alias, the
2514 2518 alias can not be executed until 'del foo' removes the Python variable.
2515 2519
2516 2520 You can use the %l specifier in an alias definition to represent the
2517 2521 whole line when the alias is called. For example:
2518 2522
2519 2523 In [2]: alias all echo "Input in brackets: <%l>"
2520 2524 In [3]: all hello world
2521 2525 Input in brackets: <hello world>
2522 2526
2523 2527 You can also define aliases with parameters using %s specifiers (one
2524 2528 per parameter):
2525 2529
2526 2530 In [1]: alias parts echo first %s second %s
2527 2531 In [2]: %parts A B
2528 2532 first A second B
2529 2533 In [3]: %parts A
2530 2534 Incorrect number of arguments: 2 expected.
2531 2535 parts is an alias to: 'echo first %s second %s'
2532 2536
2533 2537 Note that %l and %s are mutually exclusive. You can only use one or
2534 2538 the other in your aliases.
2535 2539
2536 2540 Aliases expand Python variables just like system calls using ! or !!
2537 2541 do: all expressions prefixed with '$' get expanded. For details of
2538 2542 the semantic rules, see PEP-215:
2539 2543 http://www.python.org/peps/pep-0215.html. This is the library used by
2540 2544 IPython for variable expansion. If you want to access a true shell
2541 2545 variable, an extra $ is necessary to prevent its expansion by IPython:
2542 2546
2543 2547 In [6]: alias show echo
2544 2548 In [7]: PATH='A Python string'
2545 2549 In [8]: show $PATH
2546 2550 A Python string
2547 2551 In [9]: show $$PATH
2548 2552 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2549 2553
2550 2554 You can use the alias facility to acess all of $PATH. See the %rehash
2551 2555 and %rehashx functions, which automatically create aliases for the
2552 2556 contents of your $PATH.
2553 2557
2554 2558 If called with no parameters, %alias prints the current alias table."""
2555 2559
2556 2560 par = parameter_s.strip()
2557 2561 if not par:
2558 2562 stored = self.db.get('stored_aliases', {} )
2559 2563 atab = self.shell.alias_table
2560 2564 aliases = atab.keys()
2561 2565 aliases.sort()
2562 2566 res = []
2563 2567 showlast = []
2564 2568 for alias in aliases:
2565 2569 special = False
2566 2570 try:
2567 2571 tgt = atab[alias][1]
2568 2572 except (TypeError, AttributeError):
2569 2573 # unsubscriptable? probably a callable
2570 2574 tgt = atab[alias]
2571 2575 special = True
2572 2576 # 'interesting' aliases
2573 2577 if (alias in stored or
2574 2578 special or
2575 2579 alias.lower() != os.path.splitext(tgt)[0].lower() or
2576 2580 ' ' in tgt):
2577 2581 showlast.append((alias, tgt))
2578 2582 else:
2579 2583 res.append((alias, tgt ))
2580 2584
2581 2585 # show most interesting aliases last
2582 2586 res.extend(showlast)
2583 2587 print "Total number of aliases:",len(aliases)
2584 2588 return res
2585 2589 try:
2586 2590 alias,cmd = par.split(None,1)
2587 2591 except:
2588 2592 print OInspect.getdoc(self.magic_alias)
2589 2593 else:
2590 2594 nargs = cmd.count('%s')
2591 2595 if nargs>0 and cmd.find('%l')>=0:
2592 2596 error('The %s and %l specifiers are mutually exclusive '
2593 2597 'in alias definitions.')
2594 2598 else: # all looks OK
2595 2599 self.shell.alias_table[alias] = (nargs,cmd)
2596 2600 self.shell.alias_table_validate(verbose=0)
2597 2601 # end magic_alias
2598 2602
2599 2603 def magic_unalias(self, parameter_s = ''):
2600 2604 """Remove an alias"""
2601 2605
2602 2606 aname = parameter_s.strip()
2603 2607 if aname in self.shell.alias_table:
2604 2608 del self.shell.alias_table[aname]
2605 2609 stored = self.db.get('stored_aliases', {} )
2606 2610 if aname in stored:
2607 2611 print "Removing %stored alias",aname
2608 2612 del stored[aname]
2609 2613 self.db['stored_aliases'] = stored
2610 2614
2611 2615
2612 2616 def magic_rehashx(self, parameter_s = ''):
2613 2617 """Update the alias table with all executable files in $PATH.
2614 2618
2615 2619 This version explicitly checks that every entry in $PATH is a file
2616 2620 with execute access (os.X_OK), so it is much slower than %rehash.
2617 2621
2618 2622 Under Windows, it checks executability as a match agains a
2619 2623 '|'-separated string of extensions, stored in the IPython config
2620 2624 variable win_exec_ext. This defaults to 'exe|com|bat'.
2621 2625
2622 2626 This function also resets the root module cache of module completer,
2623 2627 used on slow filesystems.
2624 2628 """
2625 2629
2626 2630
2627 2631 ip = self.api
2628 2632
2629 2633 # for the benefit of module completer in ipy_completers.py
2630 2634 del ip.db['rootmodules']
2631 2635
2632 2636 path = [os.path.abspath(os.path.expanduser(p)) for p in
2633 2637 os.environ.get('PATH','').split(os.pathsep)]
2634 2638 path = filter(os.path.isdir,path)
2635 2639
2636 2640 alias_table = self.shell.alias_table
2637 2641 syscmdlist = []
2638 2642 if os.name == 'posix':
2639 2643 isexec = lambda fname:os.path.isfile(fname) and \
2640 2644 os.access(fname,os.X_OK)
2641 2645 else:
2642 2646
2643 2647 try:
2644 2648 winext = os.environ['pathext'].replace(';','|').replace('.','')
2645 2649 except KeyError:
2646 2650 winext = 'exe|com|bat|py'
2647 2651 if 'py' not in winext:
2648 2652 winext += '|py'
2649 2653 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2650 2654 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2651 2655 savedir = os.getcwd()
2652 2656 try:
2653 2657 # write the whole loop for posix/Windows so we don't have an if in
2654 2658 # the innermost part
2655 2659 if os.name == 'posix':
2656 2660 for pdir in path:
2657 2661 os.chdir(pdir)
2658 2662 for ff in os.listdir(pdir):
2659 2663 if isexec(ff) and ff not in self.shell.no_alias:
2660 2664 # each entry in the alias table must be (N,name),
2661 2665 # where N is the number of positional arguments of the
2662 2666 # alias.
2663 2667 # Dots will be removed from alias names, since ipython
2664 2668 # assumes names with dots to be python code
2665 2669 alias_table[ff.replace('.','')] = (0,ff)
2666 2670 syscmdlist.append(ff)
2667 2671 else:
2668 2672 for pdir in path:
2669 2673 os.chdir(pdir)
2670 2674 for ff in os.listdir(pdir):
2671 2675 base, ext = os.path.splitext(ff)
2672 2676 if isexec(ff) and base.lower() not in self.shell.no_alias:
2673 2677 if ext.lower() == '.exe':
2674 2678 ff = base
2675 2679 alias_table[base.lower().replace('.','')] = (0,ff)
2676 2680 syscmdlist.append(ff)
2677 2681 # Make sure the alias table doesn't contain keywords or builtins
2678 2682 self.shell.alias_table_validate()
2679 2683 # Call again init_auto_alias() so we get 'rm -i' and other
2680 2684 # modified aliases since %rehashx will probably clobber them
2681 2685
2682 2686 # no, we don't want them. if %rehashx clobbers them, good,
2683 2687 # we'll probably get better versions
2684 2688 # self.shell.init_auto_alias()
2685 2689 db = ip.db
2686 2690 db['syscmdlist'] = syscmdlist
2687 2691 finally:
2688 2692 os.chdir(savedir)
2689 2693
2690 2694 def magic_pwd(self, parameter_s = ''):
2691 2695 """Return the current working directory path."""
2692 2696 return os.getcwd()
2693 2697
2694 2698 def magic_cd(self, parameter_s=''):
2695 2699 """Change the current working directory.
2696 2700
2697 2701 This command automatically maintains an internal list of directories
2698 2702 you visit during your IPython session, in the variable _dh. The
2699 2703 command %dhist shows this history nicely formatted. You can also
2700 2704 do 'cd -<tab>' to see directory history conveniently.
2701 2705
2702 2706 Usage:
2703 2707
2704 2708 cd 'dir': changes to directory 'dir'.
2705 2709
2706 2710 cd -: changes to the last visited directory.
2707 2711
2708 2712 cd -<n>: changes to the n-th directory in the directory history.
2709 2713
2710 2714 cd --foo: change to directory that matches 'foo' in history
2711 2715
2712 2716 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2713 2717 (note: cd <bookmark_name> is enough if there is no
2714 2718 directory <bookmark_name>, but a bookmark with the name exists.)
2715 2719 'cd -b <tab>' allows you to tab-complete bookmark names.
2716 2720
2717 2721 Options:
2718 2722
2719 2723 -q: quiet. Do not print the working directory after the cd command is
2720 2724 executed. By default IPython's cd command does print this directory,
2721 2725 since the default prompts do not display path information.
2722 2726
2723 2727 Note that !cd doesn't work for this purpose because the shell where
2724 2728 !command runs is immediately discarded after executing 'command'."""
2725 2729
2726 2730 parameter_s = parameter_s.strip()
2727 2731 #bkms = self.shell.persist.get("bookmarks",{})
2728 2732
2729 2733 oldcwd = os.getcwd()
2730 2734 numcd = re.match(r'(-)(\d+)$',parameter_s)
2731 2735 # jump in directory history by number
2732 2736 if numcd:
2733 2737 nn = int(numcd.group(2))
2734 2738 try:
2735 2739 ps = self.shell.user_ns['_dh'][nn]
2736 2740 except IndexError:
2737 2741 print 'The requested directory does not exist in history.'
2738 2742 return
2739 2743 else:
2740 2744 opts = {}
2741 2745 elif parameter_s.startswith('--'):
2742 2746 ps = None
2743 2747 fallback = None
2744 2748 pat = parameter_s[2:]
2745 2749 dh = self.shell.user_ns['_dh']
2746 2750 # first search only by basename (last component)
2747 2751 for ent in reversed(dh):
2748 2752 if pat in os.path.basename(ent) and os.path.isdir(ent):
2749 2753 ps = ent
2750 2754 break
2751 2755
2752 2756 if fallback is None and pat in ent and os.path.isdir(ent):
2753 2757 fallback = ent
2754 2758
2755 2759 # if we have no last part match, pick the first full path match
2756 2760 if ps is None:
2757 2761 ps = fallback
2758 2762
2759 2763 if ps is None:
2760 2764 print "No matching entry in directory history"
2761 2765 return
2762 2766 else:
2763 2767 opts = {}
2764 2768
2765 2769
2766 2770 else:
2767 2771 #turn all non-space-escaping backslashes to slashes,
2768 2772 # for c:\windows\directory\names\
2769 2773 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2770 2774 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2771 2775 # jump to previous
2772 2776 if ps == '-':
2773 2777 try:
2774 2778 ps = self.shell.user_ns['_dh'][-2]
2775 2779 except IndexError:
2776 2780 raise UsageError('%cd -: No previous directory to change to.')
2777 2781 # jump to bookmark if needed
2778 2782 else:
2779 2783 if not os.path.isdir(ps) or opts.has_key('b'):
2780 2784 bkms = self.db.get('bookmarks', {})
2781 2785
2782 2786 if bkms.has_key(ps):
2783 2787 target = bkms[ps]
2784 2788 print '(bookmark:%s) -> %s' % (ps,target)
2785 2789 ps = target
2786 2790 else:
2787 2791 if opts.has_key('b'):
2788 2792 raise UsageError("Bookmark '%s' not found. "
2789 2793 "Use '%%bookmark -l' to see your bookmarks." % ps)
2790 2794
2791 2795 # at this point ps should point to the target dir
2792 2796 if ps:
2793 2797 try:
2794 2798 os.chdir(os.path.expanduser(ps))
2795 2799 if self.shell.rc.term_title:
2796 2800 #print 'set term title:',self.shell.rc.term_title # dbg
2797 2801 platutils.set_term_title('IPy ' + abbrev_cwd())
2798 2802 except OSError:
2799 2803 print sys.exc_info()[1]
2800 2804 else:
2801 2805 cwd = os.getcwd()
2802 2806 dhist = self.shell.user_ns['_dh']
2803 2807 if oldcwd != cwd:
2804 2808 dhist.append(cwd)
2805 2809 self.db['dhist'] = compress_dhist(dhist)[-100:]
2806 2810
2807 2811 else:
2808 2812 os.chdir(self.shell.home_dir)
2809 2813 if self.shell.rc.term_title:
2810 2814 platutils.set_term_title("IPy ~")
2811 2815 cwd = os.getcwd()
2812 2816 dhist = self.shell.user_ns['_dh']
2813 2817
2814 2818 if oldcwd != cwd:
2815 2819 dhist.append(cwd)
2816 2820 self.db['dhist'] = compress_dhist(dhist)[-100:]
2817 2821 if not 'q' in opts and self.shell.user_ns['_dh']:
2818 2822 print self.shell.user_ns['_dh'][-1]
2819 2823
2820 2824
2821 2825 def magic_env(self, parameter_s=''):
2822 2826 """List environment variables."""
2823 2827
2824 2828 return os.environ.data
2825 2829
2826 2830 def magic_pushd(self, parameter_s=''):
2827 2831 """Place the current dir on stack and change directory.
2828 2832
2829 2833 Usage:\\
2830 2834 %pushd ['dirname']
2831 2835 """
2832 2836
2833 2837 dir_s = self.shell.dir_stack
2834 2838 tgt = os.path.expanduser(parameter_s)
2835 2839 cwd = os.getcwd().replace(self.home_dir,'~')
2836 2840 if tgt:
2837 2841 self.magic_cd(parameter_s)
2838 2842 dir_s.insert(0,cwd)
2839 2843 return self.magic_dirs()
2840 2844
2841 2845 def magic_popd(self, parameter_s=''):
2842 2846 """Change to directory popped off the top of the stack.
2843 2847 """
2844 2848 if not self.shell.dir_stack:
2845 2849 raise UsageError("%popd on empty stack")
2846 2850 top = self.shell.dir_stack.pop(0)
2847 2851 self.magic_cd(top)
2848 2852 print "popd ->",top
2849 2853
2850 2854 def magic_dirs(self, parameter_s=''):
2851 2855 """Return the current directory stack."""
2852 2856
2853 2857 return self.shell.dir_stack
2854 2858
2855 2859 def magic_dhist(self, parameter_s=''):
2856 2860 """Print your history of visited directories.
2857 2861
2858 2862 %dhist -> print full history\\
2859 2863 %dhist n -> print last n entries only\\
2860 2864 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2861 2865
2862 2866 This history is automatically maintained by the %cd command, and
2863 2867 always available as the global list variable _dh. You can use %cd -<n>
2864 2868 to go to directory number <n>.
2865 2869
2866 2870 Note that most of time, you should view directory history by entering
2867 2871 cd -<TAB>.
2868 2872
2869 2873 """
2870 2874
2871 2875 dh = self.shell.user_ns['_dh']
2872 2876 if parameter_s:
2873 2877 try:
2874 2878 args = map(int,parameter_s.split())
2875 2879 except:
2876 2880 self.arg_err(Magic.magic_dhist)
2877 2881 return
2878 2882 if len(args) == 1:
2879 2883 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2880 2884 elif len(args) == 2:
2881 2885 ini,fin = args
2882 2886 else:
2883 2887 self.arg_err(Magic.magic_dhist)
2884 2888 return
2885 2889 else:
2886 2890 ini,fin = 0,len(dh)
2887 2891 nlprint(dh,
2888 2892 header = 'Directory history (kept in _dh)',
2889 2893 start=ini,stop=fin)
2890 2894
2891 2895 @testdec.skip_doctest
2892 2896 def magic_sc(self, parameter_s=''):
2893 2897 """Shell capture - execute a shell command and capture its output.
2894 2898
2895 2899 DEPRECATED. Suboptimal, retained for backwards compatibility.
2896 2900
2897 2901 You should use the form 'var = !command' instead. Example:
2898 2902
2899 2903 "%sc -l myfiles = ls ~" should now be written as
2900 2904
2901 2905 "myfiles = !ls ~"
2902 2906
2903 2907 myfiles.s, myfiles.l and myfiles.n still apply as documented
2904 2908 below.
2905 2909
2906 2910 --
2907 2911 %sc [options] varname=command
2908 2912
2909 2913 IPython will run the given command using commands.getoutput(), and
2910 2914 will then update the user's interactive namespace with a variable
2911 2915 called varname, containing the value of the call. Your command can
2912 2916 contain shell wildcards, pipes, etc.
2913 2917
2914 2918 The '=' sign in the syntax is mandatory, and the variable name you
2915 2919 supply must follow Python's standard conventions for valid names.
2916 2920
2917 2921 (A special format without variable name exists for internal use)
2918 2922
2919 2923 Options:
2920 2924
2921 2925 -l: list output. Split the output on newlines into a list before
2922 2926 assigning it to the given variable. By default the output is stored
2923 2927 as a single string.
2924 2928
2925 2929 -v: verbose. Print the contents of the variable.
2926 2930
2927 2931 In most cases you should not need to split as a list, because the
2928 2932 returned value is a special type of string which can automatically
2929 2933 provide its contents either as a list (split on newlines) or as a
2930 2934 space-separated string. These are convenient, respectively, either
2931 2935 for sequential processing or to be passed to a shell command.
2932 2936
2933 2937 For example:
2934 2938
2935 2939 # all-random
2936 2940
2937 2941 # Capture into variable a
2938 2942 In [1]: sc a=ls *py
2939 2943
2940 2944 # a is a string with embedded newlines
2941 2945 In [2]: a
2942 2946 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2943 2947
2944 2948 # which can be seen as a list:
2945 2949 In [3]: a.l
2946 2950 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2947 2951
2948 2952 # or as a whitespace-separated string:
2949 2953 In [4]: a.s
2950 2954 Out[4]: 'setup.py win32_manual_post_install.py'
2951 2955
2952 2956 # a.s is useful to pass as a single command line:
2953 2957 In [5]: !wc -l $a.s
2954 2958 146 setup.py
2955 2959 130 win32_manual_post_install.py
2956 2960 276 total
2957 2961
2958 2962 # while the list form is useful to loop over:
2959 2963 In [6]: for f in a.l:
2960 2964 ...: !wc -l $f
2961 2965 ...:
2962 2966 146 setup.py
2963 2967 130 win32_manual_post_install.py
2964 2968
2965 2969 Similiarly, the lists returned by the -l option are also special, in
2966 2970 the sense that you can equally invoke the .s attribute on them to
2967 2971 automatically get a whitespace-separated string from their contents:
2968 2972
2969 2973 In [7]: sc -l b=ls *py
2970 2974
2971 2975 In [8]: b
2972 2976 Out[8]: ['setup.py', 'win32_manual_post_install.py']
2973 2977
2974 2978 In [9]: b.s
2975 2979 Out[9]: 'setup.py win32_manual_post_install.py'
2976 2980
2977 2981 In summary, both the lists and strings used for ouptut capture have
2978 2982 the following special attributes:
2979 2983
2980 2984 .l (or .list) : value as list.
2981 2985 .n (or .nlstr): value as newline-separated string.
2982 2986 .s (or .spstr): value as space-separated string.
2983 2987 """
2984 2988
2985 2989 opts,args = self.parse_options(parameter_s,'lv')
2986 2990 # Try to get a variable name and command to run
2987 2991 try:
2988 2992 # the variable name must be obtained from the parse_options
2989 2993 # output, which uses shlex.split to strip options out.
2990 2994 var,_ = args.split('=',1)
2991 2995 var = var.strip()
2992 2996 # But the the command has to be extracted from the original input
2993 2997 # parameter_s, not on what parse_options returns, to avoid the
2994 2998 # quote stripping which shlex.split performs on it.
2995 2999 _,cmd = parameter_s.split('=',1)
2996 3000 except ValueError:
2997 3001 var,cmd = '',''
2998 3002 # If all looks ok, proceed
2999 3003 out,err = self.shell.getoutputerror(cmd)
3000 3004 if err:
3001 3005 print >> Term.cerr,err
3002 3006 if opts.has_key('l'):
3003 3007 out = SList(out.split('\n'))
3004 3008 else:
3005 3009 out = LSString(out)
3006 3010 if opts.has_key('v'):
3007 3011 print '%s ==\n%s' % (var,pformat(out))
3008 3012 if var:
3009 3013 self.shell.user_ns.update({var:out})
3010 3014 else:
3011 3015 return out
3012 3016
3013 3017 def magic_sx(self, parameter_s=''):
3014 3018 """Shell execute - run a shell command and capture its output.
3015 3019
3016 3020 %sx command
3017 3021
3018 3022 IPython will run the given command using commands.getoutput(), and
3019 3023 return the result formatted as a list (split on '\\n'). Since the
3020 3024 output is _returned_, it will be stored in ipython's regular output
3021 3025 cache Out[N] and in the '_N' automatic variables.
3022 3026
3023 3027 Notes:
3024 3028
3025 3029 1) If an input line begins with '!!', then %sx is automatically
3026 3030 invoked. That is, while:
3027 3031 !ls
3028 3032 causes ipython to simply issue system('ls'), typing
3029 3033 !!ls
3030 3034 is a shorthand equivalent to:
3031 3035 %sx ls
3032 3036
3033 3037 2) %sx differs from %sc in that %sx automatically splits into a list,
3034 3038 like '%sc -l'. The reason for this is to make it as easy as possible
3035 3039 to process line-oriented shell output via further python commands.
3036 3040 %sc is meant to provide much finer control, but requires more
3037 3041 typing.
3038 3042
3039 3043 3) Just like %sc -l, this is a list with special attributes:
3040 3044
3041 3045 .l (or .list) : value as list.
3042 3046 .n (or .nlstr): value as newline-separated string.
3043 3047 .s (or .spstr): value as whitespace-separated string.
3044 3048
3045 3049 This is very useful when trying to use such lists as arguments to
3046 3050 system commands."""
3047 3051
3048 3052 if parameter_s:
3049 3053 out,err = self.shell.getoutputerror(parameter_s)
3050 3054 if err:
3051 3055 print >> Term.cerr,err
3052 3056 return SList(out.split('\n'))
3053 3057
3054 3058 def magic_bg(self, parameter_s=''):
3055 3059 """Run a job in the background, in a separate thread.
3056 3060
3057 3061 For example,
3058 3062
3059 3063 %bg myfunc(x,y,z=1)
3060 3064
3061 3065 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3062 3066 execution starts, a message will be printed indicating the job
3063 3067 number. If your job number is 5, you can use
3064 3068
3065 3069 myvar = jobs.result(5) or myvar = jobs[5].result
3066 3070
3067 3071 to assign this result to variable 'myvar'.
3068 3072
3069 3073 IPython has a job manager, accessible via the 'jobs' object. You can
3070 3074 type jobs? to get more information about it, and use jobs.<TAB> to see
3071 3075 its attributes. All attributes not starting with an underscore are
3072 3076 meant for public use.
3073 3077
3074 3078 In particular, look at the jobs.new() method, which is used to create
3075 3079 new jobs. This magic %bg function is just a convenience wrapper
3076 3080 around jobs.new(), for expression-based jobs. If you want to create a
3077 3081 new job with an explicit function object and arguments, you must call
3078 3082 jobs.new() directly.
3079 3083
3080 3084 The jobs.new docstring also describes in detail several important
3081 3085 caveats associated with a thread-based model for background job
3082 3086 execution. Type jobs.new? for details.
3083 3087
3084 3088 You can check the status of all jobs with jobs.status().
3085 3089
3086 3090 The jobs variable is set by IPython into the Python builtin namespace.
3087 3091 If you ever declare a variable named 'jobs', you will shadow this
3088 3092 name. You can either delete your global jobs variable to regain
3089 3093 access to the job manager, or make a new name and assign it manually
3090 3094 to the manager (stored in IPython's namespace). For example, to
3091 3095 assign the job manager to the Jobs name, use:
3092 3096
3093 3097 Jobs = __builtins__.jobs"""
3094 3098
3095 3099 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3096 3100
3097 3101 def magic_r(self, parameter_s=''):
3098 3102 """Repeat previous input.
3099 3103
3100 3104 Note: Consider using the more powerfull %rep instead!
3101 3105
3102 3106 If given an argument, repeats the previous command which starts with
3103 3107 the same string, otherwise it just repeats the previous input.
3104 3108
3105 3109 Shell escaped commands (with ! as first character) are not recognized
3106 3110 by this system, only pure python code and magic commands.
3107 3111 """
3108 3112
3109 3113 start = parameter_s.strip()
3110 3114 esc_magic = self.shell.ESC_MAGIC
3111 3115 # Identify magic commands even if automagic is on (which means
3112 3116 # the in-memory version is different from that typed by the user).
3113 3117 if self.shell.rc.automagic:
3114 3118 start_magic = esc_magic+start
3115 3119 else:
3116 3120 start_magic = start
3117 3121 # Look through the input history in reverse
3118 3122 for n in range(len(self.shell.input_hist)-2,0,-1):
3119 3123 input = self.shell.input_hist[n]
3120 3124 # skip plain 'r' lines so we don't recurse to infinity
3121 3125 if input != '_ip.magic("r")\n' and \
3122 3126 (input.startswith(start) or input.startswith(start_magic)):
3123 3127 #print 'match',`input` # dbg
3124 3128 print 'Executing:',input,
3125 3129 self.shell.runlines(input)
3126 3130 return
3127 3131 print 'No previous input matching `%s` found.' % start
3128 3132
3129 3133
3130 3134 def magic_bookmark(self, parameter_s=''):
3131 3135 """Manage IPython's bookmark system.
3132 3136
3133 3137 %bookmark <name> - set bookmark to current dir
3134 3138 %bookmark <name> <dir> - set bookmark to <dir>
3135 3139 %bookmark -l - list all bookmarks
3136 3140 %bookmark -d <name> - remove bookmark
3137 3141 %bookmark -r - remove all bookmarks
3138 3142
3139 3143 You can later on access a bookmarked folder with:
3140 3144 %cd -b <name>
3141 3145 or simply '%cd <name>' if there is no directory called <name> AND
3142 3146 there is such a bookmark defined.
3143 3147
3144 3148 Your bookmarks persist through IPython sessions, but they are
3145 3149 associated with each profile."""
3146 3150
3147 3151 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3148 3152 if len(args) > 2:
3149 3153 raise UsageError("%bookmark: too many arguments")
3150 3154
3151 3155 bkms = self.db.get('bookmarks',{})
3152 3156
3153 3157 if opts.has_key('d'):
3154 3158 try:
3155 3159 todel = args[0]
3156 3160 except IndexError:
3157 3161 raise UsageError(
3158 3162 "%bookmark -d: must provide a bookmark to delete")
3159 3163 else:
3160 3164 try:
3161 3165 del bkms[todel]
3162 3166 except KeyError:
3163 3167 raise UsageError(
3164 3168 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3165 3169
3166 3170 elif opts.has_key('r'):
3167 3171 bkms = {}
3168 3172 elif opts.has_key('l'):
3169 3173 bks = bkms.keys()
3170 3174 bks.sort()
3171 3175 if bks:
3172 3176 size = max(map(len,bks))
3173 3177 else:
3174 3178 size = 0
3175 3179 fmt = '%-'+str(size)+'s -> %s'
3176 3180 print 'Current bookmarks:'
3177 3181 for bk in bks:
3178 3182 print fmt % (bk,bkms[bk])
3179 3183 else:
3180 3184 if not args:
3181 3185 raise UsageError("%bookmark: You must specify the bookmark name")
3182 3186 elif len(args)==1:
3183 3187 bkms[args[0]] = os.getcwd()
3184 3188 elif len(args)==2:
3185 3189 bkms[args[0]] = args[1]
3186 3190 self.db['bookmarks'] = bkms
3187 3191
3188 3192 def magic_pycat(self, parameter_s=''):
3189 3193 """Show a syntax-highlighted file through a pager.
3190 3194
3191 3195 This magic is similar to the cat utility, but it will assume the file
3192 3196 to be Python source and will show it with syntax highlighting. """
3193 3197
3194 3198 try:
3195 3199 filename = get_py_filename(parameter_s)
3196 3200 cont = file_read(filename)
3197 3201 except IOError:
3198 3202 try:
3199 3203 cont = eval(parameter_s,self.user_ns)
3200 3204 except NameError:
3201 3205 cont = None
3202 3206 if cont is None:
3203 3207 print "Error: no such file or variable"
3204 3208 return
3205 3209
3206 3210 page(self.shell.pycolorize(cont),
3207 3211 screen_lines=self.shell.rc.screen_length)
3208 3212
3209 3213 def magic_cpaste(self, parameter_s=''):
3210 3214 """Allows you to paste & execute a pre-formatted code block from clipboard.
3211 3215
3212 3216 You must terminate the block with '--' (two minus-signs) alone on the
3213 3217 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3214 3218 is the new sentinel for this operation)
3215 3219
3216 3220 The block is dedented prior to execution to enable execution of method
3217 3221 definitions. '>' and '+' characters at the beginning of a line are
3218 3222 ignored, to allow pasting directly from e-mails, diff files and
3219 3223 doctests (the '...' continuation prompt is also stripped). The
3220 3224 executed block is also assigned to variable named 'pasted_block' for
3221 3225 later editing with '%edit pasted_block'.
3222 3226
3223 3227 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3224 3228 This assigns the pasted block to variable 'foo' as string, without
3225 3229 dedenting or executing it (preceding >>> and + is still stripped)
3226 3230
3227 3231 '%cpaste -r' re-executes the block previously entered by cpaste.
3228 3232
3229 3233 Do not be alarmed by garbled output on Windows (it's a readline bug).
3230 3234 Just press enter and type -- (and press enter again) and the block
3231 3235 will be what was just pasted.
3232 3236
3233 3237 IPython statements (magics, shell escapes) are not supported (yet).
3234 3238 """
3235 3239 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3236 3240 par = args.strip()
3237 3241 if opts.has_key('r'):
3238 3242 b = self.user_ns.get('pasted_block', None)
3239 3243 if b is None:
3240 3244 raise UsageError('No previous pasted block available')
3241 3245 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3242 3246 exec b in self.user_ns
3243 3247 return
3244 3248
3245 3249 sentinel = opts.get('s','--')
3246 3250
3247 3251 # Regular expressions that declare text we strip from the input:
3248 3252 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3249 3253 r'^\s*(\s?>)+', # Python input prompt
3250 3254 r'^\s*\.{3,}', # Continuation prompts
3251 3255 r'^\++',
3252 3256 ]
3253 3257
3254 3258 strip_from_start = map(re.compile,strip_re)
3255 3259
3256 3260 from IPython import iplib
3257 3261 lines = []
3258 3262 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3259 3263 while 1:
3260 3264 l = iplib.raw_input_original(':')
3261 3265 if l ==sentinel:
3262 3266 break
3263 3267
3264 3268 for pat in strip_from_start:
3265 3269 l = pat.sub('',l)
3266 3270 lines.append(l)
3267 3271
3268 3272 block = "\n".join(lines) + '\n'
3269 3273 #print "block:\n",block
3270 3274 if not par:
3271 3275 b = textwrap.dedent(block)
3272 3276 self.user_ns['pasted_block'] = b
3273 3277 exec b in self.user_ns
3274 3278 else:
3275 3279 self.user_ns[par] = SList(block.splitlines())
3276 3280 print "Block assigned to '%s'" % par
3277 3281
3278 3282 def magic_quickref(self,arg):
3279 3283 """ Show a quick reference sheet """
3280 3284 import IPython.usage
3281 3285 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3282 3286
3283 3287 page(qr)
3284 3288
3285 3289 def magic_upgrade(self,arg):
3286 3290 """ Upgrade your IPython installation
3287 3291
3288 3292 This will copy the config files that don't yet exist in your
3289 3293 ipython dir from the system config dir. Use this after upgrading
3290 3294 IPython if you don't wish to delete your .ipython dir.
3291 3295
3292 3296 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3293 3297 new users)
3294 3298
3295 3299 """
3296 3300 ip = self.getapi()
3297 3301 ipinstallation = path(IPython.__file__).dirname()
3298 3302 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3299 3303 src_config = ipinstallation / 'UserConfig'
3300 3304 userdir = path(ip.options.ipythondir)
3301 3305 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3302 3306 print ">",cmd
3303 3307 shell(cmd)
3304 3308 if arg == '-nolegacy':
3305 3309 legacy = userdir.files('ipythonrc*')
3306 3310 print "Nuking legacy files:",legacy
3307 3311
3308 3312 [p.remove() for p in legacy]
3309 3313 suffix = (sys.platform == 'win32' and '.ini' or '')
3310 3314 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3311 3315
3312 3316
3313 3317 def magic_doctest_mode(self,parameter_s=''):
3314 3318 """Toggle doctest mode on and off.
3315 3319
3316 3320 This mode allows you to toggle the prompt behavior between normal
3317 3321 IPython prompts and ones that are as similar to the default IPython
3318 3322 interpreter as possible.
3319 3323
3320 3324 It also supports the pasting of code snippets that have leading '>>>'
3321 3325 and '...' prompts in them. This means that you can paste doctests from
3322 3326 files or docstrings (even if they have leading whitespace), and the
3323 3327 code will execute correctly. You can then use '%history -tn' to see
3324 3328 the translated history without line numbers; this will give you the
3325 3329 input after removal of all the leading prompts and whitespace, which
3326 3330 can be pasted back into an editor.
3327 3331
3328 3332 With these features, you can switch into this mode easily whenever you
3329 3333 need to do testing and changes to doctests, without having to leave
3330 3334 your existing IPython session.
3331 3335 """
3332 3336
3333 3337 # XXX - Fix this to have cleaner activate/deactivate calls.
3334 3338 from IPython.Extensions import InterpreterPasteInput as ipaste
3335 3339 from IPython.ipstruct import Struct
3336 3340
3337 3341 # Shorthands
3338 3342 shell = self.shell
3339 3343 oc = shell.outputcache
3340 3344 rc = shell.rc
3341 3345 meta = shell.meta
3342 3346 # dstore is a data store kept in the instance metadata bag to track any
3343 3347 # changes we make, so we can undo them later.
3344 3348 dstore = meta.setdefault('doctest_mode',Struct())
3345 3349 save_dstore = dstore.setdefault
3346 3350
3347 3351 # save a few values we'll need to recover later
3348 3352 mode = save_dstore('mode',False)
3349 3353 save_dstore('rc_pprint',rc.pprint)
3350 3354 save_dstore('xmode',shell.InteractiveTB.mode)
3351 3355 save_dstore('rc_separate_out',rc.separate_out)
3352 3356 save_dstore('rc_separate_out2',rc.separate_out2)
3353 3357 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3354 3358 save_dstore('rc_separate_in',rc.separate_in)
3355 3359
3356 3360 if mode == False:
3357 3361 # turn on
3358 3362 ipaste.activate_prefilter()
3359 3363
3360 3364 oc.prompt1.p_template = '>>> '
3361 3365 oc.prompt2.p_template = '... '
3362 3366 oc.prompt_out.p_template = ''
3363 3367
3364 3368 # Prompt separators like plain python
3365 3369 oc.input_sep = oc.prompt1.sep = ''
3366 3370 oc.output_sep = ''
3367 3371 oc.output_sep2 = ''
3368 3372
3369 3373 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3370 3374 oc.prompt_out.pad_left = False
3371 3375
3372 3376 rc.pprint = False
3373 3377
3374 3378 shell.magic_xmode('Plain')
3375 3379
3376 3380 else:
3377 3381 # turn off
3378 3382 ipaste.deactivate_prefilter()
3379 3383
3380 3384 oc.prompt1.p_template = rc.prompt_in1
3381 3385 oc.prompt2.p_template = rc.prompt_in2
3382 3386 oc.prompt_out.p_template = rc.prompt_out
3383 3387
3384 3388 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3385 3389
3386 3390 oc.output_sep = dstore.rc_separate_out
3387 3391 oc.output_sep2 = dstore.rc_separate_out2
3388 3392
3389 3393 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3390 3394 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3391 3395
3392 3396 rc.pprint = dstore.rc_pprint
3393 3397
3394 3398 shell.magic_xmode(dstore.xmode)
3395 3399
3396 3400 # Store new mode and inform
3397 3401 dstore.mode = bool(1-int(mode))
3398 3402 print 'Doctest mode is:',
3399 3403 print ['OFF','ON'][dstore.mode]
3400 3404
3401 3405 # end Magic
@@ -1,249 +1,252 b''
1 1 """hooks for IPython.
2 2
3 3 In Python, it is possible to overwrite any method of any object if you really
4 4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
5 5 be overwritten by users for customization purposes. This module defines the
6 6 default versions of all such hooks, which get used by IPython if not
7 7 overridden by the user.
8 8
9 9 hooks are simple functions, but they should be declared with 'self' as their
10 10 first argument, because when activated they are registered into IPython as
11 11 instance methods. The self argument will be the IPython running instance
12 12 itself, so hooks have full access to the entire IPython object.
13 13
14 14 If you wish to define a new hook and activate it, you need to put the
15 15 necessary code into a python file which can be either imported or execfile()'d
16 16 from within your ipythonrc configuration.
17 17
18 18 For example, suppose that you have a module called 'myiphooks' in your
19 19 PYTHONPATH, which contains the following definition:
20 20
21 21 import os
22 22 import IPython.ipapi
23 23 ip = IPython.ipapi.get()
24 24
25 25 def calljed(self,filename, linenum):
26 26 "My editor hook calls the jed editor directly."
27 27 print "Calling my own editor, jed ..."
28 os.system('jed +%d %s' % (linenum,filename))
28 if os.system('jed +%d %s' % (linenum,filename)) != 0:
29 raise ipapi.TryNext()
29 30
30 31 ip.set_hook('editor', calljed)
31 32
32 33 You can then enable the functionality by doing 'import myiphooks'
33 34 somewhere in your configuration files or ipython command line.
34 35
35 36 $Id: hooks.py 2998 2008-01-31 10:06:04Z vivainio $"""
36 37
37 38 #*****************************************************************************
38 39 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 40 #
40 41 # Distributed under the terms of the BSD License. The full license is in
41 42 # the file COPYING, distributed as part of this software.
42 43 #*****************************************************************************
43 44
44 45 from IPython import Release
45 46 from IPython import ipapi
46 47 __author__ = '%s <%s>' % Release.authors['Fernando']
47 48 __license__ = Release.license
48 49 __version__ = Release.version
49 50
50 51 import os,bisect
51 52 from genutils import Term,shell
52 53 from pprint import PrettyPrinter
53 54
54 55 # List here all the default hooks. For now it's just the editor functions
55 56 # but over time we'll move here all the public API for user-accessible things.
56 57 # vds: >>
57 58 __all__ = ['editor', 'fix_error_editor', 'synchronize_with_editor', 'result_display',
58 59 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
59 60 'generate_prompt', 'generate_output_prompt','shell_hook',
60 61 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook']
61 62 # vds: <<
62 63
63 64 pformat = PrettyPrinter().pformat
64 65
65 66 def editor(self,filename, linenum=None):
66 67 """Open the default editor at the given filename and linenumber.
67 68
68 69 This is IPython's default editor hook, you can use it as an example to
69 70 write your own modified one. To set your own editor function as the
70 71 new editor hook, call ip.set_hook('editor',yourfunc)."""
71 72
72 73 # IPython configures a default editor at startup by reading $EDITOR from
73 74 # the environment, and falling back on vi (unix) or notepad (win32).
74 75 editor = self.rc.editor
75 76
76 77 # marker for at which line to open the file (for existing objects)
77 78 if linenum is None or editor=='notepad':
78 79 linemark = ''
79 80 else:
80 81 linemark = '+%d' % int(linenum)
81 82
82 83 # Enclose in quotes if necessary and legal
83 84 if ' ' in editor and os.path.isfile(editor) and editor[0] != '"':
84 85 editor = '"%s"' % editor
85 86
86 87 # Call the actual editor
87 os.system('%s %s %s' % (editor,linemark,filename))
88 if os.system('%s %s %s' % (editor,linemark,filename)) != 0:
89 raise ipapi.TryNext()
88 90
89 91 import tempfile
90 92 def fix_error_editor(self,filename,linenum,column,msg):
91 93 """Open the editor at the given filename, linenumber, column and
92 94 show an error message. This is used for correcting syntax errors.
93 95 The current implementation only has special support for the VIM editor,
94 96 and falls back on the 'editor' hook if VIM is not used.
95 97
96 98 Call ip.set_hook('fix_error_editor',youfunc) to use your own function,
97 99 """
98 100 def vim_quickfix_file():
99 101 t = tempfile.NamedTemporaryFile()
100 102 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
101 103 t.flush()
102 104 return t
103 105 if os.path.basename(self.rc.editor) != 'vim':
104 106 self.hooks.editor(filename,linenum)
105 107 return
106 108 t = vim_quickfix_file()
107 109 try:
108 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
110 if os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name):
111 raise ipapi.TryNext()
109 112 finally:
110 113 t.close()
111 114
112 115 # vds: >>
113 116 def synchronize_with_editor(self, filename, linenum, column):
114 117 pass
115 118 # vds: <<
116 119
117 120 class CommandChainDispatcher:
118 121 """ Dispatch calls to a chain of commands until some func can handle it
119 122
120 123 Usage: instantiate, execute "add" to add commands (with optional
121 124 priority), execute normally via f() calling mechanism.
122 125
123 126 """
124 127 def __init__(self,commands=None):
125 128 if commands is None:
126 129 self.chain = []
127 130 else:
128 131 self.chain = commands
129 132
130 133
131 134 def __call__(self,*args, **kw):
132 135 """ Command chain is called just like normal func.
133 136
134 137 This will call all funcs in chain with the same args as were given to this
135 138 function, and return the result of first func that didn't raise
136 139 TryNext """
137 140
138 141 for prio,cmd in self.chain:
139 142 #print "prio",prio,"cmd",cmd #dbg
140 143 try:
141 144 ret = cmd(*args, **kw)
142 145 return ret
143 146 except ipapi.TryNext, exc:
144 147 if exc.args or exc.kwargs:
145 148 args = exc.args
146 149 kw = exc.kwargs
147 150 # if no function will accept it, raise TryNext up to the caller
148 151 raise ipapi.TryNext
149 152
150 153 def __str__(self):
151 154 return str(self.chain)
152 155
153 156 def add(self, func, priority=0):
154 157 """ Add a func to the cmd chain with given priority """
155 158 bisect.insort(self.chain,(priority,func))
156 159
157 160 def __iter__(self):
158 161 """ Return all objects in chain.
159 162
160 163 Handy if the objects are not callable.
161 164 """
162 165 return iter(self.chain)
163 166
164 167 def result_display(self,arg):
165 168 """ Default display hook.
166 169
167 170 Called for displaying the result to the user.
168 171 """
169 172
170 173 if self.rc.pprint:
171 174 out = pformat(arg)
172 175 if '\n' in out:
173 176 # So that multi-line strings line up with the left column of
174 177 # the screen, instead of having the output prompt mess up
175 178 # their first line.
176 179 Term.cout.write('\n')
177 180 print >>Term.cout, out
178 181 else:
179 182 # By default, the interactive prompt uses repr() to display results,
180 183 # so we should honor this. Users who'd rather use a different
181 184 # mechanism can easily override this hook.
182 185 print >>Term.cout, repr(arg)
183 186 # the default display hook doesn't manipulate the value to put in history
184 187 return None
185 188
186 189 def input_prefilter(self,line):
187 190 """ Default input prefilter
188 191
189 192 This returns the line as unchanged, so that the interpreter
190 193 knows that nothing was done and proceeds with "classic" prefiltering
191 194 (%magics, !shell commands etc.).
192 195
193 196 Note that leading whitespace is not passed to this hook. Prefilter
194 197 can't alter indentation.
195 198
196 199 """
197 200 #print "attempt to rewrite",line #dbg
198 201 return line
199 202
200 203 def shutdown_hook(self):
201 204 """ default shutdown hook
202 205
203 206 Typically, shotdown hooks should raise TryNext so all shutdown ops are done
204 207 """
205 208
206 209 #print "default shutdown hook ok" # dbg
207 210 return
208 211
209 212 def late_startup_hook(self):
210 213 """ Executed after ipython has been constructed and configured
211 214
212 215 """
213 216 #print "default startup hook ok" # dbg
214 217
215 218 def generate_prompt(self, is_continuation):
216 219 """ calculate and return a string with the prompt to display """
217 220 ip = self.api
218 221 if is_continuation:
219 222 return str(ip.IP.outputcache.prompt2)
220 223 return str(ip.IP.outputcache.prompt1)
221 224
222 225 def generate_output_prompt(self):
223 226 ip = self.api
224 227 return str(ip.IP.outputcache.prompt_out)
225 228
226 229 def shell_hook(self,cmd):
227 230 """ Run system/shell command a'la os.system() """
228 231
229 232 shell(cmd, header=self.rc.system_header, verbose=self.rc.system_verbose)
230 233
231 234 def show_in_pager(self,s):
232 235 """ Run a string through pager """
233 236 # raising TryNext here will use the default paging functionality
234 237 raise ipapi.TryNext
235 238
236 239 def pre_prompt_hook(self):
237 240 """ Run before displaying the next prompt
238 241
239 242 Use this e.g. to display output from asynchronous operations (in order
240 243 to not mess up text entry)
241 244 """
242 245
243 246 return None
244 247
245 248 def pre_runcode_hook(self):
246 249 """ Executed before running the (prefiltered) code in IPython """
247 250 return None
248 251
249 252
@@ -1,2691 +1,2695 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.3 or newer.
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 9 """
10 10
11 11 #*****************************************************************************
12 12 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 13 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 14 #
15 15 # Distributed under the terms of the BSD License. The full license is in
16 16 # the file COPYING, distributed as part of this software.
17 17 #
18 18 # Note: this code originally subclassed code.InteractiveConsole from the
19 19 # Python standard library. Over time, all of that class has been copied
20 20 # verbatim here for modifications which could not be accomplished by
21 21 # subclassing. At this point, there are no dependencies at all on the code
22 22 # module anymore (it is not even imported). The Python License (sec. 2)
23 23 # allows for this, but it's always nice to acknowledge credit where credit is
24 24 # due.
25 25 #*****************************************************************************
26 26
27 27 #****************************************************************************
28 28 # Modules and globals
29 29
30 30 from IPython import Release
31 31 __author__ = '%s <%s>\n%s <%s>' % \
32 32 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 33 __license__ = Release.license
34 34 __version__ = Release.version
35 35
36 36 # Python standard modules
37 37 import __main__
38 38 import __builtin__
39 39 import StringIO
40 40 import bdb
41 41 import cPickle as pickle
42 42 import codeop
43 43 import exceptions
44 44 import glob
45 45 import inspect
46 46 import keyword
47 47 import new
48 48 import os
49 49 import pydoc
50 50 import re
51 51 import shutil
52 52 import string
53 53 import sys
54 54 import tempfile
55 55 import traceback
56 56 import types
57 57 import warnings
58 58 warnings.filterwarnings('ignore', r'.*sets module*')
59 59 from sets import Set
60 60 from pprint import pprint, pformat
61 61
62 62 # IPython's own modules
63 63 #import IPython
64 64 from IPython import Debugger,OInspect,PyColorize,ultraTB
65 65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 66 from IPython.Extensions import pickleshare
67 67 from IPython.FakeModule import FakeModule
68 68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 69 from IPython.Logger import Logger
70 70 from IPython.Magic import Magic
71 71 from IPython.Prompts import CachedOutput
72 72 from IPython.ipstruct import Struct
73 73 from IPython.background_jobs import BackgroundJobManager
74 74 from IPython.usage import cmd_line_usage,interactive_usage
75 75 from IPython.genutils import *
76 76 from IPython.strdispatch import StrDispatch
77 77 import IPython.ipapi
78 78 import IPython.history
79 79 import IPython.prefilter as prefilter
80 80 import IPython.shadowns
81 81 # Globals
82 82
83 83 # store the builtin raw_input globally, and use this always, in case user code
84 84 # overwrites it (like wx.py.PyShell does)
85 85 raw_input_original = raw_input
86 86
87 87 # compiled regexps for autoindent management
88 88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
89 89
90 90
91 91 #****************************************************************************
92 92 # Some utility function definitions
93 93
94 94 ini_spaces_re = re.compile(r'^(\s+)')
95 95
96 96 def num_ini_spaces(strng):
97 97 """Return the number of initial spaces in a string"""
98 98
99 99 ini_spaces = ini_spaces_re.match(strng)
100 100 if ini_spaces:
101 101 return ini_spaces.end()
102 102 else:
103 103 return 0
104 104
105 105 def softspace(file, newvalue):
106 106 """Copied from code.py, to remove the dependency"""
107 107
108 108 oldvalue = 0
109 109 try:
110 110 oldvalue = file.softspace
111 111 except AttributeError:
112 112 pass
113 113 try:
114 114 file.softspace = newvalue
115 115 except (AttributeError, TypeError):
116 116 # "attribute-less object" or "read-only attributes"
117 117 pass
118 118 return oldvalue
119 119
120 120
121 121 #****************************************************************************
122 122 # Local use exceptions
123 123 class SpaceInInput(exceptions.Exception): pass
124 124
125 125
126 126 #****************************************************************************
127 127 # Local use classes
128 128 class Bunch: pass
129 129
130 130 class Undefined: pass
131 131
132 132 class Quitter(object):
133 133 """Simple class to handle exit, similar to Python 2.5's.
134 134
135 135 It handles exiting in an ipython-safe manner, which the one in Python 2.5
136 136 doesn't do (obviously, since it doesn't know about ipython)."""
137 137
138 138 def __init__(self,shell,name):
139 139 self.shell = shell
140 140 self.name = name
141 141
142 142 def __repr__(self):
143 143 return 'Type %s() to exit.' % self.name
144 144 __str__ = __repr__
145 145
146 146 def __call__(self):
147 147 self.shell.exit()
148 148
149 149 class InputList(list):
150 150 """Class to store user input.
151 151
152 152 It's basically a list, but slices return a string instead of a list, thus
153 153 allowing things like (assuming 'In' is an instance):
154 154
155 155 exec In[4:7]
156 156
157 157 or
158 158
159 159 exec In[5:9] + In[14] + In[21:25]"""
160 160
161 161 def __getslice__(self,i,j):
162 162 return ''.join(list.__getslice__(self,i,j))
163 163
164 164 class SyntaxTB(ultraTB.ListTB):
165 165 """Extension which holds some state: the last exception value"""
166 166
167 167 def __init__(self,color_scheme = 'NoColor'):
168 168 ultraTB.ListTB.__init__(self,color_scheme)
169 169 self.last_syntax_error = None
170 170
171 171 def __call__(self, etype, value, elist):
172 172 self.last_syntax_error = value
173 173 ultraTB.ListTB.__call__(self,etype,value,elist)
174 174
175 175 def clear_err_state(self):
176 176 """Return the current error state and clear it"""
177 177 e = self.last_syntax_error
178 178 self.last_syntax_error = None
179 179 return e
180 180
181 181 #****************************************************************************
182 182 # Main IPython class
183 183
184 184 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
185 185 # until a full rewrite is made. I've cleaned all cross-class uses of
186 186 # attributes and methods, but too much user code out there relies on the
187 187 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
188 188 #
189 189 # But at least now, all the pieces have been separated and we could, in
190 190 # principle, stop using the mixin. This will ease the transition to the
191 191 # chainsaw branch.
192 192
193 193 # For reference, the following is the list of 'self.foo' uses in the Magic
194 194 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
195 195 # class, to prevent clashes.
196 196
197 197 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
198 198 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
199 199 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
200 200 # 'self.value']
201 201
202 202 class InteractiveShell(object,Magic):
203 203 """An enhanced console for Python."""
204 204
205 205 # class attribute to indicate whether the class supports threads or not.
206 206 # Subclasses with thread support should override this as needed.
207 207 isthreaded = False
208 208
209 209 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
210 210 user_ns=None,user_global_ns=None,banner2='',
211 211 custom_exceptions=((),None),embedded=False):
212 212
213 213 # log system
214 214 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
215 215
216 216 # Job manager (for jobs run as background threads)
217 217 self.jobs = BackgroundJobManager()
218 218
219 219 # Store the actual shell's name
220 220 self.name = name
221 221 self.more = False
222 222
223 223 # We need to know whether the instance is meant for embedding, since
224 224 # global/local namespaces need to be handled differently in that case
225 225 self.embedded = embedded
226 226 if embedded:
227 227 # Control variable so users can, from within the embedded instance,
228 228 # permanently deactivate it.
229 229 self.embedded_active = True
230 230
231 231 # command compiler
232 232 self.compile = codeop.CommandCompiler()
233 233
234 234 # User input buffer
235 235 self.buffer = []
236 236
237 237 # Default name given in compilation of code
238 238 self.filename = '<ipython console>'
239 239
240 240 # Install our own quitter instead of the builtins. For python2.3-2.4,
241 241 # this brings in behavior like 2.5, and for 2.5 it's identical.
242 242 __builtin__.exit = Quitter(self,'exit')
243 243 __builtin__.quit = Quitter(self,'quit')
244 244
245 245 # Make an empty namespace, which extension writers can rely on both
246 246 # existing and NEVER being used by ipython itself. This gives them a
247 247 # convenient location for storing additional information and state
248 248 # their extensions may require, without fear of collisions with other
249 249 # ipython names that may develop later.
250 250 self.meta = Struct()
251 251
252 252 # Create the namespace where the user will operate. user_ns is
253 253 # normally the only one used, and it is passed to the exec calls as
254 254 # the locals argument. But we do carry a user_global_ns namespace
255 255 # given as the exec 'globals' argument, This is useful in embedding
256 256 # situations where the ipython shell opens in a context where the
257 257 # distinction between locals and globals is meaningful. For
258 258 # non-embedded contexts, it is just the same object as the user_ns dict.
259 259
260 260 # FIXME. For some strange reason, __builtins__ is showing up at user
261 261 # level as a dict instead of a module. This is a manual fix, but I
262 262 # should really track down where the problem is coming from. Alex
263 263 # Schmolck reported this problem first.
264 264
265 265 # A useful post by Alex Martelli on this topic:
266 266 # Re: inconsistent value from __builtins__
267 267 # Von: Alex Martelli <aleaxit@yahoo.com>
268 268 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
269 269 # Gruppen: comp.lang.python
270 270
271 271 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
272 272 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
273 273 # > <type 'dict'>
274 274 # > >>> print type(__builtins__)
275 275 # > <type 'module'>
276 276 # > Is this difference in return value intentional?
277 277
278 278 # Well, it's documented that '__builtins__' can be either a dictionary
279 279 # or a module, and it's been that way for a long time. Whether it's
280 280 # intentional (or sensible), I don't know. In any case, the idea is
281 281 # that if you need to access the built-in namespace directly, you
282 282 # should start with "import __builtin__" (note, no 's') which will
283 283 # definitely give you a module. Yeah, it's somewhat confusing:-(.
284 284
285 285 # These routines return properly built dicts as needed by the rest of
286 286 # the code, and can also be used by extension writers to generate
287 287 # properly initialized namespaces.
288 288 user_ns, user_global_ns = IPython.ipapi.make_user_namespaces(user_ns,
289 289 user_global_ns)
290 290
291 291 # Assign namespaces
292 292 # This is the namespace where all normal user variables live
293 293 self.user_ns = user_ns
294 294 self.user_global_ns = user_global_ns
295 295 # A namespace to keep track of internal data structures to prevent
296 296 # them from cluttering user-visible stuff. Will be updated later
297 297 self.internal_ns = {}
298 298
299 299 # Namespace of system aliases. Each entry in the alias
300 300 # table must be a 2-tuple of the form (N,name), where N is the number
301 301 # of positional arguments of the alias.
302 302 self.alias_table = {}
303 303
304 304 # A table holding all the namespaces IPython deals with, so that
305 305 # introspection facilities can search easily.
306 306 self.ns_table = {'user':user_ns,
307 307 'user_global':user_global_ns,
308 308 'alias':self.alias_table,
309 309 'internal':self.internal_ns,
310 310 'builtin':__builtin__.__dict__
311 311 }
312 312 # The user namespace MUST have a pointer to the shell itself.
313 313 self.user_ns[name] = self
314 314
315 315 # We need to insert into sys.modules something that looks like a
316 316 # module but which accesses the IPython namespace, for shelve and
317 317 # pickle to work interactively. Normally they rely on getting
318 318 # everything out of __main__, but for embedding purposes each IPython
319 319 # instance has its own private namespace, so we can't go shoving
320 320 # everything into __main__.
321 321
322 322 # note, however, that we should only do this for non-embedded
323 323 # ipythons, which really mimic the __main__.__dict__ with their own
324 324 # namespace. Embedded instances, on the other hand, should not do
325 325 # this because they need to manage the user local/global namespaces
326 326 # only, but they live within a 'normal' __main__ (meaning, they
327 327 # shouldn't overtake the execution environment of the script they're
328 328 # embedded in).
329 329
330 330 if not embedded:
331 331 try:
332 332 main_name = self.user_ns['__name__']
333 333 except KeyError:
334 334 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 335 else:
336 336 #print "pickle hack in place" # dbg
337 337 #print 'main_name:',main_name # dbg
338 338 sys.modules[main_name] = FakeModule(self.user_ns)
339 339
340 340 # Now that FakeModule produces a real module, we've run into a nasty
341 341 # problem: after script execution (via %run), the module where the user
342 342 # code ran is deleted. Now that this object is a true module (needed
343 343 # so docetst and other tools work correctly), the Python module
344 344 # teardown mechanism runs over it, and sets to None every variable
345 345 # present in that module. This means that later calls to functions
346 346 # defined in the script (which have become interactively visible after
347 347 # script exit) fail, because they hold references to objects that have
348 348 # become overwritten into None. The only solution I see right now is
349 349 # to protect every FakeModule used by %run by holding an internal
350 350 # reference to it. This private list will be used for that. The
351 351 # %reset command will flush it as well.
352 352 self._user_main_modules = []
353 353
354 354 # List of input with multi-line handling.
355 355 # Fill its zero entry, user counter starts at 1
356 356 self.input_hist = InputList(['\n'])
357 357 # This one will hold the 'raw' input history, without any
358 358 # pre-processing. This will allow users to retrieve the input just as
359 359 # it was exactly typed in by the user, with %hist -r.
360 360 self.input_hist_raw = InputList(['\n'])
361 361
362 362 # list of visited directories
363 363 try:
364 364 self.dir_hist = [os.getcwd()]
365 365 except OSError:
366 366 self.dir_hist = []
367 367
368 368 # dict of output history
369 369 self.output_hist = {}
370 370
371 371 # Get system encoding at startup time. Certain terminals (like Emacs
372 372 # under Win32 have it set to None, and we need to have a known valid
373 373 # encoding to use in the raw_input() method
374 374 try:
375 375 self.stdin_encoding = sys.stdin.encoding or 'ascii'
376 376 except AttributeError:
377 377 self.stdin_encoding = 'ascii'
378 378
379 379 # dict of things NOT to alias (keywords, builtins and some magics)
380 380 no_alias = {}
381 381 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
382 382 for key in keyword.kwlist + no_alias_magics:
383 383 no_alias[key] = 1
384 384 no_alias.update(__builtin__.__dict__)
385 385 self.no_alias = no_alias
386 386
387 387 # make global variables for user access to these
388 388 self.user_ns['_ih'] = self.input_hist
389 389 self.user_ns['_oh'] = self.output_hist
390 390 self.user_ns['_dh'] = self.dir_hist
391 391
392 392 # user aliases to input and output histories
393 393 self.user_ns['In'] = self.input_hist
394 394 self.user_ns['Out'] = self.output_hist
395 395
396 396 self.user_ns['_sh'] = IPython.shadowns
397 397 # Object variable to store code object waiting execution. This is
398 398 # used mainly by the multithreaded shells, but it can come in handy in
399 399 # other situations. No need to use a Queue here, since it's a single
400 400 # item which gets cleared once run.
401 401 self.code_to_run = None
402 402
403 403 # escapes for automatic behavior on the command line
404 404 self.ESC_SHELL = '!'
405 405 self.ESC_SH_CAP = '!!'
406 406 self.ESC_HELP = '?'
407 407 self.ESC_MAGIC = '%'
408 408 self.ESC_QUOTE = ','
409 409 self.ESC_QUOTE2 = ';'
410 410 self.ESC_PAREN = '/'
411 411
412 412 # And their associated handlers
413 413 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
414 414 self.ESC_QUOTE : self.handle_auto,
415 415 self.ESC_QUOTE2 : self.handle_auto,
416 416 self.ESC_MAGIC : self.handle_magic,
417 417 self.ESC_HELP : self.handle_help,
418 418 self.ESC_SHELL : self.handle_shell_escape,
419 419 self.ESC_SH_CAP : self.handle_shell_escape,
420 420 }
421 421
422 422 # class initializations
423 423 Magic.__init__(self,self)
424 424
425 425 # Python source parser/formatter for syntax highlighting
426 426 pyformat = PyColorize.Parser().format
427 427 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
428 428
429 429 # hooks holds pointers used for user-side customizations
430 430 self.hooks = Struct()
431 431
432 432 self.strdispatchers = {}
433 433
434 434 # Set all default hooks, defined in the IPython.hooks module.
435 435 hooks = IPython.hooks
436 436 for hook_name in hooks.__all__:
437 437 # default hooks have priority 100, i.e. low; user hooks should have
438 438 # 0-100 priority
439 439 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
440 440 #print "bound hook",hook_name
441 441
442 442 # Flag to mark unconditional exit
443 443 self.exit_now = False
444 444
445 445 self.usage_min = """\
446 446 An enhanced console for Python.
447 447 Some of its features are:
448 448 - Readline support if the readline library is present.
449 449 - Tab completion in the local namespace.
450 450 - Logging of input, see command-line options.
451 451 - System shell escape via ! , eg !ls.
452 452 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
453 453 - Keeps track of locally defined variables via %who, %whos.
454 454 - Show object information with a ? eg ?x or x? (use ?? for more info).
455 455 """
456 456 if usage: self.usage = usage
457 457 else: self.usage = self.usage_min
458 458
459 459 # Storage
460 460 self.rc = rc # This will hold all configuration information
461 461 self.pager = 'less'
462 462 # temporary files used for various purposes. Deleted at exit.
463 463 self.tempfiles = []
464 464
465 465 # Keep track of readline usage (later set by init_readline)
466 466 self.has_readline = False
467 467
468 468 # template for logfile headers. It gets resolved at runtime by the
469 469 # logstart method.
470 470 self.loghead_tpl = \
471 471 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
472 472 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
473 473 #log# opts = %s
474 474 #log# args = %s
475 475 #log# It is safe to make manual edits below here.
476 476 #log#-----------------------------------------------------------------------
477 477 """
478 478 # for pushd/popd management
479 479 try:
480 480 self.home_dir = get_home_dir()
481 481 except HomeDirError,msg:
482 482 fatal(msg)
483 483
484 484 self.dir_stack = []
485 485
486 486 # Functions to call the underlying shell.
487 487
488 488 # The first is similar to os.system, but it doesn't return a value,
489 489 # and it allows interpolation of variables in the user's namespace.
490 490 self.system = lambda cmd: \
491 491 self.hooks.shell_hook(self.var_expand(cmd,depth=2))
492 492
493 493 # These are for getoutput and getoutputerror:
494 494 self.getoutput = lambda cmd: \
495 495 getoutput(self.var_expand(cmd,depth=2),
496 496 header=self.rc.system_header,
497 497 verbose=self.rc.system_verbose)
498 498
499 499 self.getoutputerror = lambda cmd: \
500 500 getoutputerror(self.var_expand(cmd,depth=2),
501 501 header=self.rc.system_header,
502 502 verbose=self.rc.system_verbose)
503 503
504 504
505 505 # keep track of where we started running (mainly for crash post-mortem)
506 506 self.starting_dir = os.getcwd()
507 507
508 508 # Various switches which can be set
509 509 self.CACHELENGTH = 5000 # this is cheap, it's just text
510 510 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
511 511 self.banner2 = banner2
512 512
513 513 # TraceBack handlers:
514 514
515 515 # Syntax error handler.
516 516 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
517 517
518 518 # The interactive one is initialized with an offset, meaning we always
519 519 # want to remove the topmost item in the traceback, which is our own
520 520 # internal code. Valid modes: ['Plain','Context','Verbose']
521 521 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
522 522 color_scheme='NoColor',
523 523 tb_offset = 1)
524 524
525 525 # IPython itself shouldn't crash. This will produce a detailed
526 526 # post-mortem if it does. But we only install the crash handler for
527 527 # non-threaded shells, the threaded ones use a normal verbose reporter
528 528 # and lose the crash handler. This is because exceptions in the main
529 529 # thread (such as in GUI code) propagate directly to sys.excepthook,
530 530 # and there's no point in printing crash dumps for every user exception.
531 531 if self.isthreaded:
532 532 ipCrashHandler = ultraTB.FormattedTB()
533 533 else:
534 534 from IPython import CrashHandler
535 535 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
536 536 self.set_crash_handler(ipCrashHandler)
537 537
538 538 # and add any custom exception handlers the user may have specified
539 539 self.set_custom_exc(*custom_exceptions)
540 540
541 541 # indentation management
542 542 self.autoindent = False
543 543 self.indent_current_nsp = 0
544 544
545 545 # Make some aliases automatically
546 546 # Prepare list of shell aliases to auto-define
547 547 if os.name == 'posix':
548 548 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
549 549 'mv mv -i','rm rm -i','cp cp -i',
550 550 'cat cat','less less','clear clear',
551 551 # a better ls
552 552 'ls ls -F',
553 553 # long ls
554 554 'll ls -lF')
555 555 # Extra ls aliases with color, which need special treatment on BSD
556 556 # variants
557 557 ls_extra = ( # color ls
558 558 'lc ls -F -o --color',
559 559 # ls normal files only
560 560 'lf ls -F -o --color %l | grep ^-',
561 561 # ls symbolic links
562 562 'lk ls -F -o --color %l | grep ^l',
563 563 # directories or links to directories,
564 564 'ldir ls -F -o --color %l | grep /$',
565 565 # things which are executable
566 566 'lx ls -F -o --color %l | grep ^-..x',
567 567 )
568 568 # The BSDs don't ship GNU ls, so they don't understand the
569 569 # --color switch out of the box
570 570 if 'bsd' in sys.platform:
571 571 ls_extra = ( # ls normal files only
572 572 'lf ls -lF | grep ^-',
573 573 # ls symbolic links
574 574 'lk ls -lF | grep ^l',
575 575 # directories or links to directories,
576 576 'ldir ls -lF | grep /$',
577 577 # things which are executable
578 578 'lx ls -lF | grep ^-..x',
579 579 )
580 580 auto_alias = auto_alias + ls_extra
581 581 elif os.name in ['nt','dos']:
582 582 auto_alias = ('ls dir /on',
583 583 'ddir dir /ad /on', 'ldir dir /ad /on',
584 584 'mkdir mkdir','rmdir rmdir','echo echo',
585 585 'ren ren','cls cls','copy copy')
586 586 else:
587 587 auto_alias = ()
588 588 self.auto_alias = [s.split(None,1) for s in auto_alias]
589 589
590 590
591 591 # Produce a public API instance
592 592 self.api = IPython.ipapi.IPApi(self)
593 593
594 594 # Call the actual (public) initializer
595 595 self.init_auto_alias()
596 596
597 597 # track which builtins we add, so we can clean up later
598 598 self.builtins_added = {}
599 599 # This method will add the necessary builtins for operation, but
600 600 # tracking what it did via the builtins_added dict.
601 601
602 602 #TODO: remove this, redundant
603 603 self.add_builtins()
604 604
605 605
606 606
607 607
608 608 # end __init__
609 609
610 610 def var_expand(self,cmd,depth=0):
611 611 """Expand python variables in a string.
612 612
613 613 The depth argument indicates how many frames above the caller should
614 614 be walked to look for the local namespace where to expand variables.
615 615
616 616 The global namespace for expansion is always the user's interactive
617 617 namespace.
618 618 """
619 619
620 620 return str(ItplNS(cmd,
621 621 self.user_ns, # globals
622 622 # Skip our own frame in searching for locals:
623 623 sys._getframe(depth+1).f_locals # locals
624 624 ))
625 625
626 626 def pre_config_initialization(self):
627 627 """Pre-configuration init method
628 628
629 629 This is called before the configuration files are processed to
630 630 prepare the services the config files might need.
631 631
632 632 self.rc already has reasonable default values at this point.
633 633 """
634 634 rc = self.rc
635 635 try:
636 636 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
637 637 except exceptions.UnicodeDecodeError:
638 638 print "Your ipythondir can't be decoded to unicode!"
639 639 print "Please set HOME environment variable to something that"
640 640 print r"only has ASCII characters, e.g. c:\home"
641 641 print "Now it is",rc.ipythondir
642 642 sys.exit()
643 643 self.shadowhist = IPython.history.ShadowHist(self.db)
644 644
645 645
646 646 def post_config_initialization(self):
647 647 """Post configuration init method
648 648
649 649 This is called after the configuration files have been processed to
650 650 'finalize' the initialization."""
651 651
652 652 rc = self.rc
653 653
654 654 # Object inspector
655 655 self.inspector = OInspect.Inspector(OInspect.InspectColors,
656 656 PyColorize.ANSICodeColors,
657 657 'NoColor',
658 658 rc.object_info_string_level)
659 659
660 660 self.rl_next_input = None
661 661 self.rl_do_indent = False
662 662 # Load readline proper
663 663 if rc.readline:
664 664 self.init_readline()
665 665
666 666
667 667 # local shortcut, this is used a LOT
668 668 self.log = self.logger.log
669 669
670 670 # Initialize cache, set in/out prompts and printing system
671 671 self.outputcache = CachedOutput(self,
672 672 rc.cache_size,
673 673 rc.pprint,
674 674 input_sep = rc.separate_in,
675 675 output_sep = rc.separate_out,
676 676 output_sep2 = rc.separate_out2,
677 677 ps1 = rc.prompt_in1,
678 678 ps2 = rc.prompt_in2,
679 679 ps_out = rc.prompt_out,
680 680 pad_left = rc.prompts_pad_left)
681 681
682 682 # user may have over-ridden the default print hook:
683 683 try:
684 684 self.outputcache.__class__.display = self.hooks.display
685 685 except AttributeError:
686 686 pass
687 687
688 688 # I don't like assigning globally to sys, because it means when
689 689 # embedding instances, each embedded instance overrides the previous
690 690 # choice. But sys.displayhook seems to be called internally by exec,
691 691 # so I don't see a way around it. We first save the original and then
692 692 # overwrite it.
693 693 self.sys_displayhook = sys.displayhook
694 694 sys.displayhook = self.outputcache
695 695
696 696 # Do a proper resetting of doctest, including the necessary displayhook
697 697 # monkeypatching
698 698 try:
699 699 doctest_reload()
700 700 except ImportError:
701 701 warn("doctest module does not exist.")
702 702
703 703 # Set user colors (don't do it in the constructor above so that it
704 704 # doesn't crash if colors option is invalid)
705 705 self.magic_colors(rc.colors)
706 706
707 707 # Set calling of pdb on exceptions
708 708 self.call_pdb = rc.pdb
709 709
710 710 # Load user aliases
711 711 for alias in rc.alias:
712 712 self.magic_alias(alias)
713 713
714 714 self.hooks.late_startup_hook()
715 715
716 716 for cmd in self.rc.autoexec:
717 717 #print "autoexec>",cmd #dbg
718 718 self.api.runlines(cmd)
719 719
720 720 batchrun = False
721 721 for batchfile in [path(arg) for arg in self.rc.args
722 722 if arg.lower().endswith('.ipy')]:
723 723 if not batchfile.isfile():
724 724 print "No such batch file:", batchfile
725 725 continue
726 726 self.api.runlines(batchfile.text())
727 727 batchrun = True
728 728 # without -i option, exit after running the batch file
729 729 if batchrun and not self.rc.interact:
730 730 self.ask_exit()
731 731
732 732 def add_builtins(self):
733 733 """Store ipython references into the builtin namespace.
734 734
735 735 Some parts of ipython operate via builtins injected here, which hold a
736 736 reference to IPython itself."""
737 737
738 738 # TODO: deprecate all of these, they are unsafe
739 739 builtins_new = dict(__IPYTHON__ = self,
740 740 ip_set_hook = self.set_hook,
741 741 jobs = self.jobs,
742 742 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
743 743 ipalias = wrap_deprecated(self.ipalias),
744 744 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
745 745 #_ip = self.api
746 746 )
747 747 for biname,bival in builtins_new.items():
748 748 try:
749 749 # store the orignal value so we can restore it
750 750 self.builtins_added[biname] = __builtin__.__dict__[biname]
751 751 except KeyError:
752 752 # or mark that it wasn't defined, and we'll just delete it at
753 753 # cleanup
754 754 self.builtins_added[biname] = Undefined
755 755 __builtin__.__dict__[biname] = bival
756 756
757 757 # Keep in the builtins a flag for when IPython is active. We set it
758 758 # with setdefault so that multiple nested IPythons don't clobber one
759 759 # another. Each will increase its value by one upon being activated,
760 760 # which also gives us a way to determine the nesting level.
761 761 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
762 762
763 763 def clean_builtins(self):
764 764 """Remove any builtins which might have been added by add_builtins, or
765 765 restore overwritten ones to their previous values."""
766 766 for biname,bival in self.builtins_added.items():
767 767 if bival is Undefined:
768 768 del __builtin__.__dict__[biname]
769 769 else:
770 770 __builtin__.__dict__[biname] = bival
771 771 self.builtins_added.clear()
772 772
773 773 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
774 774 """set_hook(name,hook) -> sets an internal IPython hook.
775 775
776 776 IPython exposes some of its internal API as user-modifiable hooks. By
777 777 adding your function to one of these hooks, you can modify IPython's
778 778 behavior to call at runtime your own routines."""
779 779
780 780 # At some point in the future, this should validate the hook before it
781 781 # accepts it. Probably at least check that the hook takes the number
782 782 # of args it's supposed to.
783 783
784 784 f = new.instancemethod(hook,self,self.__class__)
785 785
786 786 # check if the hook is for strdispatcher first
787 787 if str_key is not None:
788 788 sdp = self.strdispatchers.get(name, StrDispatch())
789 789 sdp.add_s(str_key, f, priority )
790 790 self.strdispatchers[name] = sdp
791 791 return
792 792 if re_key is not None:
793 793 sdp = self.strdispatchers.get(name, StrDispatch())
794 794 sdp.add_re(re.compile(re_key), f, priority )
795 795 self.strdispatchers[name] = sdp
796 796 return
797 797
798 798 dp = getattr(self.hooks, name, None)
799 799 if name not in IPython.hooks.__all__:
800 800 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
801 801 if not dp:
802 802 dp = IPython.hooks.CommandChainDispatcher()
803 803
804 804 try:
805 805 dp.add(f,priority)
806 806 except AttributeError:
807 807 # it was not commandchain, plain old func - replace
808 808 dp = f
809 809
810 810 setattr(self.hooks,name, dp)
811 811
812 812
813 813 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
814 814
815 815 def set_crash_handler(self,crashHandler):
816 816 """Set the IPython crash handler.
817 817
818 818 This must be a callable with a signature suitable for use as
819 819 sys.excepthook."""
820 820
821 821 # Install the given crash handler as the Python exception hook
822 822 sys.excepthook = crashHandler
823 823
824 824 # The instance will store a pointer to this, so that runtime code
825 825 # (such as magics) can access it. This is because during the
826 826 # read-eval loop, it gets temporarily overwritten (to deal with GUI
827 827 # frameworks).
828 828 self.sys_excepthook = sys.excepthook
829 829
830 830
831 831 def set_custom_exc(self,exc_tuple,handler):
832 832 """set_custom_exc(exc_tuple,handler)
833 833
834 834 Set a custom exception handler, which will be called if any of the
835 835 exceptions in exc_tuple occur in the mainloop (specifically, in the
836 836 runcode() method.
837 837
838 838 Inputs:
839 839
840 840 - exc_tuple: a *tuple* of valid exceptions to call the defined
841 841 handler for. It is very important that you use a tuple, and NOT A
842 842 LIST here, because of the way Python's except statement works. If
843 843 you only want to trap a single exception, use a singleton tuple:
844 844
845 845 exc_tuple == (MyCustomException,)
846 846
847 847 - handler: this must be defined as a function with the following
848 848 basic interface: def my_handler(self,etype,value,tb).
849 849
850 850 This will be made into an instance method (via new.instancemethod)
851 851 of IPython itself, and it will be called if any of the exceptions
852 852 listed in the exc_tuple are caught. If the handler is None, an
853 853 internal basic one is used, which just prints basic info.
854 854
855 855 WARNING: by putting in your own exception handler into IPython's main
856 856 execution loop, you run a very good chance of nasty crashes. This
857 857 facility should only be used if you really know what you are doing."""
858 858
859 859 assert type(exc_tuple)==type(()) , \
860 860 "The custom exceptions must be given AS A TUPLE."
861 861
862 862 def dummy_handler(self,etype,value,tb):
863 863 print '*** Simple custom exception handler ***'
864 864 print 'Exception type :',etype
865 865 print 'Exception value:',value
866 866 print 'Traceback :',tb
867 867 print 'Source code :','\n'.join(self.buffer)
868 868
869 869 if handler is None: handler = dummy_handler
870 870
871 871 self.CustomTB = new.instancemethod(handler,self,self.__class__)
872 872 self.custom_exceptions = exc_tuple
873 873
874 874 def set_custom_completer(self,completer,pos=0):
875 875 """set_custom_completer(completer,pos=0)
876 876
877 877 Adds a new custom completer function.
878 878
879 879 The position argument (defaults to 0) is the index in the completers
880 880 list where you want the completer to be inserted."""
881 881
882 882 newcomp = new.instancemethod(completer,self.Completer,
883 883 self.Completer.__class__)
884 884 self.Completer.matchers.insert(pos,newcomp)
885 885
886 886 def set_completer(self):
887 887 """reset readline's completer to be our own."""
888 888 self.readline.set_completer(self.Completer.complete)
889 889
890 890 def _get_call_pdb(self):
891 891 return self._call_pdb
892 892
893 893 def _set_call_pdb(self,val):
894 894
895 895 if val not in (0,1,False,True):
896 896 raise ValueError,'new call_pdb value must be boolean'
897 897
898 898 # store value in instance
899 899 self._call_pdb = val
900 900
901 901 # notify the actual exception handlers
902 902 self.InteractiveTB.call_pdb = val
903 903 if self.isthreaded:
904 904 try:
905 905 self.sys_excepthook.call_pdb = val
906 906 except:
907 907 warn('Failed to activate pdb for threaded exception handler')
908 908
909 909 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
910 910 'Control auto-activation of pdb at exceptions')
911 911
912 912
913 913 # These special functions get installed in the builtin namespace, to
914 914 # provide programmatic (pure python) access to magics, aliases and system
915 915 # calls. This is important for logging, user scripting, and more.
916 916
917 917 # We are basically exposing, via normal python functions, the three
918 918 # mechanisms in which ipython offers special call modes (magics for
919 919 # internal control, aliases for direct system access via pre-selected
920 920 # names, and !cmd for calling arbitrary system commands).
921 921
922 922 def ipmagic(self,arg_s):
923 923 """Call a magic function by name.
924 924
925 925 Input: a string containing the name of the magic function to call and any
926 926 additional arguments to be passed to the magic.
927 927
928 928 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
929 929 prompt:
930 930
931 931 In[1]: %name -opt foo bar
932 932
933 933 To call a magic without arguments, simply use ipmagic('name').
934 934
935 935 This provides a proper Python function to call IPython's magics in any
936 936 valid Python code you can type at the interpreter, including loops and
937 937 compound statements. It is added by IPython to the Python builtin
938 938 namespace upon initialization."""
939 939
940 940 args = arg_s.split(' ',1)
941 941 magic_name = args[0]
942 942 magic_name = magic_name.lstrip(self.ESC_MAGIC)
943 943
944 944 try:
945 945 magic_args = args[1]
946 946 except IndexError:
947 947 magic_args = ''
948 948 fn = getattr(self,'magic_'+magic_name,None)
949 949 if fn is None:
950 950 error("Magic function `%s` not found." % magic_name)
951 951 else:
952 952 magic_args = self.var_expand(magic_args,1)
953 953 return fn(magic_args)
954 954
955 955 def ipalias(self,arg_s):
956 956 """Call an alias by name.
957 957
958 958 Input: a string containing the name of the alias to call and any
959 959 additional arguments to be passed to the magic.
960 960
961 961 ipalias('name -opt foo bar') is equivalent to typing at the ipython
962 962 prompt:
963 963
964 964 In[1]: name -opt foo bar
965 965
966 966 To call an alias without arguments, simply use ipalias('name').
967 967
968 968 This provides a proper Python function to call IPython's aliases in any
969 969 valid Python code you can type at the interpreter, including loops and
970 970 compound statements. It is added by IPython to the Python builtin
971 971 namespace upon initialization."""
972 972
973 973 args = arg_s.split(' ',1)
974 974 alias_name = args[0]
975 975 try:
976 976 alias_args = args[1]
977 977 except IndexError:
978 978 alias_args = ''
979 979 if alias_name in self.alias_table:
980 980 self.call_alias(alias_name,alias_args)
981 981 else:
982 982 error("Alias `%s` not found." % alias_name)
983 983
984 984 def ipsystem(self,arg_s):
985 985 """Make a system call, using IPython."""
986 986
987 987 self.system(arg_s)
988 988
989 989 def complete(self,text):
990 990 """Return a sorted list of all possible completions on text.
991 991
992 992 Inputs:
993 993
994 994 - text: a string of text to be completed on.
995 995
996 996 This is a wrapper around the completion mechanism, similar to what
997 997 readline does at the command line when the TAB key is hit. By
998 998 exposing it as a method, it can be used by other non-readline
999 999 environments (such as GUIs) for text completion.
1000 1000
1001 1001 Simple usage example:
1002 1002
1003 1003 In [7]: x = 'hello'
1004 1004
1005 1005 In [8]: x
1006 1006 Out[8]: 'hello'
1007 1007
1008 1008 In [9]: print x
1009 1009 hello
1010 1010
1011 1011 In [10]: _ip.IP.complete('x.l')
1012 1012 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1013 1013 """
1014 1014
1015 1015 complete = self.Completer.complete
1016 1016 state = 0
1017 1017 # use a dict so we get unique keys, since ipyhton's multiple
1018 1018 # completers can return duplicates. When we make 2.4 a requirement,
1019 1019 # start using sets instead, which are faster.
1020 1020 comps = {}
1021 1021 while True:
1022 1022 newcomp = complete(text,state,line_buffer=text)
1023 1023 if newcomp is None:
1024 1024 break
1025 1025 comps[newcomp] = 1
1026 1026 state += 1
1027 1027 outcomps = comps.keys()
1028 1028 outcomps.sort()
1029 1029 #print "T:",text,"OC:",outcomps # dbg
1030 1030 #print "vars:",self.user_ns.keys()
1031 1031 return outcomps
1032 1032
1033 1033 def set_completer_frame(self, frame=None):
1034 1034 if frame:
1035 1035 self.Completer.namespace = frame.f_locals
1036 1036 self.Completer.global_namespace = frame.f_globals
1037 1037 else:
1038 1038 self.Completer.namespace = self.user_ns
1039 1039 self.Completer.global_namespace = self.user_global_ns
1040 1040
1041 1041 def init_auto_alias(self):
1042 1042 """Define some aliases automatically.
1043 1043
1044 1044 These are ALL parameter-less aliases"""
1045 1045
1046 1046 for alias,cmd in self.auto_alias:
1047 1047 self.getapi().defalias(alias,cmd)
1048 1048
1049 1049
1050 1050 def alias_table_validate(self,verbose=0):
1051 1051 """Update information about the alias table.
1052 1052
1053 1053 In particular, make sure no Python keywords/builtins are in it."""
1054 1054
1055 1055 no_alias = self.no_alias
1056 1056 for k in self.alias_table.keys():
1057 1057 if k in no_alias:
1058 1058 del self.alias_table[k]
1059 1059 if verbose:
1060 1060 print ("Deleting alias <%s>, it's a Python "
1061 1061 "keyword or builtin." % k)
1062 1062
1063 1063 def set_autoindent(self,value=None):
1064 1064 """Set the autoindent flag, checking for readline support.
1065 1065
1066 1066 If called with no arguments, it acts as a toggle."""
1067 1067
1068 1068 if not self.has_readline:
1069 1069 if os.name == 'posix':
1070 1070 warn("The auto-indent feature requires the readline library")
1071 1071 self.autoindent = 0
1072 1072 return
1073 1073 if value is None:
1074 1074 self.autoindent = not self.autoindent
1075 1075 else:
1076 1076 self.autoindent = value
1077 1077
1078 1078 def rc_set_toggle(self,rc_field,value=None):
1079 1079 """Set or toggle a field in IPython's rc config. structure.
1080 1080
1081 1081 If called with no arguments, it acts as a toggle.
1082 1082
1083 1083 If called with a non-existent field, the resulting AttributeError
1084 1084 exception will propagate out."""
1085 1085
1086 1086 rc_val = getattr(self.rc,rc_field)
1087 1087 if value is None:
1088 1088 value = not rc_val
1089 1089 setattr(self.rc,rc_field,value)
1090 1090
1091 1091 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1092 1092 """Install the user configuration directory.
1093 1093
1094 1094 Can be called when running for the first time or to upgrade the user's
1095 1095 .ipython/ directory with the mode parameter. Valid modes are 'install'
1096 1096 and 'upgrade'."""
1097 1097
1098 1098 def wait():
1099 1099 try:
1100 1100 raw_input("Please press <RETURN> to start IPython.")
1101 1101 except EOFError:
1102 1102 print >> Term.cout
1103 1103 print '*'*70
1104 1104
1105 1105 cwd = os.getcwd() # remember where we started
1106 1106 glb = glob.glob
1107 1107 print '*'*70
1108 1108 if mode == 'install':
1109 1109 print \
1110 1110 """Welcome to IPython. I will try to create a personal configuration directory
1111 1111 where you can customize many aspects of IPython's functionality in:\n"""
1112 1112 else:
1113 1113 print 'I am going to upgrade your configuration in:'
1114 1114
1115 1115 print ipythondir
1116 1116
1117 1117 rcdirend = os.path.join('IPython','UserConfig')
1118 1118 cfg = lambda d: os.path.join(d,rcdirend)
1119 1119 try:
1120 1120 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1121 1121 print "Initializing from configuration",rcdir
1122 1122 except IndexError:
1123 1123 warning = """
1124 1124 Installation error. IPython's directory was not found.
1125 1125
1126 1126 Check the following:
1127 1127
1128 1128 The ipython/IPython directory should be in a directory belonging to your
1129 1129 PYTHONPATH environment variable (that is, it should be in a directory
1130 1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1131 1131
1132 1132 IPython will create a minimal default configuration for you.
1133 1133
1134 1134 """
1135 1135 warn(warning)
1136 1136 wait()
1137 1137
1138 1138 if sys.platform =='win32':
1139 1139 inif = 'ipythonrc.ini'
1140 1140 else:
1141 1141 inif = 'ipythonrc'
1142 1142 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults', inif : '# intentionally left blank' }
1143 1143 os.makedirs(ipythondir, mode = 0777)
1144 1144 for f, cont in minimal_setup.items():
1145 1145 open(ipythondir + '/' + f,'w').write(cont)
1146 1146
1147 1147 return
1148 1148
1149 1149 if mode == 'install':
1150 1150 try:
1151 1151 shutil.copytree(rcdir,ipythondir)
1152 1152 os.chdir(ipythondir)
1153 1153 rc_files = glb("ipythonrc*")
1154 1154 for rc_file in rc_files:
1155 1155 os.rename(rc_file,rc_file+rc_suffix)
1156 1156 except:
1157 1157 warning = """
1158 1158
1159 1159 There was a problem with the installation:
1160 1160 %s
1161 1161 Try to correct it or contact the developers if you think it's a bug.
1162 1162 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1163 1163 warn(warning)
1164 1164 wait()
1165 1165 return
1166 1166
1167 1167 elif mode == 'upgrade':
1168 1168 try:
1169 1169 os.chdir(ipythondir)
1170 1170 except:
1171 1171 print """
1172 1172 Can not upgrade: changing to directory %s failed. Details:
1173 1173 %s
1174 1174 """ % (ipythondir,sys.exc_info()[1])
1175 1175 wait()
1176 1176 return
1177 1177 else:
1178 1178 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1179 1179 for new_full_path in sources:
1180 1180 new_filename = os.path.basename(new_full_path)
1181 1181 if new_filename.startswith('ipythonrc'):
1182 1182 new_filename = new_filename + rc_suffix
1183 1183 # The config directory should only contain files, skip any
1184 1184 # directories which may be there (like CVS)
1185 1185 if os.path.isdir(new_full_path):
1186 1186 continue
1187 1187 if os.path.exists(new_filename):
1188 1188 old_file = new_filename+'.old'
1189 1189 if os.path.exists(old_file):
1190 1190 os.remove(old_file)
1191 1191 os.rename(new_filename,old_file)
1192 1192 shutil.copy(new_full_path,new_filename)
1193 1193 else:
1194 1194 raise ValueError,'unrecognized mode for install:',`mode`
1195 1195
1196 1196 # Fix line-endings to those native to each platform in the config
1197 1197 # directory.
1198 1198 try:
1199 1199 os.chdir(ipythondir)
1200 1200 except:
1201 1201 print """
1202 1202 Problem: changing to directory %s failed.
1203 1203 Details:
1204 1204 %s
1205 1205
1206 1206 Some configuration files may have incorrect line endings. This should not
1207 1207 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1208 1208 wait()
1209 1209 else:
1210 1210 for fname in glb('ipythonrc*'):
1211 1211 try:
1212 1212 native_line_ends(fname,backup=0)
1213 1213 except IOError:
1214 1214 pass
1215 1215
1216 1216 if mode == 'install':
1217 1217 print """
1218 1218 Successful installation!
1219 1219
1220 1220 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1221 1221 IPython manual (there are both HTML and PDF versions supplied with the
1222 1222 distribution) to make sure that your system environment is properly configured
1223 1223 to take advantage of IPython's features.
1224 1224
1225 1225 Important note: the configuration system has changed! The old system is
1226 1226 still in place, but its setting may be partly overridden by the settings in
1227 1227 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1228 1228 if some of the new settings bother you.
1229 1229
1230 1230 """
1231 1231 else:
1232 1232 print """
1233 1233 Successful upgrade!
1234 1234
1235 1235 All files in your directory:
1236 1236 %(ipythondir)s
1237 1237 which would have been overwritten by the upgrade were backed up with a .old
1238 1238 extension. If you had made particular customizations in those files you may
1239 1239 want to merge them back into the new files.""" % locals()
1240 1240 wait()
1241 1241 os.chdir(cwd)
1242 1242 # end user_setup()
1243 1243
1244 1244 def atexit_operations(self):
1245 1245 """This will be executed at the time of exit.
1246 1246
1247 1247 Saving of persistent data should be performed here. """
1248 1248
1249 1249 #print '*** IPython exit cleanup ***' # dbg
1250 1250 # input history
1251 1251 self.savehist()
1252 1252
1253 1253 # Cleanup all tempfiles left around
1254 1254 for tfile in self.tempfiles:
1255 1255 try:
1256 1256 os.unlink(tfile)
1257 1257 except OSError:
1258 1258 pass
1259 1259
1260 1260 self.hooks.shutdown_hook()
1261 1261
1262 1262 def savehist(self):
1263 1263 """Save input history to a file (via readline library)."""
1264 1264
1265 1265 if not self.has_readline:
1266 1266 return
1267 1267
1268 1268 try:
1269 1269 self.readline.write_history_file(self.histfile)
1270 1270 except:
1271 1271 print 'Unable to save IPython command history to file: ' + \
1272 1272 `self.histfile`
1273 1273
1274 1274 def reloadhist(self):
1275 1275 """Reload the input history from disk file."""
1276 1276
1277 1277 if self.has_readline:
1278 1278 try:
1279 1279 self.readline.clear_history()
1280 1280 self.readline.read_history_file(self.shell.histfile)
1281 1281 except AttributeError:
1282 1282 pass
1283 1283
1284 1284
1285 1285 def history_saving_wrapper(self, func):
1286 1286 """ Wrap func for readline history saving
1287 1287
1288 1288 Convert func into callable that saves & restores
1289 1289 history around the call """
1290 1290
1291 1291 if not self.has_readline:
1292 1292 return func
1293 1293
1294 1294 def wrapper():
1295 1295 self.savehist()
1296 1296 try:
1297 1297 func()
1298 1298 finally:
1299 1299 readline.read_history_file(self.histfile)
1300 1300 return wrapper
1301 1301
1302 1302
1303 1303 def pre_readline(self):
1304 1304 """readline hook to be used at the start of each line.
1305 1305
1306 1306 Currently it handles auto-indent only."""
1307 1307
1308 1308 #debugx('self.indent_current_nsp','pre_readline:')
1309 1309
1310 1310 if self.rl_do_indent:
1311 1311 self.readline.insert_text(self.indent_current_str())
1312 1312 if self.rl_next_input is not None:
1313 1313 self.readline.insert_text(self.rl_next_input)
1314 1314 self.rl_next_input = None
1315 1315
1316 1316 def init_readline(self):
1317 1317 """Command history completion/saving/reloading."""
1318 1318
1319 1319
1320 1320 import IPython.rlineimpl as readline
1321 1321
1322 1322 if not readline.have_readline:
1323 1323 self.has_readline = 0
1324 1324 self.readline = None
1325 1325 # no point in bugging windows users with this every time:
1326 1326 warn('Readline services not available on this platform.')
1327 1327 else:
1328 1328 sys.modules['readline'] = readline
1329 1329 import atexit
1330 1330 from IPython.completer import IPCompleter
1331 1331 self.Completer = IPCompleter(self,
1332 1332 self.user_ns,
1333 1333 self.user_global_ns,
1334 1334 self.rc.readline_omit__names,
1335 1335 self.alias_table)
1336 1336 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1337 1337 self.strdispatchers['complete_command'] = sdisp
1338 1338 self.Completer.custom_completers = sdisp
1339 1339 # Platform-specific configuration
1340 1340 if os.name == 'nt':
1341 1341 self.readline_startup_hook = readline.set_pre_input_hook
1342 1342 else:
1343 1343 self.readline_startup_hook = readline.set_startup_hook
1344 1344
1345 1345 # Load user's initrc file (readline config)
1346 1346 # Or if libedit is used, load editrc.
1347 1347 inputrc_name = os.environ.get('INPUTRC')
1348 1348 if inputrc_name is None:
1349 1349 home_dir = get_home_dir()
1350 1350 if home_dir is not None:
1351 1351 inputrc_name = '.inputrc'
1352 1352 if readline.uses_libedit:
1353 1353 inputrc_name = '.editrc'
1354 1354 inputrc_name = os.path.join(home_dir, inputrc_name)
1355 1355 if os.path.isfile(inputrc_name):
1356 1356 try:
1357 1357 readline.read_init_file(inputrc_name)
1358 1358 except:
1359 1359 warn('Problems reading readline initialization file <%s>'
1360 1360 % inputrc_name)
1361 1361
1362 1362 self.has_readline = 1
1363 1363 self.readline = readline
1364 1364 # save this in sys so embedded copies can restore it properly
1365 1365 sys.ipcompleter = self.Completer.complete
1366 1366 self.set_completer()
1367 1367
1368 1368 # Configure readline according to user's prefs
1369 1369 # This is only done if GNU readline is being used. If libedit
1370 1370 # is being used (as on Leopard) the readline config is
1371 1371 # not run as the syntax for libedit is different.
1372 1372 if not readline.uses_libedit:
1373 1373 for rlcommand in self.rc.readline_parse_and_bind:
1374 1374 readline.parse_and_bind(rlcommand)
1375 1375
1376 1376 # remove some chars from the delimiters list
1377 1377 delims = readline.get_completer_delims()
1378 1378 delims = delims.translate(string._idmap,
1379 1379 self.rc.readline_remove_delims)
1380 1380 readline.set_completer_delims(delims)
1381 1381 # otherwise we end up with a monster history after a while:
1382 1382 readline.set_history_length(1000)
1383 1383 try:
1384 1384 #print '*** Reading readline history' # dbg
1385 1385 readline.read_history_file(self.histfile)
1386 1386 except IOError:
1387 1387 pass # It doesn't exist yet.
1388 1388
1389 1389 atexit.register(self.atexit_operations)
1390 1390 del atexit
1391 1391
1392 1392 # Configure auto-indent for all platforms
1393 1393 self.set_autoindent(self.rc.autoindent)
1394 1394
1395 1395 def ask_yes_no(self,prompt,default=True):
1396 1396 if self.rc.quiet:
1397 1397 return True
1398 1398 return ask_yes_no(prompt,default)
1399 1399
1400 1400 def _should_recompile(self,e):
1401 1401 """Utility routine for edit_syntax_error"""
1402 1402
1403 1403 if e.filename in ('<ipython console>','<input>','<string>',
1404 1404 '<console>','<BackgroundJob compilation>',
1405 1405 None):
1406 1406
1407 1407 return False
1408 1408 try:
1409 1409 if (self.rc.autoedit_syntax and
1410 1410 not self.ask_yes_no('Return to editor to correct syntax error? '
1411 1411 '[Y/n] ','y')):
1412 1412 return False
1413 1413 except EOFError:
1414 1414 return False
1415 1415
1416 1416 def int0(x):
1417 1417 try:
1418 1418 return int(x)
1419 1419 except TypeError:
1420 1420 return 0
1421 1421 # always pass integer line and offset values to editor hook
1422 self.hooks.fix_error_editor(e.filename,
1423 int0(e.lineno),int0(e.offset),e.msg)
1422 try:
1423 self.hooks.fix_error_editor(e.filename,
1424 int0(e.lineno),int0(e.offset),e.msg)
1425 except IPython.ipapi.TryNext:
1426 warn('Could not open editor')
1427 return False
1424 1428 return True
1425 1429
1426 1430 def edit_syntax_error(self):
1427 1431 """The bottom half of the syntax error handler called in the main loop.
1428 1432
1429 1433 Loop until syntax error is fixed or user cancels.
1430 1434 """
1431 1435
1432 1436 while self.SyntaxTB.last_syntax_error:
1433 1437 # copy and clear last_syntax_error
1434 1438 err = self.SyntaxTB.clear_err_state()
1435 1439 if not self._should_recompile(err):
1436 1440 return
1437 1441 try:
1438 1442 # may set last_syntax_error again if a SyntaxError is raised
1439 1443 self.safe_execfile(err.filename,self.user_ns)
1440 1444 except:
1441 1445 self.showtraceback()
1442 1446 else:
1443 1447 try:
1444 1448 f = file(err.filename)
1445 1449 try:
1446 1450 sys.displayhook(f.read())
1447 1451 finally:
1448 1452 f.close()
1449 1453 except:
1450 1454 self.showtraceback()
1451 1455
1452 1456 def showsyntaxerror(self, filename=None):
1453 1457 """Display the syntax error that just occurred.
1454 1458
1455 1459 This doesn't display a stack trace because there isn't one.
1456 1460
1457 1461 If a filename is given, it is stuffed in the exception instead
1458 1462 of what was there before (because Python's parser always uses
1459 1463 "<string>" when reading from a string).
1460 1464 """
1461 1465 etype, value, last_traceback = sys.exc_info()
1462 1466
1463 1467 # See note about these variables in showtraceback() below
1464 1468 sys.last_type = etype
1465 1469 sys.last_value = value
1466 1470 sys.last_traceback = last_traceback
1467 1471
1468 1472 if filename and etype is SyntaxError:
1469 1473 # Work hard to stuff the correct filename in the exception
1470 1474 try:
1471 1475 msg, (dummy_filename, lineno, offset, line) = value
1472 1476 except:
1473 1477 # Not the format we expect; leave it alone
1474 1478 pass
1475 1479 else:
1476 1480 # Stuff in the right filename
1477 1481 try:
1478 1482 # Assume SyntaxError is a class exception
1479 1483 value = SyntaxError(msg, (filename, lineno, offset, line))
1480 1484 except:
1481 1485 # If that failed, assume SyntaxError is a string
1482 1486 value = msg, (filename, lineno, offset, line)
1483 1487 self.SyntaxTB(etype,value,[])
1484 1488
1485 1489 def debugger(self,force=False):
1486 1490 """Call the pydb/pdb debugger.
1487 1491
1488 1492 Keywords:
1489 1493
1490 1494 - force(False): by default, this routine checks the instance call_pdb
1491 1495 flag and does not actually invoke the debugger if the flag is false.
1492 1496 The 'force' option forces the debugger to activate even if the flag
1493 1497 is false.
1494 1498 """
1495 1499
1496 1500 if not (force or self.call_pdb):
1497 1501 return
1498 1502
1499 1503 if not hasattr(sys,'last_traceback'):
1500 1504 error('No traceback has been produced, nothing to debug.')
1501 1505 return
1502 1506
1503 1507 # use pydb if available
1504 1508 if Debugger.has_pydb:
1505 1509 from pydb import pm
1506 1510 else:
1507 1511 # fallback to our internal debugger
1508 1512 pm = lambda : self.InteractiveTB.debugger(force=True)
1509 1513 self.history_saving_wrapper(pm)()
1510 1514
1511 1515 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1512 1516 """Display the exception that just occurred.
1513 1517
1514 1518 If nothing is known about the exception, this is the method which
1515 1519 should be used throughout the code for presenting user tracebacks,
1516 1520 rather than directly invoking the InteractiveTB object.
1517 1521
1518 1522 A specific showsyntaxerror() also exists, but this method can take
1519 1523 care of calling it if needed, so unless you are explicitly catching a
1520 1524 SyntaxError exception, don't try to analyze the stack manually and
1521 1525 simply call this method."""
1522 1526
1523 1527
1524 1528 # Though this won't be called by syntax errors in the input line,
1525 1529 # there may be SyntaxError cases whith imported code.
1526 1530
1527 1531 try:
1528 1532 if exc_tuple is None:
1529 1533 etype, value, tb = sys.exc_info()
1530 1534 else:
1531 1535 etype, value, tb = exc_tuple
1532 1536
1533 1537 if etype is SyntaxError:
1534 1538 self.showsyntaxerror(filename)
1535 1539 elif etype is IPython.ipapi.UsageError:
1536 1540 print "UsageError:", value
1537 1541 else:
1538 1542 # WARNING: these variables are somewhat deprecated and not
1539 1543 # necessarily safe to use in a threaded environment, but tools
1540 1544 # like pdb depend on their existence, so let's set them. If we
1541 1545 # find problems in the field, we'll need to revisit their use.
1542 1546 sys.last_type = etype
1543 1547 sys.last_value = value
1544 1548 sys.last_traceback = tb
1545 1549
1546 1550 if etype in self.custom_exceptions:
1547 1551 self.CustomTB(etype,value,tb)
1548 1552 else:
1549 1553 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1550 1554 if self.InteractiveTB.call_pdb and self.has_readline:
1551 1555 # pdb mucks up readline, fix it back
1552 1556 self.set_completer()
1553 1557 except KeyboardInterrupt:
1554 1558 self.write("\nKeyboardInterrupt\n")
1555 1559
1556 1560
1557 1561
1558 1562 def mainloop(self,banner=None):
1559 1563 """Creates the local namespace and starts the mainloop.
1560 1564
1561 1565 If an optional banner argument is given, it will override the
1562 1566 internally created default banner."""
1563 1567
1564 1568 if self.rc.c: # Emulate Python's -c option
1565 1569 self.exec_init_cmd()
1566 1570 if banner is None:
1567 1571 if not self.rc.banner:
1568 1572 banner = ''
1569 1573 # banner is string? Use it directly!
1570 1574 elif isinstance(self.rc.banner,basestring):
1571 1575 banner = self.rc.banner
1572 1576 else:
1573 1577 banner = self.BANNER+self.banner2
1574 1578
1575 1579 # if you run stuff with -c <cmd>, raw hist is not updated
1576 1580 # ensure that it's in sync
1577 1581 if len(self.input_hist) != len (self.input_hist_raw):
1578 1582 self.input_hist_raw = InputList(self.input_hist)
1579 1583
1580 1584 while 1:
1581 1585 try:
1582 1586 self.interact(banner)
1583 1587 #self.interact_with_readline()
1584 1588 # XXX for testing of a readline-decoupled repl loop, call interact_with_readline above
1585 1589
1586 1590 break
1587 1591 except KeyboardInterrupt:
1588 1592 # this should not be necessary, but KeyboardInterrupt
1589 1593 # handling seems rather unpredictable...
1590 1594 self.write("\nKeyboardInterrupt in interact()\n")
1591 1595
1592 1596 def exec_init_cmd(self):
1593 1597 """Execute a command given at the command line.
1594 1598
1595 1599 This emulates Python's -c option."""
1596 1600
1597 1601 #sys.argv = ['-c']
1598 1602 self.push(self.prefilter(self.rc.c, False))
1599 1603 if not self.rc.interact:
1600 1604 self.ask_exit()
1601 1605
1602 1606 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1603 1607 """Embeds IPython into a running python program.
1604 1608
1605 1609 Input:
1606 1610
1607 1611 - header: An optional header message can be specified.
1608 1612
1609 1613 - local_ns, global_ns: working namespaces. If given as None, the
1610 1614 IPython-initialized one is updated with __main__.__dict__, so that
1611 1615 program variables become visible but user-specific configuration
1612 1616 remains possible.
1613 1617
1614 1618 - stack_depth: specifies how many levels in the stack to go to
1615 1619 looking for namespaces (when local_ns and global_ns are None). This
1616 1620 allows an intermediate caller to make sure that this function gets
1617 1621 the namespace from the intended level in the stack. By default (0)
1618 1622 it will get its locals and globals from the immediate caller.
1619 1623
1620 1624 Warning: it's possible to use this in a program which is being run by
1621 1625 IPython itself (via %run), but some funny things will happen (a few
1622 1626 globals get overwritten). In the future this will be cleaned up, as
1623 1627 there is no fundamental reason why it can't work perfectly."""
1624 1628
1625 1629 # Get locals and globals from caller
1626 1630 if local_ns is None or global_ns is None:
1627 1631 call_frame = sys._getframe(stack_depth).f_back
1628 1632
1629 1633 if local_ns is None:
1630 1634 local_ns = call_frame.f_locals
1631 1635 if global_ns is None:
1632 1636 global_ns = call_frame.f_globals
1633 1637
1634 1638 # Update namespaces and fire up interpreter
1635 1639
1636 1640 # The global one is easy, we can just throw it in
1637 1641 self.user_global_ns = global_ns
1638 1642
1639 1643 # but the user/local one is tricky: ipython needs it to store internal
1640 1644 # data, but we also need the locals. We'll copy locals in the user
1641 1645 # one, but will track what got copied so we can delete them at exit.
1642 1646 # This is so that a later embedded call doesn't see locals from a
1643 1647 # previous call (which most likely existed in a separate scope).
1644 1648 local_varnames = local_ns.keys()
1645 1649 self.user_ns.update(local_ns)
1646 1650 #self.user_ns['local_ns'] = local_ns # dbg
1647 1651
1648 1652 # Patch for global embedding to make sure that things don't overwrite
1649 1653 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1650 1654 # FIXME. Test this a bit more carefully (the if.. is new)
1651 1655 if local_ns is None and global_ns is None:
1652 1656 self.user_global_ns.update(__main__.__dict__)
1653 1657
1654 1658 # make sure the tab-completer has the correct frame information, so it
1655 1659 # actually completes using the frame's locals/globals
1656 1660 self.set_completer_frame()
1657 1661
1658 1662 # before activating the interactive mode, we need to make sure that
1659 1663 # all names in the builtin namespace needed by ipython point to
1660 1664 # ourselves, and not to other instances.
1661 1665 self.add_builtins()
1662 1666
1663 1667 self.interact(header)
1664 1668
1665 1669 # now, purge out the user namespace from anything we might have added
1666 1670 # from the caller's local namespace
1667 1671 delvar = self.user_ns.pop
1668 1672 for var in local_varnames:
1669 1673 delvar(var,None)
1670 1674 # and clean builtins we may have overridden
1671 1675 self.clean_builtins()
1672 1676
1673 1677 def interact_prompt(self):
1674 1678 """ Print the prompt (in read-eval-print loop)
1675 1679
1676 1680 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1677 1681 used in standard IPython flow.
1678 1682 """
1679 1683 if self.more:
1680 1684 try:
1681 1685 prompt = self.hooks.generate_prompt(True)
1682 1686 except:
1683 1687 self.showtraceback()
1684 1688 if self.autoindent:
1685 1689 self.rl_do_indent = True
1686 1690
1687 1691 else:
1688 1692 try:
1689 1693 prompt = self.hooks.generate_prompt(False)
1690 1694 except:
1691 1695 self.showtraceback()
1692 1696 self.write(prompt)
1693 1697
1694 1698 def interact_handle_input(self,line):
1695 1699 """ Handle the input line (in read-eval-print loop)
1696 1700
1697 1701 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1698 1702 used in standard IPython flow.
1699 1703 """
1700 1704 if line.lstrip() == line:
1701 1705 self.shadowhist.add(line.strip())
1702 1706 lineout = self.prefilter(line,self.more)
1703 1707
1704 1708 if line.strip():
1705 1709 if self.more:
1706 1710 self.input_hist_raw[-1] += '%s\n' % line
1707 1711 else:
1708 1712 self.input_hist_raw.append('%s\n' % line)
1709 1713
1710 1714
1711 1715 self.more = self.push(lineout)
1712 1716 if (self.SyntaxTB.last_syntax_error and
1713 1717 self.rc.autoedit_syntax):
1714 1718 self.edit_syntax_error()
1715 1719
1716 1720 def interact_with_readline(self):
1717 1721 """ Demo of using interact_handle_input, interact_prompt
1718 1722
1719 1723 This is the main read-eval-print loop. If you need to implement your own (e.g. for GUI),
1720 1724 it should work like this.
1721 1725 """
1722 1726 self.readline_startup_hook(self.pre_readline)
1723 1727 while not self.exit_now:
1724 1728 self.interact_prompt()
1725 1729 if self.more:
1726 1730 self.rl_do_indent = True
1727 1731 else:
1728 1732 self.rl_do_indent = False
1729 1733 line = raw_input_original().decode(self.stdin_encoding)
1730 1734 self.interact_handle_input(line)
1731 1735
1732 1736
1733 1737 def interact(self, banner=None):
1734 1738 """Closely emulate the interactive Python console.
1735 1739
1736 1740 The optional banner argument specify the banner to print
1737 1741 before the first interaction; by default it prints a banner
1738 1742 similar to the one printed by the real Python interpreter,
1739 1743 followed by the current class name in parentheses (so as not
1740 1744 to confuse this with the real interpreter -- since it's so
1741 1745 close!).
1742 1746
1743 1747 """
1744 1748
1745 1749 if self.exit_now:
1746 1750 # batch run -> do not interact
1747 1751 return
1748 1752 cprt = 'Type "copyright", "credits" or "license" for more information.'
1749 1753 if banner is None:
1750 1754 self.write("Python %s on %s\n%s\n(%s)\n" %
1751 1755 (sys.version, sys.platform, cprt,
1752 1756 self.__class__.__name__))
1753 1757 else:
1754 1758 self.write(banner)
1755 1759
1756 1760 more = 0
1757 1761
1758 1762 # Mark activity in the builtins
1759 1763 __builtin__.__dict__['__IPYTHON__active'] += 1
1760 1764
1761 1765 if self.has_readline:
1762 1766 self.readline_startup_hook(self.pre_readline)
1763 1767 # exit_now is set by a call to %Exit or %Quit, through the
1764 1768 # ask_exit callback.
1765 1769
1766 1770 while not self.exit_now:
1767 1771 self.hooks.pre_prompt_hook()
1768 1772 if more:
1769 1773 try:
1770 1774 prompt = self.hooks.generate_prompt(True)
1771 1775 except:
1772 1776 self.showtraceback()
1773 1777 if self.autoindent:
1774 1778 self.rl_do_indent = True
1775 1779
1776 1780 else:
1777 1781 try:
1778 1782 prompt = self.hooks.generate_prompt(False)
1779 1783 except:
1780 1784 self.showtraceback()
1781 1785 try:
1782 1786 line = self.raw_input(prompt,more)
1783 1787 if self.exit_now:
1784 1788 # quick exit on sys.std[in|out] close
1785 1789 break
1786 1790 if self.autoindent:
1787 1791 self.rl_do_indent = False
1788 1792
1789 1793 except KeyboardInterrupt:
1790 1794 #double-guard against keyboardinterrupts during kbdint handling
1791 1795 try:
1792 1796 self.write('\nKeyboardInterrupt\n')
1793 1797 self.resetbuffer()
1794 1798 # keep cache in sync with the prompt counter:
1795 1799 self.outputcache.prompt_count -= 1
1796 1800
1797 1801 if self.autoindent:
1798 1802 self.indent_current_nsp = 0
1799 1803 more = 0
1800 1804 except KeyboardInterrupt:
1801 1805 pass
1802 1806 except EOFError:
1803 1807 if self.autoindent:
1804 1808 self.rl_do_indent = False
1805 1809 self.readline_startup_hook(None)
1806 1810 self.write('\n')
1807 1811 self.exit()
1808 1812 except bdb.BdbQuit:
1809 1813 warn('The Python debugger has exited with a BdbQuit exception.\n'
1810 1814 'Because of how pdb handles the stack, it is impossible\n'
1811 1815 'for IPython to properly format this particular exception.\n'
1812 1816 'IPython will resume normal operation.')
1813 1817 except:
1814 1818 # exceptions here are VERY RARE, but they can be triggered
1815 1819 # asynchronously by signal handlers, for example.
1816 1820 self.showtraceback()
1817 1821 else:
1818 1822 more = self.push(line)
1819 1823 if (self.SyntaxTB.last_syntax_error and
1820 1824 self.rc.autoedit_syntax):
1821 1825 self.edit_syntax_error()
1822 1826
1823 1827 # We are off again...
1824 1828 __builtin__.__dict__['__IPYTHON__active'] -= 1
1825 1829
1826 1830 def excepthook(self, etype, value, tb):
1827 1831 """One more defense for GUI apps that call sys.excepthook.
1828 1832
1829 1833 GUI frameworks like wxPython trap exceptions and call
1830 1834 sys.excepthook themselves. I guess this is a feature that
1831 1835 enables them to keep running after exceptions that would
1832 1836 otherwise kill their mainloop. This is a bother for IPython
1833 1837 which excepts to catch all of the program exceptions with a try:
1834 1838 except: statement.
1835 1839
1836 1840 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1837 1841 any app directly invokes sys.excepthook, it will look to the user like
1838 1842 IPython crashed. In order to work around this, we can disable the
1839 1843 CrashHandler and replace it with this excepthook instead, which prints a
1840 1844 regular traceback using our InteractiveTB. In this fashion, apps which
1841 1845 call sys.excepthook will generate a regular-looking exception from
1842 1846 IPython, and the CrashHandler will only be triggered by real IPython
1843 1847 crashes.
1844 1848
1845 1849 This hook should be used sparingly, only in places which are not likely
1846 1850 to be true IPython errors.
1847 1851 """
1848 1852 self.showtraceback((etype,value,tb),tb_offset=0)
1849 1853
1850 1854 def expand_aliases(self,fn,rest):
1851 1855 """ Expand multiple levels of aliases:
1852 1856
1853 1857 if:
1854 1858
1855 1859 alias foo bar /tmp
1856 1860 alias baz foo
1857 1861
1858 1862 then:
1859 1863
1860 1864 baz huhhahhei -> bar /tmp huhhahhei
1861 1865
1862 1866 """
1863 1867 line = fn + " " + rest
1864 1868
1865 1869 done = Set()
1866 1870 while 1:
1867 1871 pre,fn,rest = prefilter.splitUserInput(line,
1868 1872 prefilter.shell_line_split)
1869 1873 if fn in self.alias_table:
1870 1874 if fn in done:
1871 1875 warn("Cyclic alias definition, repeated '%s'" % fn)
1872 1876 return ""
1873 1877 done.add(fn)
1874 1878
1875 1879 l2 = self.transform_alias(fn,rest)
1876 1880 # dir -> dir
1877 1881 # print "alias",line, "->",l2 #dbg
1878 1882 if l2 == line:
1879 1883 break
1880 1884 # ls -> ls -F should not recurse forever
1881 1885 if l2.split(None,1)[0] == line.split(None,1)[0]:
1882 1886 line = l2
1883 1887 break
1884 1888
1885 1889 line=l2
1886 1890
1887 1891
1888 1892 # print "al expand to",line #dbg
1889 1893 else:
1890 1894 break
1891 1895
1892 1896 return line
1893 1897
1894 1898 def transform_alias(self, alias,rest=''):
1895 1899 """ Transform alias to system command string.
1896 1900 """
1897 1901 trg = self.alias_table[alias]
1898 1902
1899 1903 nargs,cmd = trg
1900 1904 # print trg #dbg
1901 1905 if ' ' in cmd and os.path.isfile(cmd):
1902 1906 cmd = '"%s"' % cmd
1903 1907
1904 1908 # Expand the %l special to be the user's input line
1905 1909 if cmd.find('%l') >= 0:
1906 1910 cmd = cmd.replace('%l',rest)
1907 1911 rest = ''
1908 1912 if nargs==0:
1909 1913 # Simple, argument-less aliases
1910 1914 cmd = '%s %s' % (cmd,rest)
1911 1915 else:
1912 1916 # Handle aliases with positional arguments
1913 1917 args = rest.split(None,nargs)
1914 1918 if len(args)< nargs:
1915 1919 error('Alias <%s> requires %s arguments, %s given.' %
1916 1920 (alias,nargs,len(args)))
1917 1921 return None
1918 1922 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1919 1923 # Now call the macro, evaluating in the user's namespace
1920 1924 #print 'new command: <%r>' % cmd # dbg
1921 1925 return cmd
1922 1926
1923 1927 def call_alias(self,alias,rest=''):
1924 1928 """Call an alias given its name and the rest of the line.
1925 1929
1926 1930 This is only used to provide backwards compatibility for users of
1927 1931 ipalias(), use of which is not recommended for anymore."""
1928 1932
1929 1933 # Now call the macro, evaluating in the user's namespace
1930 1934 cmd = self.transform_alias(alias, rest)
1931 1935 try:
1932 1936 self.system(cmd)
1933 1937 except:
1934 1938 self.showtraceback()
1935 1939
1936 1940 def indent_current_str(self):
1937 1941 """return the current level of indentation as a string"""
1938 1942 return self.indent_current_nsp * ' '
1939 1943
1940 1944 def autoindent_update(self,line):
1941 1945 """Keep track of the indent level."""
1942 1946
1943 1947 #debugx('line')
1944 1948 #debugx('self.indent_current_nsp')
1945 1949 if self.autoindent:
1946 1950 if line:
1947 1951 inisp = num_ini_spaces(line)
1948 1952 if inisp < self.indent_current_nsp:
1949 1953 self.indent_current_nsp = inisp
1950 1954
1951 1955 if line[-1] == ':':
1952 1956 self.indent_current_nsp += 4
1953 1957 elif dedent_re.match(line):
1954 1958 self.indent_current_nsp -= 4
1955 1959 else:
1956 1960 self.indent_current_nsp = 0
1957 1961
1958 1962 def runlines(self,lines):
1959 1963 """Run a string of one or more lines of source.
1960 1964
1961 1965 This method is capable of running a string containing multiple source
1962 1966 lines, as if they had been entered at the IPython prompt. Since it
1963 1967 exposes IPython's processing machinery, the given strings can contain
1964 1968 magic calls (%magic), special shell access (!cmd), etc."""
1965 1969
1966 1970 # We must start with a clean buffer, in case this is run from an
1967 1971 # interactive IPython session (via a magic, for example).
1968 1972 self.resetbuffer()
1969 1973 lines = lines.split('\n')
1970 1974 more = 0
1971 1975
1972 1976 for line in lines:
1973 1977 # skip blank lines so we don't mess up the prompt counter, but do
1974 1978 # NOT skip even a blank line if we are in a code block (more is
1975 1979 # true)
1976 1980
1977 1981
1978 1982 if line or more:
1979 1983 # push to raw history, so hist line numbers stay in sync
1980 1984 self.input_hist_raw.append("# " + line + "\n")
1981 1985 more = self.push(self.prefilter(line,more))
1982 1986 # IPython's runsource returns None if there was an error
1983 1987 # compiling the code. This allows us to stop processing right
1984 1988 # away, so the user gets the error message at the right place.
1985 1989 if more is None:
1986 1990 break
1987 1991 else:
1988 1992 self.input_hist_raw.append("\n")
1989 1993 # final newline in case the input didn't have it, so that the code
1990 1994 # actually does get executed
1991 1995 if more:
1992 1996 self.push('\n')
1993 1997
1994 1998 def runsource(self, source, filename='<input>', symbol='single'):
1995 1999 """Compile and run some source in the interpreter.
1996 2000
1997 2001 Arguments are as for compile_command().
1998 2002
1999 2003 One several things can happen:
2000 2004
2001 2005 1) The input is incorrect; compile_command() raised an
2002 2006 exception (SyntaxError or OverflowError). A syntax traceback
2003 2007 will be printed by calling the showsyntaxerror() method.
2004 2008
2005 2009 2) The input is incomplete, and more input is required;
2006 2010 compile_command() returned None. Nothing happens.
2007 2011
2008 2012 3) The input is complete; compile_command() returned a code
2009 2013 object. The code is executed by calling self.runcode() (which
2010 2014 also handles run-time exceptions, except for SystemExit).
2011 2015
2012 2016 The return value is:
2013 2017
2014 2018 - True in case 2
2015 2019
2016 2020 - False in the other cases, unless an exception is raised, where
2017 2021 None is returned instead. This can be used by external callers to
2018 2022 know whether to continue feeding input or not.
2019 2023
2020 2024 The return value can be used to decide whether to use sys.ps1 or
2021 2025 sys.ps2 to prompt the next line."""
2022 2026
2023 2027 # if the source code has leading blanks, add 'if 1:\n' to it
2024 2028 # this allows execution of indented pasted code. It is tempting
2025 2029 # to add '\n' at the end of source to run commands like ' a=1'
2026 2030 # directly, but this fails for more complicated scenarios
2027 2031 source=source.encode(self.stdin_encoding)
2028 2032 if source[:1] in [' ', '\t']:
2029 2033 source = 'if 1:\n%s' % source
2030 2034
2031 2035 try:
2032 2036 code = self.compile(source,filename,symbol)
2033 2037 except (OverflowError, SyntaxError, ValueError, TypeError):
2034 2038 # Case 1
2035 2039 self.showsyntaxerror(filename)
2036 2040 return None
2037 2041
2038 2042 if code is None:
2039 2043 # Case 2
2040 2044 return True
2041 2045
2042 2046 # Case 3
2043 2047 # We store the code object so that threaded shells and
2044 2048 # custom exception handlers can access all this info if needed.
2045 2049 # The source corresponding to this can be obtained from the
2046 2050 # buffer attribute as '\n'.join(self.buffer).
2047 2051 self.code_to_run = code
2048 2052 # now actually execute the code object
2049 2053 if self.runcode(code) == 0:
2050 2054 return False
2051 2055 else:
2052 2056 return None
2053 2057
2054 2058 def runcode(self,code_obj):
2055 2059 """Execute a code object.
2056 2060
2057 2061 When an exception occurs, self.showtraceback() is called to display a
2058 2062 traceback.
2059 2063
2060 2064 Return value: a flag indicating whether the code to be run completed
2061 2065 successfully:
2062 2066
2063 2067 - 0: successful execution.
2064 2068 - 1: an error occurred.
2065 2069 """
2066 2070
2067 2071 # Set our own excepthook in case the user code tries to call it
2068 2072 # directly, so that the IPython crash handler doesn't get triggered
2069 2073 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2070 2074
2071 2075 # we save the original sys.excepthook in the instance, in case config
2072 2076 # code (such as magics) needs access to it.
2073 2077 self.sys_excepthook = old_excepthook
2074 2078 outflag = 1 # happens in more places, so it's easier as default
2075 2079 try:
2076 2080 try:
2077 2081 self.hooks.pre_runcode_hook()
2078 2082 exec code_obj in self.user_global_ns, self.user_ns
2079 2083 finally:
2080 2084 # Reset our crash handler in place
2081 2085 sys.excepthook = old_excepthook
2082 2086 except SystemExit:
2083 2087 self.resetbuffer()
2084 2088 self.showtraceback()
2085 2089 warn("Type %exit or %quit to exit IPython "
2086 2090 "(%Exit or %Quit do so unconditionally).",level=1)
2087 2091 except self.custom_exceptions:
2088 2092 etype,value,tb = sys.exc_info()
2089 2093 self.CustomTB(etype,value,tb)
2090 2094 except:
2091 2095 self.showtraceback()
2092 2096 else:
2093 2097 outflag = 0
2094 2098 if softspace(sys.stdout, 0):
2095 2099 print
2096 2100 # Flush out code object which has been run (and source)
2097 2101 self.code_to_run = None
2098 2102 return outflag
2099 2103
2100 2104 def push(self, line):
2101 2105 """Push a line to the interpreter.
2102 2106
2103 2107 The line should not have a trailing newline; it may have
2104 2108 internal newlines. The line is appended to a buffer and the
2105 2109 interpreter's runsource() method is called with the
2106 2110 concatenated contents of the buffer as source. If this
2107 2111 indicates that the command was executed or invalid, the buffer
2108 2112 is reset; otherwise, the command is incomplete, and the buffer
2109 2113 is left as it was after the line was appended. The return
2110 2114 value is 1 if more input is required, 0 if the line was dealt
2111 2115 with in some way (this is the same as runsource()).
2112 2116 """
2113 2117
2114 2118 # autoindent management should be done here, and not in the
2115 2119 # interactive loop, since that one is only seen by keyboard input. We
2116 2120 # need this done correctly even for code run via runlines (which uses
2117 2121 # push).
2118 2122
2119 2123 #print 'push line: <%s>' % line # dbg
2120 2124 for subline in line.splitlines():
2121 2125 self.autoindent_update(subline)
2122 2126 self.buffer.append(line)
2123 2127 more = self.runsource('\n'.join(self.buffer), self.filename)
2124 2128 if not more:
2125 2129 self.resetbuffer()
2126 2130 return more
2127 2131
2128 2132 def split_user_input(self, line):
2129 2133 # This is really a hold-over to support ipapi and some extensions
2130 2134 return prefilter.splitUserInput(line)
2131 2135
2132 2136 def resetbuffer(self):
2133 2137 """Reset the input buffer."""
2134 2138 self.buffer[:] = []
2135 2139
2136 2140 def raw_input(self,prompt='',continue_prompt=False):
2137 2141 """Write a prompt and read a line.
2138 2142
2139 2143 The returned line does not include the trailing newline.
2140 2144 When the user enters the EOF key sequence, EOFError is raised.
2141 2145
2142 2146 Optional inputs:
2143 2147
2144 2148 - prompt(''): a string to be printed to prompt the user.
2145 2149
2146 2150 - continue_prompt(False): whether this line is the first one or a
2147 2151 continuation in a sequence of inputs.
2148 2152 """
2149 2153
2150 2154 # Code run by the user may have modified the readline completer state.
2151 2155 # We must ensure that our completer is back in place.
2152 2156 if self.has_readline:
2153 2157 self.set_completer()
2154 2158
2155 2159 try:
2156 2160 line = raw_input_original(prompt).decode(self.stdin_encoding)
2157 2161 except ValueError:
2158 2162 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2159 2163 " or sys.stdout.close()!\nExiting IPython!")
2160 2164 self.ask_exit()
2161 2165 return ""
2162 2166
2163 2167 # Try to be reasonably smart about not re-indenting pasted input more
2164 2168 # than necessary. We do this by trimming out the auto-indent initial
2165 2169 # spaces, if the user's actual input started itself with whitespace.
2166 2170 #debugx('self.buffer[-1]')
2167 2171
2168 2172 if self.autoindent:
2169 2173 if num_ini_spaces(line) > self.indent_current_nsp:
2170 2174 line = line[self.indent_current_nsp:]
2171 2175 self.indent_current_nsp = 0
2172 2176
2173 2177 # store the unfiltered input before the user has any chance to modify
2174 2178 # it.
2175 2179 if line.strip():
2176 2180 if continue_prompt:
2177 2181 self.input_hist_raw[-1] += '%s\n' % line
2178 2182 if self.has_readline: # and some config option is set?
2179 2183 try:
2180 2184 histlen = self.readline.get_current_history_length()
2181 2185 if histlen > 1:
2182 2186 newhist = self.input_hist_raw[-1].rstrip()
2183 2187 self.readline.remove_history_item(histlen-1)
2184 2188 self.readline.replace_history_item(histlen-2,
2185 2189 newhist.encode(self.stdin_encoding))
2186 2190 except AttributeError:
2187 2191 pass # re{move,place}_history_item are new in 2.4.
2188 2192 else:
2189 2193 self.input_hist_raw.append('%s\n' % line)
2190 2194 # only entries starting at first column go to shadow history
2191 2195 if line.lstrip() == line:
2192 2196 self.shadowhist.add(line.strip())
2193 2197 elif not continue_prompt:
2194 2198 self.input_hist_raw.append('\n')
2195 2199 try:
2196 2200 lineout = self.prefilter(line,continue_prompt)
2197 2201 except:
2198 2202 # blanket except, in case a user-defined prefilter crashes, so it
2199 2203 # can't take all of ipython with it.
2200 2204 self.showtraceback()
2201 2205 return ''
2202 2206 else:
2203 2207 return lineout
2204 2208
2205 2209 def _prefilter(self, line, continue_prompt):
2206 2210 """Calls different preprocessors, depending on the form of line."""
2207 2211
2208 2212 # All handlers *must* return a value, even if it's blank ('').
2209 2213
2210 2214 # Lines are NOT logged here. Handlers should process the line as
2211 2215 # needed, update the cache AND log it (so that the input cache array
2212 2216 # stays synced).
2213 2217
2214 2218 #.....................................................................
2215 2219 # Code begins
2216 2220
2217 2221 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2218 2222
2219 2223 # save the line away in case we crash, so the post-mortem handler can
2220 2224 # record it
2221 2225 self._last_input_line = line
2222 2226
2223 2227 #print '***line: <%s>' % line # dbg
2224 2228
2225 2229 if not line:
2226 2230 # Return immediately on purely empty lines, so that if the user
2227 2231 # previously typed some whitespace that started a continuation
2228 2232 # prompt, he can break out of that loop with just an empty line.
2229 2233 # This is how the default python prompt works.
2230 2234
2231 2235 # Only return if the accumulated input buffer was just whitespace!
2232 2236 if ''.join(self.buffer).isspace():
2233 2237 self.buffer[:] = []
2234 2238 return ''
2235 2239
2236 2240 line_info = prefilter.LineInfo(line, continue_prompt)
2237 2241
2238 2242 # the input history needs to track even empty lines
2239 2243 stripped = line.strip()
2240 2244
2241 2245 if not stripped:
2242 2246 if not continue_prompt:
2243 2247 self.outputcache.prompt_count -= 1
2244 2248 return self.handle_normal(line_info)
2245 2249
2246 2250 # print '***cont',continue_prompt # dbg
2247 2251 # special handlers are only allowed for single line statements
2248 2252 if continue_prompt and not self.rc.multi_line_specials:
2249 2253 return self.handle_normal(line_info)
2250 2254
2251 2255
2252 2256 # See whether any pre-existing handler can take care of it
2253 2257 rewritten = self.hooks.input_prefilter(stripped)
2254 2258 if rewritten != stripped: # ok, some prefilter did something
2255 2259 rewritten = line_info.pre + rewritten # add indentation
2256 2260 return self.handle_normal(prefilter.LineInfo(rewritten,
2257 2261 continue_prompt))
2258 2262
2259 2263 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2260 2264
2261 2265 return prefilter.prefilter(line_info, self)
2262 2266
2263 2267
2264 2268 def _prefilter_dumb(self, line, continue_prompt):
2265 2269 """simple prefilter function, for debugging"""
2266 2270 return self.handle_normal(line,continue_prompt)
2267 2271
2268 2272
2269 2273 def multiline_prefilter(self, line, continue_prompt):
2270 2274 """ Run _prefilter for each line of input
2271 2275
2272 2276 Covers cases where there are multiple lines in the user entry,
2273 2277 which is the case when the user goes back to a multiline history
2274 2278 entry and presses enter.
2275 2279
2276 2280 """
2277 2281 out = []
2278 2282 for l in line.rstrip('\n').split('\n'):
2279 2283 out.append(self._prefilter(l, continue_prompt))
2280 2284 return '\n'.join(out)
2281 2285
2282 2286 # Set the default prefilter() function (this can be user-overridden)
2283 2287 prefilter = multiline_prefilter
2284 2288
2285 2289 def handle_normal(self,line_info):
2286 2290 """Handle normal input lines. Use as a template for handlers."""
2287 2291
2288 2292 # With autoindent on, we need some way to exit the input loop, and I
2289 2293 # don't want to force the user to have to backspace all the way to
2290 2294 # clear the line. The rule will be in this case, that either two
2291 2295 # lines of pure whitespace in a row, or a line of pure whitespace but
2292 2296 # of a size different to the indent level, will exit the input loop.
2293 2297 line = line_info.line
2294 2298 continue_prompt = line_info.continue_prompt
2295 2299
2296 2300 if (continue_prompt and self.autoindent and line.isspace() and
2297 2301 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2298 2302 (self.buffer[-1]).isspace() )):
2299 2303 line = ''
2300 2304
2301 2305 self.log(line,line,continue_prompt)
2302 2306 return line
2303 2307
2304 2308 def handle_alias(self,line_info):
2305 2309 """Handle alias input lines. """
2306 2310 tgt = self.alias_table[line_info.iFun]
2307 2311 # print "=>",tgt #dbg
2308 2312 if callable(tgt):
2309 2313 if '$' in line_info.line:
2310 2314 call_meth = '(_ip, _ip.itpl(%s))'
2311 2315 else:
2312 2316 call_meth = '(_ip,%s)'
2313 2317 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2314 2318 line_info.iFun,
2315 2319 make_quoted_expr(line_info.line))
2316 2320 else:
2317 2321 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2318 2322
2319 2323 # pre is needed, because it carries the leading whitespace. Otherwise
2320 2324 # aliases won't work in indented sections.
2321 2325 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2322 2326 make_quoted_expr( transformed ))
2323 2327
2324 2328 self.log(line_info.line,line_out,line_info.continue_prompt)
2325 2329 #print 'line out:',line_out # dbg
2326 2330 return line_out
2327 2331
2328 2332 def handle_shell_escape(self, line_info):
2329 2333 """Execute the line in a shell, empty return value"""
2330 2334 #print 'line in :', `line` # dbg
2331 2335 line = line_info.line
2332 2336 if line.lstrip().startswith('!!'):
2333 2337 # rewrite LineInfo's line, iFun and theRest to properly hold the
2334 2338 # call to %sx and the actual command to be executed, so
2335 2339 # handle_magic can work correctly. Note that this works even if
2336 2340 # the line is indented, so it handles multi_line_specials
2337 2341 # properly.
2338 2342 new_rest = line.lstrip()[2:]
2339 2343 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2340 2344 line_info.iFun = 'sx'
2341 2345 line_info.theRest = new_rest
2342 2346 return self.handle_magic(line_info)
2343 2347 else:
2344 2348 cmd = line.lstrip().lstrip('!')
2345 2349 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2346 2350 make_quoted_expr(cmd))
2347 2351 # update cache/log and return
2348 2352 self.log(line,line_out,line_info.continue_prompt)
2349 2353 return line_out
2350 2354
2351 2355 def handle_magic(self, line_info):
2352 2356 """Execute magic functions."""
2353 2357 iFun = line_info.iFun
2354 2358 theRest = line_info.theRest
2355 2359 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2356 2360 make_quoted_expr(iFun + " " + theRest))
2357 2361 self.log(line_info.line,cmd,line_info.continue_prompt)
2358 2362 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2359 2363 return cmd
2360 2364
2361 2365 def handle_auto(self, line_info):
2362 2366 """Hande lines which can be auto-executed, quoting if requested."""
2363 2367
2364 2368 line = line_info.line
2365 2369 iFun = line_info.iFun
2366 2370 theRest = line_info.theRest
2367 2371 pre = line_info.pre
2368 2372 continue_prompt = line_info.continue_prompt
2369 2373 obj = line_info.ofind(self)['obj']
2370 2374
2371 2375 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2372 2376
2373 2377 # This should only be active for single-line input!
2374 2378 if continue_prompt:
2375 2379 self.log(line,line,continue_prompt)
2376 2380 return line
2377 2381
2378 2382 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2379 2383 auto_rewrite = True
2380 2384
2381 2385 if pre == self.ESC_QUOTE:
2382 2386 # Auto-quote splitting on whitespace
2383 2387 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2384 2388 elif pre == self.ESC_QUOTE2:
2385 2389 # Auto-quote whole string
2386 2390 newcmd = '%s("%s")' % (iFun,theRest)
2387 2391 elif pre == self.ESC_PAREN:
2388 2392 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2389 2393 else:
2390 2394 # Auto-paren.
2391 2395 # We only apply it to argument-less calls if the autocall
2392 2396 # parameter is set to 2. We only need to check that autocall is <
2393 2397 # 2, since this function isn't called unless it's at least 1.
2394 2398 if not theRest and (self.rc.autocall < 2) and not force_auto:
2395 2399 newcmd = '%s %s' % (iFun,theRest)
2396 2400 auto_rewrite = False
2397 2401 else:
2398 2402 if not force_auto and theRest.startswith('['):
2399 2403 if hasattr(obj,'__getitem__'):
2400 2404 # Don't autocall in this case: item access for an object
2401 2405 # which is BOTH callable and implements __getitem__.
2402 2406 newcmd = '%s %s' % (iFun,theRest)
2403 2407 auto_rewrite = False
2404 2408 else:
2405 2409 # if the object doesn't support [] access, go ahead and
2406 2410 # autocall
2407 2411 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2408 2412 elif theRest.endswith(';'):
2409 2413 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2410 2414 else:
2411 2415 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2412 2416
2413 2417 if auto_rewrite:
2414 2418 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2415 2419
2416 2420 try:
2417 2421 # plain ascii works better w/ pyreadline, on some machines, so
2418 2422 # we use it and only print uncolored rewrite if we have unicode
2419 2423 rw = str(rw)
2420 2424 print >>Term.cout, rw
2421 2425 except UnicodeEncodeError:
2422 2426 print "-------------->" + newcmd
2423 2427
2424 2428 # log what is now valid Python, not the actual user input (without the
2425 2429 # final newline)
2426 2430 self.log(line,newcmd,continue_prompt)
2427 2431 return newcmd
2428 2432
2429 2433 def handle_help(self, line_info):
2430 2434 """Try to get some help for the object.
2431 2435
2432 2436 obj? or ?obj -> basic information.
2433 2437 obj?? or ??obj -> more details.
2434 2438 """
2435 2439
2436 2440 line = line_info.line
2437 2441 # We need to make sure that we don't process lines which would be
2438 2442 # otherwise valid python, such as "x=1 # what?"
2439 2443 try:
2440 2444 codeop.compile_command(line)
2441 2445 except SyntaxError:
2442 2446 # We should only handle as help stuff which is NOT valid syntax
2443 2447 if line[0]==self.ESC_HELP:
2444 2448 line = line[1:]
2445 2449 elif line[-1]==self.ESC_HELP:
2446 2450 line = line[:-1]
2447 2451 self.log(line,'#?'+line,line_info.continue_prompt)
2448 2452 if line:
2449 2453 #print 'line:<%r>' % line # dbg
2450 2454 self.magic_pinfo(line)
2451 2455 else:
2452 2456 page(self.usage,screen_lines=self.rc.screen_length)
2453 2457 return '' # Empty string is needed here!
2454 2458 except:
2455 2459 # Pass any other exceptions through to the normal handler
2456 2460 return self.handle_normal(line_info)
2457 2461 else:
2458 2462 # If the code compiles ok, we should handle it normally
2459 2463 return self.handle_normal(line_info)
2460 2464
2461 2465 def getapi(self):
2462 2466 """ Get an IPApi object for this shell instance
2463 2467
2464 2468 Getting an IPApi object is always preferable to accessing the shell
2465 2469 directly, but this holds true especially for extensions.
2466 2470
2467 2471 It should always be possible to implement an extension with IPApi
2468 2472 alone. If not, contact maintainer to request an addition.
2469 2473
2470 2474 """
2471 2475 return self.api
2472 2476
2473 2477 def handle_emacs(self, line_info):
2474 2478 """Handle input lines marked by python-mode."""
2475 2479
2476 2480 # Currently, nothing is done. Later more functionality can be added
2477 2481 # here if needed.
2478 2482
2479 2483 # The input cache shouldn't be updated
2480 2484 return line_info.line
2481 2485
2482 2486
2483 2487 def mktempfile(self,data=None):
2484 2488 """Make a new tempfile and return its filename.
2485 2489
2486 2490 This makes a call to tempfile.mktemp, but it registers the created
2487 2491 filename internally so ipython cleans it up at exit time.
2488 2492
2489 2493 Optional inputs:
2490 2494
2491 2495 - data(None): if data is given, it gets written out to the temp file
2492 2496 immediately, and the file is closed again."""
2493 2497
2494 2498 filename = tempfile.mktemp('.py','ipython_edit_')
2495 2499 self.tempfiles.append(filename)
2496 2500
2497 2501 if data:
2498 2502 tmp_file = open(filename,'w')
2499 2503 tmp_file.write(data)
2500 2504 tmp_file.close()
2501 2505 return filename
2502 2506
2503 2507 def write(self,data):
2504 2508 """Write a string to the default output"""
2505 2509 Term.cout.write(data)
2506 2510
2507 2511 def write_err(self,data):
2508 2512 """Write a string to the default error output"""
2509 2513 Term.cerr.write(data)
2510 2514
2511 2515 def ask_exit(self):
2512 2516 """ Call for exiting. Can be overiden and used as a callback. """
2513 2517 self.exit_now = True
2514 2518
2515 2519 def exit(self):
2516 2520 """Handle interactive exit.
2517 2521
2518 2522 This method calls the ask_exit callback."""
2519 2523
2520 2524 if self.rc.confirm_exit:
2521 2525 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2522 2526 self.ask_exit()
2523 2527 else:
2524 2528 self.ask_exit()
2525 2529
2526 2530 def safe_execfile(self,fname,*where,**kw):
2527 2531 """A safe version of the builtin execfile().
2528 2532
2529 2533 This version will never throw an exception, and knows how to handle
2530 2534 ipython logs as well.
2531 2535
2532 2536 :Parameters:
2533 2537 fname : string
2534 2538 Name of the file to be executed.
2535 2539
2536 2540 where : tuple
2537 2541 One or two namespaces, passed to execfile() as (globals,locals).
2538 2542 If only one is given, it is passed as both.
2539 2543
2540 2544 :Keywords:
2541 2545 islog : boolean (False)
2542 2546
2543 2547 quiet : boolean (True)
2544 2548
2545 2549 exit_ignore : boolean (False)
2546 2550 """
2547 2551
2548 2552 def syspath_cleanup():
2549 2553 """Internal cleanup routine for sys.path."""
2550 2554 if add_dname:
2551 2555 try:
2552 2556 sys.path.remove(dname)
2553 2557 except ValueError:
2554 2558 # For some reason the user has already removed it, ignore.
2555 2559 pass
2556 2560
2557 2561 fname = os.path.expanduser(fname)
2558 2562
2559 2563 # Find things also in current directory. This is needed to mimic the
2560 2564 # behavior of running a script from the system command line, where
2561 2565 # Python inserts the script's directory into sys.path
2562 2566 dname = os.path.dirname(os.path.abspath(fname))
2563 2567 add_dname = False
2564 2568 if dname not in sys.path:
2565 2569 sys.path.insert(0,dname)
2566 2570 add_dname = True
2567 2571
2568 2572 try:
2569 2573 xfile = open(fname)
2570 2574 except:
2571 2575 print >> Term.cerr, \
2572 2576 'Could not open file <%s> for safe execution.' % fname
2573 2577 syspath_cleanup()
2574 2578 return None
2575 2579
2576 2580 kw.setdefault('islog',0)
2577 2581 kw.setdefault('quiet',1)
2578 2582 kw.setdefault('exit_ignore',0)
2579 2583
2580 2584 first = xfile.readline()
2581 2585 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2582 2586 xfile.close()
2583 2587 # line by line execution
2584 2588 if first.startswith(loghead) or kw['islog']:
2585 2589 print 'Loading log file <%s> one line at a time...' % fname
2586 2590 if kw['quiet']:
2587 2591 stdout_save = sys.stdout
2588 2592 sys.stdout = StringIO.StringIO()
2589 2593 try:
2590 2594 globs,locs = where[0:2]
2591 2595 except:
2592 2596 try:
2593 2597 globs = locs = where[0]
2594 2598 except:
2595 2599 globs = locs = globals()
2596 2600 badblocks = []
2597 2601
2598 2602 # we also need to identify indented blocks of code when replaying
2599 2603 # logs and put them together before passing them to an exec
2600 2604 # statement. This takes a bit of regexp and look-ahead work in the
2601 2605 # file. It's easiest if we swallow the whole thing in memory
2602 2606 # first, and manually walk through the lines list moving the
2603 2607 # counter ourselves.
2604 2608 indent_re = re.compile('\s+\S')
2605 2609 xfile = open(fname)
2606 2610 filelines = xfile.readlines()
2607 2611 xfile.close()
2608 2612 nlines = len(filelines)
2609 2613 lnum = 0
2610 2614 while lnum < nlines:
2611 2615 line = filelines[lnum]
2612 2616 lnum += 1
2613 2617 # don't re-insert logger status info into cache
2614 2618 if line.startswith('#log#'):
2615 2619 continue
2616 2620 else:
2617 2621 # build a block of code (maybe a single line) for execution
2618 2622 block = line
2619 2623 try:
2620 2624 next = filelines[lnum] # lnum has already incremented
2621 2625 except:
2622 2626 next = None
2623 2627 while next and indent_re.match(next):
2624 2628 block += next
2625 2629 lnum += 1
2626 2630 try:
2627 2631 next = filelines[lnum]
2628 2632 except:
2629 2633 next = None
2630 2634 # now execute the block of one or more lines
2631 2635 try:
2632 2636 exec block in globs,locs
2633 2637 except SystemExit:
2634 2638 pass
2635 2639 except:
2636 2640 badblocks.append(block.rstrip())
2637 2641 if kw['quiet']: # restore stdout
2638 2642 sys.stdout.close()
2639 2643 sys.stdout = stdout_save
2640 2644 print 'Finished replaying log file <%s>' % fname
2641 2645 if badblocks:
2642 2646 print >> sys.stderr, ('\nThe following lines/blocks in file '
2643 2647 '<%s> reported errors:' % fname)
2644 2648
2645 2649 for badline in badblocks:
2646 2650 print >> sys.stderr, badline
2647 2651 else: # regular file execution
2648 2652 try:
2649 2653 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2650 2654 # Work around a bug in Python for Windows. The bug was
2651 2655 # fixed in in Python 2.5 r54159 and 54158, but that's still
2652 2656 # SVN Python as of March/07. For details, see:
2653 2657 # http://projects.scipy.org/ipython/ipython/ticket/123
2654 2658 try:
2655 2659 globs,locs = where[0:2]
2656 2660 except:
2657 2661 try:
2658 2662 globs = locs = where[0]
2659 2663 except:
2660 2664 globs = locs = globals()
2661 2665 exec file(fname) in globs,locs
2662 2666 else:
2663 2667 execfile(fname,*where)
2664 2668 except SyntaxError:
2665 2669 self.showsyntaxerror()
2666 2670 warn('Failure executing file: <%s>' % fname)
2667 2671 except SystemExit,status:
2668 2672 # Code that correctly sets the exit status flag to success (0)
2669 2673 # shouldn't be bothered with a traceback. Note that a plain
2670 2674 # sys.exit() does NOT set the message to 0 (it's empty) so that
2671 2675 # will still get a traceback. Note that the structure of the
2672 2676 # SystemExit exception changed between Python 2.4 and 2.5, so
2673 2677 # the checks must be done in a version-dependent way.
2674 2678 show = False
2675 2679
2676 2680 if sys.version_info[:2] > (2,5):
2677 2681 if status.message!=0 and not kw['exit_ignore']:
2678 2682 show = True
2679 2683 else:
2680 2684 if status.code and not kw['exit_ignore']:
2681 2685 show = True
2682 2686 if show:
2683 2687 self.showtraceback()
2684 2688 warn('Failure executing file: <%s>' % fname)
2685 2689 except:
2686 2690 self.showtraceback()
2687 2691 warn('Failure executing file: <%s>' % fname)
2688 2692
2689 2693 syspath_cleanup()
2690 2694
2691 2695 #************************* end of file <iplib.py> *****************************
General Comments 0
You need to be logged in to leave comments. Login now