##// END OF EJS Templates
Fixes to input splitting to reduce the occurrences of spurious attribute...
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,3084 +1,3085 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 2104 2007-02-20 10:25:51Z fperez $"""
4 $Id: Magic.py 2122 2007-03-01 02:27:11Z fperez $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # cProfile was added in Python2.5
39 # cProfile was added in Python2.5
40 try:
40 try:
41 import cProfile as profile
41 import cProfile as profile
42 import pstats
42 import pstats
43 except ImportError:
43 except ImportError:
44 # profile isn't bundled by default in Debian for license reasons
44 # profile isn't bundled by default in Debian for license reasons
45 try:
45 try:
46 import profile,pstats
46 import profile,pstats
47 except ImportError:
47 except ImportError:
48 profile = pstats = None
48 profile = pstats = None
49
49
50 # Homebrewed
50 # Homebrewed
51 import IPython
51 import IPython
52 from IPython import Debugger, OInspect, wildcard
52 from IPython import Debugger, OInspect, wildcard
53 from IPython.FakeModule import FakeModule
53 from IPython.FakeModule import FakeModule
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
55 from IPython.PyColorize import Parser
55 from IPython.PyColorize import Parser
56 from IPython.ipstruct import Struct
56 from IPython.ipstruct import Struct
57 from IPython.macro import Macro
57 from IPython.macro import Macro
58 from IPython.genutils import *
58 from IPython.genutils import *
59 from IPython import platutils
59 from IPython import platutils
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Utility functions
62 # Utility functions
63 def on_off(tag):
63 def on_off(tag):
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
65 return ['OFF','ON'][tag]
65 return ['OFF','ON'][tag]
66
66
67 class Bunch: pass
67 class Bunch: pass
68
68
69 #***************************************************************************
69 #***************************************************************************
70 # Main class implementing Magic functionality
70 # Main class implementing Magic functionality
71 class Magic:
71 class Magic:
72 """Magic functions for InteractiveShell.
72 """Magic functions for InteractiveShell.
73
73
74 Shell functions which can be reached as %function_name. All magic
74 Shell functions which can be reached as %function_name. All magic
75 functions should accept a string, which they can parse for their own
75 functions should accept a string, which they can parse for their own
76 needs. This can make some functions easier to type, eg `%cd ../`
76 needs. This can make some functions easier to type, eg `%cd ../`
77 vs. `%cd("../")`
77 vs. `%cd("../")`
78
78
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
80 at the command line, but it is is needed in the definition. """
80 at the command line, but it is is needed in the definition. """
81
81
82 # class globals
82 # class globals
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
84 'Automagic is ON, % prefix NOT needed for magic functions.']
84 'Automagic is ON, % prefix NOT needed for magic functions.']
85
85
86 #......................................................................
86 #......................................................................
87 # some utility functions
87 # some utility functions
88
88
89 def __init__(self,shell):
89 def __init__(self,shell):
90
90
91 self.options_table = {}
91 self.options_table = {}
92 if profile is None:
92 if profile is None:
93 self.magic_prun = self.profile_missing_notice
93 self.magic_prun = self.profile_missing_notice
94 self.shell = shell
94 self.shell = shell
95
95
96 # namespace for holding state we may need
96 # namespace for holding state we may need
97 self._magic_state = Bunch()
97 self._magic_state = Bunch()
98
98
99 def profile_missing_notice(self, *args, **kwargs):
99 def profile_missing_notice(self, *args, **kwargs):
100 error("""\
100 error("""\
101 The profile module could not be found. If you are a Debian user,
101 The profile module could not be found. If you are a Debian user,
102 it has been removed from the standard Debian package because of its non-free
102 it has been removed from the standard Debian package because of its non-free
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
104
104
105 def default_option(self,fn,optstr):
105 def default_option(self,fn,optstr):
106 """Make an entry in the options_table for fn, with value optstr"""
106 """Make an entry in the options_table for fn, with value optstr"""
107
107
108 if fn not in self.lsmagic():
108 if fn not in self.lsmagic():
109 error("%s is not a magic function" % fn)
109 error("%s is not a magic function" % fn)
110 self.options_table[fn] = optstr
110 self.options_table[fn] = optstr
111
111
112 def lsmagic(self):
112 def lsmagic(self):
113 """Return a list of currently available magic functions.
113 """Return a list of currently available magic functions.
114
114
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
116 ['magic_ls','magic_cd',...]"""
116 ['magic_ls','magic_cd',...]"""
117
117
118 # FIXME. This needs a cleanup, in the way the magics list is built.
118 # FIXME. This needs a cleanup, in the way the magics list is built.
119
119
120 # magics in class definition
120 # magics in class definition
121 class_magic = lambda fn: fn.startswith('magic_') and \
121 class_magic = lambda fn: fn.startswith('magic_') and \
122 callable(Magic.__dict__[fn])
122 callable(Magic.__dict__[fn])
123 # in instance namespace (run-time user additions)
123 # in instance namespace (run-time user additions)
124 inst_magic = lambda fn: fn.startswith('magic_') and \
124 inst_magic = lambda fn: fn.startswith('magic_') and \
125 callable(self.__dict__[fn])
125 callable(self.__dict__[fn])
126 # and bound magics by user (so they can access self):
126 # and bound magics by user (so they can access self):
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
128 callable(self.__class__.__dict__[fn])
128 callable(self.__class__.__dict__[fn])
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
132 out = []
132 out = []
133 for fn in magics:
133 for fn in magics:
134 out.append(fn.replace('magic_','',1))
134 out.append(fn.replace('magic_','',1))
135 out.sort()
135 out.sort()
136 return out
136 return out
137
137
138 def extract_input_slices(self,slices,raw=False):
138 def extract_input_slices(self,slices,raw=False):
139 """Return as a string a set of input history slices.
139 """Return as a string a set of input history slices.
140
140
141 Inputs:
141 Inputs:
142
142
143 - slices: the set of slices is given as a list of strings (like
143 - slices: the set of slices is given as a list of strings (like
144 ['1','4:8','9'], since this function is for use by magic functions
144 ['1','4:8','9'], since this function is for use by magic functions
145 which get their arguments as strings.
145 which get their arguments as strings.
146
146
147 Optional inputs:
147 Optional inputs:
148
148
149 - raw(False): by default, the processed input is used. If this is
149 - raw(False): by default, the processed input is used. If this is
150 true, the raw input history is used instead.
150 true, the raw input history is used instead.
151
151
152 Note that slices can be called with two notations:
152 Note that slices can be called with two notations:
153
153
154 N:M -> standard python form, means including items N...(M-1).
154 N:M -> standard python form, means including items N...(M-1).
155
155
156 N-M -> include items N..M (closed endpoint)."""
156 N-M -> include items N..M (closed endpoint)."""
157
157
158 if raw:
158 if raw:
159 hist = self.shell.input_hist_raw
159 hist = self.shell.input_hist_raw
160 else:
160 else:
161 hist = self.shell.input_hist
161 hist = self.shell.input_hist
162
162
163 cmds = []
163 cmds = []
164 for chunk in slices:
164 for chunk in slices:
165 if ':' in chunk:
165 if ':' in chunk:
166 ini,fin = map(int,chunk.split(':'))
166 ini,fin = map(int,chunk.split(':'))
167 elif '-' in chunk:
167 elif '-' in chunk:
168 ini,fin = map(int,chunk.split('-'))
168 ini,fin = map(int,chunk.split('-'))
169 fin += 1
169 fin += 1
170 else:
170 else:
171 ini = int(chunk)
171 ini = int(chunk)
172 fin = ini+1
172 fin = ini+1
173 cmds.append(hist[ini:fin])
173 cmds.append(hist[ini:fin])
174 return cmds
174 return cmds
175
175
176 def _ofind(self, oname, namespaces=None):
176 def _ofind(self, oname, namespaces=None):
177 """Find an object in the available namespaces.
177 """Find an object in the available namespaces.
178
178
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
180
180
181 Has special code to detect magic functions.
181 Has special code to detect magic functions.
182 """
182 """
183
183
184 oname = oname.strip()
184 oname = oname.strip()
185
185
186 alias_ns = None
186 alias_ns = None
187 if namespaces is None:
187 if namespaces is None:
188 # Namespaces to search in:
188 # Namespaces to search in:
189 # Put them in a list. The order is important so that we
189 # Put them in a list. The order is important so that we
190 # find things in the same order that Python finds them.
190 # find things in the same order that Python finds them.
191 namespaces = [ ('Interactive', self.shell.user_ns),
191 namespaces = [ ('Interactive', self.shell.user_ns),
192 ('IPython internal', self.shell.internal_ns),
192 ('IPython internal', self.shell.internal_ns),
193 ('Python builtin', __builtin__.__dict__),
193 ('Python builtin', __builtin__.__dict__),
194 ('Alias', self.shell.alias_table),
194 ('Alias', self.shell.alias_table),
195 ]
195 ]
196 alias_ns = self.shell.alias_table
196 alias_ns = self.shell.alias_table
197
197
198 # initialize results to 'null'
198 # initialize results to 'null'
199 found = 0; obj = None; ospace = None; ds = None;
199 found = 0; obj = None; ospace = None; ds = None;
200 ismagic = 0; isalias = 0; parent = None
200 ismagic = 0; isalias = 0; parent = None
201
201
202 # Look for the given name by splitting it in parts. If the head is
202 # Look for the given name by splitting it in parts. If the head is
203 # found, then we look for all the remaining parts as members, and only
203 # found, then we look for all the remaining parts as members, and only
204 # declare success if we can find them all.
204 # declare success if we can find them all.
205 oname_parts = oname.split('.')
205 oname_parts = oname.split('.')
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
207 for nsname,ns in namespaces:
207 for nsname,ns in namespaces:
208 try:
208 try:
209 obj = ns[oname_head]
209 obj = ns[oname_head]
210 except KeyError:
210 except KeyError:
211 continue
211 continue
212 else:
212 else:
213 #print 'oname_rest:', oname_rest # dbg
213 for part in oname_rest:
214 for part in oname_rest:
214 try:
215 try:
215 parent = obj
216 parent = obj
216 obj = getattr(obj,part)
217 obj = getattr(obj,part)
217 except:
218 except:
218 # Blanket except b/c some badly implemented objects
219 # Blanket except b/c some badly implemented objects
219 # allow __getattr__ to raise exceptions other than
220 # allow __getattr__ to raise exceptions other than
220 # AttributeError, which then crashes IPython.
221 # AttributeError, which then crashes IPython.
221 break
222 break
222 else:
223 else:
223 # If we finish the for loop (no break), we got all members
224 # If we finish the for loop (no break), we got all members
224 found = 1
225 found = 1
225 ospace = nsname
226 ospace = nsname
226 if ns == alias_ns:
227 if ns == alias_ns:
227 isalias = 1
228 isalias = 1
228 break # namespace loop
229 break # namespace loop
229
230
230 # Try to see if it's magic
231 # Try to see if it's magic
231 if not found:
232 if not found:
232 if oname.startswith(self.shell.ESC_MAGIC):
233 if oname.startswith(self.shell.ESC_MAGIC):
233 oname = oname[1:]
234 oname = oname[1:]
234 obj = getattr(self,'magic_'+oname,None)
235 obj = getattr(self,'magic_'+oname,None)
235 if obj is not None:
236 if obj is not None:
236 found = 1
237 found = 1
237 ospace = 'IPython internal'
238 ospace = 'IPython internal'
238 ismagic = 1
239 ismagic = 1
239
240
240 # Last try: special-case some literals like '', [], {}, etc:
241 # Last try: special-case some literals like '', [], {}, etc:
241 if not found and oname_head in ["''",'""','[]','{}','()']:
242 if not found and oname_head in ["''",'""','[]','{}','()']:
242 obj = eval(oname_head)
243 obj = eval(oname_head)
243 found = 1
244 found = 1
244 ospace = 'Interactive'
245 ospace = 'Interactive'
245
246
246 return {'found':found, 'obj':obj, 'namespace':ospace,
247 return {'found':found, 'obj':obj, 'namespace':ospace,
247 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
248 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
248
249
249 def arg_err(self,func):
250 def arg_err(self,func):
250 """Print docstring if incorrect arguments were passed"""
251 """Print docstring if incorrect arguments were passed"""
251 print 'Error in arguments:'
252 print 'Error in arguments:'
252 print OInspect.getdoc(func)
253 print OInspect.getdoc(func)
253
254
254 def format_latex(self,strng):
255 def format_latex(self,strng):
255 """Format a string for latex inclusion."""
256 """Format a string for latex inclusion."""
256
257
257 # Characters that need to be escaped for latex:
258 # Characters that need to be escaped for latex:
258 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
259 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
259 # Magic command names as headers:
260 # Magic command names as headers:
260 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
261 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
261 re.MULTILINE)
262 re.MULTILINE)
262 # Magic commands
263 # Magic commands
263 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
264 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
264 re.MULTILINE)
265 re.MULTILINE)
265 # Paragraph continue
266 # Paragraph continue
266 par_re = re.compile(r'\\$',re.MULTILINE)
267 par_re = re.compile(r'\\$',re.MULTILINE)
267
268
268 # The "\n" symbol
269 # The "\n" symbol
269 newline_re = re.compile(r'\\n')
270 newline_re = re.compile(r'\\n')
270
271
271 # Now build the string for output:
272 # Now build the string for output:
272 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
273 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
273 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
274 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
274 strng)
275 strng)
275 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
276 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
276 strng = par_re.sub(r'\\\\',strng)
277 strng = par_re.sub(r'\\\\',strng)
277 strng = escape_re.sub(r'\\\1',strng)
278 strng = escape_re.sub(r'\\\1',strng)
278 strng = newline_re.sub(r'\\textbackslash{}n',strng)
279 strng = newline_re.sub(r'\\textbackslash{}n',strng)
279 return strng
280 return strng
280
281
281 def format_screen(self,strng):
282 def format_screen(self,strng):
282 """Format a string for screen printing.
283 """Format a string for screen printing.
283
284
284 This removes some latex-type format codes."""
285 This removes some latex-type format codes."""
285 # Paragraph continue
286 # Paragraph continue
286 par_re = re.compile(r'\\$',re.MULTILINE)
287 par_re = re.compile(r'\\$',re.MULTILINE)
287 strng = par_re.sub('',strng)
288 strng = par_re.sub('',strng)
288 return strng
289 return strng
289
290
290 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
291 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
291 """Parse options passed to an argument string.
292 """Parse options passed to an argument string.
292
293
293 The interface is similar to that of getopt(), but it returns back a
294 The interface is similar to that of getopt(), but it returns back a
294 Struct with the options as keys and the stripped argument string still
295 Struct with the options as keys and the stripped argument string still
295 as a string.
296 as a string.
296
297
297 arg_str is quoted as a true sys.argv vector by using shlex.split.
298 arg_str is quoted as a true sys.argv vector by using shlex.split.
298 This allows us to easily expand variables, glob files, quote
299 This allows us to easily expand variables, glob files, quote
299 arguments, etc.
300 arguments, etc.
300
301
301 Options:
302 Options:
302 -mode: default 'string'. If given as 'list', the argument string is
303 -mode: default 'string'. If given as 'list', the argument string is
303 returned as a list (split on whitespace) instead of a string.
304 returned as a list (split on whitespace) instead of a string.
304
305
305 -list_all: put all option values in lists. Normally only options
306 -list_all: put all option values in lists. Normally only options
306 appearing more than once are put in a list.
307 appearing more than once are put in a list.
307
308
308 -posix (True): whether to split the input line in POSIX mode or not,
309 -posix (True): whether to split the input line in POSIX mode or not,
309 as per the conventions outlined in the shlex module from the
310 as per the conventions outlined in the shlex module from the
310 standard library."""
311 standard library."""
311
312
312 # inject default options at the beginning of the input line
313 # inject default options at the beginning of the input line
313 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
314 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
314 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
315 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
315
316
316 mode = kw.get('mode','string')
317 mode = kw.get('mode','string')
317 if mode not in ['string','list']:
318 if mode not in ['string','list']:
318 raise ValueError,'incorrect mode given: %s' % mode
319 raise ValueError,'incorrect mode given: %s' % mode
319 # Get options
320 # Get options
320 list_all = kw.get('list_all',0)
321 list_all = kw.get('list_all',0)
321 posix = kw.get('posix',True)
322 posix = kw.get('posix',True)
322
323
323 # Check if we have more than one argument to warrant extra processing:
324 # Check if we have more than one argument to warrant extra processing:
324 odict = {} # Dictionary with options
325 odict = {} # Dictionary with options
325 args = arg_str.split()
326 args = arg_str.split()
326 if len(args) >= 1:
327 if len(args) >= 1:
327 # If the list of inputs only has 0 or 1 thing in it, there's no
328 # If the list of inputs only has 0 or 1 thing in it, there's no
328 # need to look for options
329 # need to look for options
329 argv = arg_split(arg_str,posix)
330 argv = arg_split(arg_str,posix)
330 # Do regular option processing
331 # Do regular option processing
331 try:
332 try:
332 opts,args = getopt(argv,opt_str,*long_opts)
333 opts,args = getopt(argv,opt_str,*long_opts)
333 except GetoptError,e:
334 except GetoptError,e:
334 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
335 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
335 " ".join(long_opts)))
336 " ".join(long_opts)))
336 for o,a in opts:
337 for o,a in opts:
337 if o.startswith('--'):
338 if o.startswith('--'):
338 o = o[2:]
339 o = o[2:]
339 else:
340 else:
340 o = o[1:]
341 o = o[1:]
341 try:
342 try:
342 odict[o].append(a)
343 odict[o].append(a)
343 except AttributeError:
344 except AttributeError:
344 odict[o] = [odict[o],a]
345 odict[o] = [odict[o],a]
345 except KeyError:
346 except KeyError:
346 if list_all:
347 if list_all:
347 odict[o] = [a]
348 odict[o] = [a]
348 else:
349 else:
349 odict[o] = a
350 odict[o] = a
350
351
351 # Prepare opts,args for return
352 # Prepare opts,args for return
352 opts = Struct(odict)
353 opts = Struct(odict)
353 if mode == 'string':
354 if mode == 'string':
354 args = ' '.join(args)
355 args = ' '.join(args)
355
356
356 return opts,args
357 return opts,args
357
358
358 #......................................................................
359 #......................................................................
359 # And now the actual magic functions
360 # And now the actual magic functions
360
361
361 # Functions for IPython shell work (vars,funcs, config, etc)
362 # Functions for IPython shell work (vars,funcs, config, etc)
362 def magic_lsmagic(self, parameter_s = ''):
363 def magic_lsmagic(self, parameter_s = ''):
363 """List currently available magic functions."""
364 """List currently available magic functions."""
364 mesc = self.shell.ESC_MAGIC
365 mesc = self.shell.ESC_MAGIC
365 print 'Available magic functions:\n'+mesc+\
366 print 'Available magic functions:\n'+mesc+\
366 (' '+mesc).join(self.lsmagic())
367 (' '+mesc).join(self.lsmagic())
367 print '\n' + Magic.auto_status[self.shell.rc.automagic]
368 print '\n' + Magic.auto_status[self.shell.rc.automagic]
368 return None
369 return None
369
370
370 def magic_magic(self, parameter_s = ''):
371 def magic_magic(self, parameter_s = ''):
371 """Print information about the magic function system."""
372 """Print information about the magic function system."""
372
373
373 mode = ''
374 mode = ''
374 try:
375 try:
375 if parameter_s.split()[0] == '-latex':
376 if parameter_s.split()[0] == '-latex':
376 mode = 'latex'
377 mode = 'latex'
377 if parameter_s.split()[0] == '-brief':
378 if parameter_s.split()[0] == '-brief':
378 mode = 'brief'
379 mode = 'brief'
379 except:
380 except:
380 pass
381 pass
381
382
382 magic_docs = []
383 magic_docs = []
383 for fname in self.lsmagic():
384 for fname in self.lsmagic():
384 mname = 'magic_' + fname
385 mname = 'magic_' + fname
385 for space in (Magic,self,self.__class__):
386 for space in (Magic,self,self.__class__):
386 try:
387 try:
387 fn = space.__dict__[mname]
388 fn = space.__dict__[mname]
388 except KeyError:
389 except KeyError:
389 pass
390 pass
390 else:
391 else:
391 break
392 break
392 if mode == 'brief':
393 if mode == 'brief':
393 # only first line
394 # only first line
394 fndoc = fn.__doc__.split('\n',1)[0]
395 fndoc = fn.__doc__.split('\n',1)[0]
395 else:
396 else:
396 fndoc = fn.__doc__
397 fndoc = fn.__doc__
397
398
398 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
399 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
399 fname,fndoc))
400 fname,fndoc))
400 magic_docs = ''.join(magic_docs)
401 magic_docs = ''.join(magic_docs)
401
402
402 if mode == 'latex':
403 if mode == 'latex':
403 print self.format_latex(magic_docs)
404 print self.format_latex(magic_docs)
404 return
405 return
405 else:
406 else:
406 magic_docs = self.format_screen(magic_docs)
407 magic_docs = self.format_screen(magic_docs)
407 if mode == 'brief':
408 if mode == 'brief':
408 return magic_docs
409 return magic_docs
409
410
410 outmsg = """
411 outmsg = """
411 IPython's 'magic' functions
412 IPython's 'magic' functions
412 ===========================
413 ===========================
413
414
414 The magic function system provides a series of functions which allow you to
415 The magic function system provides a series of functions which allow you to
415 control the behavior of IPython itself, plus a lot of system-type
416 control the behavior of IPython itself, plus a lot of system-type
416 features. All these functions are prefixed with a % character, but parameters
417 features. All these functions are prefixed with a % character, but parameters
417 are given without parentheses or quotes.
418 are given without parentheses or quotes.
418
419
419 NOTE: If you have 'automagic' enabled (via the command line option or with the
420 NOTE: If you have 'automagic' enabled (via the command line option or with the
420 %automagic function), you don't need to type in the % explicitly. By default,
421 %automagic function), you don't need to type in the % explicitly. By default,
421 IPython ships with automagic on, so you should only rarely need the % escape.
422 IPython ships with automagic on, so you should only rarely need the % escape.
422
423
423 Example: typing '%cd mydir' (without the quotes) changes you working directory
424 Example: typing '%cd mydir' (without the quotes) changes you working directory
424 to 'mydir', if it exists.
425 to 'mydir', if it exists.
425
426
426 You can define your own magic functions to extend the system. See the supplied
427 You can define your own magic functions to extend the system. See the supplied
427 ipythonrc and example-magic.py files for details (in your ipython
428 ipythonrc and example-magic.py files for details (in your ipython
428 configuration directory, typically $HOME/.ipython/).
429 configuration directory, typically $HOME/.ipython/).
429
430
430 You can also define your own aliased names for magic functions. In your
431 You can also define your own aliased names for magic functions. In your
431 ipythonrc file, placing a line like:
432 ipythonrc file, placing a line like:
432
433
433 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
434 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
434
435
435 will define %pf as a new name for %profile.
436 will define %pf as a new name for %profile.
436
437
437 You can also call magics in code using the ipmagic() function, which IPython
438 You can also call magics in code using the ipmagic() function, which IPython
438 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
439 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
439
440
440 For a list of the available magic functions, use %lsmagic. For a description
441 For a list of the available magic functions, use %lsmagic. For a description
441 of any of them, type %magic_name?, e.g. '%cd?'.
442 of any of them, type %magic_name?, e.g. '%cd?'.
442
443
443 Currently the magic system has the following functions:\n"""
444 Currently the magic system has the following functions:\n"""
444
445
445 mesc = self.shell.ESC_MAGIC
446 mesc = self.shell.ESC_MAGIC
446 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
447 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
447 "\n\n%s%s\n\n%s" % (outmsg,
448 "\n\n%s%s\n\n%s" % (outmsg,
448 magic_docs,mesc,mesc,
449 magic_docs,mesc,mesc,
449 (' '+mesc).join(self.lsmagic()),
450 (' '+mesc).join(self.lsmagic()),
450 Magic.auto_status[self.shell.rc.automagic] ) )
451 Magic.auto_status[self.shell.rc.automagic] ) )
451
452
452 page(outmsg,screen_lines=self.shell.rc.screen_length)
453 page(outmsg,screen_lines=self.shell.rc.screen_length)
453
454
454 def magic_automagic(self, parameter_s = ''):
455 def magic_automagic(self, parameter_s = ''):
455 """Make magic functions callable without having to type the initial %.
456 """Make magic functions callable without having to type the initial %.
456
457
457 Without argumentsl toggles on/off (when off, you must call it as
458 Without argumentsl toggles on/off (when off, you must call it as
458 %automagic, of course). With arguments it sets the value, and you can
459 %automagic, of course). With arguments it sets the value, and you can
459 use any of (case insensitive):
460 use any of (case insensitive):
460
461
461 - on,1,True: to activate
462 - on,1,True: to activate
462
463
463 - off,0,False: to deactivate.
464 - off,0,False: to deactivate.
464
465
465 Note that magic functions have lowest priority, so if there's a
466 Note that magic functions have lowest priority, so if there's a
466 variable whose name collides with that of a magic fn, automagic won't
467 variable whose name collides with that of a magic fn, automagic won't
467 work for that function (you get the variable instead). However, if you
468 work for that function (you get the variable instead). However, if you
468 delete the variable (del var), the previously shadowed magic function
469 delete the variable (del var), the previously shadowed magic function
469 becomes visible to automagic again."""
470 becomes visible to automagic again."""
470
471
471 rc = self.shell.rc
472 rc = self.shell.rc
472 arg = parameter_s.lower()
473 arg = parameter_s.lower()
473 if parameter_s in ('on','1','true'):
474 if parameter_s in ('on','1','true'):
474 rc.automagic = True
475 rc.automagic = True
475 elif parameter_s in ('off','0','false'):
476 elif parameter_s in ('off','0','false'):
476 rc.automagic = False
477 rc.automagic = False
477 else:
478 else:
478 rc.automagic = not rc.automagic
479 rc.automagic = not rc.automagic
479 print '\n' + Magic.auto_status[rc.automagic]
480 print '\n' + Magic.auto_status[rc.automagic]
480
481
481 def magic_autocall(self, parameter_s = ''):
482 def magic_autocall(self, parameter_s = ''):
482 """Make functions callable without having to type parentheses.
483 """Make functions callable without having to type parentheses.
483
484
484 Usage:
485 Usage:
485
486
486 %autocall [mode]
487 %autocall [mode]
487
488
488 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
489 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
489 value is toggled on and off (remembering the previous state)."""
490 value is toggled on and off (remembering the previous state)."""
490
491
491 rc = self.shell.rc
492 rc = self.shell.rc
492
493
493 if parameter_s:
494 if parameter_s:
494 arg = int(parameter_s)
495 arg = int(parameter_s)
495 else:
496 else:
496 arg = 'toggle'
497 arg = 'toggle'
497
498
498 if not arg in (0,1,2,'toggle'):
499 if not arg in (0,1,2,'toggle'):
499 error('Valid modes: (0->Off, 1->Smart, 2->Full')
500 error('Valid modes: (0->Off, 1->Smart, 2->Full')
500 return
501 return
501
502
502 if arg in (0,1,2):
503 if arg in (0,1,2):
503 rc.autocall = arg
504 rc.autocall = arg
504 else: # toggle
505 else: # toggle
505 if rc.autocall:
506 if rc.autocall:
506 self._magic_state.autocall_save = rc.autocall
507 self._magic_state.autocall_save = rc.autocall
507 rc.autocall = 0
508 rc.autocall = 0
508 else:
509 else:
509 try:
510 try:
510 rc.autocall = self._magic_state.autocall_save
511 rc.autocall = self._magic_state.autocall_save
511 except AttributeError:
512 except AttributeError:
512 rc.autocall = self._magic_state.autocall_save = 1
513 rc.autocall = self._magic_state.autocall_save = 1
513
514
514 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
515 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
515
516
516 def magic_autoindent(self, parameter_s = ''):
517 def magic_autoindent(self, parameter_s = ''):
517 """Toggle autoindent on/off (if available)."""
518 """Toggle autoindent on/off (if available)."""
518
519
519 self.shell.set_autoindent()
520 self.shell.set_autoindent()
520 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
521 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
521
522
522 def magic_system_verbose(self, parameter_s = ''):
523 def magic_system_verbose(self, parameter_s = ''):
523 """Set verbose printing of system calls.
524 """Set verbose printing of system calls.
524
525
525 If called without an argument, act as a toggle"""
526 If called without an argument, act as a toggle"""
526
527
527 if parameter_s:
528 if parameter_s:
528 val = bool(eval(parameter_s))
529 val = bool(eval(parameter_s))
529 else:
530 else:
530 val = None
531 val = None
531
532
532 self.shell.rc_set_toggle('system_verbose',val)
533 self.shell.rc_set_toggle('system_verbose',val)
533 print "System verbose printing is:",\
534 print "System verbose printing is:",\
534 ['OFF','ON'][self.shell.rc.system_verbose]
535 ['OFF','ON'][self.shell.rc.system_verbose]
535
536
536 def magic_history(self, parameter_s = ''):
537 def magic_history(self, parameter_s = ''):
537 """Print input history (_i<n> variables), with most recent last.
538 """Print input history (_i<n> variables), with most recent last.
538
539
539 %history -> print at most 40 inputs (some may be multi-line)\\
540 %history -> print at most 40 inputs (some may be multi-line)\\
540 %history n -> print at most n inputs\\
541 %history n -> print at most n inputs\\
541 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
542 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
542
543
543 Each input's number <n> is shown, and is accessible as the
544 Each input's number <n> is shown, and is accessible as the
544 automatically generated variable _i<n>. Multi-line statements are
545 automatically generated variable _i<n>. Multi-line statements are
545 printed starting at a new line for easy copy/paste.
546 printed starting at a new line for easy copy/paste.
546
547
547
548
548 Options:
549 Options:
549
550
550 -n: do NOT print line numbers. This is useful if you want to get a
551 -n: do NOT print line numbers. This is useful if you want to get a
551 printout of many lines which can be directly pasted into a text
552 printout of many lines which can be directly pasted into a text
552 editor.
553 editor.
553
554
554 This feature is only available if numbered prompts are in use.
555 This feature is only available if numbered prompts are in use.
555
556
556 -r: print the 'raw' history. IPython filters your input and
557 -r: print the 'raw' history. IPython filters your input and
557 converts it all into valid Python source before executing it (things
558 converts it all into valid Python source before executing it (things
558 like magics or aliases are turned into function calls, for
559 like magics or aliases are turned into function calls, for
559 example). With this option, you'll see the unfiltered history
560 example). With this option, you'll see the unfiltered history
560 instead of the filtered version: '%cd /' will be seen as '%cd /'
561 instead of the filtered version: '%cd /' will be seen as '%cd /'
561 instead of '_ip.magic("%cd /")'.
562 instead of '_ip.magic("%cd /")'.
562 """
563 """
563
564
564 shell = self.shell
565 shell = self.shell
565 if not shell.outputcache.do_full_cache:
566 if not shell.outputcache.do_full_cache:
566 print 'This feature is only available if numbered prompts are in use.'
567 print 'This feature is only available if numbered prompts are in use.'
567 return
568 return
568 opts,args = self.parse_options(parameter_s,'nr',mode='list')
569 opts,args = self.parse_options(parameter_s,'nr',mode='list')
569
570
570 if opts.has_key('r'):
571 if opts.has_key('r'):
571 input_hist = shell.input_hist_raw
572 input_hist = shell.input_hist_raw
572 else:
573 else:
573 input_hist = shell.input_hist
574 input_hist = shell.input_hist
574
575
575 default_length = 40
576 default_length = 40
576 if len(args) == 0:
577 if len(args) == 0:
577 final = len(input_hist)
578 final = len(input_hist)
578 init = max(1,final-default_length)
579 init = max(1,final-default_length)
579 elif len(args) == 1:
580 elif len(args) == 1:
580 final = len(input_hist)
581 final = len(input_hist)
581 init = max(1,final-int(args[0]))
582 init = max(1,final-int(args[0]))
582 elif len(args) == 2:
583 elif len(args) == 2:
583 init,final = map(int,args)
584 init,final = map(int,args)
584 else:
585 else:
585 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
586 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
586 print self.magic_hist.__doc__
587 print self.magic_hist.__doc__
587 return
588 return
588 width = len(str(final))
589 width = len(str(final))
589 line_sep = ['','\n']
590 line_sep = ['','\n']
590 print_nums = not opts.has_key('n')
591 print_nums = not opts.has_key('n')
591 for in_num in range(init,final):
592 for in_num in range(init,final):
592 inline = input_hist[in_num]
593 inline = input_hist[in_num]
593 multiline = int(inline.count('\n') > 1)
594 multiline = int(inline.count('\n') > 1)
594 if print_nums:
595 if print_nums:
595 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
596 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
596 print inline,
597 print inline,
597
598
598 def magic_hist(self, parameter_s=''):
599 def magic_hist(self, parameter_s=''):
599 """Alternate name for %history."""
600 """Alternate name for %history."""
600 return self.magic_history(parameter_s)
601 return self.magic_history(parameter_s)
601
602
602 def magic_p(self, parameter_s=''):
603 def magic_p(self, parameter_s=''):
603 """Just a short alias for Python's 'print'."""
604 """Just a short alias for Python's 'print'."""
604 exec 'print ' + parameter_s in self.shell.user_ns
605 exec 'print ' + parameter_s in self.shell.user_ns
605
606
606 def magic_r(self, parameter_s=''):
607 def magic_r(self, parameter_s=''):
607 """Repeat previous input.
608 """Repeat previous input.
608
609
609 If given an argument, repeats the previous command which starts with
610 If given an argument, repeats the previous command which starts with
610 the same string, otherwise it just repeats the previous input.
611 the same string, otherwise it just repeats the previous input.
611
612
612 Shell escaped commands (with ! as first character) are not recognized
613 Shell escaped commands (with ! as first character) are not recognized
613 by this system, only pure python code and magic commands.
614 by this system, only pure python code and magic commands.
614 """
615 """
615
616
616 start = parameter_s.strip()
617 start = parameter_s.strip()
617 esc_magic = self.shell.ESC_MAGIC
618 esc_magic = self.shell.ESC_MAGIC
618 # Identify magic commands even if automagic is on (which means
619 # Identify magic commands even if automagic is on (which means
619 # the in-memory version is different from that typed by the user).
620 # the in-memory version is different from that typed by the user).
620 if self.shell.rc.automagic:
621 if self.shell.rc.automagic:
621 start_magic = esc_magic+start
622 start_magic = esc_magic+start
622 else:
623 else:
623 start_magic = start
624 start_magic = start
624 # Look through the input history in reverse
625 # Look through the input history in reverse
625 for n in range(len(self.shell.input_hist)-2,0,-1):
626 for n in range(len(self.shell.input_hist)-2,0,-1):
626 input = self.shell.input_hist[n]
627 input = self.shell.input_hist[n]
627 # skip plain 'r' lines so we don't recurse to infinity
628 # skip plain 'r' lines so we don't recurse to infinity
628 if input != '_ip.magic("r")\n' and \
629 if input != '_ip.magic("r")\n' and \
629 (input.startswith(start) or input.startswith(start_magic)):
630 (input.startswith(start) or input.startswith(start_magic)):
630 #print 'match',`input` # dbg
631 #print 'match',`input` # dbg
631 print 'Executing:',input,
632 print 'Executing:',input,
632 self.shell.runlines(input)
633 self.shell.runlines(input)
633 return
634 return
634 print 'No previous input matching `%s` found.' % start
635 print 'No previous input matching `%s` found.' % start
635
636
636 def magic_page(self, parameter_s=''):
637 def magic_page(self, parameter_s=''):
637 """Pretty print the object and display it through a pager.
638 """Pretty print the object and display it through a pager.
638
639
639 %page [options] OBJECT
640 %page [options] OBJECT
640
641
641 If no object is given, use _ (last output).
642 If no object is given, use _ (last output).
642
643
643 Options:
644 Options:
644
645
645 -r: page str(object), don't pretty-print it."""
646 -r: page str(object), don't pretty-print it."""
646
647
647 # After a function contributed by Olivier Aubert, slightly modified.
648 # After a function contributed by Olivier Aubert, slightly modified.
648
649
649 # Process options/args
650 # Process options/args
650 opts,args = self.parse_options(parameter_s,'r')
651 opts,args = self.parse_options(parameter_s,'r')
651 raw = 'r' in opts
652 raw = 'r' in opts
652
653
653 oname = args and args or '_'
654 oname = args and args or '_'
654 info = self._ofind(oname)
655 info = self._ofind(oname)
655 if info['found']:
656 if info['found']:
656 txt = (raw and str or pformat)( info['obj'] )
657 txt = (raw and str or pformat)( info['obj'] )
657 page(txt)
658 page(txt)
658 else:
659 else:
659 print 'Object `%s` not found' % oname
660 print 'Object `%s` not found' % oname
660
661
661 def magic_profile(self, parameter_s=''):
662 def magic_profile(self, parameter_s=''):
662 """Print your currently active IPyhton profile."""
663 """Print your currently active IPyhton profile."""
663 if self.shell.rc.profile:
664 if self.shell.rc.profile:
664 printpl('Current IPython profile: $self.shell.rc.profile.')
665 printpl('Current IPython profile: $self.shell.rc.profile.')
665 else:
666 else:
666 print 'No profile active.'
667 print 'No profile active.'
667
668
668 def _inspect(self,meth,oname,namespaces=None,**kw):
669 def _inspect(self,meth,oname,namespaces=None,**kw):
669 """Generic interface to the inspector system.
670 """Generic interface to the inspector system.
670
671
671 This function is meant to be called by pdef, pdoc & friends."""
672 This function is meant to be called by pdef, pdoc & friends."""
672
673
673 oname = oname.strip()
674 oname = oname.strip()
674 info = Struct(self._ofind(oname, namespaces))
675 info = Struct(self._ofind(oname, namespaces))
675
676
676 if info.found:
677 if info.found:
677 # Get the docstring of the class property if it exists.
678 # Get the docstring of the class property if it exists.
678 path = oname.split('.')
679 path = oname.split('.')
679 root = '.'.join(path[:-1])
680 root = '.'.join(path[:-1])
680 if info.parent is not None:
681 if info.parent is not None:
681 try:
682 try:
682 target = getattr(info.parent, '__class__')
683 target = getattr(info.parent, '__class__')
683 # The object belongs to a class instance.
684 # The object belongs to a class instance.
684 try:
685 try:
685 target = getattr(target, path[-1])
686 target = getattr(target, path[-1])
686 # The class defines the object.
687 # The class defines the object.
687 if isinstance(target, property):
688 if isinstance(target, property):
688 oname = root + '.__class__.' + path[-1]
689 oname = root + '.__class__.' + path[-1]
689 info = Struct(self._ofind(oname))
690 info = Struct(self._ofind(oname))
690 except AttributeError: pass
691 except AttributeError: pass
691 except AttributeError: pass
692 except AttributeError: pass
692
693
693 pmethod = getattr(self.shell.inspector,meth)
694 pmethod = getattr(self.shell.inspector,meth)
694 formatter = info.ismagic and self.format_screen or None
695 formatter = info.ismagic and self.format_screen or None
695 if meth == 'pdoc':
696 if meth == 'pdoc':
696 pmethod(info.obj,oname,formatter)
697 pmethod(info.obj,oname,formatter)
697 elif meth == 'pinfo':
698 elif meth == 'pinfo':
698 pmethod(info.obj,oname,formatter,info,**kw)
699 pmethod(info.obj,oname,formatter,info,**kw)
699 else:
700 else:
700 pmethod(info.obj,oname)
701 pmethod(info.obj,oname)
701 else:
702 else:
702 print 'Object `%s` not found.' % oname
703 print 'Object `%s` not found.' % oname
703 return 'not found' # so callers can take other action
704 return 'not found' # so callers can take other action
704
705
705 def magic_pdef(self, parameter_s='', namespaces=None):
706 def magic_pdef(self, parameter_s='', namespaces=None):
706 """Print the definition header for any callable object.
707 """Print the definition header for any callable object.
707
708
708 If the object is a class, print the constructor information."""
709 If the object is a class, print the constructor information."""
709 self._inspect('pdef',parameter_s, namespaces)
710 self._inspect('pdef',parameter_s, namespaces)
710
711
711 def magic_pdoc(self, parameter_s='', namespaces=None):
712 def magic_pdoc(self, parameter_s='', namespaces=None):
712 """Print the docstring for an object.
713 """Print the docstring for an object.
713
714
714 If the given object is a class, it will print both the class and the
715 If the given object is a class, it will print both the class and the
715 constructor docstrings."""
716 constructor docstrings."""
716 self._inspect('pdoc',parameter_s, namespaces)
717 self._inspect('pdoc',parameter_s, namespaces)
717
718
718 def magic_psource(self, parameter_s='', namespaces=None):
719 def magic_psource(self, parameter_s='', namespaces=None):
719 """Print (or run through pager) the source code for an object."""
720 """Print (or run through pager) the source code for an object."""
720 self._inspect('psource',parameter_s, namespaces)
721 self._inspect('psource',parameter_s, namespaces)
721
722
722 def magic_pfile(self, parameter_s=''):
723 def magic_pfile(self, parameter_s=''):
723 """Print (or run through pager) the file where an object is defined.
724 """Print (or run through pager) the file where an object is defined.
724
725
725 The file opens at the line where the object definition begins. IPython
726 The file opens at the line where the object definition begins. IPython
726 will honor the environment variable PAGER if set, and otherwise will
727 will honor the environment variable PAGER if set, and otherwise will
727 do its best to print the file in a convenient form.
728 do its best to print the file in a convenient form.
728
729
729 If the given argument is not an object currently defined, IPython will
730 If the given argument is not an object currently defined, IPython will
730 try to interpret it as a filename (automatically adding a .py extension
731 try to interpret it as a filename (automatically adding a .py extension
731 if needed). You can thus use %pfile as a syntax highlighting code
732 if needed). You can thus use %pfile as a syntax highlighting code
732 viewer."""
733 viewer."""
733
734
734 # first interpret argument as an object name
735 # first interpret argument as an object name
735 out = self._inspect('pfile',parameter_s)
736 out = self._inspect('pfile',parameter_s)
736 # if not, try the input as a filename
737 # if not, try the input as a filename
737 if out == 'not found':
738 if out == 'not found':
738 try:
739 try:
739 filename = get_py_filename(parameter_s)
740 filename = get_py_filename(parameter_s)
740 except IOError,msg:
741 except IOError,msg:
741 print msg
742 print msg
742 return
743 return
743 page(self.shell.inspector.format(file(filename).read()))
744 page(self.shell.inspector.format(file(filename).read()))
744
745
745 def magic_pinfo(self, parameter_s='', namespaces=None):
746 def magic_pinfo(self, parameter_s='', namespaces=None):
746 """Provide detailed information about an object.
747 """Provide detailed information about an object.
747
748
748 '%pinfo object' is just a synonym for object? or ?object."""
749 '%pinfo object' is just a synonym for object? or ?object."""
749
750
750 #print 'pinfo par: <%s>' % parameter_s # dbg
751 #print 'pinfo par: <%s>' % parameter_s # dbg
751
752
752 # detail_level: 0 -> obj? , 1 -> obj??
753 # detail_level: 0 -> obj? , 1 -> obj??
753 detail_level = 0
754 detail_level = 0
754 # We need to detect if we got called as 'pinfo pinfo foo', which can
755 # We need to detect if we got called as 'pinfo pinfo foo', which can
755 # happen if the user types 'pinfo foo?' at the cmd line.
756 # happen if the user types 'pinfo foo?' at the cmd line.
756 pinfo,qmark1,oname,qmark2 = \
757 pinfo,qmark1,oname,qmark2 = \
757 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
758 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
758 if pinfo or qmark1 or qmark2:
759 if pinfo or qmark1 or qmark2:
759 detail_level = 1
760 detail_level = 1
760 if "*" in oname:
761 if "*" in oname:
761 self.magic_psearch(oname)
762 self.magic_psearch(oname)
762 else:
763 else:
763 self._inspect('pinfo', oname, detail_level=detail_level,
764 self._inspect('pinfo', oname, detail_level=detail_level,
764 namespaces=namespaces)
765 namespaces=namespaces)
765
766
766 def magic_psearch(self, parameter_s=''):
767 def magic_psearch(self, parameter_s=''):
767 """Search for object in namespaces by wildcard.
768 """Search for object in namespaces by wildcard.
768
769
769 %psearch [options] PATTERN [OBJECT TYPE]
770 %psearch [options] PATTERN [OBJECT TYPE]
770
771
771 Note: ? can be used as a synonym for %psearch, at the beginning or at
772 Note: ? can be used as a synonym for %psearch, at the beginning or at
772 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
773 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
773 rest of the command line must be unchanged (options come first), so
774 rest of the command line must be unchanged (options come first), so
774 for example the following forms are equivalent
775 for example the following forms are equivalent
775
776
776 %psearch -i a* function
777 %psearch -i a* function
777 -i a* function?
778 -i a* function?
778 ?-i a* function
779 ?-i a* function
779
780
780 Arguments:
781 Arguments:
781
782
782 PATTERN
783 PATTERN
783
784
784 where PATTERN is a string containing * as a wildcard similar to its
785 where PATTERN is a string containing * as a wildcard similar to its
785 use in a shell. The pattern is matched in all namespaces on the
786 use in a shell. The pattern is matched in all namespaces on the
786 search path. By default objects starting with a single _ are not
787 search path. By default objects starting with a single _ are not
787 matched, many IPython generated objects have a single
788 matched, many IPython generated objects have a single
788 underscore. The default is case insensitive matching. Matching is
789 underscore. The default is case insensitive matching. Matching is
789 also done on the attributes of objects and not only on the objects
790 also done on the attributes of objects and not only on the objects
790 in a module.
791 in a module.
791
792
792 [OBJECT TYPE]
793 [OBJECT TYPE]
793
794
794 Is the name of a python type from the types module. The name is
795 Is the name of a python type from the types module. The name is
795 given in lowercase without the ending type, ex. StringType is
796 given in lowercase without the ending type, ex. StringType is
796 written string. By adding a type here only objects matching the
797 written string. By adding a type here only objects matching the
797 given type are matched. Using all here makes the pattern match all
798 given type are matched. Using all here makes the pattern match all
798 types (this is the default).
799 types (this is the default).
799
800
800 Options:
801 Options:
801
802
802 -a: makes the pattern match even objects whose names start with a
803 -a: makes the pattern match even objects whose names start with a
803 single underscore. These names are normally ommitted from the
804 single underscore. These names are normally ommitted from the
804 search.
805 search.
805
806
806 -i/-c: make the pattern case insensitive/sensitive. If neither of
807 -i/-c: make the pattern case insensitive/sensitive. If neither of
807 these options is given, the default is read from your ipythonrc
808 these options is given, the default is read from your ipythonrc
808 file. The option name which sets this value is
809 file. The option name which sets this value is
809 'wildcards_case_sensitive'. If this option is not specified in your
810 'wildcards_case_sensitive'. If this option is not specified in your
810 ipythonrc file, IPython's internal default is to do a case sensitive
811 ipythonrc file, IPython's internal default is to do a case sensitive
811 search.
812 search.
812
813
813 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
814 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
814 specifiy can be searched in any of the following namespaces:
815 specifiy can be searched in any of the following namespaces:
815 'builtin', 'user', 'user_global','internal', 'alias', where
816 'builtin', 'user', 'user_global','internal', 'alias', where
816 'builtin' and 'user' are the search defaults. Note that you should
817 'builtin' and 'user' are the search defaults. Note that you should
817 not use quotes when specifying namespaces.
818 not use quotes when specifying namespaces.
818
819
819 'Builtin' contains the python module builtin, 'user' contains all
820 'Builtin' contains the python module builtin, 'user' contains all
820 user data, 'alias' only contain the shell aliases and no python
821 user data, 'alias' only contain the shell aliases and no python
821 objects, 'internal' contains objects used by IPython. The
822 objects, 'internal' contains objects used by IPython. The
822 'user_global' namespace is only used by embedded IPython instances,
823 'user_global' namespace is only used by embedded IPython instances,
823 and it contains module-level globals. You can add namespaces to the
824 and it contains module-level globals. You can add namespaces to the
824 search with -s or exclude them with -e (these options can be given
825 search with -s or exclude them with -e (these options can be given
825 more than once).
826 more than once).
826
827
827 Examples:
828 Examples:
828
829
829 %psearch a* -> objects beginning with an a
830 %psearch a* -> objects beginning with an a
830 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
831 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
831 %psearch a* function -> all functions beginning with an a
832 %psearch a* function -> all functions beginning with an a
832 %psearch re.e* -> objects beginning with an e in module re
833 %psearch re.e* -> objects beginning with an e in module re
833 %psearch r*.e* -> objects that start with e in modules starting in r
834 %psearch r*.e* -> objects that start with e in modules starting in r
834 %psearch r*.* string -> all strings in modules beginning with r
835 %psearch r*.* string -> all strings in modules beginning with r
835
836
836 Case sensitve search:
837 Case sensitve search:
837
838
838 %psearch -c a* list all object beginning with lower case a
839 %psearch -c a* list all object beginning with lower case a
839
840
840 Show objects beginning with a single _:
841 Show objects beginning with a single _:
841
842
842 %psearch -a _* list objects beginning with a single underscore"""
843 %psearch -a _* list objects beginning with a single underscore"""
843
844
844 # default namespaces to be searched
845 # default namespaces to be searched
845 def_search = ['user','builtin']
846 def_search = ['user','builtin']
846
847
847 # Process options/args
848 # Process options/args
848 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
849 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
849 opt = opts.get
850 opt = opts.get
850 shell = self.shell
851 shell = self.shell
851 psearch = shell.inspector.psearch
852 psearch = shell.inspector.psearch
852
853
853 # select case options
854 # select case options
854 if opts.has_key('i'):
855 if opts.has_key('i'):
855 ignore_case = True
856 ignore_case = True
856 elif opts.has_key('c'):
857 elif opts.has_key('c'):
857 ignore_case = False
858 ignore_case = False
858 else:
859 else:
859 ignore_case = not shell.rc.wildcards_case_sensitive
860 ignore_case = not shell.rc.wildcards_case_sensitive
860
861
861 # Build list of namespaces to search from user options
862 # Build list of namespaces to search from user options
862 def_search.extend(opt('s',[]))
863 def_search.extend(opt('s',[]))
863 ns_exclude = ns_exclude=opt('e',[])
864 ns_exclude = ns_exclude=opt('e',[])
864 ns_search = [nm for nm in def_search if nm not in ns_exclude]
865 ns_search = [nm for nm in def_search if nm not in ns_exclude]
865
866
866 # Call the actual search
867 # Call the actual search
867 try:
868 try:
868 psearch(args,shell.ns_table,ns_search,
869 psearch(args,shell.ns_table,ns_search,
869 show_all=opt('a'),ignore_case=ignore_case)
870 show_all=opt('a'),ignore_case=ignore_case)
870 except:
871 except:
871 shell.showtraceback()
872 shell.showtraceback()
872
873
873 def magic_who_ls(self, parameter_s=''):
874 def magic_who_ls(self, parameter_s=''):
874 """Return a sorted list of all interactive variables.
875 """Return a sorted list of all interactive variables.
875
876
876 If arguments are given, only variables of types matching these
877 If arguments are given, only variables of types matching these
877 arguments are returned."""
878 arguments are returned."""
878
879
879 user_ns = self.shell.user_ns
880 user_ns = self.shell.user_ns
880 internal_ns = self.shell.internal_ns
881 internal_ns = self.shell.internal_ns
881 user_config_ns = self.shell.user_config_ns
882 user_config_ns = self.shell.user_config_ns
882 out = []
883 out = []
883 typelist = parameter_s.split()
884 typelist = parameter_s.split()
884
885
885 for i in user_ns:
886 for i in user_ns:
886 if not (i.startswith('_') or i.startswith('_i')) \
887 if not (i.startswith('_') or i.startswith('_i')) \
887 and not (i in internal_ns or i in user_config_ns):
888 and not (i in internal_ns or i in user_config_ns):
888 if typelist:
889 if typelist:
889 if type(user_ns[i]).__name__ in typelist:
890 if type(user_ns[i]).__name__ in typelist:
890 out.append(i)
891 out.append(i)
891 else:
892 else:
892 out.append(i)
893 out.append(i)
893 out.sort()
894 out.sort()
894 return out
895 return out
895
896
896 def magic_who(self, parameter_s=''):
897 def magic_who(self, parameter_s=''):
897 """Print all interactive variables, with some minimal formatting.
898 """Print all interactive variables, with some minimal formatting.
898
899
899 If any arguments are given, only variables whose type matches one of
900 If any arguments are given, only variables whose type matches one of
900 these are printed. For example:
901 these are printed. For example:
901
902
902 %who function str
903 %who function str
903
904
904 will only list functions and strings, excluding all other types of
905 will only list functions and strings, excluding all other types of
905 variables. To find the proper type names, simply use type(var) at a
906 variables. To find the proper type names, simply use type(var) at a
906 command line to see how python prints type names. For example:
907 command line to see how python prints type names. For example:
907
908
908 In [1]: type('hello')\\
909 In [1]: type('hello')\\
909 Out[1]: <type 'str'>
910 Out[1]: <type 'str'>
910
911
911 indicates that the type name for strings is 'str'.
912 indicates that the type name for strings is 'str'.
912
913
913 %who always excludes executed names loaded through your configuration
914 %who always excludes executed names loaded through your configuration
914 file and things which are internal to IPython.
915 file and things which are internal to IPython.
915
916
916 This is deliberate, as typically you may load many modules and the
917 This is deliberate, as typically you may load many modules and the
917 purpose of %who is to show you only what you've manually defined."""
918 purpose of %who is to show you only what you've manually defined."""
918
919
919 varlist = self.magic_who_ls(parameter_s)
920 varlist = self.magic_who_ls(parameter_s)
920 if not varlist:
921 if not varlist:
921 print 'Interactive namespace is empty.'
922 print 'Interactive namespace is empty.'
922 return
923 return
923
924
924 # if we have variables, move on...
925 # if we have variables, move on...
925
926
926 # stupid flushing problem: when prompts have no separators, stdout is
927 # stupid flushing problem: when prompts have no separators, stdout is
927 # getting lost. I'm starting to think this is a python bug. I'm having
928 # getting lost. I'm starting to think this is a python bug. I'm having
928 # to force a flush with a print because even a sys.stdout.flush
929 # to force a flush with a print because even a sys.stdout.flush
929 # doesn't seem to do anything!
930 # doesn't seem to do anything!
930
931
931 count = 0
932 count = 0
932 for i in varlist:
933 for i in varlist:
933 print i+'\t',
934 print i+'\t',
934 count += 1
935 count += 1
935 if count > 8:
936 if count > 8:
936 count = 0
937 count = 0
937 print
938 print
938 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
939 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
939
940
940 print # well, this does force a flush at the expense of an extra \n
941 print # well, this does force a flush at the expense of an extra \n
941
942
942 def magic_whos(self, parameter_s=''):
943 def magic_whos(self, parameter_s=''):
943 """Like %who, but gives some extra information about each variable.
944 """Like %who, but gives some extra information about each variable.
944
945
945 The same type filtering of %who can be applied here.
946 The same type filtering of %who can be applied here.
946
947
947 For all variables, the type is printed. Additionally it prints:
948 For all variables, the type is printed. Additionally it prints:
948
949
949 - For {},[],(): their length.
950 - For {},[],(): their length.
950
951
951 - For Numeric arrays, a summary with shape, number of elements,
952 - For Numeric arrays, a summary with shape, number of elements,
952 typecode and size in memory.
953 typecode and size in memory.
953
954
954 - Everything else: a string representation, snipping their middle if
955 - Everything else: a string representation, snipping their middle if
955 too long."""
956 too long."""
956
957
957 varnames = self.magic_who_ls(parameter_s)
958 varnames = self.magic_who_ls(parameter_s)
958 if not varnames:
959 if not varnames:
959 print 'Interactive namespace is empty.'
960 print 'Interactive namespace is empty.'
960 return
961 return
961
962
962 # if we have variables, move on...
963 # if we have variables, move on...
963
964
964 # for these types, show len() instead of data:
965 # for these types, show len() instead of data:
965 seq_types = [types.DictType,types.ListType,types.TupleType]
966 seq_types = [types.DictType,types.ListType,types.TupleType]
966
967
967 # for Numeric arrays, display summary info
968 # for Numeric arrays, display summary info
968 try:
969 try:
969 import Numeric
970 import Numeric
970 except ImportError:
971 except ImportError:
971 array_type = None
972 array_type = None
972 else:
973 else:
973 array_type = Numeric.ArrayType.__name__
974 array_type = Numeric.ArrayType.__name__
974
975
975 # Find all variable names and types so we can figure out column sizes
976 # Find all variable names and types so we can figure out column sizes
976
977
977 def get_vars(i):
978 def get_vars(i):
978 return self.shell.user_ns[i]
979 return self.shell.user_ns[i]
979
980
980 # some types are well known and can be shorter
981 # some types are well known and can be shorter
981 abbrevs = {'IPython.macro.Macro' : 'Macro'}
982 abbrevs = {'IPython.macro.Macro' : 'Macro'}
982 def type_name(v):
983 def type_name(v):
983 tn = type(v).__name__
984 tn = type(v).__name__
984 return abbrevs.get(tn,tn)
985 return abbrevs.get(tn,tn)
985
986
986 varlist = map(get_vars,varnames)
987 varlist = map(get_vars,varnames)
987
988
988 typelist = []
989 typelist = []
989 for vv in varlist:
990 for vv in varlist:
990 tt = type_name(vv)
991 tt = type_name(vv)
991
992
992 if tt=='instance':
993 if tt=='instance':
993 typelist.append( abbrevs.get(str(vv.__class__),str(vv.__class__)))
994 typelist.append( abbrevs.get(str(vv.__class__),str(vv.__class__)))
994 else:
995 else:
995 typelist.append(tt)
996 typelist.append(tt)
996
997
997 # column labels and # of spaces as separator
998 # column labels and # of spaces as separator
998 varlabel = 'Variable'
999 varlabel = 'Variable'
999 typelabel = 'Type'
1000 typelabel = 'Type'
1000 datalabel = 'Data/Info'
1001 datalabel = 'Data/Info'
1001 colsep = 3
1002 colsep = 3
1002 # variable format strings
1003 # variable format strings
1003 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1004 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1004 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1005 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1005 aformat = "%s: %s elems, type `%s`, %s bytes"
1006 aformat = "%s: %s elems, type `%s`, %s bytes"
1006 # find the size of the columns to format the output nicely
1007 # find the size of the columns to format the output nicely
1007 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1008 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1008 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1009 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1009 # table header
1010 # table header
1010 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1011 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1011 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1012 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1012 # and the table itself
1013 # and the table itself
1013 kb = 1024
1014 kb = 1024
1014 Mb = 1048576 # kb**2
1015 Mb = 1048576 # kb**2
1015 for vname,var,vtype in zip(varnames,varlist,typelist):
1016 for vname,var,vtype in zip(varnames,varlist,typelist):
1016 print itpl(vformat),
1017 print itpl(vformat),
1017 if vtype in seq_types:
1018 if vtype in seq_types:
1018 print len(var)
1019 print len(var)
1019 elif vtype==array_type:
1020 elif vtype==array_type:
1020 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1021 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1021 vsize = Numeric.size(var)
1022 vsize = Numeric.size(var)
1022 vbytes = vsize*var.itemsize()
1023 vbytes = vsize*var.itemsize()
1023 if vbytes < 100000:
1024 if vbytes < 100000:
1024 print aformat % (vshape,vsize,var.typecode(),vbytes)
1025 print aformat % (vshape,vsize,var.typecode(),vbytes)
1025 else:
1026 else:
1026 print aformat % (vshape,vsize,var.typecode(),vbytes),
1027 print aformat % (vshape,vsize,var.typecode(),vbytes),
1027 if vbytes < Mb:
1028 if vbytes < Mb:
1028 print '(%s kb)' % (vbytes/kb,)
1029 print '(%s kb)' % (vbytes/kb,)
1029 else:
1030 else:
1030 print '(%s Mb)' % (vbytes/Mb,)
1031 print '(%s Mb)' % (vbytes/Mb,)
1031 else:
1032 else:
1032 vstr = str(var).replace('\n','\\n')
1033 vstr = str(var).replace('\n','\\n')
1033 if len(vstr) < 50:
1034 if len(vstr) < 50:
1034 print vstr
1035 print vstr
1035 else:
1036 else:
1036 printpl(vfmt_short)
1037 printpl(vfmt_short)
1037
1038
1038 def magic_reset(self, parameter_s=''):
1039 def magic_reset(self, parameter_s=''):
1039 """Resets the namespace by removing all names defined by the user.
1040 """Resets the namespace by removing all names defined by the user.
1040
1041
1041 Input/Output history are left around in case you need them."""
1042 Input/Output history are left around in case you need them."""
1042
1043
1043 ans = self.shell.ask_yes_no(
1044 ans = self.shell.ask_yes_no(
1044 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1045 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1045 if not ans:
1046 if not ans:
1046 print 'Nothing done.'
1047 print 'Nothing done.'
1047 return
1048 return
1048 user_ns = self.shell.user_ns
1049 user_ns = self.shell.user_ns
1049 for i in self.magic_who_ls():
1050 for i in self.magic_who_ls():
1050 del(user_ns[i])
1051 del(user_ns[i])
1051
1052
1052 def magic_logstart(self,parameter_s=''):
1053 def magic_logstart(self,parameter_s=''):
1053 """Start logging anywhere in a session.
1054 """Start logging anywhere in a session.
1054
1055
1055 %logstart [-o|-r|-t] [log_name [log_mode]]
1056 %logstart [-o|-r|-t] [log_name [log_mode]]
1056
1057
1057 If no name is given, it defaults to a file named 'ipython_log.py' in your
1058 If no name is given, it defaults to a file named 'ipython_log.py' in your
1058 current directory, in 'rotate' mode (see below).
1059 current directory, in 'rotate' mode (see below).
1059
1060
1060 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1061 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1061 history up to that point and then continues logging.
1062 history up to that point and then continues logging.
1062
1063
1063 %logstart takes a second optional parameter: logging mode. This can be one
1064 %logstart takes a second optional parameter: logging mode. This can be one
1064 of (note that the modes are given unquoted):\\
1065 of (note that the modes are given unquoted):\\
1065 append: well, that says it.\\
1066 append: well, that says it.\\
1066 backup: rename (if exists) to name~ and start name.\\
1067 backup: rename (if exists) to name~ and start name.\\
1067 global: single logfile in your home dir, appended to.\\
1068 global: single logfile in your home dir, appended to.\\
1068 over : overwrite existing log.\\
1069 over : overwrite existing log.\\
1069 rotate: create rotating logs name.1~, name.2~, etc.
1070 rotate: create rotating logs name.1~, name.2~, etc.
1070
1071
1071 Options:
1072 Options:
1072
1073
1073 -o: log also IPython's output. In this mode, all commands which
1074 -o: log also IPython's output. In this mode, all commands which
1074 generate an Out[NN] prompt are recorded to the logfile, right after
1075 generate an Out[NN] prompt are recorded to the logfile, right after
1075 their corresponding input line. The output lines are always
1076 their corresponding input line. The output lines are always
1076 prepended with a '#[Out]# ' marker, so that the log remains valid
1077 prepended with a '#[Out]# ' marker, so that the log remains valid
1077 Python code.
1078 Python code.
1078
1079
1079 Since this marker is always the same, filtering only the output from
1080 Since this marker is always the same, filtering only the output from
1080 a log is very easy, using for example a simple awk call:
1081 a log is very easy, using for example a simple awk call:
1081
1082
1082 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1083 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1083
1084
1084 -r: log 'raw' input. Normally, IPython's logs contain the processed
1085 -r: log 'raw' input. Normally, IPython's logs contain the processed
1085 input, so that user lines are logged in their final form, converted
1086 input, so that user lines are logged in their final form, converted
1086 into valid Python. For example, %Exit is logged as
1087 into valid Python. For example, %Exit is logged as
1087 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1088 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1088 exactly as typed, with no transformations applied.
1089 exactly as typed, with no transformations applied.
1089
1090
1090 -t: put timestamps before each input line logged (these are put in
1091 -t: put timestamps before each input line logged (these are put in
1091 comments)."""
1092 comments)."""
1092
1093
1093 opts,par = self.parse_options(parameter_s,'ort')
1094 opts,par = self.parse_options(parameter_s,'ort')
1094 log_output = 'o' in opts
1095 log_output = 'o' in opts
1095 log_raw_input = 'r' in opts
1096 log_raw_input = 'r' in opts
1096 timestamp = 't' in opts
1097 timestamp = 't' in opts
1097
1098
1098 rc = self.shell.rc
1099 rc = self.shell.rc
1099 logger = self.shell.logger
1100 logger = self.shell.logger
1100
1101
1101 # if no args are given, the defaults set in the logger constructor by
1102 # if no args are given, the defaults set in the logger constructor by
1102 # ipytohn remain valid
1103 # ipytohn remain valid
1103 if par:
1104 if par:
1104 try:
1105 try:
1105 logfname,logmode = par.split()
1106 logfname,logmode = par.split()
1106 except:
1107 except:
1107 logfname = par
1108 logfname = par
1108 logmode = 'backup'
1109 logmode = 'backup'
1109 else:
1110 else:
1110 logfname = logger.logfname
1111 logfname = logger.logfname
1111 logmode = logger.logmode
1112 logmode = logger.logmode
1112 # put logfname into rc struct as if it had been called on the command
1113 # put logfname into rc struct as if it had been called on the command
1113 # line, so it ends up saved in the log header Save it in case we need
1114 # line, so it ends up saved in the log header Save it in case we need
1114 # to restore it...
1115 # to restore it...
1115 old_logfile = rc.opts.get('logfile','')
1116 old_logfile = rc.opts.get('logfile','')
1116 if logfname:
1117 if logfname:
1117 logfname = os.path.expanduser(logfname)
1118 logfname = os.path.expanduser(logfname)
1118 rc.opts.logfile = logfname
1119 rc.opts.logfile = logfname
1119 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1120 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1120 try:
1121 try:
1121 started = logger.logstart(logfname,loghead,logmode,
1122 started = logger.logstart(logfname,loghead,logmode,
1122 log_output,timestamp,log_raw_input)
1123 log_output,timestamp,log_raw_input)
1123 except:
1124 except:
1124 rc.opts.logfile = old_logfile
1125 rc.opts.logfile = old_logfile
1125 warn("Couldn't start log: %s" % sys.exc_info()[1])
1126 warn("Couldn't start log: %s" % sys.exc_info()[1])
1126 else:
1127 else:
1127 # log input history up to this point, optionally interleaving
1128 # log input history up to this point, optionally interleaving
1128 # output if requested
1129 # output if requested
1129
1130
1130 if timestamp:
1131 if timestamp:
1131 # disable timestamping for the previous history, since we've
1132 # disable timestamping for the previous history, since we've
1132 # lost those already (no time machine here).
1133 # lost those already (no time machine here).
1133 logger.timestamp = False
1134 logger.timestamp = False
1134
1135
1135 if log_raw_input:
1136 if log_raw_input:
1136 input_hist = self.shell.input_hist_raw
1137 input_hist = self.shell.input_hist_raw
1137 else:
1138 else:
1138 input_hist = self.shell.input_hist
1139 input_hist = self.shell.input_hist
1139
1140
1140 if log_output:
1141 if log_output:
1141 log_write = logger.log_write
1142 log_write = logger.log_write
1142 output_hist = self.shell.output_hist
1143 output_hist = self.shell.output_hist
1143 for n in range(1,len(input_hist)-1):
1144 for n in range(1,len(input_hist)-1):
1144 log_write(input_hist[n].rstrip())
1145 log_write(input_hist[n].rstrip())
1145 if n in output_hist:
1146 if n in output_hist:
1146 log_write(repr(output_hist[n]),'output')
1147 log_write(repr(output_hist[n]),'output')
1147 else:
1148 else:
1148 logger.log_write(input_hist[1:])
1149 logger.log_write(input_hist[1:])
1149 if timestamp:
1150 if timestamp:
1150 # re-enable timestamping
1151 # re-enable timestamping
1151 logger.timestamp = True
1152 logger.timestamp = True
1152
1153
1153 print ('Activating auto-logging. '
1154 print ('Activating auto-logging. '
1154 'Current session state plus future input saved.')
1155 'Current session state plus future input saved.')
1155 logger.logstate()
1156 logger.logstate()
1156
1157
1157 def magic_logoff(self,parameter_s=''):
1158 def magic_logoff(self,parameter_s=''):
1158 """Temporarily stop logging.
1159 """Temporarily stop logging.
1159
1160
1160 You must have previously started logging."""
1161 You must have previously started logging."""
1161 self.shell.logger.switch_log(0)
1162 self.shell.logger.switch_log(0)
1162
1163
1163 def magic_logon(self,parameter_s=''):
1164 def magic_logon(self,parameter_s=''):
1164 """Restart logging.
1165 """Restart logging.
1165
1166
1166 This function is for restarting logging which you've temporarily
1167 This function is for restarting logging which you've temporarily
1167 stopped with %logoff. For starting logging for the first time, you
1168 stopped with %logoff. For starting logging for the first time, you
1168 must use the %logstart function, which allows you to specify an
1169 must use the %logstart function, which allows you to specify an
1169 optional log filename."""
1170 optional log filename."""
1170
1171
1171 self.shell.logger.switch_log(1)
1172 self.shell.logger.switch_log(1)
1172
1173
1173 def magic_logstate(self,parameter_s=''):
1174 def magic_logstate(self,parameter_s=''):
1174 """Print the status of the logging system."""
1175 """Print the status of the logging system."""
1175
1176
1176 self.shell.logger.logstate()
1177 self.shell.logger.logstate()
1177
1178
1178 def magic_pdb(self, parameter_s=''):
1179 def magic_pdb(self, parameter_s=''):
1179 """Control the automatic calling of the pdb interactive debugger.
1180 """Control the automatic calling of the pdb interactive debugger.
1180
1181
1181 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1182 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1182 argument it works as a toggle.
1183 argument it works as a toggle.
1183
1184
1184 When an exception is triggered, IPython can optionally call the
1185 When an exception is triggered, IPython can optionally call the
1185 interactive pdb debugger after the traceback printout. %pdb toggles
1186 interactive pdb debugger after the traceback printout. %pdb toggles
1186 this feature on and off.
1187 this feature on and off.
1187
1188
1188 The initial state of this feature is set in your ipythonrc
1189 The initial state of this feature is set in your ipythonrc
1189 configuration file (the variable is called 'pdb').
1190 configuration file (the variable is called 'pdb').
1190
1191
1191 If you want to just activate the debugger AFTER an exception has fired,
1192 If you want to just activate the debugger AFTER an exception has fired,
1192 without having to type '%pdb on' and rerunning your code, you can use
1193 without having to type '%pdb on' and rerunning your code, you can use
1193 the %debug magic."""
1194 the %debug magic."""
1194
1195
1195 par = parameter_s.strip().lower()
1196 par = parameter_s.strip().lower()
1196
1197
1197 if par:
1198 if par:
1198 try:
1199 try:
1199 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1200 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1200 except KeyError:
1201 except KeyError:
1201 print ('Incorrect argument. Use on/1, off/0, '
1202 print ('Incorrect argument. Use on/1, off/0, '
1202 'or nothing for a toggle.')
1203 'or nothing for a toggle.')
1203 return
1204 return
1204 else:
1205 else:
1205 # toggle
1206 # toggle
1206 new_pdb = not self.shell.call_pdb
1207 new_pdb = not self.shell.call_pdb
1207
1208
1208 # set on the shell
1209 # set on the shell
1209 self.shell.call_pdb = new_pdb
1210 self.shell.call_pdb = new_pdb
1210 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1211 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1211
1212
1212 def magic_debug(self, parameter_s=''):
1213 def magic_debug(self, parameter_s=''):
1213 """Activate the interactive debugger in post-mortem mode.
1214 """Activate the interactive debugger in post-mortem mode.
1214
1215
1215 If an exception has just occurred, this lets you inspect its stack
1216 If an exception has just occurred, this lets you inspect its stack
1216 frames interactively. Note that this will always work only on the last
1217 frames interactively. Note that this will always work only on the last
1217 traceback that occurred, so you must call this quickly after an
1218 traceback that occurred, so you must call this quickly after an
1218 exception that you wish to inspect has fired, because if another one
1219 exception that you wish to inspect has fired, because if another one
1219 occurs, it clobbers the previous one.
1220 occurs, it clobbers the previous one.
1220
1221
1221 If you want IPython to automatically do this on every exception, see
1222 If you want IPython to automatically do this on every exception, see
1222 the %pdb magic for more details.
1223 the %pdb magic for more details.
1223 """
1224 """
1224
1225
1225 self.shell.debugger(force=True)
1226 self.shell.debugger(force=True)
1226
1227
1227 def magic_prun(self, parameter_s ='',user_mode=1,
1228 def magic_prun(self, parameter_s ='',user_mode=1,
1228 opts=None,arg_lst=None,prog_ns=None):
1229 opts=None,arg_lst=None,prog_ns=None):
1229
1230
1230 """Run a statement through the python code profiler.
1231 """Run a statement through the python code profiler.
1231
1232
1232 Usage:\\
1233 Usage:\\
1233 %prun [options] statement
1234 %prun [options] statement
1234
1235
1235 The given statement (which doesn't require quote marks) is run via the
1236 The given statement (which doesn't require quote marks) is run via the
1236 python profiler in a manner similar to the profile.run() function.
1237 python profiler in a manner similar to the profile.run() function.
1237 Namespaces are internally managed to work correctly; profile.run
1238 Namespaces are internally managed to work correctly; profile.run
1238 cannot be used in IPython because it makes certain assumptions about
1239 cannot be used in IPython because it makes certain assumptions about
1239 namespaces which do not hold under IPython.
1240 namespaces which do not hold under IPython.
1240
1241
1241 Options:
1242 Options:
1242
1243
1243 -l <limit>: you can place restrictions on what or how much of the
1244 -l <limit>: you can place restrictions on what or how much of the
1244 profile gets printed. The limit value can be:
1245 profile gets printed. The limit value can be:
1245
1246
1246 * A string: only information for function names containing this string
1247 * A string: only information for function names containing this string
1247 is printed.
1248 is printed.
1248
1249
1249 * An integer: only these many lines are printed.
1250 * An integer: only these many lines are printed.
1250
1251
1251 * A float (between 0 and 1): this fraction of the report is printed
1252 * A float (between 0 and 1): this fraction of the report is printed
1252 (for example, use a limit of 0.4 to see the topmost 40% only).
1253 (for example, use a limit of 0.4 to see the topmost 40% only).
1253
1254
1254 You can combine several limits with repeated use of the option. For
1255 You can combine several limits with repeated use of the option. For
1255 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1256 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1256 information about class constructors.
1257 information about class constructors.
1257
1258
1258 -r: return the pstats.Stats object generated by the profiling. This
1259 -r: return the pstats.Stats object generated by the profiling. This
1259 object has all the information about the profile in it, and you can
1260 object has all the information about the profile in it, and you can
1260 later use it for further analysis or in other functions.
1261 later use it for further analysis or in other functions.
1261
1262
1262 -s <key>: sort profile by given key. You can provide more than one key
1263 -s <key>: sort profile by given key. You can provide more than one key
1263 by using the option several times: '-s key1 -s key2 -s key3...'. The
1264 by using the option several times: '-s key1 -s key2 -s key3...'. The
1264 default sorting key is 'time'.
1265 default sorting key is 'time'.
1265
1266
1266 The following is copied verbatim from the profile documentation
1267 The following is copied verbatim from the profile documentation
1267 referenced below:
1268 referenced below:
1268
1269
1269 When more than one key is provided, additional keys are used as
1270 When more than one key is provided, additional keys are used as
1270 secondary criteria when the there is equality in all keys selected
1271 secondary criteria when the there is equality in all keys selected
1271 before them.
1272 before them.
1272
1273
1273 Abbreviations can be used for any key names, as long as the
1274 Abbreviations can be used for any key names, as long as the
1274 abbreviation is unambiguous. The following are the keys currently
1275 abbreviation is unambiguous. The following are the keys currently
1275 defined:
1276 defined:
1276
1277
1277 Valid Arg Meaning\\
1278 Valid Arg Meaning\\
1278 "calls" call count\\
1279 "calls" call count\\
1279 "cumulative" cumulative time\\
1280 "cumulative" cumulative time\\
1280 "file" file name\\
1281 "file" file name\\
1281 "module" file name\\
1282 "module" file name\\
1282 "pcalls" primitive call count\\
1283 "pcalls" primitive call count\\
1283 "line" line number\\
1284 "line" line number\\
1284 "name" function name\\
1285 "name" function name\\
1285 "nfl" name/file/line\\
1286 "nfl" name/file/line\\
1286 "stdname" standard name\\
1287 "stdname" standard name\\
1287 "time" internal time
1288 "time" internal time
1288
1289
1289 Note that all sorts on statistics are in descending order (placing
1290 Note that all sorts on statistics are in descending order (placing
1290 most time consuming items first), where as name, file, and line number
1291 most time consuming items first), where as name, file, and line number
1291 searches are in ascending order (i.e., alphabetical). The subtle
1292 searches are in ascending order (i.e., alphabetical). The subtle
1292 distinction between "nfl" and "stdname" is that the standard name is a
1293 distinction between "nfl" and "stdname" is that the standard name is a
1293 sort of the name as printed, which means that the embedded line
1294 sort of the name as printed, which means that the embedded line
1294 numbers get compared in an odd way. For example, lines 3, 20, and 40
1295 numbers get compared in an odd way. For example, lines 3, 20, and 40
1295 would (if the file names were the same) appear in the string order
1296 would (if the file names were the same) appear in the string order
1296 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1297 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1297 line numbers. In fact, sort_stats("nfl") is the same as
1298 line numbers. In fact, sort_stats("nfl") is the same as
1298 sort_stats("name", "file", "line").
1299 sort_stats("name", "file", "line").
1299
1300
1300 -T <filename>: save profile results as shown on screen to a text
1301 -T <filename>: save profile results as shown on screen to a text
1301 file. The profile is still shown on screen.
1302 file. The profile is still shown on screen.
1302
1303
1303 -D <filename>: save (via dump_stats) profile statistics to given
1304 -D <filename>: save (via dump_stats) profile statistics to given
1304 filename. This data is in a format understod by the pstats module, and
1305 filename. This data is in a format understod by the pstats module, and
1305 is generated by a call to the dump_stats() method of profile
1306 is generated by a call to the dump_stats() method of profile
1306 objects. The profile is still shown on screen.
1307 objects. The profile is still shown on screen.
1307
1308
1308 If you want to run complete programs under the profiler's control, use
1309 If you want to run complete programs under the profiler's control, use
1309 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1310 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1310 contains profiler specific options as described here.
1311 contains profiler specific options as described here.
1311
1312
1312 You can read the complete documentation for the profile module with:\\
1313 You can read the complete documentation for the profile module with:\\
1313 In [1]: import profile; profile.help() """
1314 In [1]: import profile; profile.help() """
1314
1315
1315 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1316 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1316 # protect user quote marks
1317 # protect user quote marks
1317 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1318 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1318
1319
1319 if user_mode: # regular user call
1320 if user_mode: # regular user call
1320 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1321 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1321 list_all=1)
1322 list_all=1)
1322 namespace = self.shell.user_ns
1323 namespace = self.shell.user_ns
1323 else: # called to run a program by %run -p
1324 else: # called to run a program by %run -p
1324 try:
1325 try:
1325 filename = get_py_filename(arg_lst[0])
1326 filename = get_py_filename(arg_lst[0])
1326 except IOError,msg:
1327 except IOError,msg:
1327 error(msg)
1328 error(msg)
1328 return
1329 return
1329
1330
1330 arg_str = 'execfile(filename,prog_ns)'
1331 arg_str = 'execfile(filename,prog_ns)'
1331 namespace = locals()
1332 namespace = locals()
1332
1333
1333 opts.merge(opts_def)
1334 opts.merge(opts_def)
1334
1335
1335 prof = profile.Profile()
1336 prof = profile.Profile()
1336 try:
1337 try:
1337 prof = prof.runctx(arg_str,namespace,namespace)
1338 prof = prof.runctx(arg_str,namespace,namespace)
1338 sys_exit = ''
1339 sys_exit = ''
1339 except SystemExit:
1340 except SystemExit:
1340 sys_exit = """*** SystemExit exception caught in code being profiled."""
1341 sys_exit = """*** SystemExit exception caught in code being profiled."""
1341
1342
1342 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1343 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1343
1344
1344 lims = opts.l
1345 lims = opts.l
1345 if lims:
1346 if lims:
1346 lims = [] # rebuild lims with ints/floats/strings
1347 lims = [] # rebuild lims with ints/floats/strings
1347 for lim in opts.l:
1348 for lim in opts.l:
1348 try:
1349 try:
1349 lims.append(int(lim))
1350 lims.append(int(lim))
1350 except ValueError:
1351 except ValueError:
1351 try:
1352 try:
1352 lims.append(float(lim))
1353 lims.append(float(lim))
1353 except ValueError:
1354 except ValueError:
1354 lims.append(lim)
1355 lims.append(lim)
1355
1356
1356 # trap output
1357 # trap output
1357 sys_stdout = sys.stdout
1358 sys_stdout = sys.stdout
1358 stdout_trap = StringIO()
1359 stdout_trap = StringIO()
1359 try:
1360 try:
1360 sys.stdout = stdout_trap
1361 sys.stdout = stdout_trap
1361 stats.print_stats(*lims)
1362 stats.print_stats(*lims)
1362 finally:
1363 finally:
1363 sys.stdout = sys_stdout
1364 sys.stdout = sys_stdout
1364 output = stdout_trap.getvalue()
1365 output = stdout_trap.getvalue()
1365 output = output.rstrip()
1366 output = output.rstrip()
1366
1367
1367 page(output,screen_lines=self.shell.rc.screen_length)
1368 page(output,screen_lines=self.shell.rc.screen_length)
1368 print sys_exit,
1369 print sys_exit,
1369
1370
1370 dump_file = opts.D[0]
1371 dump_file = opts.D[0]
1371 text_file = opts.T[0]
1372 text_file = opts.T[0]
1372 if dump_file:
1373 if dump_file:
1373 prof.dump_stats(dump_file)
1374 prof.dump_stats(dump_file)
1374 print '\n*** Profile stats marshalled to file',\
1375 print '\n*** Profile stats marshalled to file',\
1375 `dump_file`+'.',sys_exit
1376 `dump_file`+'.',sys_exit
1376 if text_file:
1377 if text_file:
1377 file(text_file,'w').write(output)
1378 file(text_file,'w').write(output)
1378 print '\n*** Profile printout saved to text file',\
1379 print '\n*** Profile printout saved to text file',\
1379 `text_file`+'.',sys_exit
1380 `text_file`+'.',sys_exit
1380
1381
1381 if opts.has_key('r'):
1382 if opts.has_key('r'):
1382 return stats
1383 return stats
1383 else:
1384 else:
1384 return None
1385 return None
1385
1386
1386 def magic_run(self, parameter_s ='',runner=None):
1387 def magic_run(self, parameter_s ='',runner=None):
1387 """Run the named file inside IPython as a program.
1388 """Run the named file inside IPython as a program.
1388
1389
1389 Usage:\\
1390 Usage:\\
1390 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1391 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1391
1392
1392 Parameters after the filename are passed as command-line arguments to
1393 Parameters after the filename are passed as command-line arguments to
1393 the program (put in sys.argv). Then, control returns to IPython's
1394 the program (put in sys.argv). Then, control returns to IPython's
1394 prompt.
1395 prompt.
1395
1396
1396 This is similar to running at a system prompt:\\
1397 This is similar to running at a system prompt:\\
1397 $ python file args\\
1398 $ python file args\\
1398 but with the advantage of giving you IPython's tracebacks, and of
1399 but with the advantage of giving you IPython's tracebacks, and of
1399 loading all variables into your interactive namespace for further use
1400 loading all variables into your interactive namespace for further use
1400 (unless -p is used, see below).
1401 (unless -p is used, see below).
1401
1402
1402 The file is executed in a namespace initially consisting only of
1403 The file is executed in a namespace initially consisting only of
1403 __name__=='__main__' and sys.argv constructed as indicated. It thus
1404 __name__=='__main__' and sys.argv constructed as indicated. It thus
1404 sees its environment as if it were being run as a stand-alone
1405 sees its environment as if it were being run as a stand-alone
1405 program. But after execution, the IPython interactive namespace gets
1406 program. But after execution, the IPython interactive namespace gets
1406 updated with all variables defined in the program (except for __name__
1407 updated with all variables defined in the program (except for __name__
1407 and sys.argv). This allows for very convenient loading of code for
1408 and sys.argv). This allows for very convenient loading of code for
1408 interactive work, while giving each program a 'clean sheet' to run in.
1409 interactive work, while giving each program a 'clean sheet' to run in.
1409
1410
1410 Options:
1411 Options:
1411
1412
1412 -n: __name__ is NOT set to '__main__', but to the running file's name
1413 -n: __name__ is NOT set to '__main__', but to the running file's name
1413 without extension (as python does under import). This allows running
1414 without extension (as python does under import). This allows running
1414 scripts and reloading the definitions in them without calling code
1415 scripts and reloading the definitions in them without calling code
1415 protected by an ' if __name__ == "__main__" ' clause.
1416 protected by an ' if __name__ == "__main__" ' clause.
1416
1417
1417 -i: run the file in IPython's namespace instead of an empty one. This
1418 -i: run the file in IPython's namespace instead of an empty one. This
1418 is useful if you are experimenting with code written in a text editor
1419 is useful if you are experimenting with code written in a text editor
1419 which depends on variables defined interactively.
1420 which depends on variables defined interactively.
1420
1421
1421 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1422 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1422 being run. This is particularly useful if IPython is being used to
1423 being run. This is particularly useful if IPython is being used to
1423 run unittests, which always exit with a sys.exit() call. In such
1424 run unittests, which always exit with a sys.exit() call. In such
1424 cases you are interested in the output of the test results, not in
1425 cases you are interested in the output of the test results, not in
1425 seeing a traceback of the unittest module.
1426 seeing a traceback of the unittest module.
1426
1427
1427 -t: print timing information at the end of the run. IPython will give
1428 -t: print timing information at the end of the run. IPython will give
1428 you an estimated CPU time consumption for your script, which under
1429 you an estimated CPU time consumption for your script, which under
1429 Unix uses the resource module to avoid the wraparound problems of
1430 Unix uses the resource module to avoid the wraparound problems of
1430 time.clock(). Under Unix, an estimate of time spent on system tasks
1431 time.clock(). Under Unix, an estimate of time spent on system tasks
1431 is also given (for Windows platforms this is reported as 0.0).
1432 is also given (for Windows platforms this is reported as 0.0).
1432
1433
1433 If -t is given, an additional -N<N> option can be given, where <N>
1434 If -t is given, an additional -N<N> option can be given, where <N>
1434 must be an integer indicating how many times you want the script to
1435 must be an integer indicating how many times you want the script to
1435 run. The final timing report will include total and per run results.
1436 run. The final timing report will include total and per run results.
1436
1437
1437 For example (testing the script uniq_stable.py):
1438 For example (testing the script uniq_stable.py):
1438
1439
1439 In [1]: run -t uniq_stable
1440 In [1]: run -t uniq_stable
1440
1441
1441 IPython CPU timings (estimated):\\
1442 IPython CPU timings (estimated):\\
1442 User : 0.19597 s.\\
1443 User : 0.19597 s.\\
1443 System: 0.0 s.\\
1444 System: 0.0 s.\\
1444
1445
1445 In [2]: run -t -N5 uniq_stable
1446 In [2]: run -t -N5 uniq_stable
1446
1447
1447 IPython CPU timings (estimated):\\
1448 IPython CPU timings (estimated):\\
1448 Total runs performed: 5\\
1449 Total runs performed: 5\\
1449 Times : Total Per run\\
1450 Times : Total Per run\\
1450 User : 0.910862 s, 0.1821724 s.\\
1451 User : 0.910862 s, 0.1821724 s.\\
1451 System: 0.0 s, 0.0 s.
1452 System: 0.0 s, 0.0 s.
1452
1453
1453 -d: run your program under the control of pdb, the Python debugger.
1454 -d: run your program under the control of pdb, the Python debugger.
1454 This allows you to execute your program step by step, watch variables,
1455 This allows you to execute your program step by step, watch variables,
1455 etc. Internally, what IPython does is similar to calling:
1456 etc. Internally, what IPython does is similar to calling:
1456
1457
1457 pdb.run('execfile("YOURFILENAME")')
1458 pdb.run('execfile("YOURFILENAME")')
1458
1459
1459 with a breakpoint set on line 1 of your file. You can change the line
1460 with a breakpoint set on line 1 of your file. You can change the line
1460 number for this automatic breakpoint to be <N> by using the -bN option
1461 number for this automatic breakpoint to be <N> by using the -bN option
1461 (where N must be an integer). For example:
1462 (where N must be an integer). For example:
1462
1463
1463 %run -d -b40 myscript
1464 %run -d -b40 myscript
1464
1465
1465 will set the first breakpoint at line 40 in myscript.py. Note that
1466 will set the first breakpoint at line 40 in myscript.py. Note that
1466 the first breakpoint must be set on a line which actually does
1467 the first breakpoint must be set on a line which actually does
1467 something (not a comment or docstring) for it to stop execution.
1468 something (not a comment or docstring) for it to stop execution.
1468
1469
1469 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1470 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1470 first enter 'c' (without qoutes) to start execution up to the first
1471 first enter 'c' (without qoutes) to start execution up to the first
1471 breakpoint.
1472 breakpoint.
1472
1473
1473 Entering 'help' gives information about the use of the debugger. You
1474 Entering 'help' gives information about the use of the debugger. You
1474 can easily see pdb's full documentation with "import pdb;pdb.help()"
1475 can easily see pdb's full documentation with "import pdb;pdb.help()"
1475 at a prompt.
1476 at a prompt.
1476
1477
1477 -p: run program under the control of the Python profiler module (which
1478 -p: run program under the control of the Python profiler module (which
1478 prints a detailed report of execution times, function calls, etc).
1479 prints a detailed report of execution times, function calls, etc).
1479
1480
1480 You can pass other options after -p which affect the behavior of the
1481 You can pass other options after -p which affect the behavior of the
1481 profiler itself. See the docs for %prun for details.
1482 profiler itself. See the docs for %prun for details.
1482
1483
1483 In this mode, the program's variables do NOT propagate back to the
1484 In this mode, the program's variables do NOT propagate back to the
1484 IPython interactive namespace (because they remain in the namespace
1485 IPython interactive namespace (because they remain in the namespace
1485 where the profiler executes them).
1486 where the profiler executes them).
1486
1487
1487 Internally this triggers a call to %prun, see its documentation for
1488 Internally this triggers a call to %prun, see its documentation for
1488 details on the options available specifically for profiling.
1489 details on the options available specifically for profiling.
1489
1490
1490 There is one special usage for which the text above doesn't apply:
1491 There is one special usage for which the text above doesn't apply:
1491 if the filename ends with .ipy, the file is run as ipython script,
1492 if the filename ends with .ipy, the file is run as ipython script,
1492 just as if the commands were written on IPython prompt.
1493 just as if the commands were written on IPython prompt.
1493 """
1494 """
1494
1495
1495 # get arguments and set sys.argv for program to be run.
1496 # get arguments and set sys.argv for program to be run.
1496 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1497 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1497 mode='list',list_all=1)
1498 mode='list',list_all=1)
1498
1499
1499 try:
1500 try:
1500 filename = get_py_filename(arg_lst[0])
1501 filename = get_py_filename(arg_lst[0])
1501 except IndexError:
1502 except IndexError:
1502 warn('you must provide at least a filename.')
1503 warn('you must provide at least a filename.')
1503 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1504 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1504 return
1505 return
1505 except IOError,msg:
1506 except IOError,msg:
1506 error(msg)
1507 error(msg)
1507 return
1508 return
1508
1509
1509 if filename.lower().endswith('.ipy'):
1510 if filename.lower().endswith('.ipy'):
1510 self.api.runlines(open(filename).read())
1511 self.api.runlines(open(filename).read())
1511 return
1512 return
1512
1513
1513 # Control the response to exit() calls made by the script being run
1514 # Control the response to exit() calls made by the script being run
1514 exit_ignore = opts.has_key('e')
1515 exit_ignore = opts.has_key('e')
1515
1516
1516 # Make sure that the running script gets a proper sys.argv as if it
1517 # Make sure that the running script gets a proper sys.argv as if it
1517 # were run from a system shell.
1518 # were run from a system shell.
1518 save_argv = sys.argv # save it for later restoring
1519 save_argv = sys.argv # save it for later restoring
1519 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1520 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1520
1521
1521 if opts.has_key('i'):
1522 if opts.has_key('i'):
1522 prog_ns = self.shell.user_ns
1523 prog_ns = self.shell.user_ns
1523 __name__save = self.shell.user_ns['__name__']
1524 __name__save = self.shell.user_ns['__name__']
1524 prog_ns['__name__'] = '__main__'
1525 prog_ns['__name__'] = '__main__'
1525 else:
1526 else:
1526 if opts.has_key('n'):
1527 if opts.has_key('n'):
1527 name = os.path.splitext(os.path.basename(filename))[0]
1528 name = os.path.splitext(os.path.basename(filename))[0]
1528 else:
1529 else:
1529 name = '__main__'
1530 name = '__main__'
1530 prog_ns = {'__name__':name}
1531 prog_ns = {'__name__':name}
1531
1532
1532 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1533 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1533 # set the __file__ global in the script's namespace
1534 # set the __file__ global in the script's namespace
1534 prog_ns['__file__'] = filename
1535 prog_ns['__file__'] = filename
1535
1536
1536 # pickle fix. See iplib for an explanation. But we need to make sure
1537 # pickle fix. See iplib for an explanation. But we need to make sure
1537 # that, if we overwrite __main__, we replace it at the end
1538 # that, if we overwrite __main__, we replace it at the end
1538 if prog_ns['__name__'] == '__main__':
1539 if prog_ns['__name__'] == '__main__':
1539 restore_main = sys.modules['__main__']
1540 restore_main = sys.modules['__main__']
1540 else:
1541 else:
1541 restore_main = False
1542 restore_main = False
1542
1543
1543 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1544 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1544
1545
1545 stats = None
1546 stats = None
1546 try:
1547 try:
1547 if self.shell.has_readline:
1548 if self.shell.has_readline:
1548 self.shell.savehist()
1549 self.shell.savehist()
1549
1550
1550 if opts.has_key('p'):
1551 if opts.has_key('p'):
1551 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1552 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1552 else:
1553 else:
1553 if opts.has_key('d'):
1554 if opts.has_key('d'):
1554 deb = Debugger.Pdb(self.shell.rc.colors)
1555 deb = Debugger.Pdb(self.shell.rc.colors)
1555 # reset Breakpoint state, which is moronically kept
1556 # reset Breakpoint state, which is moronically kept
1556 # in a class
1557 # in a class
1557 bdb.Breakpoint.next = 1
1558 bdb.Breakpoint.next = 1
1558 bdb.Breakpoint.bplist = {}
1559 bdb.Breakpoint.bplist = {}
1559 bdb.Breakpoint.bpbynumber = [None]
1560 bdb.Breakpoint.bpbynumber = [None]
1560 # Set an initial breakpoint to stop execution
1561 # Set an initial breakpoint to stop execution
1561 maxtries = 10
1562 maxtries = 10
1562 bp = int(opts.get('b',[1])[0])
1563 bp = int(opts.get('b',[1])[0])
1563 checkline = deb.checkline(filename,bp)
1564 checkline = deb.checkline(filename,bp)
1564 if not checkline:
1565 if not checkline:
1565 for bp in range(bp+1,bp+maxtries+1):
1566 for bp in range(bp+1,bp+maxtries+1):
1566 if deb.checkline(filename,bp):
1567 if deb.checkline(filename,bp):
1567 break
1568 break
1568 else:
1569 else:
1569 msg = ("\nI failed to find a valid line to set "
1570 msg = ("\nI failed to find a valid line to set "
1570 "a breakpoint\n"
1571 "a breakpoint\n"
1571 "after trying up to line: %s.\n"
1572 "after trying up to line: %s.\n"
1572 "Please set a valid breakpoint manually "
1573 "Please set a valid breakpoint manually "
1573 "with the -b option." % bp)
1574 "with the -b option." % bp)
1574 error(msg)
1575 error(msg)
1575 return
1576 return
1576 # if we find a good linenumber, set the breakpoint
1577 # if we find a good linenumber, set the breakpoint
1577 deb.do_break('%s:%s' % (filename,bp))
1578 deb.do_break('%s:%s' % (filename,bp))
1578 # Start file run
1579 # Start file run
1579 print "NOTE: Enter 'c' at the",
1580 print "NOTE: Enter 'c' at the",
1580 print "%s prompt to start your script." % deb.prompt
1581 print "%s prompt to start your script." % deb.prompt
1581 try:
1582 try:
1582 deb.run('execfile("%s")' % filename,prog_ns)
1583 deb.run('execfile("%s")' % filename,prog_ns)
1583
1584
1584 except:
1585 except:
1585 etype, value, tb = sys.exc_info()
1586 etype, value, tb = sys.exc_info()
1586 # Skip three frames in the traceback: the %run one,
1587 # Skip three frames in the traceback: the %run one,
1587 # one inside bdb.py, and the command-line typed by the
1588 # one inside bdb.py, and the command-line typed by the
1588 # user (run by exec in pdb itself).
1589 # user (run by exec in pdb itself).
1589 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1590 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1590 else:
1591 else:
1591 if runner is None:
1592 if runner is None:
1592 runner = self.shell.safe_execfile
1593 runner = self.shell.safe_execfile
1593 if opts.has_key('t'):
1594 if opts.has_key('t'):
1594 try:
1595 try:
1595 nruns = int(opts['N'][0])
1596 nruns = int(opts['N'][0])
1596 if nruns < 1:
1597 if nruns < 1:
1597 error('Number of runs must be >=1')
1598 error('Number of runs must be >=1')
1598 return
1599 return
1599 except (KeyError):
1600 except (KeyError):
1600 nruns = 1
1601 nruns = 1
1601 if nruns == 1:
1602 if nruns == 1:
1602 t0 = clock2()
1603 t0 = clock2()
1603 runner(filename,prog_ns,prog_ns,
1604 runner(filename,prog_ns,prog_ns,
1604 exit_ignore=exit_ignore)
1605 exit_ignore=exit_ignore)
1605 t1 = clock2()
1606 t1 = clock2()
1606 t_usr = t1[0]-t0[0]
1607 t_usr = t1[0]-t0[0]
1607 t_sys = t1[1]-t1[1]
1608 t_sys = t1[1]-t1[1]
1608 print "\nIPython CPU timings (estimated):"
1609 print "\nIPython CPU timings (estimated):"
1609 print " User : %10s s." % t_usr
1610 print " User : %10s s." % t_usr
1610 print " System: %10s s." % t_sys
1611 print " System: %10s s." % t_sys
1611 else:
1612 else:
1612 runs = range(nruns)
1613 runs = range(nruns)
1613 t0 = clock2()
1614 t0 = clock2()
1614 for nr in runs:
1615 for nr in runs:
1615 runner(filename,prog_ns,prog_ns,
1616 runner(filename,prog_ns,prog_ns,
1616 exit_ignore=exit_ignore)
1617 exit_ignore=exit_ignore)
1617 t1 = clock2()
1618 t1 = clock2()
1618 t_usr = t1[0]-t0[0]
1619 t_usr = t1[0]-t0[0]
1619 t_sys = t1[1]-t1[1]
1620 t_sys = t1[1]-t1[1]
1620 print "\nIPython CPU timings (estimated):"
1621 print "\nIPython CPU timings (estimated):"
1621 print "Total runs performed:",nruns
1622 print "Total runs performed:",nruns
1622 print " Times : %10s %10s" % ('Total','Per run')
1623 print " Times : %10s %10s" % ('Total','Per run')
1623 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1624 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1624 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1625 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1625
1626
1626 else:
1627 else:
1627 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1628 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1628 if opts.has_key('i'):
1629 if opts.has_key('i'):
1629 self.shell.user_ns['__name__'] = __name__save
1630 self.shell.user_ns['__name__'] = __name__save
1630 else:
1631 else:
1631 # update IPython interactive namespace
1632 # update IPython interactive namespace
1632 del prog_ns['__name__']
1633 del prog_ns['__name__']
1633 self.shell.user_ns.update(prog_ns)
1634 self.shell.user_ns.update(prog_ns)
1634 finally:
1635 finally:
1635 sys.argv = save_argv
1636 sys.argv = save_argv
1636 if restore_main:
1637 if restore_main:
1637 sys.modules['__main__'] = restore_main
1638 sys.modules['__main__'] = restore_main
1638 if self.shell.has_readline:
1639 if self.shell.has_readline:
1639 self.shell.readline.read_history_file(self.shell.histfile)
1640 self.shell.readline.read_history_file(self.shell.histfile)
1640
1641
1641 return stats
1642 return stats
1642
1643
1643 def magic_runlog(self, parameter_s =''):
1644 def magic_runlog(self, parameter_s =''):
1644 """Run files as logs.
1645 """Run files as logs.
1645
1646
1646 Usage:\\
1647 Usage:\\
1647 %runlog file1 file2 ...
1648 %runlog file1 file2 ...
1648
1649
1649 Run the named files (treating them as log files) in sequence inside
1650 Run the named files (treating them as log files) in sequence inside
1650 the interpreter, and return to the prompt. This is much slower than
1651 the interpreter, and return to the prompt. This is much slower than
1651 %run because each line is executed in a try/except block, but it
1652 %run because each line is executed in a try/except block, but it
1652 allows running files with syntax errors in them.
1653 allows running files with syntax errors in them.
1653
1654
1654 Normally IPython will guess when a file is one of its own logfiles, so
1655 Normally IPython will guess when a file is one of its own logfiles, so
1655 you can typically use %run even for logs. This shorthand allows you to
1656 you can typically use %run even for logs. This shorthand allows you to
1656 force any file to be treated as a log file."""
1657 force any file to be treated as a log file."""
1657
1658
1658 for f in parameter_s.split():
1659 for f in parameter_s.split():
1659 self.shell.safe_execfile(f,self.shell.user_ns,
1660 self.shell.safe_execfile(f,self.shell.user_ns,
1660 self.shell.user_ns,islog=1)
1661 self.shell.user_ns,islog=1)
1661
1662
1662 def magic_timeit(self, parameter_s =''):
1663 def magic_timeit(self, parameter_s =''):
1663 """Time execution of a Python statement or expression
1664 """Time execution of a Python statement or expression
1664
1665
1665 Usage:\\
1666 Usage:\\
1666 %timeit [-n<N> -r<R> [-t|-c]] statement
1667 %timeit [-n<N> -r<R> [-t|-c]] statement
1667
1668
1668 Time execution of a Python statement or expression using the timeit
1669 Time execution of a Python statement or expression using the timeit
1669 module.
1670 module.
1670
1671
1671 Options:
1672 Options:
1672 -n<N>: execute the given statement <N> times in a loop. If this value
1673 -n<N>: execute the given statement <N> times in a loop. If this value
1673 is not given, a fitting value is chosen.
1674 is not given, a fitting value is chosen.
1674
1675
1675 -r<R>: repeat the loop iteration <R> times and take the best result.
1676 -r<R>: repeat the loop iteration <R> times and take the best result.
1676 Default: 3
1677 Default: 3
1677
1678
1678 -t: use time.time to measure the time, which is the default on Unix.
1679 -t: use time.time to measure the time, which is the default on Unix.
1679 This function measures wall time.
1680 This function measures wall time.
1680
1681
1681 -c: use time.clock to measure the time, which is the default on
1682 -c: use time.clock to measure the time, which is the default on
1682 Windows and measures wall time. On Unix, resource.getrusage is used
1683 Windows and measures wall time. On Unix, resource.getrusage is used
1683 instead and returns the CPU user time.
1684 instead and returns the CPU user time.
1684
1685
1685 -p<P>: use a precision of <P> digits to display the timing result.
1686 -p<P>: use a precision of <P> digits to display the timing result.
1686 Default: 3
1687 Default: 3
1687
1688
1688
1689
1689 Examples:\\
1690 Examples:\\
1690 In [1]: %timeit pass
1691 In [1]: %timeit pass
1691 10000000 loops, best of 3: 53.3 ns per loop
1692 10000000 loops, best of 3: 53.3 ns per loop
1692
1693
1693 In [2]: u = None
1694 In [2]: u = None
1694
1695
1695 In [3]: %timeit u is None
1696 In [3]: %timeit u is None
1696 10000000 loops, best of 3: 184 ns per loop
1697 10000000 loops, best of 3: 184 ns per loop
1697
1698
1698 In [4]: %timeit -r 4 u == None
1699 In [4]: %timeit -r 4 u == None
1699 1000000 loops, best of 4: 242 ns per loop
1700 1000000 loops, best of 4: 242 ns per loop
1700
1701
1701 In [5]: import time
1702 In [5]: import time
1702
1703
1703 In [6]: %timeit -n1 time.sleep(2)
1704 In [6]: %timeit -n1 time.sleep(2)
1704 1 loops, best of 3: 2 s per loop
1705 1 loops, best of 3: 2 s per loop
1705
1706
1706
1707
1707 The times reported by %timeit will be slightly higher than those
1708 The times reported by %timeit will be slightly higher than those
1708 reported by the timeit.py script when variables are accessed. This is
1709 reported by the timeit.py script when variables are accessed. This is
1709 due to the fact that %timeit executes the statement in the namespace
1710 due to the fact that %timeit executes the statement in the namespace
1710 of the shell, compared with timeit.py, which uses a single setup
1711 of the shell, compared with timeit.py, which uses a single setup
1711 statement to import function or create variables. Generally, the bias
1712 statement to import function or create variables. Generally, the bias
1712 does not matter as long as results from timeit.py are not mixed with
1713 does not matter as long as results from timeit.py are not mixed with
1713 those from %timeit."""
1714 those from %timeit."""
1714
1715
1715 import timeit
1716 import timeit
1716 import math
1717 import math
1717
1718
1718 units = ["s", "ms", "\xc2\xb5s", "ns"]
1719 units = ["s", "ms", "\xc2\xb5s", "ns"]
1719 scaling = [1, 1e3, 1e6, 1e9]
1720 scaling = [1, 1e3, 1e6, 1e9]
1720
1721
1721 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1722 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1722 posix=False)
1723 posix=False)
1723 if stmt == "":
1724 if stmt == "":
1724 return
1725 return
1725 timefunc = timeit.default_timer
1726 timefunc = timeit.default_timer
1726 number = int(getattr(opts, "n", 0))
1727 number = int(getattr(opts, "n", 0))
1727 repeat = int(getattr(opts, "r", timeit.default_repeat))
1728 repeat = int(getattr(opts, "r", timeit.default_repeat))
1728 precision = int(getattr(opts, "p", 3))
1729 precision = int(getattr(opts, "p", 3))
1729 if hasattr(opts, "t"):
1730 if hasattr(opts, "t"):
1730 timefunc = time.time
1731 timefunc = time.time
1731 if hasattr(opts, "c"):
1732 if hasattr(opts, "c"):
1732 timefunc = clock
1733 timefunc = clock
1733
1734
1734 timer = timeit.Timer(timer=timefunc)
1735 timer = timeit.Timer(timer=timefunc)
1735 # this code has tight coupling to the inner workings of timeit.Timer,
1736 # this code has tight coupling to the inner workings of timeit.Timer,
1736 # but is there a better way to achieve that the code stmt has access
1737 # but is there a better way to achieve that the code stmt has access
1737 # to the shell namespace?
1738 # to the shell namespace?
1738
1739
1739 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1740 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1740 'setup': "pass"}
1741 'setup': "pass"}
1741 code = compile(src, "<magic-timeit>", "exec")
1742 code = compile(src, "<magic-timeit>", "exec")
1742 ns = {}
1743 ns = {}
1743 exec code in self.shell.user_ns, ns
1744 exec code in self.shell.user_ns, ns
1744 timer.inner = ns["inner"]
1745 timer.inner = ns["inner"]
1745
1746
1746 if number == 0:
1747 if number == 0:
1747 # determine number so that 0.2 <= total time < 2.0
1748 # determine number so that 0.2 <= total time < 2.0
1748 number = 1
1749 number = 1
1749 for i in range(1, 10):
1750 for i in range(1, 10):
1750 number *= 10
1751 number *= 10
1751 if timer.timeit(number) >= 0.2:
1752 if timer.timeit(number) >= 0.2:
1752 break
1753 break
1753
1754
1754 best = min(timer.repeat(repeat, number)) / number
1755 best = min(timer.repeat(repeat, number)) / number
1755
1756
1756 if best > 0.0:
1757 if best > 0.0:
1757 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1758 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1758 else:
1759 else:
1759 order = 3
1760 order = 3
1760 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1761 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1761 precision,
1762 precision,
1762 best * scaling[order],
1763 best * scaling[order],
1763 units[order])
1764 units[order])
1764
1765
1765 def magic_time(self,parameter_s = ''):
1766 def magic_time(self,parameter_s = ''):
1766 """Time execution of a Python statement or expression.
1767 """Time execution of a Python statement or expression.
1767
1768
1768 The CPU and wall clock times are printed, and the value of the
1769 The CPU and wall clock times are printed, and the value of the
1769 expression (if any) is returned. Note that under Win32, system time
1770 expression (if any) is returned. Note that under Win32, system time
1770 is always reported as 0, since it can not be measured.
1771 is always reported as 0, since it can not be measured.
1771
1772
1772 This function provides very basic timing functionality. In Python
1773 This function provides very basic timing functionality. In Python
1773 2.3, the timeit module offers more control and sophistication, so this
1774 2.3, the timeit module offers more control and sophistication, so this
1774 could be rewritten to use it (patches welcome).
1775 could be rewritten to use it (patches welcome).
1775
1776
1776 Some examples:
1777 Some examples:
1777
1778
1778 In [1]: time 2**128
1779 In [1]: time 2**128
1779 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1780 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1780 Wall time: 0.00
1781 Wall time: 0.00
1781 Out[1]: 340282366920938463463374607431768211456L
1782 Out[1]: 340282366920938463463374607431768211456L
1782
1783
1783 In [2]: n = 1000000
1784 In [2]: n = 1000000
1784
1785
1785 In [3]: time sum(range(n))
1786 In [3]: time sum(range(n))
1786 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1787 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1787 Wall time: 1.37
1788 Wall time: 1.37
1788 Out[3]: 499999500000L
1789 Out[3]: 499999500000L
1789
1790
1790 In [4]: time print 'hello world'
1791 In [4]: time print 'hello world'
1791 hello world
1792 hello world
1792 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1793 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1793 Wall time: 0.00
1794 Wall time: 0.00
1794 """
1795 """
1795
1796
1796 # fail immediately if the given expression can't be compiled
1797 # fail immediately if the given expression can't be compiled
1797 try:
1798 try:
1798 mode = 'eval'
1799 mode = 'eval'
1799 code = compile(parameter_s,'<timed eval>',mode)
1800 code = compile(parameter_s,'<timed eval>',mode)
1800 except SyntaxError:
1801 except SyntaxError:
1801 mode = 'exec'
1802 mode = 'exec'
1802 code = compile(parameter_s,'<timed exec>',mode)
1803 code = compile(parameter_s,'<timed exec>',mode)
1803 # skew measurement as little as possible
1804 # skew measurement as little as possible
1804 glob = self.shell.user_ns
1805 glob = self.shell.user_ns
1805 clk = clock2
1806 clk = clock2
1806 wtime = time.time
1807 wtime = time.time
1807 # time execution
1808 # time execution
1808 wall_st = wtime()
1809 wall_st = wtime()
1809 if mode=='eval':
1810 if mode=='eval':
1810 st = clk()
1811 st = clk()
1811 out = eval(code,glob)
1812 out = eval(code,glob)
1812 end = clk()
1813 end = clk()
1813 else:
1814 else:
1814 st = clk()
1815 st = clk()
1815 exec code in glob
1816 exec code in glob
1816 end = clk()
1817 end = clk()
1817 out = None
1818 out = None
1818 wall_end = wtime()
1819 wall_end = wtime()
1819 # Compute actual times and report
1820 # Compute actual times and report
1820 wall_time = wall_end-wall_st
1821 wall_time = wall_end-wall_st
1821 cpu_user = end[0]-st[0]
1822 cpu_user = end[0]-st[0]
1822 cpu_sys = end[1]-st[1]
1823 cpu_sys = end[1]-st[1]
1823 cpu_tot = cpu_user+cpu_sys
1824 cpu_tot = cpu_user+cpu_sys
1824 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1825 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1825 (cpu_user,cpu_sys,cpu_tot)
1826 (cpu_user,cpu_sys,cpu_tot)
1826 print "Wall time: %.2f" % wall_time
1827 print "Wall time: %.2f" % wall_time
1827 return out
1828 return out
1828
1829
1829 def magic_macro(self,parameter_s = ''):
1830 def magic_macro(self,parameter_s = ''):
1830 """Define a set of input lines as a macro for future re-execution.
1831 """Define a set of input lines as a macro for future re-execution.
1831
1832
1832 Usage:\\
1833 Usage:\\
1833 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1834 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1834
1835
1835 Options:
1836 Options:
1836
1837
1837 -r: use 'raw' input. By default, the 'processed' history is used,
1838 -r: use 'raw' input. By default, the 'processed' history is used,
1838 so that magics are loaded in their transformed version to valid
1839 so that magics are loaded in their transformed version to valid
1839 Python. If this option is given, the raw input as typed as the
1840 Python. If this option is given, the raw input as typed as the
1840 command line is used instead.
1841 command line is used instead.
1841
1842
1842 This will define a global variable called `name` which is a string
1843 This will define a global variable called `name` which is a string
1843 made of joining the slices and lines you specify (n1,n2,... numbers
1844 made of joining the slices and lines you specify (n1,n2,... numbers
1844 above) from your input history into a single string. This variable
1845 above) from your input history into a single string. This variable
1845 acts like an automatic function which re-executes those lines as if
1846 acts like an automatic function which re-executes those lines as if
1846 you had typed them. You just type 'name' at the prompt and the code
1847 you had typed them. You just type 'name' at the prompt and the code
1847 executes.
1848 executes.
1848
1849
1849 The notation for indicating number ranges is: n1-n2 means 'use line
1850 The notation for indicating number ranges is: n1-n2 means 'use line
1850 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1851 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1851 using the lines numbered 5,6 and 7.
1852 using the lines numbered 5,6 and 7.
1852
1853
1853 Note: as a 'hidden' feature, you can also use traditional python slice
1854 Note: as a 'hidden' feature, you can also use traditional python slice
1854 notation, where N:M means numbers N through M-1.
1855 notation, where N:M means numbers N through M-1.
1855
1856
1856 For example, if your history contains (%hist prints it):
1857 For example, if your history contains (%hist prints it):
1857
1858
1858 44: x=1\\
1859 44: x=1\\
1859 45: y=3\\
1860 45: y=3\\
1860 46: z=x+y\\
1861 46: z=x+y\\
1861 47: print x\\
1862 47: print x\\
1862 48: a=5\\
1863 48: a=5\\
1863 49: print 'x',x,'y',y\\
1864 49: print 'x',x,'y',y\\
1864
1865
1865 you can create a macro with lines 44 through 47 (included) and line 49
1866 you can create a macro with lines 44 through 47 (included) and line 49
1866 called my_macro with:
1867 called my_macro with:
1867
1868
1868 In [51]: %macro my_macro 44-47 49
1869 In [51]: %macro my_macro 44-47 49
1869
1870
1870 Now, typing `my_macro` (without quotes) will re-execute all this code
1871 Now, typing `my_macro` (without quotes) will re-execute all this code
1871 in one pass.
1872 in one pass.
1872
1873
1873 You don't need to give the line-numbers in order, and any given line
1874 You don't need to give the line-numbers in order, and any given line
1874 number can appear multiple times. You can assemble macros with any
1875 number can appear multiple times. You can assemble macros with any
1875 lines from your input history in any order.
1876 lines from your input history in any order.
1876
1877
1877 The macro is a simple object which holds its value in an attribute,
1878 The macro is a simple object which holds its value in an attribute,
1878 but IPython's display system checks for macros and executes them as
1879 but IPython's display system checks for macros and executes them as
1879 code instead of printing them when you type their name.
1880 code instead of printing them when you type their name.
1880
1881
1881 You can view a macro's contents by explicitly printing it with:
1882 You can view a macro's contents by explicitly printing it with:
1882
1883
1883 'print macro_name'.
1884 'print macro_name'.
1884
1885
1885 For one-off cases which DON'T contain magic function calls in them you
1886 For one-off cases which DON'T contain magic function calls in them you
1886 can obtain similar results by explicitly executing slices from your
1887 can obtain similar results by explicitly executing slices from your
1887 input history with:
1888 input history with:
1888
1889
1889 In [60]: exec In[44:48]+In[49]"""
1890 In [60]: exec In[44:48]+In[49]"""
1890
1891
1891 opts,args = self.parse_options(parameter_s,'r',mode='list')
1892 opts,args = self.parse_options(parameter_s,'r',mode='list')
1892 name,ranges = args[0], args[1:]
1893 name,ranges = args[0], args[1:]
1893 #print 'rng',ranges # dbg
1894 #print 'rng',ranges # dbg
1894 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1895 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1895 macro = Macro(lines)
1896 macro = Macro(lines)
1896 self.shell.user_ns.update({name:macro})
1897 self.shell.user_ns.update({name:macro})
1897 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1898 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1898 print 'Macro contents:'
1899 print 'Macro contents:'
1899 print macro,
1900 print macro,
1900
1901
1901 def magic_save(self,parameter_s = ''):
1902 def magic_save(self,parameter_s = ''):
1902 """Save a set of lines to a given filename.
1903 """Save a set of lines to a given filename.
1903
1904
1904 Usage:\\
1905 Usage:\\
1905 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1906 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1906
1907
1907 Options:
1908 Options:
1908
1909
1909 -r: use 'raw' input. By default, the 'processed' history is used,
1910 -r: use 'raw' input. By default, the 'processed' history is used,
1910 so that magics are loaded in their transformed version to valid
1911 so that magics are loaded in their transformed version to valid
1911 Python. If this option is given, the raw input as typed as the
1912 Python. If this option is given, the raw input as typed as the
1912 command line is used instead.
1913 command line is used instead.
1913
1914
1914 This function uses the same syntax as %macro for line extraction, but
1915 This function uses the same syntax as %macro for line extraction, but
1915 instead of creating a macro it saves the resulting string to the
1916 instead of creating a macro it saves the resulting string to the
1916 filename you specify.
1917 filename you specify.
1917
1918
1918 It adds a '.py' extension to the file if you don't do so yourself, and
1919 It adds a '.py' extension to the file if you don't do so yourself, and
1919 it asks for confirmation before overwriting existing files."""
1920 it asks for confirmation before overwriting existing files."""
1920
1921
1921 opts,args = self.parse_options(parameter_s,'r',mode='list')
1922 opts,args = self.parse_options(parameter_s,'r',mode='list')
1922 fname,ranges = args[0], args[1:]
1923 fname,ranges = args[0], args[1:]
1923 if not fname.endswith('.py'):
1924 if not fname.endswith('.py'):
1924 fname += '.py'
1925 fname += '.py'
1925 if os.path.isfile(fname):
1926 if os.path.isfile(fname):
1926 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1927 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1927 if ans.lower() not in ['y','yes']:
1928 if ans.lower() not in ['y','yes']:
1928 print 'Operation cancelled.'
1929 print 'Operation cancelled.'
1929 return
1930 return
1930 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1931 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1931 f = file(fname,'w')
1932 f = file(fname,'w')
1932 f.write(cmds)
1933 f.write(cmds)
1933 f.close()
1934 f.close()
1934 print 'The following commands were written to file `%s`:' % fname
1935 print 'The following commands were written to file `%s`:' % fname
1935 print cmds
1936 print cmds
1936
1937
1937 def _edit_macro(self,mname,macro):
1938 def _edit_macro(self,mname,macro):
1938 """open an editor with the macro data in a file"""
1939 """open an editor with the macro data in a file"""
1939 filename = self.shell.mktempfile(macro.value)
1940 filename = self.shell.mktempfile(macro.value)
1940 self.shell.hooks.editor(filename)
1941 self.shell.hooks.editor(filename)
1941
1942
1942 # and make a new macro object, to replace the old one
1943 # and make a new macro object, to replace the old one
1943 mfile = open(filename)
1944 mfile = open(filename)
1944 mvalue = mfile.read()
1945 mvalue = mfile.read()
1945 mfile.close()
1946 mfile.close()
1946 self.shell.user_ns[mname] = Macro(mvalue)
1947 self.shell.user_ns[mname] = Macro(mvalue)
1947
1948
1948 def magic_ed(self,parameter_s=''):
1949 def magic_ed(self,parameter_s=''):
1949 """Alias to %edit."""
1950 """Alias to %edit."""
1950 return self.magic_edit(parameter_s)
1951 return self.magic_edit(parameter_s)
1951
1952
1952 def magic_edit(self,parameter_s='',last_call=['','']):
1953 def magic_edit(self,parameter_s='',last_call=['','']):
1953 """Bring up an editor and execute the resulting code.
1954 """Bring up an editor and execute the resulting code.
1954
1955
1955 Usage:
1956 Usage:
1956 %edit [options] [args]
1957 %edit [options] [args]
1957
1958
1958 %edit runs IPython's editor hook. The default version of this hook is
1959 %edit runs IPython's editor hook. The default version of this hook is
1959 set to call the __IPYTHON__.rc.editor command. This is read from your
1960 set to call the __IPYTHON__.rc.editor command. This is read from your
1960 environment variable $EDITOR. If this isn't found, it will default to
1961 environment variable $EDITOR. If this isn't found, it will default to
1961 vi under Linux/Unix and to notepad under Windows. See the end of this
1962 vi under Linux/Unix and to notepad under Windows. See the end of this
1962 docstring for how to change the editor hook.
1963 docstring for how to change the editor hook.
1963
1964
1964 You can also set the value of this editor via the command line option
1965 You can also set the value of this editor via the command line option
1965 '-editor' or in your ipythonrc file. This is useful if you wish to use
1966 '-editor' or in your ipythonrc file. This is useful if you wish to use
1966 specifically for IPython an editor different from your typical default
1967 specifically for IPython an editor different from your typical default
1967 (and for Windows users who typically don't set environment variables).
1968 (and for Windows users who typically don't set environment variables).
1968
1969
1969 This command allows you to conveniently edit multi-line code right in
1970 This command allows you to conveniently edit multi-line code right in
1970 your IPython session.
1971 your IPython session.
1971
1972
1972 If called without arguments, %edit opens up an empty editor with a
1973 If called without arguments, %edit opens up an empty editor with a
1973 temporary file and will execute the contents of this file when you
1974 temporary file and will execute the contents of this file when you
1974 close it (don't forget to save it!).
1975 close it (don't forget to save it!).
1975
1976
1976
1977
1977 Options:
1978 Options:
1978
1979
1979 -n <number>: open the editor at a specified line number. By default,
1980 -n <number>: open the editor at a specified line number. By default,
1980 the IPython editor hook uses the unix syntax 'editor +N filename', but
1981 the IPython editor hook uses the unix syntax 'editor +N filename', but
1981 you can configure this by providing your own modified hook if your
1982 you can configure this by providing your own modified hook if your
1982 favorite editor supports line-number specifications with a different
1983 favorite editor supports line-number specifications with a different
1983 syntax.
1984 syntax.
1984
1985
1985 -p: this will call the editor with the same data as the previous time
1986 -p: this will call the editor with the same data as the previous time
1986 it was used, regardless of how long ago (in your current session) it
1987 it was used, regardless of how long ago (in your current session) it
1987 was.
1988 was.
1988
1989
1989 -r: use 'raw' input. This option only applies to input taken from the
1990 -r: use 'raw' input. This option only applies to input taken from the
1990 user's history. By default, the 'processed' history is used, so that
1991 user's history. By default, the 'processed' history is used, so that
1991 magics are loaded in their transformed version to valid Python. If
1992 magics are loaded in their transformed version to valid Python. If
1992 this option is given, the raw input as typed as the command line is
1993 this option is given, the raw input as typed as the command line is
1993 used instead. When you exit the editor, it will be executed by
1994 used instead. When you exit the editor, it will be executed by
1994 IPython's own processor.
1995 IPython's own processor.
1995
1996
1996 -x: do not execute the edited code immediately upon exit. This is
1997 -x: do not execute the edited code immediately upon exit. This is
1997 mainly useful if you are editing programs which need to be called with
1998 mainly useful if you are editing programs which need to be called with
1998 command line arguments, which you can then do using %run.
1999 command line arguments, which you can then do using %run.
1999
2000
2000
2001
2001 Arguments:
2002 Arguments:
2002
2003
2003 If arguments are given, the following possibilites exist:
2004 If arguments are given, the following possibilites exist:
2004
2005
2005 - The arguments are numbers or pairs of colon-separated numbers (like
2006 - The arguments are numbers or pairs of colon-separated numbers (like
2006 1 4:8 9). These are interpreted as lines of previous input to be
2007 1 4:8 9). These are interpreted as lines of previous input to be
2007 loaded into the editor. The syntax is the same of the %macro command.
2008 loaded into the editor. The syntax is the same of the %macro command.
2008
2009
2009 - If the argument doesn't start with a number, it is evaluated as a
2010 - If the argument doesn't start with a number, it is evaluated as a
2010 variable and its contents loaded into the editor. You can thus edit
2011 variable and its contents loaded into the editor. You can thus edit
2011 any string which contains python code (including the result of
2012 any string which contains python code (including the result of
2012 previous edits).
2013 previous edits).
2013
2014
2014 - If the argument is the name of an object (other than a string),
2015 - If the argument is the name of an object (other than a string),
2015 IPython will try to locate the file where it was defined and open the
2016 IPython will try to locate the file where it was defined and open the
2016 editor at the point where it is defined. You can use `%edit function`
2017 editor at the point where it is defined. You can use `%edit function`
2017 to load an editor exactly at the point where 'function' is defined,
2018 to load an editor exactly at the point where 'function' is defined,
2018 edit it and have the file be executed automatically.
2019 edit it and have the file be executed automatically.
2019
2020
2020 If the object is a macro (see %macro for details), this opens up your
2021 If the object is a macro (see %macro for details), this opens up your
2021 specified editor with a temporary file containing the macro's data.
2022 specified editor with a temporary file containing the macro's data.
2022 Upon exit, the macro is reloaded with the contents of the file.
2023 Upon exit, the macro is reloaded with the contents of the file.
2023
2024
2024 Note: opening at an exact line is only supported under Unix, and some
2025 Note: opening at an exact line is only supported under Unix, and some
2025 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2026 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2026 '+NUMBER' parameter necessary for this feature. Good editors like
2027 '+NUMBER' parameter necessary for this feature. Good editors like
2027 (X)Emacs, vi, jed, pico and joe all do.
2028 (X)Emacs, vi, jed, pico and joe all do.
2028
2029
2029 - If the argument is not found as a variable, IPython will look for a
2030 - If the argument is not found as a variable, IPython will look for a
2030 file with that name (adding .py if necessary) and load it into the
2031 file with that name (adding .py if necessary) and load it into the
2031 editor. It will execute its contents with execfile() when you exit,
2032 editor. It will execute its contents with execfile() when you exit,
2032 loading any code in the file into your interactive namespace.
2033 loading any code in the file into your interactive namespace.
2033
2034
2034 After executing your code, %edit will return as output the code you
2035 After executing your code, %edit will return as output the code you
2035 typed in the editor (except when it was an existing file). This way
2036 typed in the editor (except when it was an existing file). This way
2036 you can reload the code in further invocations of %edit as a variable,
2037 you can reload the code in further invocations of %edit as a variable,
2037 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2038 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2038 the output.
2039 the output.
2039
2040
2040 Note that %edit is also available through the alias %ed.
2041 Note that %edit is also available through the alias %ed.
2041
2042
2042 This is an example of creating a simple function inside the editor and
2043 This is an example of creating a simple function inside the editor and
2043 then modifying it. First, start up the editor:
2044 then modifying it. First, start up the editor:
2044
2045
2045 In [1]: ed\\
2046 In [1]: ed\\
2046 Editing... done. Executing edited code...\\
2047 Editing... done. Executing edited code...\\
2047 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2048 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2048
2049
2049 We can then call the function foo():
2050 We can then call the function foo():
2050
2051
2051 In [2]: foo()\\
2052 In [2]: foo()\\
2052 foo() was defined in an editing session
2053 foo() was defined in an editing session
2053
2054
2054 Now we edit foo. IPython automatically loads the editor with the
2055 Now we edit foo. IPython automatically loads the editor with the
2055 (temporary) file where foo() was previously defined:
2056 (temporary) file where foo() was previously defined:
2056
2057
2057 In [3]: ed foo\\
2058 In [3]: ed foo\\
2058 Editing... done. Executing edited code...
2059 Editing... done. Executing edited code...
2059
2060
2060 And if we call foo() again we get the modified version:
2061 And if we call foo() again we get the modified version:
2061
2062
2062 In [4]: foo()\\
2063 In [4]: foo()\\
2063 foo() has now been changed!
2064 foo() has now been changed!
2064
2065
2065 Here is an example of how to edit a code snippet successive
2066 Here is an example of how to edit a code snippet successive
2066 times. First we call the editor:
2067 times. First we call the editor:
2067
2068
2068 In [8]: ed\\
2069 In [8]: ed\\
2069 Editing... done. Executing edited code...\\
2070 Editing... done. Executing edited code...\\
2070 hello\\
2071 hello\\
2071 Out[8]: "print 'hello'\\n"
2072 Out[8]: "print 'hello'\\n"
2072
2073
2073 Now we call it again with the previous output (stored in _):
2074 Now we call it again with the previous output (stored in _):
2074
2075
2075 In [9]: ed _\\
2076 In [9]: ed _\\
2076 Editing... done. Executing edited code...\\
2077 Editing... done. Executing edited code...\\
2077 hello world\\
2078 hello world\\
2078 Out[9]: "print 'hello world'\\n"
2079 Out[9]: "print 'hello world'\\n"
2079
2080
2080 Now we call it with the output #8 (stored in _8, also as Out[8]):
2081 Now we call it with the output #8 (stored in _8, also as Out[8]):
2081
2082
2082 In [10]: ed _8\\
2083 In [10]: ed _8\\
2083 Editing... done. Executing edited code...\\
2084 Editing... done. Executing edited code...\\
2084 hello again\\
2085 hello again\\
2085 Out[10]: "print 'hello again'\\n"
2086 Out[10]: "print 'hello again'\\n"
2086
2087
2087
2088
2088 Changing the default editor hook:
2089 Changing the default editor hook:
2089
2090
2090 If you wish to write your own editor hook, you can put it in a
2091 If you wish to write your own editor hook, you can put it in a
2091 configuration file which you load at startup time. The default hook
2092 configuration file which you load at startup time. The default hook
2092 is defined in the IPython.hooks module, and you can use that as a
2093 is defined in the IPython.hooks module, and you can use that as a
2093 starting example for further modifications. That file also has
2094 starting example for further modifications. That file also has
2094 general instructions on how to set a new hook for use once you've
2095 general instructions on how to set a new hook for use once you've
2095 defined it."""
2096 defined it."""
2096
2097
2097 # FIXME: This function has become a convoluted mess. It needs a
2098 # FIXME: This function has become a convoluted mess. It needs a
2098 # ground-up rewrite with clean, simple logic.
2099 # ground-up rewrite with clean, simple logic.
2099
2100
2100 def make_filename(arg):
2101 def make_filename(arg):
2101 "Make a filename from the given args"
2102 "Make a filename from the given args"
2102 try:
2103 try:
2103 filename = get_py_filename(arg)
2104 filename = get_py_filename(arg)
2104 except IOError:
2105 except IOError:
2105 if args.endswith('.py'):
2106 if args.endswith('.py'):
2106 filename = arg
2107 filename = arg
2107 else:
2108 else:
2108 filename = None
2109 filename = None
2109 return filename
2110 return filename
2110
2111
2111 # custom exceptions
2112 # custom exceptions
2112 class DataIsObject(Exception): pass
2113 class DataIsObject(Exception): pass
2113
2114
2114 opts,args = self.parse_options(parameter_s,'prxn:')
2115 opts,args = self.parse_options(parameter_s,'prxn:')
2115 # Set a few locals from the options for convenience:
2116 # Set a few locals from the options for convenience:
2116 opts_p = opts.has_key('p')
2117 opts_p = opts.has_key('p')
2117 opts_r = opts.has_key('r')
2118 opts_r = opts.has_key('r')
2118
2119
2119 # Default line number value
2120 # Default line number value
2120 lineno = opts.get('n',None)
2121 lineno = opts.get('n',None)
2121
2122
2122 if opts_p:
2123 if opts_p:
2123 args = '_%s' % last_call[0]
2124 args = '_%s' % last_call[0]
2124 if not self.shell.user_ns.has_key(args):
2125 if not self.shell.user_ns.has_key(args):
2125 args = last_call[1]
2126 args = last_call[1]
2126
2127
2127 # use last_call to remember the state of the previous call, but don't
2128 # use last_call to remember the state of the previous call, but don't
2128 # let it be clobbered by successive '-p' calls.
2129 # let it be clobbered by successive '-p' calls.
2129 try:
2130 try:
2130 last_call[0] = self.shell.outputcache.prompt_count
2131 last_call[0] = self.shell.outputcache.prompt_count
2131 if not opts_p:
2132 if not opts_p:
2132 last_call[1] = parameter_s
2133 last_call[1] = parameter_s
2133 except:
2134 except:
2134 pass
2135 pass
2135
2136
2136 # by default this is done with temp files, except when the given
2137 # by default this is done with temp files, except when the given
2137 # arg is a filename
2138 # arg is a filename
2138 use_temp = 1
2139 use_temp = 1
2139
2140
2140 if re.match(r'\d',args):
2141 if re.match(r'\d',args):
2141 # Mode where user specifies ranges of lines, like in %macro.
2142 # Mode where user specifies ranges of lines, like in %macro.
2142 # This means that you can't edit files whose names begin with
2143 # This means that you can't edit files whose names begin with
2143 # numbers this way. Tough.
2144 # numbers this way. Tough.
2144 ranges = args.split()
2145 ranges = args.split()
2145 data = ''.join(self.extract_input_slices(ranges,opts_r))
2146 data = ''.join(self.extract_input_slices(ranges,opts_r))
2146 elif args.endswith('.py'):
2147 elif args.endswith('.py'):
2147 filename = make_filename(args)
2148 filename = make_filename(args)
2148 data = ''
2149 data = ''
2149 use_temp = 0
2150 use_temp = 0
2150 elif args:
2151 elif args:
2151 try:
2152 try:
2152 # Load the parameter given as a variable. If not a string,
2153 # Load the parameter given as a variable. If not a string,
2153 # process it as an object instead (below)
2154 # process it as an object instead (below)
2154
2155
2155 #print '*** args',args,'type',type(args) # dbg
2156 #print '*** args',args,'type',type(args) # dbg
2156 data = eval(args,self.shell.user_ns)
2157 data = eval(args,self.shell.user_ns)
2157 if not type(data) in StringTypes:
2158 if not type(data) in StringTypes:
2158 raise DataIsObject
2159 raise DataIsObject
2159
2160
2160 except (NameError,SyntaxError):
2161 except (NameError,SyntaxError):
2161 # given argument is not a variable, try as a filename
2162 # given argument is not a variable, try as a filename
2162 filename = make_filename(args)
2163 filename = make_filename(args)
2163 if filename is None:
2164 if filename is None:
2164 warn("Argument given (%s) can't be found as a variable "
2165 warn("Argument given (%s) can't be found as a variable "
2165 "or as a filename." % args)
2166 "or as a filename." % args)
2166 return
2167 return
2167
2168
2168 data = ''
2169 data = ''
2169 use_temp = 0
2170 use_temp = 0
2170 except DataIsObject:
2171 except DataIsObject:
2171
2172
2172 # macros have a special edit function
2173 # macros have a special edit function
2173 if isinstance(data,Macro):
2174 if isinstance(data,Macro):
2174 self._edit_macro(args,data)
2175 self._edit_macro(args,data)
2175 return
2176 return
2176
2177
2177 # For objects, try to edit the file where they are defined
2178 # For objects, try to edit the file where they are defined
2178 try:
2179 try:
2179 filename = inspect.getabsfile(data)
2180 filename = inspect.getabsfile(data)
2180 datafile = 1
2181 datafile = 1
2181 except TypeError:
2182 except TypeError:
2182 filename = make_filename(args)
2183 filename = make_filename(args)
2183 datafile = 1
2184 datafile = 1
2184 warn('Could not find file where `%s` is defined.\n'
2185 warn('Could not find file where `%s` is defined.\n'
2185 'Opening a file named `%s`' % (args,filename))
2186 'Opening a file named `%s`' % (args,filename))
2186 # Now, make sure we can actually read the source (if it was in
2187 # Now, make sure we can actually read the source (if it was in
2187 # a temp file it's gone by now).
2188 # a temp file it's gone by now).
2188 if datafile:
2189 if datafile:
2189 try:
2190 try:
2190 if lineno is None:
2191 if lineno is None:
2191 lineno = inspect.getsourcelines(data)[1]
2192 lineno = inspect.getsourcelines(data)[1]
2192 except IOError:
2193 except IOError:
2193 filename = make_filename(args)
2194 filename = make_filename(args)
2194 if filename is None:
2195 if filename is None:
2195 warn('The file `%s` where `%s` was defined cannot '
2196 warn('The file `%s` where `%s` was defined cannot '
2196 'be read.' % (filename,data))
2197 'be read.' % (filename,data))
2197 return
2198 return
2198 use_temp = 0
2199 use_temp = 0
2199 else:
2200 else:
2200 data = ''
2201 data = ''
2201
2202
2202 if use_temp:
2203 if use_temp:
2203 filename = self.shell.mktempfile(data)
2204 filename = self.shell.mktempfile(data)
2204 print 'IPython will make a temporary file named:',filename
2205 print 'IPython will make a temporary file named:',filename
2205
2206
2206 # do actual editing here
2207 # do actual editing here
2207 print 'Editing...',
2208 print 'Editing...',
2208 sys.stdout.flush()
2209 sys.stdout.flush()
2209 self.shell.hooks.editor(filename,lineno)
2210 self.shell.hooks.editor(filename,lineno)
2210 if opts.has_key('x'): # -x prevents actual execution
2211 if opts.has_key('x'): # -x prevents actual execution
2211 print
2212 print
2212 else:
2213 else:
2213 print 'done. Executing edited code...'
2214 print 'done. Executing edited code...'
2214 if opts_r:
2215 if opts_r:
2215 self.shell.runlines(file_read(filename))
2216 self.shell.runlines(file_read(filename))
2216 else:
2217 else:
2217 self.shell.safe_execfile(filename,self.shell.user_ns)
2218 self.shell.safe_execfile(filename,self.shell.user_ns)
2218 if use_temp:
2219 if use_temp:
2219 try:
2220 try:
2220 return open(filename).read()
2221 return open(filename).read()
2221 except IOError,msg:
2222 except IOError,msg:
2222 if msg.filename == filename:
2223 if msg.filename == filename:
2223 warn('File not found. Did you forget to save?')
2224 warn('File not found. Did you forget to save?')
2224 return
2225 return
2225 else:
2226 else:
2226 self.shell.showtraceback()
2227 self.shell.showtraceback()
2227
2228
2228 def magic_xmode(self,parameter_s = ''):
2229 def magic_xmode(self,parameter_s = ''):
2229 """Switch modes for the exception handlers.
2230 """Switch modes for the exception handlers.
2230
2231
2231 Valid modes: Plain, Context and Verbose.
2232 Valid modes: Plain, Context and Verbose.
2232
2233
2233 If called without arguments, acts as a toggle."""
2234 If called without arguments, acts as a toggle."""
2234
2235
2235 def xmode_switch_err(name):
2236 def xmode_switch_err(name):
2236 warn('Error changing %s exception modes.\n%s' %
2237 warn('Error changing %s exception modes.\n%s' %
2237 (name,sys.exc_info()[1]))
2238 (name,sys.exc_info()[1]))
2238
2239
2239 shell = self.shell
2240 shell = self.shell
2240 new_mode = parameter_s.strip().capitalize()
2241 new_mode = parameter_s.strip().capitalize()
2241 try:
2242 try:
2242 shell.InteractiveTB.set_mode(mode=new_mode)
2243 shell.InteractiveTB.set_mode(mode=new_mode)
2243 print 'Exception reporting mode:',shell.InteractiveTB.mode
2244 print 'Exception reporting mode:',shell.InteractiveTB.mode
2244 except:
2245 except:
2245 xmode_switch_err('user')
2246 xmode_switch_err('user')
2246
2247
2247 # threaded shells use a special handler in sys.excepthook
2248 # threaded shells use a special handler in sys.excepthook
2248 if shell.isthreaded:
2249 if shell.isthreaded:
2249 try:
2250 try:
2250 shell.sys_excepthook.set_mode(mode=new_mode)
2251 shell.sys_excepthook.set_mode(mode=new_mode)
2251 except:
2252 except:
2252 xmode_switch_err('threaded')
2253 xmode_switch_err('threaded')
2253
2254
2254 def magic_colors(self,parameter_s = ''):
2255 def magic_colors(self,parameter_s = ''):
2255 """Switch color scheme for prompts, info system and exception handlers.
2256 """Switch color scheme for prompts, info system and exception handlers.
2256
2257
2257 Currently implemented schemes: NoColor, Linux, LightBG.
2258 Currently implemented schemes: NoColor, Linux, LightBG.
2258
2259
2259 Color scheme names are not case-sensitive."""
2260 Color scheme names are not case-sensitive."""
2260
2261
2261 def color_switch_err(name):
2262 def color_switch_err(name):
2262 warn('Error changing %s color schemes.\n%s' %
2263 warn('Error changing %s color schemes.\n%s' %
2263 (name,sys.exc_info()[1]))
2264 (name,sys.exc_info()[1]))
2264
2265
2265
2266
2266 new_scheme = parameter_s.strip()
2267 new_scheme = parameter_s.strip()
2267 if not new_scheme:
2268 if not new_scheme:
2268 print 'You must specify a color scheme.'
2269 print 'You must specify a color scheme.'
2269 return
2270 return
2270 import IPython.rlineimpl as readline
2271 import IPython.rlineimpl as readline
2271 if not readline.have_readline:
2272 if not readline.have_readline:
2272 msg = """\
2273 msg = """\
2273 Proper color support under MS Windows requires the pyreadline library.
2274 Proper color support under MS Windows requires the pyreadline library.
2274 You can find it at:
2275 You can find it at:
2275 http://ipython.scipy.org/moin/PyReadline/Intro
2276 http://ipython.scipy.org/moin/PyReadline/Intro
2276 Gary's readline needs the ctypes module, from:
2277 Gary's readline needs the ctypes module, from:
2277 http://starship.python.net/crew/theller/ctypes
2278 http://starship.python.net/crew/theller/ctypes
2278 (Note that ctypes is already part of Python versions 2.5 and newer).
2279 (Note that ctypes is already part of Python versions 2.5 and newer).
2279
2280
2280 Defaulting color scheme to 'NoColor'"""
2281 Defaulting color scheme to 'NoColor'"""
2281 new_scheme = 'NoColor'
2282 new_scheme = 'NoColor'
2282 warn(msg)
2283 warn(msg)
2283 # local shortcut
2284 # local shortcut
2284 shell = self.shell
2285 shell = self.shell
2285
2286
2286 # Set prompt colors
2287 # Set prompt colors
2287 try:
2288 try:
2288 shell.outputcache.set_colors(new_scheme)
2289 shell.outputcache.set_colors(new_scheme)
2289 except:
2290 except:
2290 color_switch_err('prompt')
2291 color_switch_err('prompt')
2291 else:
2292 else:
2292 shell.rc.colors = \
2293 shell.rc.colors = \
2293 shell.outputcache.color_table.active_scheme_name
2294 shell.outputcache.color_table.active_scheme_name
2294 # Set exception colors
2295 # Set exception colors
2295 try:
2296 try:
2296 shell.InteractiveTB.set_colors(scheme = new_scheme)
2297 shell.InteractiveTB.set_colors(scheme = new_scheme)
2297 shell.SyntaxTB.set_colors(scheme = new_scheme)
2298 shell.SyntaxTB.set_colors(scheme = new_scheme)
2298 except:
2299 except:
2299 color_switch_err('exception')
2300 color_switch_err('exception')
2300
2301
2301 # threaded shells use a verbose traceback in sys.excepthook
2302 # threaded shells use a verbose traceback in sys.excepthook
2302 if shell.isthreaded:
2303 if shell.isthreaded:
2303 try:
2304 try:
2304 shell.sys_excepthook.set_colors(scheme=new_scheme)
2305 shell.sys_excepthook.set_colors(scheme=new_scheme)
2305 except:
2306 except:
2306 color_switch_err('system exception handler')
2307 color_switch_err('system exception handler')
2307
2308
2308 # Set info (for 'object?') colors
2309 # Set info (for 'object?') colors
2309 if shell.rc.color_info:
2310 if shell.rc.color_info:
2310 try:
2311 try:
2311 shell.inspector.set_active_scheme(new_scheme)
2312 shell.inspector.set_active_scheme(new_scheme)
2312 except:
2313 except:
2313 color_switch_err('object inspector')
2314 color_switch_err('object inspector')
2314 else:
2315 else:
2315 shell.inspector.set_active_scheme('NoColor')
2316 shell.inspector.set_active_scheme('NoColor')
2316
2317
2317 def magic_color_info(self,parameter_s = ''):
2318 def magic_color_info(self,parameter_s = ''):
2318 """Toggle color_info.
2319 """Toggle color_info.
2319
2320
2320 The color_info configuration parameter controls whether colors are
2321 The color_info configuration parameter controls whether colors are
2321 used for displaying object details (by things like %psource, %pfile or
2322 used for displaying object details (by things like %psource, %pfile or
2322 the '?' system). This function toggles this value with each call.
2323 the '?' system). This function toggles this value with each call.
2323
2324
2324 Note that unless you have a fairly recent pager (less works better
2325 Note that unless you have a fairly recent pager (less works better
2325 than more) in your system, using colored object information displays
2326 than more) in your system, using colored object information displays
2326 will not work properly. Test it and see."""
2327 will not work properly. Test it and see."""
2327
2328
2328 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2329 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2329 self.magic_colors(self.shell.rc.colors)
2330 self.magic_colors(self.shell.rc.colors)
2330 print 'Object introspection functions have now coloring:',
2331 print 'Object introspection functions have now coloring:',
2331 print ['OFF','ON'][self.shell.rc.color_info]
2332 print ['OFF','ON'][self.shell.rc.color_info]
2332
2333
2333 def magic_Pprint(self, parameter_s=''):
2334 def magic_Pprint(self, parameter_s=''):
2334 """Toggle pretty printing on/off."""
2335 """Toggle pretty printing on/off."""
2335
2336
2336 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2337 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2337 print 'Pretty printing has been turned', \
2338 print 'Pretty printing has been turned', \
2338 ['OFF','ON'][self.shell.rc.pprint]
2339 ['OFF','ON'][self.shell.rc.pprint]
2339
2340
2340 def magic_exit(self, parameter_s=''):
2341 def magic_exit(self, parameter_s=''):
2341 """Exit IPython, confirming if configured to do so.
2342 """Exit IPython, confirming if configured to do so.
2342
2343
2343 You can configure whether IPython asks for confirmation upon exit by
2344 You can configure whether IPython asks for confirmation upon exit by
2344 setting the confirm_exit flag in the ipythonrc file."""
2345 setting the confirm_exit flag in the ipythonrc file."""
2345
2346
2346 self.shell.exit()
2347 self.shell.exit()
2347
2348
2348 def magic_quit(self, parameter_s=''):
2349 def magic_quit(self, parameter_s=''):
2349 """Exit IPython, confirming if configured to do so (like %exit)"""
2350 """Exit IPython, confirming if configured to do so (like %exit)"""
2350
2351
2351 self.shell.exit()
2352 self.shell.exit()
2352
2353
2353 def magic_Exit(self, parameter_s=''):
2354 def magic_Exit(self, parameter_s=''):
2354 """Exit IPython without confirmation."""
2355 """Exit IPython without confirmation."""
2355
2356
2356 self.shell.exit_now = True
2357 self.shell.exit_now = True
2357
2358
2358 def magic_Quit(self, parameter_s=''):
2359 def magic_Quit(self, parameter_s=''):
2359 """Exit IPython without confirmation (like %Exit)."""
2360 """Exit IPython without confirmation (like %Exit)."""
2360
2361
2361 self.shell.exit_now = True
2362 self.shell.exit_now = True
2362
2363
2363 #......................................................................
2364 #......................................................................
2364 # Functions to implement unix shell-type things
2365 # Functions to implement unix shell-type things
2365
2366
2366 def magic_alias(self, parameter_s = ''):
2367 def magic_alias(self, parameter_s = ''):
2367 """Define an alias for a system command.
2368 """Define an alias for a system command.
2368
2369
2369 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2370 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2370
2371
2371 Then, typing 'alias_name params' will execute the system command 'cmd
2372 Then, typing 'alias_name params' will execute the system command 'cmd
2372 params' (from your underlying operating system).
2373 params' (from your underlying operating system).
2373
2374
2374 Aliases have lower precedence than magic functions and Python normal
2375 Aliases have lower precedence than magic functions and Python normal
2375 variables, so if 'foo' is both a Python variable and an alias, the
2376 variables, so if 'foo' is both a Python variable and an alias, the
2376 alias can not be executed until 'del foo' removes the Python variable.
2377 alias can not be executed until 'del foo' removes the Python variable.
2377
2378
2378 You can use the %l specifier in an alias definition to represent the
2379 You can use the %l specifier in an alias definition to represent the
2379 whole line when the alias is called. For example:
2380 whole line when the alias is called. For example:
2380
2381
2381 In [2]: alias all echo "Input in brackets: <%l>"\\
2382 In [2]: alias all echo "Input in brackets: <%l>"\\
2382 In [3]: all hello world\\
2383 In [3]: all hello world\\
2383 Input in brackets: <hello world>
2384 Input in brackets: <hello world>
2384
2385
2385 You can also define aliases with parameters using %s specifiers (one
2386 You can also define aliases with parameters using %s specifiers (one
2386 per parameter):
2387 per parameter):
2387
2388
2388 In [1]: alias parts echo first %s second %s\\
2389 In [1]: alias parts echo first %s second %s\\
2389 In [2]: %parts A B\\
2390 In [2]: %parts A B\\
2390 first A second B\\
2391 first A second B\\
2391 In [3]: %parts A\\
2392 In [3]: %parts A\\
2392 Incorrect number of arguments: 2 expected.\\
2393 Incorrect number of arguments: 2 expected.\\
2393 parts is an alias to: 'echo first %s second %s'
2394 parts is an alias to: 'echo first %s second %s'
2394
2395
2395 Note that %l and %s are mutually exclusive. You can only use one or
2396 Note that %l and %s are mutually exclusive. You can only use one or
2396 the other in your aliases.
2397 the other in your aliases.
2397
2398
2398 Aliases expand Python variables just like system calls using ! or !!
2399 Aliases expand Python variables just like system calls using ! or !!
2399 do: all expressions prefixed with '$' get expanded. For details of
2400 do: all expressions prefixed with '$' get expanded. For details of
2400 the semantic rules, see PEP-215:
2401 the semantic rules, see PEP-215:
2401 http://www.python.org/peps/pep-0215.html. This is the library used by
2402 http://www.python.org/peps/pep-0215.html. This is the library used by
2402 IPython for variable expansion. If you want to access a true shell
2403 IPython for variable expansion. If you want to access a true shell
2403 variable, an extra $ is necessary to prevent its expansion by IPython:
2404 variable, an extra $ is necessary to prevent its expansion by IPython:
2404
2405
2405 In [6]: alias show echo\\
2406 In [6]: alias show echo\\
2406 In [7]: PATH='A Python string'\\
2407 In [7]: PATH='A Python string'\\
2407 In [8]: show $PATH\\
2408 In [8]: show $PATH\\
2408 A Python string\\
2409 A Python string\\
2409 In [9]: show $$PATH\\
2410 In [9]: show $$PATH\\
2410 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2411 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2411
2412
2412 You can use the alias facility to acess all of $PATH. See the %rehash
2413 You can use the alias facility to acess all of $PATH. See the %rehash
2413 and %rehashx functions, which automatically create aliases for the
2414 and %rehashx functions, which automatically create aliases for the
2414 contents of your $PATH.
2415 contents of your $PATH.
2415
2416
2416 If called with no parameters, %alias prints the current alias table."""
2417 If called with no parameters, %alias prints the current alias table."""
2417
2418
2418 par = parameter_s.strip()
2419 par = parameter_s.strip()
2419 if not par:
2420 if not par:
2420 stored = self.db.get('stored_aliases', {} )
2421 stored = self.db.get('stored_aliases', {} )
2421 atab = self.shell.alias_table
2422 atab = self.shell.alias_table
2422 aliases = atab.keys()
2423 aliases = atab.keys()
2423 aliases.sort()
2424 aliases.sort()
2424 res = []
2425 res = []
2425 showlast = []
2426 showlast = []
2426 for alias in aliases:
2427 for alias in aliases:
2427 tgt = atab[alias][1]
2428 tgt = atab[alias][1]
2428 # 'interesting' aliases
2429 # 'interesting' aliases
2429 if (alias in stored or
2430 if (alias in stored or
2430 alias != os.path.splitext(tgt)[0] or
2431 alias != os.path.splitext(tgt)[0] or
2431 ' ' in tgt):
2432 ' ' in tgt):
2432 showlast.append((alias, tgt))
2433 showlast.append((alias, tgt))
2433 else:
2434 else:
2434 res.append((alias, tgt ))
2435 res.append((alias, tgt ))
2435
2436
2436 # show most interesting aliases last
2437 # show most interesting aliases last
2437 res.extend(showlast)
2438 res.extend(showlast)
2438 print "Total number of aliases:",len(aliases)
2439 print "Total number of aliases:",len(aliases)
2439 return res
2440 return res
2440 try:
2441 try:
2441 alias,cmd = par.split(None,1)
2442 alias,cmd = par.split(None,1)
2442 except:
2443 except:
2443 print OInspect.getdoc(self.magic_alias)
2444 print OInspect.getdoc(self.magic_alias)
2444 else:
2445 else:
2445 nargs = cmd.count('%s')
2446 nargs = cmd.count('%s')
2446 if nargs>0 and cmd.find('%l')>=0:
2447 if nargs>0 and cmd.find('%l')>=0:
2447 error('The %s and %l specifiers are mutually exclusive '
2448 error('The %s and %l specifiers are mutually exclusive '
2448 'in alias definitions.')
2449 'in alias definitions.')
2449 else: # all looks OK
2450 else: # all looks OK
2450 self.shell.alias_table[alias] = (nargs,cmd)
2451 self.shell.alias_table[alias] = (nargs,cmd)
2451 self.shell.alias_table_validate(verbose=0)
2452 self.shell.alias_table_validate(verbose=0)
2452 # end magic_alias
2453 # end magic_alias
2453
2454
2454 def magic_unalias(self, parameter_s = ''):
2455 def magic_unalias(self, parameter_s = ''):
2455 """Remove an alias"""
2456 """Remove an alias"""
2456
2457
2457 aname = parameter_s.strip()
2458 aname = parameter_s.strip()
2458 if aname in self.shell.alias_table:
2459 if aname in self.shell.alias_table:
2459 del self.shell.alias_table[aname]
2460 del self.shell.alias_table[aname]
2460 stored = self.db.get('stored_aliases', {} )
2461 stored = self.db.get('stored_aliases', {} )
2461 if aname in stored:
2462 if aname in stored:
2462 print "Removing %stored alias",aname
2463 print "Removing %stored alias",aname
2463 del stored[aname]
2464 del stored[aname]
2464 self.db['stored_aliases'] = stored
2465 self.db['stored_aliases'] = stored
2465
2466
2466 def magic_rehash(self, parameter_s = ''):
2467 def magic_rehash(self, parameter_s = ''):
2467 """Update the alias table with all entries in $PATH.
2468 """Update the alias table with all entries in $PATH.
2468
2469
2469 This version does no checks on execute permissions or whether the
2470 This version does no checks on execute permissions or whether the
2470 contents of $PATH are truly files (instead of directories or something
2471 contents of $PATH are truly files (instead of directories or something
2471 else). For such a safer (but slower) version, use %rehashx."""
2472 else). For such a safer (but slower) version, use %rehashx."""
2472
2473
2473 # This function (and rehashx) manipulate the alias_table directly
2474 # This function (and rehashx) manipulate the alias_table directly
2474 # rather than calling magic_alias, for speed reasons. A rehash on a
2475 # rather than calling magic_alias, for speed reasons. A rehash on a
2475 # typical Linux box involves several thousand entries, so efficiency
2476 # typical Linux box involves several thousand entries, so efficiency
2476 # here is a top concern.
2477 # here is a top concern.
2477
2478
2478 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2479 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2479 alias_table = self.shell.alias_table
2480 alias_table = self.shell.alias_table
2480 for pdir in path:
2481 for pdir in path:
2481 for ff in os.listdir(pdir):
2482 for ff in os.listdir(pdir):
2482 # each entry in the alias table must be (N,name), where
2483 # each entry in the alias table must be (N,name), where
2483 # N is the number of positional arguments of the alias.
2484 # N is the number of positional arguments of the alias.
2484 alias_table[ff] = (0,ff)
2485 alias_table[ff] = (0,ff)
2485 # Make sure the alias table doesn't contain keywords or builtins
2486 # Make sure the alias table doesn't contain keywords or builtins
2486 self.shell.alias_table_validate()
2487 self.shell.alias_table_validate()
2487 # Call again init_auto_alias() so we get 'rm -i' and other modified
2488 # Call again init_auto_alias() so we get 'rm -i' and other modified
2488 # aliases since %rehash will probably clobber them
2489 # aliases since %rehash will probably clobber them
2489 self.shell.init_auto_alias()
2490 self.shell.init_auto_alias()
2490
2491
2491 def magic_rehashx(self, parameter_s = ''):
2492 def magic_rehashx(self, parameter_s = ''):
2492 """Update the alias table with all executable files in $PATH.
2493 """Update the alias table with all executable files in $PATH.
2493
2494
2494 This version explicitly checks that every entry in $PATH is a file
2495 This version explicitly checks that every entry in $PATH is a file
2495 with execute access (os.X_OK), so it is much slower than %rehash.
2496 with execute access (os.X_OK), so it is much slower than %rehash.
2496
2497
2497 Under Windows, it checks executability as a match agains a
2498 Under Windows, it checks executability as a match agains a
2498 '|'-separated string of extensions, stored in the IPython config
2499 '|'-separated string of extensions, stored in the IPython config
2499 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2500 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2500
2501
2501 path = [os.path.abspath(os.path.expanduser(p)) for p in
2502 path = [os.path.abspath(os.path.expanduser(p)) for p in
2502 os.environ['PATH'].split(os.pathsep)]
2503 os.environ['PATH'].split(os.pathsep)]
2503 path = filter(os.path.isdir,path)
2504 path = filter(os.path.isdir,path)
2504
2505
2505 alias_table = self.shell.alias_table
2506 alias_table = self.shell.alias_table
2506 syscmdlist = []
2507 syscmdlist = []
2507 if os.name == 'posix':
2508 if os.name == 'posix':
2508 isexec = lambda fname:os.path.isfile(fname) and \
2509 isexec = lambda fname:os.path.isfile(fname) and \
2509 os.access(fname,os.X_OK)
2510 os.access(fname,os.X_OK)
2510 else:
2511 else:
2511
2512
2512 try:
2513 try:
2513 winext = os.environ['pathext'].replace(';','|').replace('.','')
2514 winext = os.environ['pathext'].replace(';','|').replace('.','')
2514 except KeyError:
2515 except KeyError:
2515 winext = 'exe|com|bat|py'
2516 winext = 'exe|com|bat|py'
2516 if 'py' not in winext:
2517 if 'py' not in winext:
2517 winext += '|py'
2518 winext += '|py'
2518 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2519 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2519 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2520 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2520 savedir = os.getcwd()
2521 savedir = os.getcwd()
2521 try:
2522 try:
2522 # write the whole loop for posix/Windows so we don't have an if in
2523 # write the whole loop for posix/Windows so we don't have an if in
2523 # the innermost part
2524 # the innermost part
2524 if os.name == 'posix':
2525 if os.name == 'posix':
2525 for pdir in path:
2526 for pdir in path:
2526 os.chdir(pdir)
2527 os.chdir(pdir)
2527 for ff in os.listdir(pdir):
2528 for ff in os.listdir(pdir):
2528 if isexec(ff) and ff not in self.shell.no_alias:
2529 if isexec(ff) and ff not in self.shell.no_alias:
2529 # each entry in the alias table must be (N,name),
2530 # each entry in the alias table must be (N,name),
2530 # where N is the number of positional arguments of the
2531 # where N is the number of positional arguments of the
2531 # alias.
2532 # alias.
2532 alias_table[ff] = (0,ff)
2533 alias_table[ff] = (0,ff)
2533 syscmdlist.append(ff)
2534 syscmdlist.append(ff)
2534 else:
2535 else:
2535 for pdir in path:
2536 for pdir in path:
2536 os.chdir(pdir)
2537 os.chdir(pdir)
2537 for ff in os.listdir(pdir):
2538 for ff in os.listdir(pdir):
2538 base, ext = os.path.splitext(ff)
2539 base, ext = os.path.splitext(ff)
2539 if isexec(ff) and base not in self.shell.no_alias:
2540 if isexec(ff) and base not in self.shell.no_alias:
2540 if ext.lower() == '.exe':
2541 if ext.lower() == '.exe':
2541 ff = base
2542 ff = base
2542 alias_table[base] = (0,ff)
2543 alias_table[base] = (0,ff)
2543 syscmdlist.append(ff)
2544 syscmdlist.append(ff)
2544 # Make sure the alias table doesn't contain keywords or builtins
2545 # Make sure the alias table doesn't contain keywords or builtins
2545 self.shell.alias_table_validate()
2546 self.shell.alias_table_validate()
2546 # Call again init_auto_alias() so we get 'rm -i' and other
2547 # Call again init_auto_alias() so we get 'rm -i' and other
2547 # modified aliases since %rehashx will probably clobber them
2548 # modified aliases since %rehashx will probably clobber them
2548 self.shell.init_auto_alias()
2549 self.shell.init_auto_alias()
2549 db = self.getapi().db
2550 db = self.getapi().db
2550 db['syscmdlist'] = syscmdlist
2551 db['syscmdlist'] = syscmdlist
2551 finally:
2552 finally:
2552 os.chdir(savedir)
2553 os.chdir(savedir)
2553
2554
2554 def magic_pwd(self, parameter_s = ''):
2555 def magic_pwd(self, parameter_s = ''):
2555 """Return the current working directory path."""
2556 """Return the current working directory path."""
2556 return os.getcwd()
2557 return os.getcwd()
2557
2558
2558 def magic_cd(self, parameter_s=''):
2559 def magic_cd(self, parameter_s=''):
2559 """Change the current working directory.
2560 """Change the current working directory.
2560
2561
2561 This command automatically maintains an internal list of directories
2562 This command automatically maintains an internal list of directories
2562 you visit during your IPython session, in the variable _dh. The
2563 you visit during your IPython session, in the variable _dh. The
2563 command %dhist shows this history nicely formatted. You can also
2564 command %dhist shows this history nicely formatted. You can also
2564 do 'cd -<tab>' to see directory history conveniently.
2565 do 'cd -<tab>' to see directory history conveniently.
2565
2566
2566 Usage:
2567 Usage:
2567
2568
2568 cd 'dir': changes to directory 'dir'.
2569 cd 'dir': changes to directory 'dir'.
2569
2570
2570 cd -: changes to the last visited directory.
2571 cd -: changes to the last visited directory.
2571
2572
2572 cd -<n>: changes to the n-th directory in the directory history.
2573 cd -<n>: changes to the n-th directory in the directory history.
2573
2574
2574 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2575 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2575 (note: cd <bookmark_name> is enough if there is no
2576 (note: cd <bookmark_name> is enough if there is no
2576 directory <bookmark_name>, but a bookmark with the name exists.)
2577 directory <bookmark_name>, but a bookmark with the name exists.)
2577 'cd -b <tab>' allows you to tab-complete bookmark names.
2578 'cd -b <tab>' allows you to tab-complete bookmark names.
2578
2579
2579 Options:
2580 Options:
2580
2581
2581 -q: quiet. Do not print the working directory after the cd command is
2582 -q: quiet. Do not print the working directory after the cd command is
2582 executed. By default IPython's cd command does print this directory,
2583 executed. By default IPython's cd command does print this directory,
2583 since the default prompts do not display path information.
2584 since the default prompts do not display path information.
2584
2585
2585 Note that !cd doesn't work for this purpose because the shell where
2586 Note that !cd doesn't work for this purpose because the shell where
2586 !command runs is immediately discarded after executing 'command'."""
2587 !command runs is immediately discarded after executing 'command'."""
2587
2588
2588 parameter_s = parameter_s.strip()
2589 parameter_s = parameter_s.strip()
2589 #bkms = self.shell.persist.get("bookmarks",{})
2590 #bkms = self.shell.persist.get("bookmarks",{})
2590
2591
2591 numcd = re.match(r'(-)(\d+)$',parameter_s)
2592 numcd = re.match(r'(-)(\d+)$',parameter_s)
2592 # jump in directory history by number
2593 # jump in directory history by number
2593 if numcd:
2594 if numcd:
2594 nn = int(numcd.group(2))
2595 nn = int(numcd.group(2))
2595 try:
2596 try:
2596 ps = self.shell.user_ns['_dh'][nn]
2597 ps = self.shell.user_ns['_dh'][nn]
2597 except IndexError:
2598 except IndexError:
2598 print 'The requested directory does not exist in history.'
2599 print 'The requested directory does not exist in history.'
2599 return
2600 return
2600 else:
2601 else:
2601 opts = {}
2602 opts = {}
2602 else:
2603 else:
2603 #turn all non-space-escaping backslashes to slashes,
2604 #turn all non-space-escaping backslashes to slashes,
2604 # for c:\windows\directory\names\
2605 # for c:\windows\directory\names\
2605 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2606 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2606 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2607 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2607 # jump to previous
2608 # jump to previous
2608 if ps == '-':
2609 if ps == '-':
2609 try:
2610 try:
2610 ps = self.shell.user_ns['_dh'][-2]
2611 ps = self.shell.user_ns['_dh'][-2]
2611 except IndexError:
2612 except IndexError:
2612 print 'No previous directory to change to.'
2613 print 'No previous directory to change to.'
2613 return
2614 return
2614 # jump to bookmark if needed
2615 # jump to bookmark if needed
2615 else:
2616 else:
2616 if not os.path.isdir(ps) or opts.has_key('b'):
2617 if not os.path.isdir(ps) or opts.has_key('b'):
2617 bkms = self.db.get('bookmarks', {})
2618 bkms = self.db.get('bookmarks', {})
2618
2619
2619 if bkms.has_key(ps):
2620 if bkms.has_key(ps):
2620 target = bkms[ps]
2621 target = bkms[ps]
2621 print '(bookmark:%s) -> %s' % (ps,target)
2622 print '(bookmark:%s) -> %s' % (ps,target)
2622 ps = target
2623 ps = target
2623 else:
2624 else:
2624 if opts.has_key('b'):
2625 if opts.has_key('b'):
2625 error("Bookmark '%s' not found. "
2626 error("Bookmark '%s' not found. "
2626 "Use '%%bookmark -l' to see your bookmarks." % ps)
2627 "Use '%%bookmark -l' to see your bookmarks." % ps)
2627 return
2628 return
2628
2629
2629 # at this point ps should point to the target dir
2630 # at this point ps should point to the target dir
2630 if ps:
2631 if ps:
2631 try:
2632 try:
2632 os.chdir(os.path.expanduser(ps))
2633 os.chdir(os.path.expanduser(ps))
2633 if self.shell.rc.term_title:
2634 if self.shell.rc.term_title:
2634 #print 'set term title:',self.shell.rc.term_title # dbg
2635 #print 'set term title:',self.shell.rc.term_title # dbg
2635 ttitle = ("IPy:" + (
2636 ttitle = ("IPy:" + (
2636 os.getcwd() == '/' and '/' or \
2637 os.getcwd() == '/' and '/' or \
2637 os.path.basename(os.getcwd())))
2638 os.path.basename(os.getcwd())))
2638 platutils.set_term_title(ttitle)
2639 platutils.set_term_title(ttitle)
2639 except OSError:
2640 except OSError:
2640 print sys.exc_info()[1]
2641 print sys.exc_info()[1]
2641 else:
2642 else:
2642 self.shell.user_ns['_dh'].append(os.getcwd())
2643 self.shell.user_ns['_dh'].append(os.getcwd())
2643 else:
2644 else:
2644 os.chdir(self.shell.home_dir)
2645 os.chdir(self.shell.home_dir)
2645 if self.shell.rc.term_title:
2646 if self.shell.rc.term_title:
2646 platutils.set_term_title("IPy:~")
2647 platutils.set_term_title("IPy:~")
2647 self.shell.user_ns['_dh'].append(os.getcwd())
2648 self.shell.user_ns['_dh'].append(os.getcwd())
2648 if not 'q' in opts:
2649 if not 'q' in opts:
2649 print self.shell.user_ns['_dh'][-1]
2650 print self.shell.user_ns['_dh'][-1]
2650
2651
2651 def magic_dhist(self, parameter_s=''):
2652 def magic_dhist(self, parameter_s=''):
2652 """Print your history of visited directories.
2653 """Print your history of visited directories.
2653
2654
2654 %dhist -> print full history\\
2655 %dhist -> print full history\\
2655 %dhist n -> print last n entries only\\
2656 %dhist n -> print last n entries only\\
2656 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2657 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2657
2658
2658 This history is automatically maintained by the %cd command, and
2659 This history is automatically maintained by the %cd command, and
2659 always available as the global list variable _dh. You can use %cd -<n>
2660 always available as the global list variable _dh. You can use %cd -<n>
2660 to go to directory number <n>."""
2661 to go to directory number <n>."""
2661
2662
2662 dh = self.shell.user_ns['_dh']
2663 dh = self.shell.user_ns['_dh']
2663 if parameter_s:
2664 if parameter_s:
2664 try:
2665 try:
2665 args = map(int,parameter_s.split())
2666 args = map(int,parameter_s.split())
2666 except:
2667 except:
2667 self.arg_err(Magic.magic_dhist)
2668 self.arg_err(Magic.magic_dhist)
2668 return
2669 return
2669 if len(args) == 1:
2670 if len(args) == 1:
2670 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2671 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2671 elif len(args) == 2:
2672 elif len(args) == 2:
2672 ini,fin = args
2673 ini,fin = args
2673 else:
2674 else:
2674 self.arg_err(Magic.magic_dhist)
2675 self.arg_err(Magic.magic_dhist)
2675 return
2676 return
2676 else:
2677 else:
2677 ini,fin = 0,len(dh)
2678 ini,fin = 0,len(dh)
2678 nlprint(dh,
2679 nlprint(dh,
2679 header = 'Directory history (kept in _dh)',
2680 header = 'Directory history (kept in _dh)',
2680 start=ini,stop=fin)
2681 start=ini,stop=fin)
2681
2682
2682 def magic_env(self, parameter_s=''):
2683 def magic_env(self, parameter_s=''):
2683 """List environment variables."""
2684 """List environment variables."""
2684
2685
2685 return os.environ.data
2686 return os.environ.data
2686
2687
2687 def magic_pushd(self, parameter_s=''):
2688 def magic_pushd(self, parameter_s=''):
2688 """Place the current dir on stack and change directory.
2689 """Place the current dir on stack and change directory.
2689
2690
2690 Usage:\\
2691 Usage:\\
2691 %pushd ['dirname']
2692 %pushd ['dirname']
2692
2693
2693 %pushd with no arguments does a %pushd to your home directory.
2694 %pushd with no arguments does a %pushd to your home directory.
2694 """
2695 """
2695 if parameter_s == '': parameter_s = '~'
2696 if parameter_s == '': parameter_s = '~'
2696 dir_s = self.shell.dir_stack
2697 dir_s = self.shell.dir_stack
2697 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2698 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2698 os.path.expanduser(self.shell.dir_stack[0]):
2699 os.path.expanduser(self.shell.dir_stack[0]):
2699 try:
2700 try:
2700 self.magic_cd(parameter_s)
2701 self.magic_cd(parameter_s)
2701 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2702 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2702 self.magic_dirs()
2703 self.magic_dirs()
2703 except:
2704 except:
2704 print 'Invalid directory'
2705 print 'Invalid directory'
2705 else:
2706 else:
2706 print 'You are already there!'
2707 print 'You are already there!'
2707
2708
2708 def magic_popd(self, parameter_s=''):
2709 def magic_popd(self, parameter_s=''):
2709 """Change to directory popped off the top of the stack.
2710 """Change to directory popped off the top of the stack.
2710 """
2711 """
2711 if len (self.shell.dir_stack) > 1:
2712 if len (self.shell.dir_stack) > 1:
2712 self.shell.dir_stack.pop(0)
2713 self.shell.dir_stack.pop(0)
2713 self.magic_cd(self.shell.dir_stack[0])
2714 self.magic_cd(self.shell.dir_stack[0])
2714 print self.shell.dir_stack[0]
2715 print self.shell.dir_stack[0]
2715 else:
2716 else:
2716 print "You can't remove the starting directory from the stack:",\
2717 print "You can't remove the starting directory from the stack:",\
2717 self.shell.dir_stack
2718 self.shell.dir_stack
2718
2719
2719 def magic_dirs(self, parameter_s=''):
2720 def magic_dirs(self, parameter_s=''):
2720 """Return the current directory stack."""
2721 """Return the current directory stack."""
2721
2722
2722 return self.shell.dir_stack[:]
2723 return self.shell.dir_stack[:]
2723
2724
2724 def magic_sc(self, parameter_s=''):
2725 def magic_sc(self, parameter_s=''):
2725 """Shell capture - execute a shell command and capture its output.
2726 """Shell capture - execute a shell command and capture its output.
2726
2727
2727 DEPRECATED. Suboptimal, retained for backwards compatibility.
2728 DEPRECATED. Suboptimal, retained for backwards compatibility.
2728
2729
2729 You should use the form 'var = !command' instead. Example:
2730 You should use the form 'var = !command' instead. Example:
2730
2731
2731 "%sc -l myfiles = ls ~" should now be written as
2732 "%sc -l myfiles = ls ~" should now be written as
2732
2733
2733 "myfiles = !ls ~"
2734 "myfiles = !ls ~"
2734
2735
2735 myfiles.s, myfiles.l and myfiles.n still apply as documented
2736 myfiles.s, myfiles.l and myfiles.n still apply as documented
2736 below.
2737 below.
2737
2738
2738 --
2739 --
2739 %sc [options] varname=command
2740 %sc [options] varname=command
2740
2741
2741 IPython will run the given command using commands.getoutput(), and
2742 IPython will run the given command using commands.getoutput(), and
2742 will then update the user's interactive namespace with a variable
2743 will then update the user's interactive namespace with a variable
2743 called varname, containing the value of the call. Your command can
2744 called varname, containing the value of the call. Your command can
2744 contain shell wildcards, pipes, etc.
2745 contain shell wildcards, pipes, etc.
2745
2746
2746 The '=' sign in the syntax is mandatory, and the variable name you
2747 The '=' sign in the syntax is mandatory, and the variable name you
2747 supply must follow Python's standard conventions for valid names.
2748 supply must follow Python's standard conventions for valid names.
2748
2749
2749 (A special format without variable name exists for internal use)
2750 (A special format without variable name exists for internal use)
2750
2751
2751 Options:
2752 Options:
2752
2753
2753 -l: list output. Split the output on newlines into a list before
2754 -l: list output. Split the output on newlines into a list before
2754 assigning it to the given variable. By default the output is stored
2755 assigning it to the given variable. By default the output is stored
2755 as a single string.
2756 as a single string.
2756
2757
2757 -v: verbose. Print the contents of the variable.
2758 -v: verbose. Print the contents of the variable.
2758
2759
2759 In most cases you should not need to split as a list, because the
2760 In most cases you should not need to split as a list, because the
2760 returned value is a special type of string which can automatically
2761 returned value is a special type of string which can automatically
2761 provide its contents either as a list (split on newlines) or as a
2762 provide its contents either as a list (split on newlines) or as a
2762 space-separated string. These are convenient, respectively, either
2763 space-separated string. These are convenient, respectively, either
2763 for sequential processing or to be passed to a shell command.
2764 for sequential processing or to be passed to a shell command.
2764
2765
2765 For example:
2766 For example:
2766
2767
2767 # Capture into variable a
2768 # Capture into variable a
2768 In [9]: sc a=ls *py
2769 In [9]: sc a=ls *py
2769
2770
2770 # a is a string with embedded newlines
2771 # a is a string with embedded newlines
2771 In [10]: a
2772 In [10]: a
2772 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2773 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2773
2774
2774 # which can be seen as a list:
2775 # which can be seen as a list:
2775 In [11]: a.l
2776 In [11]: a.l
2776 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2777 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2777
2778
2778 # or as a whitespace-separated string:
2779 # or as a whitespace-separated string:
2779 In [12]: a.s
2780 In [12]: a.s
2780 Out[12]: 'setup.py win32_manual_post_install.py'
2781 Out[12]: 'setup.py win32_manual_post_install.py'
2781
2782
2782 # a.s is useful to pass as a single command line:
2783 # a.s is useful to pass as a single command line:
2783 In [13]: !wc -l $a.s
2784 In [13]: !wc -l $a.s
2784 146 setup.py
2785 146 setup.py
2785 130 win32_manual_post_install.py
2786 130 win32_manual_post_install.py
2786 276 total
2787 276 total
2787
2788
2788 # while the list form is useful to loop over:
2789 # while the list form is useful to loop over:
2789 In [14]: for f in a.l:
2790 In [14]: for f in a.l:
2790 ....: !wc -l $f
2791 ....: !wc -l $f
2791 ....:
2792 ....:
2792 146 setup.py
2793 146 setup.py
2793 130 win32_manual_post_install.py
2794 130 win32_manual_post_install.py
2794
2795
2795 Similiarly, the lists returned by the -l option are also special, in
2796 Similiarly, the lists returned by the -l option are also special, in
2796 the sense that you can equally invoke the .s attribute on them to
2797 the sense that you can equally invoke the .s attribute on them to
2797 automatically get a whitespace-separated string from their contents:
2798 automatically get a whitespace-separated string from their contents:
2798
2799
2799 In [1]: sc -l b=ls *py
2800 In [1]: sc -l b=ls *py
2800
2801
2801 In [2]: b
2802 In [2]: b
2802 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2803 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2803
2804
2804 In [3]: b.s
2805 In [3]: b.s
2805 Out[3]: 'setup.py win32_manual_post_install.py'
2806 Out[3]: 'setup.py win32_manual_post_install.py'
2806
2807
2807 In summary, both the lists and strings used for ouptut capture have
2808 In summary, both the lists and strings used for ouptut capture have
2808 the following special attributes:
2809 the following special attributes:
2809
2810
2810 .l (or .list) : value as list.
2811 .l (or .list) : value as list.
2811 .n (or .nlstr): value as newline-separated string.
2812 .n (or .nlstr): value as newline-separated string.
2812 .s (or .spstr): value as space-separated string.
2813 .s (or .spstr): value as space-separated string.
2813 """
2814 """
2814
2815
2815 opts,args = self.parse_options(parameter_s,'lv')
2816 opts,args = self.parse_options(parameter_s,'lv')
2816 # Try to get a variable name and command to run
2817 # Try to get a variable name and command to run
2817 try:
2818 try:
2818 # the variable name must be obtained from the parse_options
2819 # the variable name must be obtained from the parse_options
2819 # output, which uses shlex.split to strip options out.
2820 # output, which uses shlex.split to strip options out.
2820 var,_ = args.split('=',1)
2821 var,_ = args.split('=',1)
2821 var = var.strip()
2822 var = var.strip()
2822 # But the the command has to be extracted from the original input
2823 # But the the command has to be extracted from the original input
2823 # parameter_s, not on what parse_options returns, to avoid the
2824 # parameter_s, not on what parse_options returns, to avoid the
2824 # quote stripping which shlex.split performs on it.
2825 # quote stripping which shlex.split performs on it.
2825 _,cmd = parameter_s.split('=',1)
2826 _,cmd = parameter_s.split('=',1)
2826 except ValueError:
2827 except ValueError:
2827 var,cmd = '',''
2828 var,cmd = '',''
2828 # If all looks ok, proceed
2829 # If all looks ok, proceed
2829 out,err = self.shell.getoutputerror(cmd)
2830 out,err = self.shell.getoutputerror(cmd)
2830 if err:
2831 if err:
2831 print >> Term.cerr,err
2832 print >> Term.cerr,err
2832 if opts.has_key('l'):
2833 if opts.has_key('l'):
2833 out = SList(out.split('\n'))
2834 out = SList(out.split('\n'))
2834 else:
2835 else:
2835 out = LSString(out)
2836 out = LSString(out)
2836 if opts.has_key('v'):
2837 if opts.has_key('v'):
2837 print '%s ==\n%s' % (var,pformat(out))
2838 print '%s ==\n%s' % (var,pformat(out))
2838 if var:
2839 if var:
2839 self.shell.user_ns.update({var:out})
2840 self.shell.user_ns.update({var:out})
2840 else:
2841 else:
2841 return out
2842 return out
2842
2843
2843 def magic_sx(self, parameter_s=''):
2844 def magic_sx(self, parameter_s=''):
2844 """Shell execute - run a shell command and capture its output.
2845 """Shell execute - run a shell command and capture its output.
2845
2846
2846 %sx command
2847 %sx command
2847
2848
2848 IPython will run the given command using commands.getoutput(), and
2849 IPython will run the given command using commands.getoutput(), and
2849 return the result formatted as a list (split on '\\n'). Since the
2850 return the result formatted as a list (split on '\\n'). Since the
2850 output is _returned_, it will be stored in ipython's regular output
2851 output is _returned_, it will be stored in ipython's regular output
2851 cache Out[N] and in the '_N' automatic variables.
2852 cache Out[N] and in the '_N' automatic variables.
2852
2853
2853 Notes:
2854 Notes:
2854
2855
2855 1) If an input line begins with '!!', then %sx is automatically
2856 1) If an input line begins with '!!', then %sx is automatically
2856 invoked. That is, while:
2857 invoked. That is, while:
2857 !ls
2858 !ls
2858 causes ipython to simply issue system('ls'), typing
2859 causes ipython to simply issue system('ls'), typing
2859 !!ls
2860 !!ls
2860 is a shorthand equivalent to:
2861 is a shorthand equivalent to:
2861 %sx ls
2862 %sx ls
2862
2863
2863 2) %sx differs from %sc in that %sx automatically splits into a list,
2864 2) %sx differs from %sc in that %sx automatically splits into a list,
2864 like '%sc -l'. The reason for this is to make it as easy as possible
2865 like '%sc -l'. The reason for this is to make it as easy as possible
2865 to process line-oriented shell output via further python commands.
2866 to process line-oriented shell output via further python commands.
2866 %sc is meant to provide much finer control, but requires more
2867 %sc is meant to provide much finer control, but requires more
2867 typing.
2868 typing.
2868
2869
2869 3) Just like %sc -l, this is a list with special attributes:
2870 3) Just like %sc -l, this is a list with special attributes:
2870
2871
2871 .l (or .list) : value as list.
2872 .l (or .list) : value as list.
2872 .n (or .nlstr): value as newline-separated string.
2873 .n (or .nlstr): value as newline-separated string.
2873 .s (or .spstr): value as whitespace-separated string.
2874 .s (or .spstr): value as whitespace-separated string.
2874
2875
2875 This is very useful when trying to use such lists as arguments to
2876 This is very useful when trying to use such lists as arguments to
2876 system commands."""
2877 system commands."""
2877
2878
2878 if parameter_s:
2879 if parameter_s:
2879 out,err = self.shell.getoutputerror(parameter_s)
2880 out,err = self.shell.getoutputerror(parameter_s)
2880 if err:
2881 if err:
2881 print >> Term.cerr,err
2882 print >> Term.cerr,err
2882 return SList(out.split('\n'))
2883 return SList(out.split('\n'))
2883
2884
2884 def magic_bg(self, parameter_s=''):
2885 def magic_bg(self, parameter_s=''):
2885 """Run a job in the background, in a separate thread.
2886 """Run a job in the background, in a separate thread.
2886
2887
2887 For example,
2888 For example,
2888
2889
2889 %bg myfunc(x,y,z=1)
2890 %bg myfunc(x,y,z=1)
2890
2891
2891 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2892 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2892 execution starts, a message will be printed indicating the job
2893 execution starts, a message will be printed indicating the job
2893 number. If your job number is 5, you can use
2894 number. If your job number is 5, you can use
2894
2895
2895 myvar = jobs.result(5) or myvar = jobs[5].result
2896 myvar = jobs.result(5) or myvar = jobs[5].result
2896
2897
2897 to assign this result to variable 'myvar'.
2898 to assign this result to variable 'myvar'.
2898
2899
2899 IPython has a job manager, accessible via the 'jobs' object. You can
2900 IPython has a job manager, accessible via the 'jobs' object. You can
2900 type jobs? to get more information about it, and use jobs.<TAB> to see
2901 type jobs? to get more information about it, and use jobs.<TAB> to see
2901 its attributes. All attributes not starting with an underscore are
2902 its attributes. All attributes not starting with an underscore are
2902 meant for public use.
2903 meant for public use.
2903
2904
2904 In particular, look at the jobs.new() method, which is used to create
2905 In particular, look at the jobs.new() method, which is used to create
2905 new jobs. This magic %bg function is just a convenience wrapper
2906 new jobs. This magic %bg function is just a convenience wrapper
2906 around jobs.new(), for expression-based jobs. If you want to create a
2907 around jobs.new(), for expression-based jobs. If you want to create a
2907 new job with an explicit function object and arguments, you must call
2908 new job with an explicit function object and arguments, you must call
2908 jobs.new() directly.
2909 jobs.new() directly.
2909
2910
2910 The jobs.new docstring also describes in detail several important
2911 The jobs.new docstring also describes in detail several important
2911 caveats associated with a thread-based model for background job
2912 caveats associated with a thread-based model for background job
2912 execution. Type jobs.new? for details.
2913 execution. Type jobs.new? for details.
2913
2914
2914 You can check the status of all jobs with jobs.status().
2915 You can check the status of all jobs with jobs.status().
2915
2916
2916 The jobs variable is set by IPython into the Python builtin namespace.
2917 The jobs variable is set by IPython into the Python builtin namespace.
2917 If you ever declare a variable named 'jobs', you will shadow this
2918 If you ever declare a variable named 'jobs', you will shadow this
2918 name. You can either delete your global jobs variable to regain
2919 name. You can either delete your global jobs variable to regain
2919 access to the job manager, or make a new name and assign it manually
2920 access to the job manager, or make a new name and assign it manually
2920 to the manager (stored in IPython's namespace). For example, to
2921 to the manager (stored in IPython's namespace). For example, to
2921 assign the job manager to the Jobs name, use:
2922 assign the job manager to the Jobs name, use:
2922
2923
2923 Jobs = __builtins__.jobs"""
2924 Jobs = __builtins__.jobs"""
2924
2925
2925 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2926 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2926
2927
2927
2928
2928 def magic_bookmark(self, parameter_s=''):
2929 def magic_bookmark(self, parameter_s=''):
2929 """Manage IPython's bookmark system.
2930 """Manage IPython's bookmark system.
2930
2931
2931 %bookmark <name> - set bookmark to current dir
2932 %bookmark <name> - set bookmark to current dir
2932 %bookmark <name> <dir> - set bookmark to <dir>
2933 %bookmark <name> <dir> - set bookmark to <dir>
2933 %bookmark -l - list all bookmarks
2934 %bookmark -l - list all bookmarks
2934 %bookmark -d <name> - remove bookmark
2935 %bookmark -d <name> - remove bookmark
2935 %bookmark -r - remove all bookmarks
2936 %bookmark -r - remove all bookmarks
2936
2937
2937 You can later on access a bookmarked folder with:
2938 You can later on access a bookmarked folder with:
2938 %cd -b <name>
2939 %cd -b <name>
2939 or simply '%cd <name>' if there is no directory called <name> AND
2940 or simply '%cd <name>' if there is no directory called <name> AND
2940 there is such a bookmark defined.
2941 there is such a bookmark defined.
2941
2942
2942 Your bookmarks persist through IPython sessions, but they are
2943 Your bookmarks persist through IPython sessions, but they are
2943 associated with each profile."""
2944 associated with each profile."""
2944
2945
2945 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2946 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2946 if len(args) > 2:
2947 if len(args) > 2:
2947 error('You can only give at most two arguments')
2948 error('You can only give at most two arguments')
2948 return
2949 return
2949
2950
2950 bkms = self.db.get('bookmarks',{})
2951 bkms = self.db.get('bookmarks',{})
2951
2952
2952 if opts.has_key('d'):
2953 if opts.has_key('d'):
2953 try:
2954 try:
2954 todel = args[0]
2955 todel = args[0]
2955 except IndexError:
2956 except IndexError:
2956 error('You must provide a bookmark to delete')
2957 error('You must provide a bookmark to delete')
2957 else:
2958 else:
2958 try:
2959 try:
2959 del bkms[todel]
2960 del bkms[todel]
2960 except:
2961 except:
2961 error("Can't delete bookmark '%s'" % todel)
2962 error("Can't delete bookmark '%s'" % todel)
2962 elif opts.has_key('r'):
2963 elif opts.has_key('r'):
2963 bkms = {}
2964 bkms = {}
2964 elif opts.has_key('l'):
2965 elif opts.has_key('l'):
2965 bks = bkms.keys()
2966 bks = bkms.keys()
2966 bks.sort()
2967 bks.sort()
2967 if bks:
2968 if bks:
2968 size = max(map(len,bks))
2969 size = max(map(len,bks))
2969 else:
2970 else:
2970 size = 0
2971 size = 0
2971 fmt = '%-'+str(size)+'s -> %s'
2972 fmt = '%-'+str(size)+'s -> %s'
2972 print 'Current bookmarks:'
2973 print 'Current bookmarks:'
2973 for bk in bks:
2974 for bk in bks:
2974 print fmt % (bk,bkms[bk])
2975 print fmt % (bk,bkms[bk])
2975 else:
2976 else:
2976 if not args:
2977 if not args:
2977 error("You must specify the bookmark name")
2978 error("You must specify the bookmark name")
2978 elif len(args)==1:
2979 elif len(args)==1:
2979 bkms[args[0]] = os.getcwd()
2980 bkms[args[0]] = os.getcwd()
2980 elif len(args)==2:
2981 elif len(args)==2:
2981 bkms[args[0]] = args[1]
2982 bkms[args[0]] = args[1]
2982 self.db['bookmarks'] = bkms
2983 self.db['bookmarks'] = bkms
2983
2984
2984 def magic_pycat(self, parameter_s=''):
2985 def magic_pycat(self, parameter_s=''):
2985 """Show a syntax-highlighted file through a pager.
2986 """Show a syntax-highlighted file through a pager.
2986
2987
2987 This magic is similar to the cat utility, but it will assume the file
2988 This magic is similar to the cat utility, but it will assume the file
2988 to be Python source and will show it with syntax highlighting. """
2989 to be Python source and will show it with syntax highlighting. """
2989
2990
2990 try:
2991 try:
2991 filename = get_py_filename(parameter_s)
2992 filename = get_py_filename(parameter_s)
2992 cont = file_read(filename)
2993 cont = file_read(filename)
2993 except IOError:
2994 except IOError:
2994 try:
2995 try:
2995 cont = eval(parameter_s,self.user_ns)
2996 cont = eval(parameter_s,self.user_ns)
2996 except NameError:
2997 except NameError:
2997 cont = None
2998 cont = None
2998 if cont is None:
2999 if cont is None:
2999 print "Error: no such file or variable"
3000 print "Error: no such file or variable"
3000 return
3001 return
3001
3002
3002 page(self.shell.pycolorize(cont),
3003 page(self.shell.pycolorize(cont),
3003 screen_lines=self.shell.rc.screen_length)
3004 screen_lines=self.shell.rc.screen_length)
3004
3005
3005 def magic_cpaste(self, parameter_s=''):
3006 def magic_cpaste(self, parameter_s=''):
3006 """Allows you to paste & execute a pre-formatted code block from clipboard
3007 """Allows you to paste & execute a pre-formatted code block from clipboard
3007
3008
3008 You must terminate the block with '--' (two minus-signs) alone on the
3009 You must terminate the block with '--' (two minus-signs) alone on the
3009 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3010 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3010 is the new sentinel for this operation)
3011 is the new sentinel for this operation)
3011
3012
3012 The block is dedented prior to execution to enable execution of
3013 The block is dedented prior to execution to enable execution of
3013 method definitions. '>' characters at the beginning of a line is
3014 method definitions. '>' characters at the beginning of a line is
3014 ignored, to allow pasting directly from e-mails. The executed block
3015 ignored, to allow pasting directly from e-mails. The executed block
3015 is also assigned to variable named 'pasted_block' for later editing
3016 is also assigned to variable named 'pasted_block' for later editing
3016 with '%edit pasted_block'.
3017 with '%edit pasted_block'.
3017
3018
3018 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3019 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3019 This assigns the pasted block to variable 'foo' as string, without
3020 This assigns the pasted block to variable 'foo' as string, without
3020 dedenting or executing it.
3021 dedenting or executing it.
3021
3022
3022 Do not be alarmed by garbled output on Windows (it's a readline bug).
3023 Do not be alarmed by garbled output on Windows (it's a readline bug).
3023 Just press enter and type -- (and press enter again) and the block
3024 Just press enter and type -- (and press enter again) and the block
3024 will be what was just pasted.
3025 will be what was just pasted.
3025
3026
3026 IPython statements (magics, shell escapes) are not supported (yet).
3027 IPython statements (magics, shell escapes) are not supported (yet).
3027 """
3028 """
3028 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3029 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3029 par = args.strip()
3030 par = args.strip()
3030 sentinel = opts.get('s','--')
3031 sentinel = opts.get('s','--')
3031
3032
3032 from IPython import iplib
3033 from IPython import iplib
3033 lines = []
3034 lines = []
3034 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3035 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3035 while 1:
3036 while 1:
3036 l = iplib.raw_input_original(':')
3037 l = iplib.raw_input_original(':')
3037 if l ==sentinel:
3038 if l ==sentinel:
3038 break
3039 break
3039 lines.append(l.lstrip('>'))
3040 lines.append(l.lstrip('>'))
3040 block = "\n".join(lines) + '\n'
3041 block = "\n".join(lines) + '\n'
3041 #print "block:\n",block
3042 #print "block:\n",block
3042 if not par:
3043 if not par:
3043 b = textwrap.dedent(block)
3044 b = textwrap.dedent(block)
3044 exec b in self.user_ns
3045 exec b in self.user_ns
3045 self.user_ns['pasted_block'] = b
3046 self.user_ns['pasted_block'] = b
3046 else:
3047 else:
3047 self.user_ns[par] = block
3048 self.user_ns[par] = block
3048 print "Block assigned to '%s'" % par
3049 print "Block assigned to '%s'" % par
3049
3050
3050 def magic_quickref(self,arg):
3051 def magic_quickref(self,arg):
3051 """ Show a quick reference sheet """
3052 """ Show a quick reference sheet """
3052 import IPython.usage
3053 import IPython.usage
3053 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3054 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3054
3055
3055 page(qr)
3056 page(qr)
3056
3057
3057 def magic_upgrade(self,arg):
3058 def magic_upgrade(self,arg):
3058 """ Upgrade your IPython installation
3059 """ Upgrade your IPython installation
3059
3060
3060 This will copy the config files that don't yet exist in your
3061 This will copy the config files that don't yet exist in your
3061 ipython dir from the system config dir. Use this after upgrading
3062 ipython dir from the system config dir. Use this after upgrading
3062 IPython if you don't wish to delete your .ipython dir.
3063 IPython if you don't wish to delete your .ipython dir.
3063
3064
3064 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3065 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3065 new users)
3066 new users)
3066
3067
3067 """
3068 """
3068 ip = self.getapi()
3069 ip = self.getapi()
3069 ipinstallation = path(IPython.__file__).dirname()
3070 ipinstallation = path(IPython.__file__).dirname()
3070 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3071 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3071 src_config = ipinstallation / 'UserConfig'
3072 src_config = ipinstallation / 'UserConfig'
3072 userdir = path(ip.options.ipythondir)
3073 userdir = path(ip.options.ipythondir)
3073 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3074 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3074 print ">",cmd
3075 print ">",cmd
3075 shell(cmd)
3076 shell(cmd)
3076 if arg == '-nolegacy':
3077 if arg == '-nolegacy':
3077 legacy = userdir.files('ipythonrc*')
3078 legacy = userdir.files('ipythonrc*')
3078 print "Nuking legacy files:",legacy
3079 print "Nuking legacy files:",legacy
3079
3080
3080 [p.remove() for p in legacy]
3081 [p.remove() for p in legacy]
3081 suffix = (sys.platform == 'win32' and '.ini' or '')
3082 suffix = (sys.platform == 'win32' and '.ini' or '')
3082 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3083 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3083
3084
3084 # end Magic
3085 # end Magic
@@ -1,2542 +1,2548 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 2014 2007-01-05 10:36:58Z fperez $
9 $Id: iplib.py 2122 2007-03-01 02:27:11Z fperez $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from IPython import Release
31 from IPython import Release
32 __author__ = '%s <%s>\n%s <%s>' % \
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 __license__ = Release.license
34 __license__ = Release.license
35 __version__ = Release.version
35 __version__ = Release.version
36
36
37 # Python standard modules
37 # Python standard modules
38 import __main__
38 import __main__
39 import __builtin__
39 import __builtin__
40 import StringIO
40 import StringIO
41 import bdb
41 import bdb
42 import cPickle as pickle
42 import cPickle as pickle
43 import codeop
43 import codeop
44 import exceptions
44 import exceptions
45 import glob
45 import glob
46 import inspect
46 import inspect
47 import keyword
47 import keyword
48 import new
48 import new
49 import os
49 import os
50 import pydoc
50 import pydoc
51 import re
51 import re
52 import shutil
52 import shutil
53 import string
53 import string
54 import sys
54 import sys
55 import tempfile
55 import tempfile
56 import traceback
56 import traceback
57 import types
57 import types
58 import pickleshare
58 import pickleshare
59 from sets import Set
59 from sets import Set
60 from pprint import pprint, pformat
60 from pprint import pprint, pformat
61
61
62 # IPython's own modules
62 # IPython's own modules
63 import IPython
63 import IPython
64 from IPython import OInspect,PyColorize,ultraTB
64 from IPython import OInspect,PyColorize,ultraTB
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.FakeModule import FakeModule
66 from IPython.FakeModule import FakeModule
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Logger import Logger
68 from IPython.Logger import Logger
69 from IPython.Magic import Magic
69 from IPython.Magic import Magic
70 from IPython.Prompts import CachedOutput
70 from IPython.Prompts import CachedOutput
71 from IPython.ipstruct import Struct
71 from IPython.ipstruct import Struct
72 from IPython.background_jobs import BackgroundJobManager
72 from IPython.background_jobs import BackgroundJobManager
73 from IPython.usage import cmd_line_usage,interactive_usage
73 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.genutils import *
74 from IPython.genutils import *
75 from IPython.strdispatch import StrDispatch
75 from IPython.strdispatch import StrDispatch
76 import IPython.ipapi
76 import IPython.ipapi
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
86
87
87
88 #****************************************************************************
88 #****************************************************************************
89 # Some utility function definitions
89 # Some utility function definitions
90
90
91 ini_spaces_re = re.compile(r'^(\s+)')
91 ini_spaces_re = re.compile(r'^(\s+)')
92
92
93 def num_ini_spaces(strng):
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
94 """Return the number of initial spaces in a string"""
95
95
96 ini_spaces = ini_spaces_re.match(strng)
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
97 if ini_spaces:
98 return ini_spaces.end()
98 return ini_spaces.end()
99 else:
99 else:
100 return 0
100 return 0
101
101
102 def softspace(file, newvalue):
102 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
103 """Copied from code.py, to remove the dependency"""
104
104
105 oldvalue = 0
105 oldvalue = 0
106 try:
106 try:
107 oldvalue = file.softspace
107 oldvalue = file.softspace
108 except AttributeError:
108 except AttributeError:
109 pass
109 pass
110 try:
110 try:
111 file.softspace = newvalue
111 file.softspace = newvalue
112 except (AttributeError, TypeError):
112 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
113 # "attribute-less object" or "read-only attributes"
114 pass
114 pass
115 return oldvalue
115 return oldvalue
116
116
117
117
118 #****************************************************************************
118 #****************************************************************************
119 # Local use exceptions
119 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
120 class SpaceInInput(exceptions.Exception): pass
121
121
122
122
123 #****************************************************************************
123 #****************************************************************************
124 # Local use classes
124 # Local use classes
125 class Bunch: pass
125 class Bunch: pass
126
126
127 class Undefined: pass
127 class Undefined: pass
128
128
129 class Quitter(object):
129 class Quitter(object):
130 """Simple class to handle exit, similar to Python 2.5's.
130 """Simple class to handle exit, similar to Python 2.5's.
131
131
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
133 doesn't do (obviously, since it doesn't know about ipython)."""
133 doesn't do (obviously, since it doesn't know about ipython)."""
134
134
135 def __init__(self,shell,name):
135 def __init__(self,shell,name):
136 self.shell = shell
136 self.shell = shell
137 self.name = name
137 self.name = name
138
138
139 def __repr__(self):
139 def __repr__(self):
140 return 'Type %s() to exit.' % self.name
140 return 'Type %s() to exit.' % self.name
141 __str__ = __repr__
141 __str__ = __repr__
142
142
143 def __call__(self):
143 def __call__(self):
144 self.shell.exit()
144 self.shell.exit()
145
145
146 class InputList(list):
146 class InputList(list):
147 """Class to store user input.
147 """Class to store user input.
148
148
149 It's basically a list, but slices return a string instead of a list, thus
149 It's basically a list, but slices return a string instead of a list, thus
150 allowing things like (assuming 'In' is an instance):
150 allowing things like (assuming 'In' is an instance):
151
151
152 exec In[4:7]
152 exec In[4:7]
153
153
154 or
154 or
155
155
156 exec In[5:9] + In[14] + In[21:25]"""
156 exec In[5:9] + In[14] + In[21:25]"""
157
157
158 def __getslice__(self,i,j):
158 def __getslice__(self,i,j):
159 return ''.join(list.__getslice__(self,i,j))
159 return ''.join(list.__getslice__(self,i,j))
160
160
161 class SyntaxTB(ultraTB.ListTB):
161 class SyntaxTB(ultraTB.ListTB):
162 """Extension which holds some state: the last exception value"""
162 """Extension which holds some state: the last exception value"""
163
163
164 def __init__(self,color_scheme = 'NoColor'):
164 def __init__(self,color_scheme = 'NoColor'):
165 ultraTB.ListTB.__init__(self,color_scheme)
165 ultraTB.ListTB.__init__(self,color_scheme)
166 self.last_syntax_error = None
166 self.last_syntax_error = None
167
167
168 def __call__(self, etype, value, elist):
168 def __call__(self, etype, value, elist):
169 self.last_syntax_error = value
169 self.last_syntax_error = value
170 ultraTB.ListTB.__call__(self,etype,value,elist)
170 ultraTB.ListTB.__call__(self,etype,value,elist)
171
171
172 def clear_err_state(self):
172 def clear_err_state(self):
173 """Return the current error state and clear it"""
173 """Return the current error state and clear it"""
174 e = self.last_syntax_error
174 e = self.last_syntax_error
175 self.last_syntax_error = None
175 self.last_syntax_error = None
176 return e
176 return e
177
177
178 #****************************************************************************
178 #****************************************************************************
179 # Main IPython class
179 # Main IPython class
180
180
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
182 # until a full rewrite is made. I've cleaned all cross-class uses of
182 # until a full rewrite is made. I've cleaned all cross-class uses of
183 # attributes and methods, but too much user code out there relies on the
183 # attributes and methods, but too much user code out there relies on the
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
185 #
185 #
186 # But at least now, all the pieces have been separated and we could, in
186 # But at least now, all the pieces have been separated and we could, in
187 # principle, stop using the mixin. This will ease the transition to the
187 # principle, stop using the mixin. This will ease the transition to the
188 # chainsaw branch.
188 # chainsaw branch.
189
189
190 # For reference, the following is the list of 'self.foo' uses in the Magic
190 # For reference, the following is the list of 'self.foo' uses in the Magic
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
192 # class, to prevent clashes.
192 # class, to prevent clashes.
193
193
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
197 # 'self.value']
197 # 'self.value']
198
198
199 class InteractiveShell(object,Magic):
199 class InteractiveShell(object,Magic):
200 """An enhanced console for Python."""
200 """An enhanced console for Python."""
201
201
202 # class attribute to indicate whether the class supports threads or not.
202 # class attribute to indicate whether the class supports threads or not.
203 # Subclasses with thread support should override this as needed.
203 # Subclasses with thread support should override this as needed.
204 isthreaded = False
204 isthreaded = False
205
205
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
207 user_ns = None,user_global_ns=None,banner2='',
207 user_ns = None,user_global_ns=None,banner2='',
208 custom_exceptions=((),None),embedded=False):
208 custom_exceptions=((),None),embedded=False):
209
209
210 # log system
210 # log system
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
212
212
213 # some minimal strict typechecks. For some core data structures, I
213 # some minimal strict typechecks. For some core data structures, I
214 # want actual basic python types, not just anything that looks like
214 # want actual basic python types, not just anything that looks like
215 # one. This is especially true for namespaces.
215 # one. This is especially true for namespaces.
216 for ns in (user_ns,user_global_ns):
216 for ns in (user_ns,user_global_ns):
217 if ns is not None and type(ns) != types.DictType:
217 if ns is not None and type(ns) != types.DictType:
218 raise TypeError,'namespace must be a dictionary'
218 raise TypeError,'namespace must be a dictionary'
219
219
220 # Job manager (for jobs run as background threads)
220 # Job manager (for jobs run as background threads)
221 self.jobs = BackgroundJobManager()
221 self.jobs = BackgroundJobManager()
222
222
223 # Store the actual shell's name
223 # Store the actual shell's name
224 self.name = name
224 self.name = name
225
225
226 # We need to know whether the instance is meant for embedding, since
226 # We need to know whether the instance is meant for embedding, since
227 # global/local namespaces need to be handled differently in that case
227 # global/local namespaces need to be handled differently in that case
228 self.embedded = embedded
228 self.embedded = embedded
229
229
230 # command compiler
230 # command compiler
231 self.compile = codeop.CommandCompiler()
231 self.compile = codeop.CommandCompiler()
232
232
233 # User input buffer
233 # User input buffer
234 self.buffer = []
234 self.buffer = []
235
235
236 # Default name given in compilation of code
236 # Default name given in compilation of code
237 self.filename = '<ipython console>'
237 self.filename = '<ipython console>'
238
238
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 __builtin__.exit = Quitter(self,'exit')
241 __builtin__.exit = Quitter(self,'exit')
242 __builtin__.quit = Quitter(self,'quit')
242 __builtin__.quit = Quitter(self,'quit')
243
243
244 # Make an empty namespace, which extension writers can rely on both
244 # Make an empty namespace, which extension writers can rely on both
245 # existing and NEVER being used by ipython itself. This gives them a
245 # existing and NEVER being used by ipython itself. This gives them a
246 # convenient location for storing additional information and state
246 # convenient location for storing additional information and state
247 # their extensions may require, without fear of collisions with other
247 # their extensions may require, without fear of collisions with other
248 # ipython names that may develop later.
248 # ipython names that may develop later.
249 self.meta = Struct()
249 self.meta = Struct()
250
250
251 # Create the namespace where the user will operate. user_ns is
251 # Create the namespace where the user will operate. user_ns is
252 # normally the only one used, and it is passed to the exec calls as
252 # normally the only one used, and it is passed to the exec calls as
253 # the locals argument. But we do carry a user_global_ns namespace
253 # the locals argument. But we do carry a user_global_ns namespace
254 # given as the exec 'globals' argument, This is useful in embedding
254 # given as the exec 'globals' argument, This is useful in embedding
255 # situations where the ipython shell opens in a context where the
255 # situations where the ipython shell opens in a context where the
256 # distinction between locals and globals is meaningful.
256 # distinction between locals and globals is meaningful.
257
257
258 # FIXME. For some strange reason, __builtins__ is showing up at user
258 # FIXME. For some strange reason, __builtins__ is showing up at user
259 # level as a dict instead of a module. This is a manual fix, but I
259 # level as a dict instead of a module. This is a manual fix, but I
260 # should really track down where the problem is coming from. Alex
260 # should really track down where the problem is coming from. Alex
261 # Schmolck reported this problem first.
261 # Schmolck reported this problem first.
262
262
263 # A useful post by Alex Martelli on this topic:
263 # A useful post by Alex Martelli on this topic:
264 # Re: inconsistent value from __builtins__
264 # Re: inconsistent value from __builtins__
265 # Von: Alex Martelli <aleaxit@yahoo.com>
265 # Von: Alex Martelli <aleaxit@yahoo.com>
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
267 # Gruppen: comp.lang.python
267 # Gruppen: comp.lang.python
268
268
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
271 # > <type 'dict'>
271 # > <type 'dict'>
272 # > >>> print type(__builtins__)
272 # > >>> print type(__builtins__)
273 # > <type 'module'>
273 # > <type 'module'>
274 # > Is this difference in return value intentional?
274 # > Is this difference in return value intentional?
275
275
276 # Well, it's documented that '__builtins__' can be either a dictionary
276 # Well, it's documented that '__builtins__' can be either a dictionary
277 # or a module, and it's been that way for a long time. Whether it's
277 # or a module, and it's been that way for a long time. Whether it's
278 # intentional (or sensible), I don't know. In any case, the idea is
278 # intentional (or sensible), I don't know. In any case, the idea is
279 # that if you need to access the built-in namespace directly, you
279 # that if you need to access the built-in namespace directly, you
280 # should start with "import __builtin__" (note, no 's') which will
280 # should start with "import __builtin__" (note, no 's') which will
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
282
282
283 # These routines return properly built dicts as needed by the rest of
283 # These routines return properly built dicts as needed by the rest of
284 # the code, and can also be used by extension writers to generate
284 # the code, and can also be used by extension writers to generate
285 # properly initialized namespaces.
285 # properly initialized namespaces.
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 self.strdispatchers = {}
408 self.strdispatchers = {}
409
409
410 # Set all default hooks, defined in the IPython.hooks module.
410 # Set all default hooks, defined in the IPython.hooks module.
411 hooks = IPython.hooks
411 hooks = IPython.hooks
412 for hook_name in hooks.__all__:
412 for hook_name in hooks.__all__:
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
415 #print "bound hook",hook_name
415 #print "bound hook",hook_name
416
416
417 # Flag to mark unconditional exit
417 # Flag to mark unconditional exit
418 self.exit_now = False
418 self.exit_now = False
419
419
420 self.usage_min = """\
420 self.usage_min = """\
421 An enhanced console for Python.
421 An enhanced console for Python.
422 Some of its features are:
422 Some of its features are:
423 - Readline support if the readline library is present.
423 - Readline support if the readline library is present.
424 - Tab completion in the local namespace.
424 - Tab completion in the local namespace.
425 - Logging of input, see command-line options.
425 - Logging of input, see command-line options.
426 - System shell escape via ! , eg !ls.
426 - System shell escape via ! , eg !ls.
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
428 - Keeps track of locally defined variables via %who, %whos.
428 - Keeps track of locally defined variables via %who, %whos.
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
430 """
430 """
431 if usage: self.usage = usage
431 if usage: self.usage = usage
432 else: self.usage = self.usage_min
432 else: self.usage = self.usage_min
433
433
434 # Storage
434 # Storage
435 self.rc = rc # This will hold all configuration information
435 self.rc = rc # This will hold all configuration information
436 self.pager = 'less'
436 self.pager = 'less'
437 # temporary files used for various purposes. Deleted at exit.
437 # temporary files used for various purposes. Deleted at exit.
438 self.tempfiles = []
438 self.tempfiles = []
439
439
440 # Keep track of readline usage (later set by init_readline)
440 # Keep track of readline usage (later set by init_readline)
441 self.has_readline = False
441 self.has_readline = False
442
442
443 # template for logfile headers. It gets resolved at runtime by the
443 # template for logfile headers. It gets resolved at runtime by the
444 # logstart method.
444 # logstart method.
445 self.loghead_tpl = \
445 self.loghead_tpl = \
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
448 #log# opts = %s
448 #log# opts = %s
449 #log# args = %s
449 #log# args = %s
450 #log# It is safe to make manual edits below here.
450 #log# It is safe to make manual edits below here.
451 #log#-----------------------------------------------------------------------
451 #log#-----------------------------------------------------------------------
452 """
452 """
453 # for pushd/popd management
453 # for pushd/popd management
454 try:
454 try:
455 self.home_dir = get_home_dir()
455 self.home_dir = get_home_dir()
456 except HomeDirError,msg:
456 except HomeDirError,msg:
457 fatal(msg)
457 fatal(msg)
458
458
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
460
460
461 # Functions to call the underlying shell.
461 # Functions to call the underlying shell.
462
462
463 # The first is similar to os.system, but it doesn't return a value,
463 # The first is similar to os.system, but it doesn't return a value,
464 # and it allows interpolation of variables in the user's namespace.
464 # and it allows interpolation of variables in the user's namespace.
465 self.system = lambda cmd: \
465 self.system = lambda cmd: \
466 shell(self.var_expand(cmd,depth=2),
466 shell(self.var_expand(cmd,depth=2),
467 header=self.rc.system_header,
467 header=self.rc.system_header,
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469
469
470 # These are for getoutput and getoutputerror:
470 # These are for getoutput and getoutputerror:
471 self.getoutput = lambda cmd: \
471 self.getoutput = lambda cmd: \
472 getoutput(self.var_expand(cmd,depth=2),
472 getoutput(self.var_expand(cmd,depth=2),
473 header=self.rc.system_header,
473 header=self.rc.system_header,
474 verbose=self.rc.system_verbose)
474 verbose=self.rc.system_verbose)
475
475
476 self.getoutputerror = lambda cmd: \
476 self.getoutputerror = lambda cmd: \
477 getoutputerror(self.var_expand(cmd,depth=2),
477 getoutputerror(self.var_expand(cmd,depth=2),
478 header=self.rc.system_header,
478 header=self.rc.system_header,
479 verbose=self.rc.system_verbose)
479 verbose=self.rc.system_verbose)
480
480
481 # RegExp for splitting line contents into pre-char//first
481 # RegExp for splitting line contents into pre-char//first
482 # word-method//rest. For clarity, each group in on one line.
482 # word-method//rest. For clarity, each group in on one line.
483
483
484 # WARNING: update the regexp if the above escapes are changed, as they
484 # WARNING: update the regexp if the above escapes are changed, as they
485 # are hardwired in.
485 # are hardwired in.
486
486
487 # Don't get carried away with trying to make the autocalling catch too
487 # Don't get carried away with trying to make the autocalling catch too
488 # much: it's better to be conservative rather than to trigger hidden
488 # much: it's better to be conservative rather than to trigger hidden
489 # evals() somewhere and end up causing side effects.
489 # evals() somewhere and end up causing side effects.
490
490
491 self.line_split = re.compile(r'^([\s*,;/])'
491 self.line_split = re.compile(r'^([\s*,;/])'
492 r'([\?\w\.]+\w*\s*)'
492 r'([\?\w\.]+\w*\s*)'
493 r'(\(?.*$)')
493 r'(\(?.*$)')
494
494
495 # A simpler regexp used as a fallback if the above doesn't work. This
496 # one is more conservative in how it partitions the input. This code
497 # can probably be cleaned up to do everything with just one regexp, but
498 # I'm afraid of breaking something; do it once the unit tests are in
499 # place.
500 self.line_split_fallback = re.compile(r'^(\s*)'
501 r'([\w\.]*)'
502 r'(.*)')
503
495 # Original re, keep around for a while in case changes break something
504 # Original re, keep around for a while in case changes break something
496 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
505 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
497 # r'(\s*[\?\w\.]+\w*\s*)'
506 # r'(\s*[\?\w\.]+\w*\s*)'
498 # r'(\(?.*$)')
507 # r'(\(?.*$)')
499
508
500 # RegExp to identify potential function names
509 # RegExp to identify potential function names
501 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
510 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
502
511
503 # RegExp to exclude strings with this start from autocalling. In
512 # RegExp to exclude strings with this start from autocalling. In
504 # particular, all binary operators should be excluded, so that if foo
513 # particular, all binary operators should be excluded, so that if foo
505 # is callable, foo OP bar doesn't become foo(OP bar), which is
514 # is callable, foo OP bar doesn't become foo(OP bar), which is
506 # invalid. The characters '!=()' don't need to be checked for, as the
515 # invalid. The characters '!=()' don't need to be checked for, as the
507 # _prefilter routine explicitely does so, to catch direct calls and
516 # _prefilter routine explicitely does so, to catch direct calls and
508 # rebindings of existing names.
517 # rebindings of existing names.
509
518
510 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
519 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
511 # it affects the rest of the group in square brackets.
520 # it affects the rest of the group in square brackets.
512 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
521 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
513 '|^is |^not |^in |^and |^or ')
522 '|^is |^not |^in |^and |^or ')
514
523
515 # try to catch also methods for stuff in lists/tuples/dicts: off
524 # try to catch also methods for stuff in lists/tuples/dicts: off
516 # (experimental). For this to work, the line_split regexp would need
525 # (experimental). For this to work, the line_split regexp would need
517 # to be modified so it wouldn't break things at '['. That line is
526 # to be modified so it wouldn't break things at '['. That line is
518 # nasty enough that I shouldn't change it until I can test it _well_.
527 # nasty enough that I shouldn't change it until I can test it _well_.
519 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
528 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
520
529
521 # keep track of where we started running (mainly for crash post-mortem)
530 # keep track of where we started running (mainly for crash post-mortem)
522 self.starting_dir = os.getcwd()
531 self.starting_dir = os.getcwd()
523
532
524 # Various switches which can be set
533 # Various switches which can be set
525 self.CACHELENGTH = 5000 # this is cheap, it's just text
534 self.CACHELENGTH = 5000 # this is cheap, it's just text
526 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
535 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
527 self.banner2 = banner2
536 self.banner2 = banner2
528
537
529 # TraceBack handlers:
538 # TraceBack handlers:
530
539
531 # Syntax error handler.
540 # Syntax error handler.
532 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
541 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
533
542
534 # The interactive one is initialized with an offset, meaning we always
543 # The interactive one is initialized with an offset, meaning we always
535 # want to remove the topmost item in the traceback, which is our own
544 # want to remove the topmost item in the traceback, which is our own
536 # internal code. Valid modes: ['Plain','Context','Verbose']
545 # internal code. Valid modes: ['Plain','Context','Verbose']
537 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
546 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
538 color_scheme='NoColor',
547 color_scheme='NoColor',
539 tb_offset = 1)
548 tb_offset = 1)
540
549
541 # IPython itself shouldn't crash. This will produce a detailed
550 # IPython itself shouldn't crash. This will produce a detailed
542 # post-mortem if it does. But we only install the crash handler for
551 # post-mortem if it does. But we only install the crash handler for
543 # non-threaded shells, the threaded ones use a normal verbose reporter
552 # non-threaded shells, the threaded ones use a normal verbose reporter
544 # and lose the crash handler. This is because exceptions in the main
553 # and lose the crash handler. This is because exceptions in the main
545 # thread (such as in GUI code) propagate directly to sys.excepthook,
554 # thread (such as in GUI code) propagate directly to sys.excepthook,
546 # and there's no point in printing crash dumps for every user exception.
555 # and there's no point in printing crash dumps for every user exception.
547 if self.isthreaded:
556 if self.isthreaded:
548 ipCrashHandler = ultraTB.FormattedTB()
557 ipCrashHandler = ultraTB.FormattedTB()
549 else:
558 else:
550 from IPython import CrashHandler
559 from IPython import CrashHandler
551 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
560 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
552 self.set_crash_handler(ipCrashHandler)
561 self.set_crash_handler(ipCrashHandler)
553
562
554 # and add any custom exception handlers the user may have specified
563 # and add any custom exception handlers the user may have specified
555 self.set_custom_exc(*custom_exceptions)
564 self.set_custom_exc(*custom_exceptions)
556
565
557 # indentation management
566 # indentation management
558 self.autoindent = False
567 self.autoindent = False
559 self.indent_current_nsp = 0
568 self.indent_current_nsp = 0
560
569
561 # Make some aliases automatically
570 # Make some aliases automatically
562 # Prepare list of shell aliases to auto-define
571 # Prepare list of shell aliases to auto-define
563 if os.name == 'posix':
572 if os.name == 'posix':
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 'mv mv -i','rm rm -i','cp cp -i',
574 'mv mv -i','rm rm -i','cp cp -i',
566 'cat cat','less less','clear clear',
575 'cat cat','less less','clear clear',
567 # a better ls
576 # a better ls
568 'ls ls -F',
577 'ls ls -F',
569 # long ls
578 # long ls
570 'll ls -lF')
579 'll ls -lF')
571 # Extra ls aliases with color, which need special treatment on BSD
580 # Extra ls aliases with color, which need special treatment on BSD
572 # variants
581 # variants
573 ls_extra = ( # color ls
582 ls_extra = ( # color ls
574 'lc ls -F -o --color',
583 'lc ls -F -o --color',
575 # ls normal files only
584 # ls normal files only
576 'lf ls -F -o --color %l | grep ^-',
585 'lf ls -F -o --color %l | grep ^-',
577 # ls symbolic links
586 # ls symbolic links
578 'lk ls -F -o --color %l | grep ^l',
587 'lk ls -F -o --color %l | grep ^l',
579 # directories or links to directories,
588 # directories or links to directories,
580 'ldir ls -F -o --color %l | grep /$',
589 'ldir ls -F -o --color %l | grep /$',
581 # things which are executable
590 # things which are executable
582 'lx ls -F -o --color %l | grep ^-..x',
591 'lx ls -F -o --color %l | grep ^-..x',
583 )
592 )
584 # The BSDs don't ship GNU ls, so they don't understand the
593 # The BSDs don't ship GNU ls, so they don't understand the
585 # --color switch out of the box
594 # --color switch out of the box
586 if 'bsd' in sys.platform:
595 if 'bsd' in sys.platform:
587 ls_extra = ( # ls normal files only
596 ls_extra = ( # ls normal files only
588 'lf ls -lF | grep ^-',
597 'lf ls -lF | grep ^-',
589 # ls symbolic links
598 # ls symbolic links
590 'lk ls -lF | grep ^l',
599 'lk ls -lF | grep ^l',
591 # directories or links to directories,
600 # directories or links to directories,
592 'ldir ls -lF | grep /$',
601 'ldir ls -lF | grep /$',
593 # things which are executable
602 # things which are executable
594 'lx ls -lF | grep ^-..x',
603 'lx ls -lF | grep ^-..x',
595 )
604 )
596 auto_alias = auto_alias + ls_extra
605 auto_alias = auto_alias + ls_extra
597 elif os.name in ['nt','dos']:
606 elif os.name in ['nt','dos']:
598 auto_alias = ('dir dir /on', 'ls dir /on',
607 auto_alias = ('dir dir /on', 'ls dir /on',
599 'ddir dir /ad /on', 'ldir dir /ad /on',
608 'ddir dir /ad /on', 'ldir dir /ad /on',
600 'mkdir mkdir','rmdir rmdir','echo echo',
609 'mkdir mkdir','rmdir rmdir','echo echo',
601 'ren ren','cls cls','copy copy')
610 'ren ren','cls cls','copy copy')
602 else:
611 else:
603 auto_alias = ()
612 auto_alias = ()
604 self.auto_alias = [s.split(None,1) for s in auto_alias]
613 self.auto_alias = [s.split(None,1) for s in auto_alias]
605 # Call the actual (public) initializer
614 # Call the actual (public) initializer
606 self.init_auto_alias()
615 self.init_auto_alias()
607
616
608 # Produce a public API instance
617 # Produce a public API instance
609 self.api = IPython.ipapi.IPApi(self)
618 self.api = IPython.ipapi.IPApi(self)
610
619
611 # track which builtins we add, so we can clean up later
620 # track which builtins we add, so we can clean up later
612 self.builtins_added = {}
621 self.builtins_added = {}
613 # This method will add the necessary builtins for operation, but
622 # This method will add the necessary builtins for operation, but
614 # tracking what it did via the builtins_added dict.
623 # tracking what it did via the builtins_added dict.
615 self.add_builtins()
624 self.add_builtins()
616
625
617 # end __init__
626 # end __init__
618
627
619 def var_expand(self,cmd,depth=0):
628 def var_expand(self,cmd,depth=0):
620 """Expand python variables in a string.
629 """Expand python variables in a string.
621
630
622 The depth argument indicates how many frames above the caller should
631 The depth argument indicates how many frames above the caller should
623 be walked to look for the local namespace where to expand variables.
632 be walked to look for the local namespace where to expand variables.
624
633
625 The global namespace for expansion is always the user's interactive
634 The global namespace for expansion is always the user's interactive
626 namespace.
635 namespace.
627 """
636 """
628
637
629 return str(ItplNS(cmd.replace('#','\#'),
638 return str(ItplNS(cmd.replace('#','\#'),
630 self.user_ns, # globals
639 self.user_ns, # globals
631 # Skip our own frame in searching for locals:
640 # Skip our own frame in searching for locals:
632 sys._getframe(depth+1).f_locals # locals
641 sys._getframe(depth+1).f_locals # locals
633 ))
642 ))
634
643
635 def pre_config_initialization(self):
644 def pre_config_initialization(self):
636 """Pre-configuration init method
645 """Pre-configuration init method
637
646
638 This is called before the configuration files are processed to
647 This is called before the configuration files are processed to
639 prepare the services the config files might need.
648 prepare the services the config files might need.
640
649
641 self.rc already has reasonable default values at this point.
650 self.rc already has reasonable default values at this point.
642 """
651 """
643 rc = self.rc
652 rc = self.rc
644
653
645 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
654 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
646
655
647 def post_config_initialization(self):
656 def post_config_initialization(self):
648 """Post configuration init method
657 """Post configuration init method
649
658
650 This is called after the configuration files have been processed to
659 This is called after the configuration files have been processed to
651 'finalize' the initialization."""
660 'finalize' the initialization."""
652
661
653 rc = self.rc
662 rc = self.rc
654
663
655 # Object inspector
664 # Object inspector
656 self.inspector = OInspect.Inspector(OInspect.InspectColors,
665 self.inspector = OInspect.Inspector(OInspect.InspectColors,
657 PyColorize.ANSICodeColors,
666 PyColorize.ANSICodeColors,
658 'NoColor',
667 'NoColor',
659 rc.object_info_string_level)
668 rc.object_info_string_level)
660
669
661 # Load readline proper
670 # Load readline proper
662 if rc.readline:
671 if rc.readline:
663 self.init_readline()
672 self.init_readline()
664
673
665 # local shortcut, this is used a LOT
674 # local shortcut, this is used a LOT
666 self.log = self.logger.log
675 self.log = self.logger.log
667
676
668 # Initialize cache, set in/out prompts and printing system
677 # Initialize cache, set in/out prompts and printing system
669 self.outputcache = CachedOutput(self,
678 self.outputcache = CachedOutput(self,
670 rc.cache_size,
679 rc.cache_size,
671 rc.pprint,
680 rc.pprint,
672 input_sep = rc.separate_in,
681 input_sep = rc.separate_in,
673 output_sep = rc.separate_out,
682 output_sep = rc.separate_out,
674 output_sep2 = rc.separate_out2,
683 output_sep2 = rc.separate_out2,
675 ps1 = rc.prompt_in1,
684 ps1 = rc.prompt_in1,
676 ps2 = rc.prompt_in2,
685 ps2 = rc.prompt_in2,
677 ps_out = rc.prompt_out,
686 ps_out = rc.prompt_out,
678 pad_left = rc.prompts_pad_left)
687 pad_left = rc.prompts_pad_left)
679
688
680 # user may have over-ridden the default print hook:
689 # user may have over-ridden the default print hook:
681 try:
690 try:
682 self.outputcache.__class__.display = self.hooks.display
691 self.outputcache.__class__.display = self.hooks.display
683 except AttributeError:
692 except AttributeError:
684 pass
693 pass
685
694
686 # I don't like assigning globally to sys, because it means when
695 # I don't like assigning globally to sys, because it means when
687 # embedding instances, each embedded instance overrides the previous
696 # embedding instances, each embedded instance overrides the previous
688 # choice. But sys.displayhook seems to be called internally by exec,
697 # choice. But sys.displayhook seems to be called internally by exec,
689 # so I don't see a way around it. We first save the original and then
698 # so I don't see a way around it. We first save the original and then
690 # overwrite it.
699 # overwrite it.
691 self.sys_displayhook = sys.displayhook
700 self.sys_displayhook = sys.displayhook
692 sys.displayhook = self.outputcache
701 sys.displayhook = self.outputcache
693
702
694 # Set user colors (don't do it in the constructor above so that it
703 # Set user colors (don't do it in the constructor above so that it
695 # doesn't crash if colors option is invalid)
704 # doesn't crash if colors option is invalid)
696 self.magic_colors(rc.colors)
705 self.magic_colors(rc.colors)
697
706
698 # Set calling of pdb on exceptions
707 # Set calling of pdb on exceptions
699 self.call_pdb = rc.pdb
708 self.call_pdb = rc.pdb
700
709
701 # Load user aliases
710 # Load user aliases
702 for alias in rc.alias:
711 for alias in rc.alias:
703 self.magic_alias(alias)
712 self.magic_alias(alias)
704 self.hooks.late_startup_hook()
713 self.hooks.late_startup_hook()
705
714
706 batchrun = False
715 batchrun = False
707 for batchfile in [path(arg) for arg in self.rc.args
716 for batchfile in [path(arg) for arg in self.rc.args
708 if arg.lower().endswith('.ipy')]:
717 if arg.lower().endswith('.ipy')]:
709 if not batchfile.isfile():
718 if not batchfile.isfile():
710 print "No such batch file:", batchfile
719 print "No such batch file:", batchfile
711 continue
720 continue
712 self.api.runlines(batchfile.text())
721 self.api.runlines(batchfile.text())
713 batchrun = True
722 batchrun = True
714 if batchrun:
723 if batchrun:
715 self.exit_now = True
724 self.exit_now = True
716
725
717 def add_builtins(self):
726 def add_builtins(self):
718 """Store ipython references into the builtin namespace.
727 """Store ipython references into the builtin namespace.
719
728
720 Some parts of ipython operate via builtins injected here, which hold a
729 Some parts of ipython operate via builtins injected here, which hold a
721 reference to IPython itself."""
730 reference to IPython itself."""
722
731
723 # TODO: deprecate all except _ip; 'jobs' should be installed
732 # TODO: deprecate all except _ip; 'jobs' should be installed
724 # by an extension and the rest are under _ip, ipalias is redundant
733 # by an extension and the rest are under _ip, ipalias is redundant
725 builtins_new = dict(__IPYTHON__ = self,
734 builtins_new = dict(__IPYTHON__ = self,
726 ip_set_hook = self.set_hook,
735 ip_set_hook = self.set_hook,
727 jobs = self.jobs,
736 jobs = self.jobs,
728 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
737 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
729 ipalias = wrap_deprecated(self.ipalias),
738 ipalias = wrap_deprecated(self.ipalias),
730 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
739 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
731 _ip = self.api
740 _ip = self.api
732 )
741 )
733 for biname,bival in builtins_new.items():
742 for biname,bival in builtins_new.items():
734 try:
743 try:
735 # store the orignal value so we can restore it
744 # store the orignal value so we can restore it
736 self.builtins_added[biname] = __builtin__.__dict__[biname]
745 self.builtins_added[biname] = __builtin__.__dict__[biname]
737 except KeyError:
746 except KeyError:
738 # or mark that it wasn't defined, and we'll just delete it at
747 # or mark that it wasn't defined, and we'll just delete it at
739 # cleanup
748 # cleanup
740 self.builtins_added[biname] = Undefined
749 self.builtins_added[biname] = Undefined
741 __builtin__.__dict__[biname] = bival
750 __builtin__.__dict__[biname] = bival
742
751
743 # Keep in the builtins a flag for when IPython is active. We set it
752 # Keep in the builtins a flag for when IPython is active. We set it
744 # with setdefault so that multiple nested IPythons don't clobber one
753 # with setdefault so that multiple nested IPythons don't clobber one
745 # another. Each will increase its value by one upon being activated,
754 # another. Each will increase its value by one upon being activated,
746 # which also gives us a way to determine the nesting level.
755 # which also gives us a way to determine the nesting level.
747 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
756 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
748
757
749 def clean_builtins(self):
758 def clean_builtins(self):
750 """Remove any builtins which might have been added by add_builtins, or
759 """Remove any builtins which might have been added by add_builtins, or
751 restore overwritten ones to their previous values."""
760 restore overwritten ones to their previous values."""
752 for biname,bival in self.builtins_added.items():
761 for biname,bival in self.builtins_added.items():
753 if bival is Undefined:
762 if bival is Undefined:
754 del __builtin__.__dict__[biname]
763 del __builtin__.__dict__[biname]
755 else:
764 else:
756 __builtin__.__dict__[biname] = bival
765 __builtin__.__dict__[biname] = bival
757 self.builtins_added.clear()
766 self.builtins_added.clear()
758
767
759 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
768 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
760 """set_hook(name,hook) -> sets an internal IPython hook.
769 """set_hook(name,hook) -> sets an internal IPython hook.
761
770
762 IPython exposes some of its internal API as user-modifiable hooks. By
771 IPython exposes some of its internal API as user-modifiable hooks. By
763 adding your function to one of these hooks, you can modify IPython's
772 adding your function to one of these hooks, you can modify IPython's
764 behavior to call at runtime your own routines."""
773 behavior to call at runtime your own routines."""
765
774
766 # At some point in the future, this should validate the hook before it
775 # At some point in the future, this should validate the hook before it
767 # accepts it. Probably at least check that the hook takes the number
776 # accepts it. Probably at least check that the hook takes the number
768 # of args it's supposed to.
777 # of args it's supposed to.
769
778
770 f = new.instancemethod(hook,self,self.__class__)
779 f = new.instancemethod(hook,self,self.__class__)
771
780
772 # check if the hook is for strdispatcher first
781 # check if the hook is for strdispatcher first
773 if str_key is not None:
782 if str_key is not None:
774 sdp = self.strdispatchers.get(name, StrDispatch())
783 sdp = self.strdispatchers.get(name, StrDispatch())
775 sdp.add_s(str_key, f, priority )
784 sdp.add_s(str_key, f, priority )
776 self.strdispatchers[name] = sdp
785 self.strdispatchers[name] = sdp
777 return
786 return
778 if re_key is not None:
787 if re_key is not None:
779 sdp = self.strdispatchers.get(name, StrDispatch())
788 sdp = self.strdispatchers.get(name, StrDispatch())
780 sdp.add_re(re.compile(re_key), f, priority )
789 sdp.add_re(re.compile(re_key), f, priority )
781 self.strdispatchers[name] = sdp
790 self.strdispatchers[name] = sdp
782 return
791 return
783
792
784 dp = getattr(self.hooks, name, None)
793 dp = getattr(self.hooks, name, None)
785 if name not in IPython.hooks.__all__:
794 if name not in IPython.hooks.__all__:
786 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
795 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
787 if not dp:
796 if not dp:
788 dp = IPython.hooks.CommandChainDispatcher()
797 dp = IPython.hooks.CommandChainDispatcher()
789
798
790 try:
799 try:
791 dp.add(f,priority)
800 dp.add(f,priority)
792 except AttributeError:
801 except AttributeError:
793 # it was not commandchain, plain old func - replace
802 # it was not commandchain, plain old func - replace
794 dp = f
803 dp = f
795
804
796 setattr(self.hooks,name, dp)
805 setattr(self.hooks,name, dp)
797
806
798
807
799 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
808 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
800
809
801 def set_crash_handler(self,crashHandler):
810 def set_crash_handler(self,crashHandler):
802 """Set the IPython crash handler.
811 """Set the IPython crash handler.
803
812
804 This must be a callable with a signature suitable for use as
813 This must be a callable with a signature suitable for use as
805 sys.excepthook."""
814 sys.excepthook."""
806
815
807 # Install the given crash handler as the Python exception hook
816 # Install the given crash handler as the Python exception hook
808 sys.excepthook = crashHandler
817 sys.excepthook = crashHandler
809
818
810 # The instance will store a pointer to this, so that runtime code
819 # The instance will store a pointer to this, so that runtime code
811 # (such as magics) can access it. This is because during the
820 # (such as magics) can access it. This is because during the
812 # read-eval loop, it gets temporarily overwritten (to deal with GUI
821 # read-eval loop, it gets temporarily overwritten (to deal with GUI
813 # frameworks).
822 # frameworks).
814 self.sys_excepthook = sys.excepthook
823 self.sys_excepthook = sys.excepthook
815
824
816
825
817 def set_custom_exc(self,exc_tuple,handler):
826 def set_custom_exc(self,exc_tuple,handler):
818 """set_custom_exc(exc_tuple,handler)
827 """set_custom_exc(exc_tuple,handler)
819
828
820 Set a custom exception handler, which will be called if any of the
829 Set a custom exception handler, which will be called if any of the
821 exceptions in exc_tuple occur in the mainloop (specifically, in the
830 exceptions in exc_tuple occur in the mainloop (specifically, in the
822 runcode() method.
831 runcode() method.
823
832
824 Inputs:
833 Inputs:
825
834
826 - exc_tuple: a *tuple* of valid exceptions to call the defined
835 - exc_tuple: a *tuple* of valid exceptions to call the defined
827 handler for. It is very important that you use a tuple, and NOT A
836 handler for. It is very important that you use a tuple, and NOT A
828 LIST here, because of the way Python's except statement works. If
837 LIST here, because of the way Python's except statement works. If
829 you only want to trap a single exception, use a singleton tuple:
838 you only want to trap a single exception, use a singleton tuple:
830
839
831 exc_tuple == (MyCustomException,)
840 exc_tuple == (MyCustomException,)
832
841
833 - handler: this must be defined as a function with the following
842 - handler: this must be defined as a function with the following
834 basic interface: def my_handler(self,etype,value,tb).
843 basic interface: def my_handler(self,etype,value,tb).
835
844
836 This will be made into an instance method (via new.instancemethod)
845 This will be made into an instance method (via new.instancemethod)
837 of IPython itself, and it will be called if any of the exceptions
846 of IPython itself, and it will be called if any of the exceptions
838 listed in the exc_tuple are caught. If the handler is None, an
847 listed in the exc_tuple are caught. If the handler is None, an
839 internal basic one is used, which just prints basic info.
848 internal basic one is used, which just prints basic info.
840
849
841 WARNING: by putting in your own exception handler into IPython's main
850 WARNING: by putting in your own exception handler into IPython's main
842 execution loop, you run a very good chance of nasty crashes. This
851 execution loop, you run a very good chance of nasty crashes. This
843 facility should only be used if you really know what you are doing."""
852 facility should only be used if you really know what you are doing."""
844
853
845 assert type(exc_tuple)==type(()) , \
854 assert type(exc_tuple)==type(()) , \
846 "The custom exceptions must be given AS A TUPLE."
855 "The custom exceptions must be given AS A TUPLE."
847
856
848 def dummy_handler(self,etype,value,tb):
857 def dummy_handler(self,etype,value,tb):
849 print '*** Simple custom exception handler ***'
858 print '*** Simple custom exception handler ***'
850 print 'Exception type :',etype
859 print 'Exception type :',etype
851 print 'Exception value:',value
860 print 'Exception value:',value
852 print 'Traceback :',tb
861 print 'Traceback :',tb
853 print 'Source code :','\n'.join(self.buffer)
862 print 'Source code :','\n'.join(self.buffer)
854
863
855 if handler is None: handler = dummy_handler
864 if handler is None: handler = dummy_handler
856
865
857 self.CustomTB = new.instancemethod(handler,self,self.__class__)
866 self.CustomTB = new.instancemethod(handler,self,self.__class__)
858 self.custom_exceptions = exc_tuple
867 self.custom_exceptions = exc_tuple
859
868
860 def set_custom_completer(self,completer,pos=0):
869 def set_custom_completer(self,completer,pos=0):
861 """set_custom_completer(completer,pos=0)
870 """set_custom_completer(completer,pos=0)
862
871
863 Adds a new custom completer function.
872 Adds a new custom completer function.
864
873
865 The position argument (defaults to 0) is the index in the completers
874 The position argument (defaults to 0) is the index in the completers
866 list where you want the completer to be inserted."""
875 list where you want the completer to be inserted."""
867
876
868 newcomp = new.instancemethod(completer,self.Completer,
877 newcomp = new.instancemethod(completer,self.Completer,
869 self.Completer.__class__)
878 self.Completer.__class__)
870 self.Completer.matchers.insert(pos,newcomp)
879 self.Completer.matchers.insert(pos,newcomp)
871
880
872 def _get_call_pdb(self):
881 def _get_call_pdb(self):
873 return self._call_pdb
882 return self._call_pdb
874
883
875 def _set_call_pdb(self,val):
884 def _set_call_pdb(self,val):
876
885
877 if val not in (0,1,False,True):
886 if val not in (0,1,False,True):
878 raise ValueError,'new call_pdb value must be boolean'
887 raise ValueError,'new call_pdb value must be boolean'
879
888
880 # store value in instance
889 # store value in instance
881 self._call_pdb = val
890 self._call_pdb = val
882
891
883 # notify the actual exception handlers
892 # notify the actual exception handlers
884 self.InteractiveTB.call_pdb = val
893 self.InteractiveTB.call_pdb = val
885 if self.isthreaded:
894 if self.isthreaded:
886 try:
895 try:
887 self.sys_excepthook.call_pdb = val
896 self.sys_excepthook.call_pdb = val
888 except:
897 except:
889 warn('Failed to activate pdb for threaded exception handler')
898 warn('Failed to activate pdb for threaded exception handler')
890
899
891 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
900 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
892 'Control auto-activation of pdb at exceptions')
901 'Control auto-activation of pdb at exceptions')
893
902
894
903
895 # These special functions get installed in the builtin namespace, to
904 # These special functions get installed in the builtin namespace, to
896 # provide programmatic (pure python) access to magics, aliases and system
905 # provide programmatic (pure python) access to magics, aliases and system
897 # calls. This is important for logging, user scripting, and more.
906 # calls. This is important for logging, user scripting, and more.
898
907
899 # We are basically exposing, via normal python functions, the three
908 # We are basically exposing, via normal python functions, the three
900 # mechanisms in which ipython offers special call modes (magics for
909 # mechanisms in which ipython offers special call modes (magics for
901 # internal control, aliases for direct system access via pre-selected
910 # internal control, aliases for direct system access via pre-selected
902 # names, and !cmd for calling arbitrary system commands).
911 # names, and !cmd for calling arbitrary system commands).
903
912
904 def ipmagic(self,arg_s):
913 def ipmagic(self,arg_s):
905 """Call a magic function by name.
914 """Call a magic function by name.
906
915
907 Input: a string containing the name of the magic function to call and any
916 Input: a string containing the name of the magic function to call and any
908 additional arguments to be passed to the magic.
917 additional arguments to be passed to the magic.
909
918
910 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
919 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
911 prompt:
920 prompt:
912
921
913 In[1]: %name -opt foo bar
922 In[1]: %name -opt foo bar
914
923
915 To call a magic without arguments, simply use ipmagic('name').
924 To call a magic without arguments, simply use ipmagic('name').
916
925
917 This provides a proper Python function to call IPython's magics in any
926 This provides a proper Python function to call IPython's magics in any
918 valid Python code you can type at the interpreter, including loops and
927 valid Python code you can type at the interpreter, including loops and
919 compound statements. It is added by IPython to the Python builtin
928 compound statements. It is added by IPython to the Python builtin
920 namespace upon initialization."""
929 namespace upon initialization."""
921
930
922 args = arg_s.split(' ',1)
931 args = arg_s.split(' ',1)
923 magic_name = args[0]
932 magic_name = args[0]
924 magic_name = magic_name.lstrip(self.ESC_MAGIC)
933 magic_name = magic_name.lstrip(self.ESC_MAGIC)
925
934
926 try:
935 try:
927 magic_args = args[1]
936 magic_args = args[1]
928 except IndexError:
937 except IndexError:
929 magic_args = ''
938 magic_args = ''
930 fn = getattr(self,'magic_'+magic_name,None)
939 fn = getattr(self,'magic_'+magic_name,None)
931 if fn is None:
940 if fn is None:
932 error("Magic function `%s` not found." % magic_name)
941 error("Magic function `%s` not found." % magic_name)
933 else:
942 else:
934 magic_args = self.var_expand(magic_args,1)
943 magic_args = self.var_expand(magic_args,1)
935 return fn(magic_args)
944 return fn(magic_args)
936
945
937 def ipalias(self,arg_s):
946 def ipalias(self,arg_s):
938 """Call an alias by name.
947 """Call an alias by name.
939
948
940 Input: a string containing the name of the alias to call and any
949 Input: a string containing the name of the alias to call and any
941 additional arguments to be passed to the magic.
950 additional arguments to be passed to the magic.
942
951
943 ipalias('name -opt foo bar') is equivalent to typing at the ipython
952 ipalias('name -opt foo bar') is equivalent to typing at the ipython
944 prompt:
953 prompt:
945
954
946 In[1]: name -opt foo bar
955 In[1]: name -opt foo bar
947
956
948 To call an alias without arguments, simply use ipalias('name').
957 To call an alias without arguments, simply use ipalias('name').
949
958
950 This provides a proper Python function to call IPython's aliases in any
959 This provides a proper Python function to call IPython's aliases in any
951 valid Python code you can type at the interpreter, including loops and
960 valid Python code you can type at the interpreter, including loops and
952 compound statements. It is added by IPython to the Python builtin
961 compound statements. It is added by IPython to the Python builtin
953 namespace upon initialization."""
962 namespace upon initialization."""
954
963
955 args = arg_s.split(' ',1)
964 args = arg_s.split(' ',1)
956 alias_name = args[0]
965 alias_name = args[0]
957 try:
966 try:
958 alias_args = args[1]
967 alias_args = args[1]
959 except IndexError:
968 except IndexError:
960 alias_args = ''
969 alias_args = ''
961 if alias_name in self.alias_table:
970 if alias_name in self.alias_table:
962 self.call_alias(alias_name,alias_args)
971 self.call_alias(alias_name,alias_args)
963 else:
972 else:
964 error("Alias `%s` not found." % alias_name)
973 error("Alias `%s` not found." % alias_name)
965
974
966 def ipsystem(self,arg_s):
975 def ipsystem(self,arg_s):
967 """Make a system call, using IPython."""
976 """Make a system call, using IPython."""
968
977
969 self.system(arg_s)
978 self.system(arg_s)
970
979
971 def complete(self,text):
980 def complete(self,text):
972 """Return a sorted list of all possible completions on text.
981 """Return a sorted list of all possible completions on text.
973
982
974 Inputs:
983 Inputs:
975
984
976 - text: a string of text to be completed on.
985 - text: a string of text to be completed on.
977
986
978 This is a wrapper around the completion mechanism, similar to what
987 This is a wrapper around the completion mechanism, similar to what
979 readline does at the command line when the TAB key is hit. By
988 readline does at the command line when the TAB key is hit. By
980 exposing it as a method, it can be used by other non-readline
989 exposing it as a method, it can be used by other non-readline
981 environments (such as GUIs) for text completion.
990 environments (such as GUIs) for text completion.
982
991
983 Simple usage example:
992 Simple usage example:
984
993
985 In [1]: x = 'hello'
994 In [1]: x = 'hello'
986
995
987 In [2]: __IP.complete('x.l')
996 In [2]: __IP.complete('x.l')
988 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
997 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
989
998
990 complete = self.Completer.complete
999 complete = self.Completer.complete
991 state = 0
1000 state = 0
992 # use a dict so we get unique keys, since ipyhton's multiple
1001 # use a dict so we get unique keys, since ipyhton's multiple
993 # completers can return duplicates.
1002 # completers can return duplicates.
994 comps = {}
1003 comps = {}
995 while True:
1004 while True:
996 newcomp = complete(text,state)
1005 newcomp = complete(text,state)
997 if newcomp is None:
1006 if newcomp is None:
998 break
1007 break
999 comps[newcomp] = 1
1008 comps[newcomp] = 1
1000 state += 1
1009 state += 1
1001 outcomps = comps.keys()
1010 outcomps = comps.keys()
1002 outcomps.sort()
1011 outcomps.sort()
1003 return outcomps
1012 return outcomps
1004
1013
1005 def set_completer_frame(self, frame=None):
1014 def set_completer_frame(self, frame=None):
1006 if frame:
1015 if frame:
1007 self.Completer.namespace = frame.f_locals
1016 self.Completer.namespace = frame.f_locals
1008 self.Completer.global_namespace = frame.f_globals
1017 self.Completer.global_namespace = frame.f_globals
1009 else:
1018 else:
1010 self.Completer.namespace = self.user_ns
1019 self.Completer.namespace = self.user_ns
1011 self.Completer.global_namespace = self.user_global_ns
1020 self.Completer.global_namespace = self.user_global_ns
1012
1021
1013 def init_auto_alias(self):
1022 def init_auto_alias(self):
1014 """Define some aliases automatically.
1023 """Define some aliases automatically.
1015
1024
1016 These are ALL parameter-less aliases"""
1025 These are ALL parameter-less aliases"""
1017
1026
1018 for alias,cmd in self.auto_alias:
1027 for alias,cmd in self.auto_alias:
1019 self.alias_table[alias] = (0,cmd)
1028 self.alias_table[alias] = (0,cmd)
1020
1029
1021 def alias_table_validate(self,verbose=0):
1030 def alias_table_validate(self,verbose=0):
1022 """Update information about the alias table.
1031 """Update information about the alias table.
1023
1032
1024 In particular, make sure no Python keywords/builtins are in it."""
1033 In particular, make sure no Python keywords/builtins are in it."""
1025
1034
1026 no_alias = self.no_alias
1035 no_alias = self.no_alias
1027 for k in self.alias_table.keys():
1036 for k in self.alias_table.keys():
1028 if k in no_alias:
1037 if k in no_alias:
1029 del self.alias_table[k]
1038 del self.alias_table[k]
1030 if verbose:
1039 if verbose:
1031 print ("Deleting alias <%s>, it's a Python "
1040 print ("Deleting alias <%s>, it's a Python "
1032 "keyword or builtin." % k)
1041 "keyword or builtin." % k)
1033
1042
1034 def set_autoindent(self,value=None):
1043 def set_autoindent(self,value=None):
1035 """Set the autoindent flag, checking for readline support.
1044 """Set the autoindent flag, checking for readline support.
1036
1045
1037 If called with no arguments, it acts as a toggle."""
1046 If called with no arguments, it acts as a toggle."""
1038
1047
1039 if not self.has_readline:
1048 if not self.has_readline:
1040 if os.name == 'posix':
1049 if os.name == 'posix':
1041 warn("The auto-indent feature requires the readline library")
1050 warn("The auto-indent feature requires the readline library")
1042 self.autoindent = 0
1051 self.autoindent = 0
1043 return
1052 return
1044 if value is None:
1053 if value is None:
1045 self.autoindent = not self.autoindent
1054 self.autoindent = not self.autoindent
1046 else:
1055 else:
1047 self.autoindent = value
1056 self.autoindent = value
1048
1057
1049 def rc_set_toggle(self,rc_field,value=None):
1058 def rc_set_toggle(self,rc_field,value=None):
1050 """Set or toggle a field in IPython's rc config. structure.
1059 """Set or toggle a field in IPython's rc config. structure.
1051
1060
1052 If called with no arguments, it acts as a toggle.
1061 If called with no arguments, it acts as a toggle.
1053
1062
1054 If called with a non-existent field, the resulting AttributeError
1063 If called with a non-existent field, the resulting AttributeError
1055 exception will propagate out."""
1064 exception will propagate out."""
1056
1065
1057 rc_val = getattr(self.rc,rc_field)
1066 rc_val = getattr(self.rc,rc_field)
1058 if value is None:
1067 if value is None:
1059 value = not rc_val
1068 value = not rc_val
1060 setattr(self.rc,rc_field,value)
1069 setattr(self.rc,rc_field,value)
1061
1070
1062 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1071 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1063 """Install the user configuration directory.
1072 """Install the user configuration directory.
1064
1073
1065 Can be called when running for the first time or to upgrade the user's
1074 Can be called when running for the first time or to upgrade the user's
1066 .ipython/ directory with the mode parameter. Valid modes are 'install'
1075 .ipython/ directory with the mode parameter. Valid modes are 'install'
1067 and 'upgrade'."""
1076 and 'upgrade'."""
1068
1077
1069 def wait():
1078 def wait():
1070 try:
1079 try:
1071 raw_input("Please press <RETURN> to start IPython.")
1080 raw_input("Please press <RETURN> to start IPython.")
1072 except EOFError:
1081 except EOFError:
1073 print >> Term.cout
1082 print >> Term.cout
1074 print '*'*70
1083 print '*'*70
1075
1084
1076 cwd = os.getcwd() # remember where we started
1085 cwd = os.getcwd() # remember where we started
1077 glb = glob.glob
1086 glb = glob.glob
1078 print '*'*70
1087 print '*'*70
1079 if mode == 'install':
1088 if mode == 'install':
1080 print \
1089 print \
1081 """Welcome to IPython. I will try to create a personal configuration directory
1090 """Welcome to IPython. I will try to create a personal configuration directory
1082 where you can customize many aspects of IPython's functionality in:\n"""
1091 where you can customize many aspects of IPython's functionality in:\n"""
1083 else:
1092 else:
1084 print 'I am going to upgrade your configuration in:'
1093 print 'I am going to upgrade your configuration in:'
1085
1094
1086 print ipythondir
1095 print ipythondir
1087
1096
1088 rcdirend = os.path.join('IPython','UserConfig')
1097 rcdirend = os.path.join('IPython','UserConfig')
1089 cfg = lambda d: os.path.join(d,rcdirend)
1098 cfg = lambda d: os.path.join(d,rcdirend)
1090 try:
1099 try:
1091 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1100 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1092 except IOError:
1101 except IOError:
1093 warning = """
1102 warning = """
1094 Installation error. IPython's directory was not found.
1103 Installation error. IPython's directory was not found.
1095
1104
1096 Check the following:
1105 Check the following:
1097
1106
1098 The ipython/IPython directory should be in a directory belonging to your
1107 The ipython/IPython directory should be in a directory belonging to your
1099 PYTHONPATH environment variable (that is, it should be in a directory
1108 PYTHONPATH environment variable (that is, it should be in a directory
1100 belonging to sys.path). You can copy it explicitly there or just link to it.
1109 belonging to sys.path). You can copy it explicitly there or just link to it.
1101
1110
1102 IPython will proceed with builtin defaults.
1111 IPython will proceed with builtin defaults.
1103 """
1112 """
1104 warn(warning)
1113 warn(warning)
1105 wait()
1114 wait()
1106 return
1115 return
1107
1116
1108 if mode == 'install':
1117 if mode == 'install':
1109 try:
1118 try:
1110 shutil.copytree(rcdir,ipythondir)
1119 shutil.copytree(rcdir,ipythondir)
1111 os.chdir(ipythondir)
1120 os.chdir(ipythondir)
1112 rc_files = glb("ipythonrc*")
1121 rc_files = glb("ipythonrc*")
1113 for rc_file in rc_files:
1122 for rc_file in rc_files:
1114 os.rename(rc_file,rc_file+rc_suffix)
1123 os.rename(rc_file,rc_file+rc_suffix)
1115 except:
1124 except:
1116 warning = """
1125 warning = """
1117
1126
1118 There was a problem with the installation:
1127 There was a problem with the installation:
1119 %s
1128 %s
1120 Try to correct it or contact the developers if you think it's a bug.
1129 Try to correct it or contact the developers if you think it's a bug.
1121 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1130 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1122 warn(warning)
1131 warn(warning)
1123 wait()
1132 wait()
1124 return
1133 return
1125
1134
1126 elif mode == 'upgrade':
1135 elif mode == 'upgrade':
1127 try:
1136 try:
1128 os.chdir(ipythondir)
1137 os.chdir(ipythondir)
1129 except:
1138 except:
1130 print """
1139 print """
1131 Can not upgrade: changing to directory %s failed. Details:
1140 Can not upgrade: changing to directory %s failed. Details:
1132 %s
1141 %s
1133 """ % (ipythondir,sys.exc_info()[1])
1142 """ % (ipythondir,sys.exc_info()[1])
1134 wait()
1143 wait()
1135 return
1144 return
1136 else:
1145 else:
1137 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1146 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1138 for new_full_path in sources:
1147 for new_full_path in sources:
1139 new_filename = os.path.basename(new_full_path)
1148 new_filename = os.path.basename(new_full_path)
1140 if new_filename.startswith('ipythonrc'):
1149 if new_filename.startswith('ipythonrc'):
1141 new_filename = new_filename + rc_suffix
1150 new_filename = new_filename + rc_suffix
1142 # The config directory should only contain files, skip any
1151 # The config directory should only contain files, skip any
1143 # directories which may be there (like CVS)
1152 # directories which may be there (like CVS)
1144 if os.path.isdir(new_full_path):
1153 if os.path.isdir(new_full_path):
1145 continue
1154 continue
1146 if os.path.exists(new_filename):
1155 if os.path.exists(new_filename):
1147 old_file = new_filename+'.old'
1156 old_file = new_filename+'.old'
1148 if os.path.exists(old_file):
1157 if os.path.exists(old_file):
1149 os.remove(old_file)
1158 os.remove(old_file)
1150 os.rename(new_filename,old_file)
1159 os.rename(new_filename,old_file)
1151 shutil.copy(new_full_path,new_filename)
1160 shutil.copy(new_full_path,new_filename)
1152 else:
1161 else:
1153 raise ValueError,'unrecognized mode for install:',`mode`
1162 raise ValueError,'unrecognized mode for install:',`mode`
1154
1163
1155 # Fix line-endings to those native to each platform in the config
1164 # Fix line-endings to those native to each platform in the config
1156 # directory.
1165 # directory.
1157 try:
1166 try:
1158 os.chdir(ipythondir)
1167 os.chdir(ipythondir)
1159 except:
1168 except:
1160 print """
1169 print """
1161 Problem: changing to directory %s failed.
1170 Problem: changing to directory %s failed.
1162 Details:
1171 Details:
1163 %s
1172 %s
1164
1173
1165 Some configuration files may have incorrect line endings. This should not
1174 Some configuration files may have incorrect line endings. This should not
1166 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1175 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1167 wait()
1176 wait()
1168 else:
1177 else:
1169 for fname in glb('ipythonrc*'):
1178 for fname in glb('ipythonrc*'):
1170 try:
1179 try:
1171 native_line_ends(fname,backup=0)
1180 native_line_ends(fname,backup=0)
1172 except IOError:
1181 except IOError:
1173 pass
1182 pass
1174
1183
1175 if mode == 'install':
1184 if mode == 'install':
1176 print """
1185 print """
1177 Successful installation!
1186 Successful installation!
1178
1187
1179 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1188 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1180 IPython manual (there are both HTML and PDF versions supplied with the
1189 IPython manual (there are both HTML and PDF versions supplied with the
1181 distribution) to make sure that your system environment is properly configured
1190 distribution) to make sure that your system environment is properly configured
1182 to take advantage of IPython's features.
1191 to take advantage of IPython's features.
1183
1192
1184 Important note: the configuration system has changed! The old system is
1193 Important note: the configuration system has changed! The old system is
1185 still in place, but its setting may be partly overridden by the settings in
1194 still in place, but its setting may be partly overridden by the settings in
1186 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1195 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1187 if some of the new settings bother you.
1196 if some of the new settings bother you.
1188
1197
1189 """
1198 """
1190 else:
1199 else:
1191 print """
1200 print """
1192 Successful upgrade!
1201 Successful upgrade!
1193
1202
1194 All files in your directory:
1203 All files in your directory:
1195 %(ipythondir)s
1204 %(ipythondir)s
1196 which would have been overwritten by the upgrade were backed up with a .old
1205 which would have been overwritten by the upgrade were backed up with a .old
1197 extension. If you had made particular customizations in those files you may
1206 extension. If you had made particular customizations in those files you may
1198 want to merge them back into the new files.""" % locals()
1207 want to merge them back into the new files.""" % locals()
1199 wait()
1208 wait()
1200 os.chdir(cwd)
1209 os.chdir(cwd)
1201 # end user_setup()
1210 # end user_setup()
1202
1211
1203 def atexit_operations(self):
1212 def atexit_operations(self):
1204 """This will be executed at the time of exit.
1213 """This will be executed at the time of exit.
1205
1214
1206 Saving of persistent data should be performed here. """
1215 Saving of persistent data should be performed here. """
1207
1216
1208 #print '*** IPython exit cleanup ***' # dbg
1217 #print '*** IPython exit cleanup ***' # dbg
1209 # input history
1218 # input history
1210 self.savehist()
1219 self.savehist()
1211
1220
1212 # Cleanup all tempfiles left around
1221 # Cleanup all tempfiles left around
1213 for tfile in self.tempfiles:
1222 for tfile in self.tempfiles:
1214 try:
1223 try:
1215 os.unlink(tfile)
1224 os.unlink(tfile)
1216 except OSError:
1225 except OSError:
1217 pass
1226 pass
1218
1227
1219 # save the "persistent data" catch-all dictionary
1228 # save the "persistent data" catch-all dictionary
1220 self.hooks.shutdown_hook()
1229 self.hooks.shutdown_hook()
1221
1230
1222 def savehist(self):
1231 def savehist(self):
1223 """Save input history to a file (via readline library)."""
1232 """Save input history to a file (via readline library)."""
1224 try:
1233 try:
1225 self.readline.write_history_file(self.histfile)
1234 self.readline.write_history_file(self.histfile)
1226 except:
1235 except:
1227 print 'Unable to save IPython command history to file: ' + \
1236 print 'Unable to save IPython command history to file: ' + \
1228 `self.histfile`
1237 `self.histfile`
1229
1238
1230 def history_saving_wrapper(self, func):
1239 def history_saving_wrapper(self, func):
1231 """ Wrap func for readline history saving
1240 """ Wrap func for readline history saving
1232
1241
1233 Convert func into callable that saves & restores
1242 Convert func into callable that saves & restores
1234 history around the call """
1243 history around the call """
1235
1244
1236 if not self.has_readline:
1245 if not self.has_readline:
1237 return func
1246 return func
1238
1247
1239 def wrapper():
1248 def wrapper():
1240 self.savehist()
1249 self.savehist()
1241 try:
1250 try:
1242 func()
1251 func()
1243 finally:
1252 finally:
1244 readline.read_history_file(self.histfile)
1253 readline.read_history_file(self.histfile)
1245 return wrapper
1254 return wrapper
1246
1255
1247
1256
1248 def pre_readline(self):
1257 def pre_readline(self):
1249 """readline hook to be used at the start of each line.
1258 """readline hook to be used at the start of each line.
1250
1259
1251 Currently it handles auto-indent only."""
1260 Currently it handles auto-indent only."""
1252
1261
1253 #debugx('self.indent_current_nsp','pre_readline:')
1262 #debugx('self.indent_current_nsp','pre_readline:')
1254 self.readline.insert_text(self.indent_current_str())
1263 self.readline.insert_text(self.indent_current_str())
1255
1264
1256 def init_readline(self):
1265 def init_readline(self):
1257 """Command history completion/saving/reloading."""
1266 """Command history completion/saving/reloading."""
1258
1267
1259 import IPython.rlineimpl as readline
1268 import IPython.rlineimpl as readline
1260 if not readline.have_readline:
1269 if not readline.have_readline:
1261 self.has_readline = 0
1270 self.has_readline = 0
1262 self.readline = None
1271 self.readline = None
1263 # no point in bugging windows users with this every time:
1272 # no point in bugging windows users with this every time:
1264 warn('Readline services not available on this platform.')
1273 warn('Readline services not available on this platform.')
1265 else:
1274 else:
1266 sys.modules['readline'] = readline
1275 sys.modules['readline'] = readline
1267 import atexit
1276 import atexit
1268 from IPython.completer import IPCompleter
1277 from IPython.completer import IPCompleter
1269 self.Completer = IPCompleter(self,
1278 self.Completer = IPCompleter(self,
1270 self.user_ns,
1279 self.user_ns,
1271 self.user_global_ns,
1280 self.user_global_ns,
1272 self.rc.readline_omit__names,
1281 self.rc.readline_omit__names,
1273 self.alias_table)
1282 self.alias_table)
1274 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1283 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1275 self.strdispatchers['complete_command'] = sdisp
1284 self.strdispatchers['complete_command'] = sdisp
1276 self.Completer.custom_completers = sdisp
1285 self.Completer.custom_completers = sdisp
1277 # Platform-specific configuration
1286 # Platform-specific configuration
1278 if os.name == 'nt':
1287 if os.name == 'nt':
1279 self.readline_startup_hook = readline.set_pre_input_hook
1288 self.readline_startup_hook = readline.set_pre_input_hook
1280 else:
1289 else:
1281 self.readline_startup_hook = readline.set_startup_hook
1290 self.readline_startup_hook = readline.set_startup_hook
1282
1291
1283 # Load user's initrc file (readline config)
1292 # Load user's initrc file (readline config)
1284 inputrc_name = os.environ.get('INPUTRC')
1293 inputrc_name = os.environ.get('INPUTRC')
1285 if inputrc_name is None:
1294 if inputrc_name is None:
1286 home_dir = get_home_dir()
1295 home_dir = get_home_dir()
1287 if home_dir is not None:
1296 if home_dir is not None:
1288 inputrc_name = os.path.join(home_dir,'.inputrc')
1297 inputrc_name = os.path.join(home_dir,'.inputrc')
1289 if os.path.isfile(inputrc_name):
1298 if os.path.isfile(inputrc_name):
1290 try:
1299 try:
1291 readline.read_init_file(inputrc_name)
1300 readline.read_init_file(inputrc_name)
1292 except:
1301 except:
1293 warn('Problems reading readline initialization file <%s>'
1302 warn('Problems reading readline initialization file <%s>'
1294 % inputrc_name)
1303 % inputrc_name)
1295
1304
1296 self.has_readline = 1
1305 self.has_readline = 1
1297 self.readline = readline
1306 self.readline = readline
1298 # save this in sys so embedded copies can restore it properly
1307 # save this in sys so embedded copies can restore it properly
1299 sys.ipcompleter = self.Completer.complete
1308 sys.ipcompleter = self.Completer.complete
1300 readline.set_completer(self.Completer.complete)
1309 readline.set_completer(self.Completer.complete)
1301
1310
1302 # Configure readline according to user's prefs
1311 # Configure readline according to user's prefs
1303 for rlcommand in self.rc.readline_parse_and_bind:
1312 for rlcommand in self.rc.readline_parse_and_bind:
1304 readline.parse_and_bind(rlcommand)
1313 readline.parse_and_bind(rlcommand)
1305
1314
1306 # remove some chars from the delimiters list
1315 # remove some chars from the delimiters list
1307 delims = readline.get_completer_delims()
1316 delims = readline.get_completer_delims()
1308 delims = delims.translate(string._idmap,
1317 delims = delims.translate(string._idmap,
1309 self.rc.readline_remove_delims)
1318 self.rc.readline_remove_delims)
1310 readline.set_completer_delims(delims)
1319 readline.set_completer_delims(delims)
1311 # otherwise we end up with a monster history after a while:
1320 # otherwise we end up with a monster history after a while:
1312 readline.set_history_length(1000)
1321 readline.set_history_length(1000)
1313 try:
1322 try:
1314 #print '*** Reading readline history' # dbg
1323 #print '*** Reading readline history' # dbg
1315 readline.read_history_file(self.histfile)
1324 readline.read_history_file(self.histfile)
1316 except IOError:
1325 except IOError:
1317 pass # It doesn't exist yet.
1326 pass # It doesn't exist yet.
1318
1327
1319 atexit.register(self.atexit_operations)
1328 atexit.register(self.atexit_operations)
1320 del atexit
1329 del atexit
1321
1330
1322 # Configure auto-indent for all platforms
1331 # Configure auto-indent for all platforms
1323 self.set_autoindent(self.rc.autoindent)
1332 self.set_autoindent(self.rc.autoindent)
1324
1333
1325 def ask_yes_no(self,prompt,default=True):
1334 def ask_yes_no(self,prompt,default=True):
1326 if self.rc.quiet:
1335 if self.rc.quiet:
1327 return True
1336 return True
1328 return ask_yes_no(prompt,default)
1337 return ask_yes_no(prompt,default)
1329
1338
1330 def _should_recompile(self,e):
1339 def _should_recompile(self,e):
1331 """Utility routine for edit_syntax_error"""
1340 """Utility routine for edit_syntax_error"""
1332
1341
1333 if e.filename in ('<ipython console>','<input>','<string>',
1342 if e.filename in ('<ipython console>','<input>','<string>',
1334 '<console>','<BackgroundJob compilation>',
1343 '<console>','<BackgroundJob compilation>',
1335 None):
1344 None):
1336
1345
1337 return False
1346 return False
1338 try:
1347 try:
1339 if (self.rc.autoedit_syntax and
1348 if (self.rc.autoedit_syntax and
1340 not self.ask_yes_no('Return to editor to correct syntax error? '
1349 not self.ask_yes_no('Return to editor to correct syntax error? '
1341 '[Y/n] ','y')):
1350 '[Y/n] ','y')):
1342 return False
1351 return False
1343 except EOFError:
1352 except EOFError:
1344 return False
1353 return False
1345
1354
1346 def int0(x):
1355 def int0(x):
1347 try:
1356 try:
1348 return int(x)
1357 return int(x)
1349 except TypeError:
1358 except TypeError:
1350 return 0
1359 return 0
1351 # always pass integer line and offset values to editor hook
1360 # always pass integer line and offset values to editor hook
1352 self.hooks.fix_error_editor(e.filename,
1361 self.hooks.fix_error_editor(e.filename,
1353 int0(e.lineno),int0(e.offset),e.msg)
1362 int0(e.lineno),int0(e.offset),e.msg)
1354 return True
1363 return True
1355
1364
1356 def edit_syntax_error(self):
1365 def edit_syntax_error(self):
1357 """The bottom half of the syntax error handler called in the main loop.
1366 """The bottom half of the syntax error handler called in the main loop.
1358
1367
1359 Loop until syntax error is fixed or user cancels.
1368 Loop until syntax error is fixed or user cancels.
1360 """
1369 """
1361
1370
1362 while self.SyntaxTB.last_syntax_error:
1371 while self.SyntaxTB.last_syntax_error:
1363 # copy and clear last_syntax_error
1372 # copy and clear last_syntax_error
1364 err = self.SyntaxTB.clear_err_state()
1373 err = self.SyntaxTB.clear_err_state()
1365 if not self._should_recompile(err):
1374 if not self._should_recompile(err):
1366 return
1375 return
1367 try:
1376 try:
1368 # may set last_syntax_error again if a SyntaxError is raised
1377 # may set last_syntax_error again if a SyntaxError is raised
1369 self.safe_execfile(err.filename,self.user_ns)
1378 self.safe_execfile(err.filename,self.user_ns)
1370 except:
1379 except:
1371 self.showtraceback()
1380 self.showtraceback()
1372 else:
1381 else:
1373 try:
1382 try:
1374 f = file(err.filename)
1383 f = file(err.filename)
1375 try:
1384 try:
1376 sys.displayhook(f.read())
1385 sys.displayhook(f.read())
1377 finally:
1386 finally:
1378 f.close()
1387 f.close()
1379 except:
1388 except:
1380 self.showtraceback()
1389 self.showtraceback()
1381
1390
1382 def showsyntaxerror(self, filename=None):
1391 def showsyntaxerror(self, filename=None):
1383 """Display the syntax error that just occurred.
1392 """Display the syntax error that just occurred.
1384
1393
1385 This doesn't display a stack trace because there isn't one.
1394 This doesn't display a stack trace because there isn't one.
1386
1395
1387 If a filename is given, it is stuffed in the exception instead
1396 If a filename is given, it is stuffed in the exception instead
1388 of what was there before (because Python's parser always uses
1397 of what was there before (because Python's parser always uses
1389 "<string>" when reading from a string).
1398 "<string>" when reading from a string).
1390 """
1399 """
1391 etype, value, last_traceback = sys.exc_info()
1400 etype, value, last_traceback = sys.exc_info()
1392
1401
1393 # See note about these variables in showtraceback() below
1402 # See note about these variables in showtraceback() below
1394 sys.last_type = etype
1403 sys.last_type = etype
1395 sys.last_value = value
1404 sys.last_value = value
1396 sys.last_traceback = last_traceback
1405 sys.last_traceback = last_traceback
1397
1406
1398 if filename and etype is SyntaxError:
1407 if filename and etype is SyntaxError:
1399 # Work hard to stuff the correct filename in the exception
1408 # Work hard to stuff the correct filename in the exception
1400 try:
1409 try:
1401 msg, (dummy_filename, lineno, offset, line) = value
1410 msg, (dummy_filename, lineno, offset, line) = value
1402 except:
1411 except:
1403 # Not the format we expect; leave it alone
1412 # Not the format we expect; leave it alone
1404 pass
1413 pass
1405 else:
1414 else:
1406 # Stuff in the right filename
1415 # Stuff in the right filename
1407 try:
1416 try:
1408 # Assume SyntaxError is a class exception
1417 # Assume SyntaxError is a class exception
1409 value = SyntaxError(msg, (filename, lineno, offset, line))
1418 value = SyntaxError(msg, (filename, lineno, offset, line))
1410 except:
1419 except:
1411 # If that failed, assume SyntaxError is a string
1420 # If that failed, assume SyntaxError is a string
1412 value = msg, (filename, lineno, offset, line)
1421 value = msg, (filename, lineno, offset, line)
1413 self.SyntaxTB(etype,value,[])
1422 self.SyntaxTB(etype,value,[])
1414
1423
1415 def debugger(self,force=False):
1424 def debugger(self,force=False):
1416 """Call the pydb/pdb debugger.
1425 """Call the pydb/pdb debugger.
1417
1426
1418 Keywords:
1427 Keywords:
1419
1428
1420 - force(False): by default, this routine checks the instance call_pdb
1429 - force(False): by default, this routine checks the instance call_pdb
1421 flag and does not actually invoke the debugger if the flag is false.
1430 flag and does not actually invoke the debugger if the flag is false.
1422 The 'force' option forces the debugger to activate even if the flag
1431 The 'force' option forces the debugger to activate even if the flag
1423 is false.
1432 is false.
1424 """
1433 """
1425
1434
1426 if not (force or self.call_pdb):
1435 if not (force or self.call_pdb):
1427 return
1436 return
1428
1437
1429 if not hasattr(sys,'last_traceback'):
1438 if not hasattr(sys,'last_traceback'):
1430 error('No traceback has been produced, nothing to debug.')
1439 error('No traceback has been produced, nothing to debug.')
1431 return
1440 return
1432
1441
1433 have_pydb = False
1442 have_pydb = False
1434 # use pydb if available
1443 # use pydb if available
1435 try:
1444 try:
1436 from pydb import pm
1445 from pydb import pm
1437 have_pydb = True
1446 have_pydb = True
1438 except ImportError:
1447 except ImportError:
1439 pass
1448 pass
1440 if not have_pydb:
1449 if not have_pydb:
1441 # fallback to our internal debugger
1450 # fallback to our internal debugger
1442 pm = lambda : self.InteractiveTB.debugger(force=True)
1451 pm = lambda : self.InteractiveTB.debugger(force=True)
1443 self.history_saving_wrapper(pm)()
1452 self.history_saving_wrapper(pm)()
1444
1453
1445 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1454 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1446 """Display the exception that just occurred.
1455 """Display the exception that just occurred.
1447
1456
1448 If nothing is known about the exception, this is the method which
1457 If nothing is known about the exception, this is the method which
1449 should be used throughout the code for presenting user tracebacks,
1458 should be used throughout the code for presenting user tracebacks,
1450 rather than directly invoking the InteractiveTB object.
1459 rather than directly invoking the InteractiveTB object.
1451
1460
1452 A specific showsyntaxerror() also exists, but this method can take
1461 A specific showsyntaxerror() also exists, but this method can take
1453 care of calling it if needed, so unless you are explicitly catching a
1462 care of calling it if needed, so unless you are explicitly catching a
1454 SyntaxError exception, don't try to analyze the stack manually and
1463 SyntaxError exception, don't try to analyze the stack manually and
1455 simply call this method."""
1464 simply call this method."""
1456
1465
1457 # Though this won't be called by syntax errors in the input line,
1466 # Though this won't be called by syntax errors in the input line,
1458 # there may be SyntaxError cases whith imported code.
1467 # there may be SyntaxError cases whith imported code.
1459 if exc_tuple is None:
1468 if exc_tuple is None:
1460 etype, value, tb = sys.exc_info()
1469 etype, value, tb = sys.exc_info()
1461 else:
1470 else:
1462 etype, value, tb = exc_tuple
1471 etype, value, tb = exc_tuple
1463
1472
1464 if etype is SyntaxError:
1473 if etype is SyntaxError:
1465 self.showsyntaxerror(filename)
1474 self.showsyntaxerror(filename)
1466 else:
1475 else:
1467 # WARNING: these variables are somewhat deprecated and not
1476 # WARNING: these variables are somewhat deprecated and not
1468 # necessarily safe to use in a threaded environment, but tools
1477 # necessarily safe to use in a threaded environment, but tools
1469 # like pdb depend on their existence, so let's set them. If we
1478 # like pdb depend on their existence, so let's set them. If we
1470 # find problems in the field, we'll need to revisit their use.
1479 # find problems in the field, we'll need to revisit their use.
1471 sys.last_type = etype
1480 sys.last_type = etype
1472 sys.last_value = value
1481 sys.last_value = value
1473 sys.last_traceback = tb
1482 sys.last_traceback = tb
1474
1483
1475 if etype in self.custom_exceptions:
1484 if etype in self.custom_exceptions:
1476 self.CustomTB(etype,value,tb)
1485 self.CustomTB(etype,value,tb)
1477 else:
1486 else:
1478 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1487 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1479 if self.InteractiveTB.call_pdb and self.has_readline:
1488 if self.InteractiveTB.call_pdb and self.has_readline:
1480 # pdb mucks up readline, fix it back
1489 # pdb mucks up readline, fix it back
1481 self.readline.set_completer(self.Completer.complete)
1490 self.readline.set_completer(self.Completer.complete)
1482
1491
1483 def mainloop(self,banner=None):
1492 def mainloop(self,banner=None):
1484 """Creates the local namespace and starts the mainloop.
1493 """Creates the local namespace and starts the mainloop.
1485
1494
1486 If an optional banner argument is given, it will override the
1495 If an optional banner argument is given, it will override the
1487 internally created default banner."""
1496 internally created default banner."""
1488
1497
1489 if self.rc.c: # Emulate Python's -c option
1498 if self.rc.c: # Emulate Python's -c option
1490 self.exec_init_cmd()
1499 self.exec_init_cmd()
1491 if banner is None:
1500 if banner is None:
1492 if not self.rc.banner:
1501 if not self.rc.banner:
1493 banner = ''
1502 banner = ''
1494 # banner is string? Use it directly!
1503 # banner is string? Use it directly!
1495 elif isinstance(self.rc.banner,basestring):
1504 elif isinstance(self.rc.banner,basestring):
1496 banner = self.rc.banner
1505 banner = self.rc.banner
1497 else:
1506 else:
1498 banner = self.BANNER+self.banner2
1507 banner = self.BANNER+self.banner2
1499
1508
1500 self.interact(banner)
1509 self.interact(banner)
1501
1510
1502 def exec_init_cmd(self):
1511 def exec_init_cmd(self):
1503 """Execute a command given at the command line.
1512 """Execute a command given at the command line.
1504
1513
1505 This emulates Python's -c option."""
1514 This emulates Python's -c option."""
1506
1515
1507 #sys.argv = ['-c']
1516 #sys.argv = ['-c']
1508 self.push(self.rc.c)
1517 self.push(self.rc.c)
1509
1518
1510 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1519 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1511 """Embeds IPython into a running python program.
1520 """Embeds IPython into a running python program.
1512
1521
1513 Input:
1522 Input:
1514
1523
1515 - header: An optional header message can be specified.
1524 - header: An optional header message can be specified.
1516
1525
1517 - local_ns, global_ns: working namespaces. If given as None, the
1526 - local_ns, global_ns: working namespaces. If given as None, the
1518 IPython-initialized one is updated with __main__.__dict__, so that
1527 IPython-initialized one is updated with __main__.__dict__, so that
1519 program variables become visible but user-specific configuration
1528 program variables become visible but user-specific configuration
1520 remains possible.
1529 remains possible.
1521
1530
1522 - stack_depth: specifies how many levels in the stack to go to
1531 - stack_depth: specifies how many levels in the stack to go to
1523 looking for namespaces (when local_ns and global_ns are None). This
1532 looking for namespaces (when local_ns and global_ns are None). This
1524 allows an intermediate caller to make sure that this function gets
1533 allows an intermediate caller to make sure that this function gets
1525 the namespace from the intended level in the stack. By default (0)
1534 the namespace from the intended level in the stack. By default (0)
1526 it will get its locals and globals from the immediate caller.
1535 it will get its locals and globals from the immediate caller.
1527
1536
1528 Warning: it's possible to use this in a program which is being run by
1537 Warning: it's possible to use this in a program which is being run by
1529 IPython itself (via %run), but some funny things will happen (a few
1538 IPython itself (via %run), but some funny things will happen (a few
1530 globals get overwritten). In the future this will be cleaned up, as
1539 globals get overwritten). In the future this will be cleaned up, as
1531 there is no fundamental reason why it can't work perfectly."""
1540 there is no fundamental reason why it can't work perfectly."""
1532
1541
1533 # Get locals and globals from caller
1542 # Get locals and globals from caller
1534 if local_ns is None or global_ns is None:
1543 if local_ns is None or global_ns is None:
1535 call_frame = sys._getframe(stack_depth).f_back
1544 call_frame = sys._getframe(stack_depth).f_back
1536
1545
1537 if local_ns is None:
1546 if local_ns is None:
1538 local_ns = call_frame.f_locals
1547 local_ns = call_frame.f_locals
1539 if global_ns is None:
1548 if global_ns is None:
1540 global_ns = call_frame.f_globals
1549 global_ns = call_frame.f_globals
1541
1550
1542 # Update namespaces and fire up interpreter
1551 # Update namespaces and fire up interpreter
1543
1552
1544 # The global one is easy, we can just throw it in
1553 # The global one is easy, we can just throw it in
1545 self.user_global_ns = global_ns
1554 self.user_global_ns = global_ns
1546
1555
1547 # but the user/local one is tricky: ipython needs it to store internal
1556 # but the user/local one is tricky: ipython needs it to store internal
1548 # data, but we also need the locals. We'll copy locals in the user
1557 # data, but we also need the locals. We'll copy locals in the user
1549 # one, but will track what got copied so we can delete them at exit.
1558 # one, but will track what got copied so we can delete them at exit.
1550 # This is so that a later embedded call doesn't see locals from a
1559 # This is so that a later embedded call doesn't see locals from a
1551 # previous call (which most likely existed in a separate scope).
1560 # previous call (which most likely existed in a separate scope).
1552 local_varnames = local_ns.keys()
1561 local_varnames = local_ns.keys()
1553 self.user_ns.update(local_ns)
1562 self.user_ns.update(local_ns)
1554
1563
1555 # Patch for global embedding to make sure that things don't overwrite
1564 # Patch for global embedding to make sure that things don't overwrite
1556 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1565 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1557 # FIXME. Test this a bit more carefully (the if.. is new)
1566 # FIXME. Test this a bit more carefully (the if.. is new)
1558 if local_ns is None and global_ns is None:
1567 if local_ns is None and global_ns is None:
1559 self.user_global_ns.update(__main__.__dict__)
1568 self.user_global_ns.update(__main__.__dict__)
1560
1569
1561 # make sure the tab-completer has the correct frame information, so it
1570 # make sure the tab-completer has the correct frame information, so it
1562 # actually completes using the frame's locals/globals
1571 # actually completes using the frame's locals/globals
1563 self.set_completer_frame()
1572 self.set_completer_frame()
1564
1573
1565 # before activating the interactive mode, we need to make sure that
1574 # before activating the interactive mode, we need to make sure that
1566 # all names in the builtin namespace needed by ipython point to
1575 # all names in the builtin namespace needed by ipython point to
1567 # ourselves, and not to other instances.
1576 # ourselves, and not to other instances.
1568 self.add_builtins()
1577 self.add_builtins()
1569
1578
1570 self.interact(header)
1579 self.interact(header)
1571
1580
1572 # now, purge out the user namespace from anything we might have added
1581 # now, purge out the user namespace from anything we might have added
1573 # from the caller's local namespace
1582 # from the caller's local namespace
1574 delvar = self.user_ns.pop
1583 delvar = self.user_ns.pop
1575 for var in local_varnames:
1584 for var in local_varnames:
1576 delvar(var,None)
1585 delvar(var,None)
1577 # and clean builtins we may have overridden
1586 # and clean builtins we may have overridden
1578 self.clean_builtins()
1587 self.clean_builtins()
1579
1588
1580 def interact(self, banner=None):
1589 def interact(self, banner=None):
1581 """Closely emulate the interactive Python console.
1590 """Closely emulate the interactive Python console.
1582
1591
1583 The optional banner argument specify the banner to print
1592 The optional banner argument specify the banner to print
1584 before the first interaction; by default it prints a banner
1593 before the first interaction; by default it prints a banner
1585 similar to the one printed by the real Python interpreter,
1594 similar to the one printed by the real Python interpreter,
1586 followed by the current class name in parentheses (so as not
1595 followed by the current class name in parentheses (so as not
1587 to confuse this with the real interpreter -- since it's so
1596 to confuse this with the real interpreter -- since it's so
1588 close!).
1597 close!).
1589
1598
1590 """
1599 """
1591
1600
1592 if self.exit_now:
1601 if self.exit_now:
1593 # batch run -> do not interact
1602 # batch run -> do not interact
1594 return
1603 return
1595 cprt = 'Type "copyright", "credits" or "license" for more information.'
1604 cprt = 'Type "copyright", "credits" or "license" for more information.'
1596 if banner is None:
1605 if banner is None:
1597 self.write("Python %s on %s\n%s\n(%s)\n" %
1606 self.write("Python %s on %s\n%s\n(%s)\n" %
1598 (sys.version, sys.platform, cprt,
1607 (sys.version, sys.platform, cprt,
1599 self.__class__.__name__))
1608 self.__class__.__name__))
1600 else:
1609 else:
1601 self.write(banner)
1610 self.write(banner)
1602
1611
1603 more = 0
1612 more = 0
1604
1613
1605 # Mark activity in the builtins
1614 # Mark activity in the builtins
1606 __builtin__.__dict__['__IPYTHON__active'] += 1
1615 __builtin__.__dict__['__IPYTHON__active'] += 1
1607
1616
1608 # exit_now is set by a call to %Exit or %Quit
1617 # exit_now is set by a call to %Exit or %Quit
1609 while not self.exit_now:
1618 while not self.exit_now:
1610 if more:
1619 if more:
1611 prompt = self.hooks.generate_prompt(True)
1620 prompt = self.hooks.generate_prompt(True)
1612 if self.autoindent:
1621 if self.autoindent:
1613 self.readline_startup_hook(self.pre_readline)
1622 self.readline_startup_hook(self.pre_readline)
1614 else:
1623 else:
1615 prompt = self.hooks.generate_prompt(False)
1624 prompt = self.hooks.generate_prompt(False)
1616 try:
1625 try:
1617 line = self.raw_input(prompt,more)
1626 line = self.raw_input(prompt,more)
1618 if self.exit_now:
1627 if self.exit_now:
1619 # quick exit on sys.std[in|out] close
1628 # quick exit on sys.std[in|out] close
1620 break
1629 break
1621 if self.autoindent:
1630 if self.autoindent:
1622 self.readline_startup_hook(None)
1631 self.readline_startup_hook(None)
1623 except KeyboardInterrupt:
1632 except KeyboardInterrupt:
1624 self.write('\nKeyboardInterrupt\n')
1633 self.write('\nKeyboardInterrupt\n')
1625 self.resetbuffer()
1634 self.resetbuffer()
1626 # keep cache in sync with the prompt counter:
1635 # keep cache in sync with the prompt counter:
1627 self.outputcache.prompt_count -= 1
1636 self.outputcache.prompt_count -= 1
1628
1637
1629 if self.autoindent:
1638 if self.autoindent:
1630 self.indent_current_nsp = 0
1639 self.indent_current_nsp = 0
1631 more = 0
1640 more = 0
1632 except EOFError:
1641 except EOFError:
1633 if self.autoindent:
1642 if self.autoindent:
1634 self.readline_startup_hook(None)
1643 self.readline_startup_hook(None)
1635 self.write('\n')
1644 self.write('\n')
1636 self.exit()
1645 self.exit()
1637 except bdb.BdbQuit:
1646 except bdb.BdbQuit:
1638 warn('The Python debugger has exited with a BdbQuit exception.\n'
1647 warn('The Python debugger has exited with a BdbQuit exception.\n'
1639 'Because of how pdb handles the stack, it is impossible\n'
1648 'Because of how pdb handles the stack, it is impossible\n'
1640 'for IPython to properly format this particular exception.\n'
1649 'for IPython to properly format this particular exception.\n'
1641 'IPython will resume normal operation.')
1650 'IPython will resume normal operation.')
1642 except:
1651 except:
1643 # exceptions here are VERY RARE, but they can be triggered
1652 # exceptions here are VERY RARE, but they can be triggered
1644 # asynchronously by signal handlers, for example.
1653 # asynchronously by signal handlers, for example.
1645 self.showtraceback()
1654 self.showtraceback()
1646 else:
1655 else:
1647 more = self.push(line)
1656 more = self.push(line)
1648 if (self.SyntaxTB.last_syntax_error and
1657 if (self.SyntaxTB.last_syntax_error and
1649 self.rc.autoedit_syntax):
1658 self.rc.autoedit_syntax):
1650 self.edit_syntax_error()
1659 self.edit_syntax_error()
1651
1660
1652 # We are off again...
1661 # We are off again...
1653 __builtin__.__dict__['__IPYTHON__active'] -= 1
1662 __builtin__.__dict__['__IPYTHON__active'] -= 1
1654
1663
1655 def excepthook(self, etype, value, tb):
1664 def excepthook(self, etype, value, tb):
1656 """One more defense for GUI apps that call sys.excepthook.
1665 """One more defense for GUI apps that call sys.excepthook.
1657
1666
1658 GUI frameworks like wxPython trap exceptions and call
1667 GUI frameworks like wxPython trap exceptions and call
1659 sys.excepthook themselves. I guess this is a feature that
1668 sys.excepthook themselves. I guess this is a feature that
1660 enables them to keep running after exceptions that would
1669 enables them to keep running after exceptions that would
1661 otherwise kill their mainloop. This is a bother for IPython
1670 otherwise kill their mainloop. This is a bother for IPython
1662 which excepts to catch all of the program exceptions with a try:
1671 which excepts to catch all of the program exceptions with a try:
1663 except: statement.
1672 except: statement.
1664
1673
1665 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1674 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1666 any app directly invokes sys.excepthook, it will look to the user like
1675 any app directly invokes sys.excepthook, it will look to the user like
1667 IPython crashed. In order to work around this, we can disable the
1676 IPython crashed. In order to work around this, we can disable the
1668 CrashHandler and replace it with this excepthook instead, which prints a
1677 CrashHandler and replace it with this excepthook instead, which prints a
1669 regular traceback using our InteractiveTB. In this fashion, apps which
1678 regular traceback using our InteractiveTB. In this fashion, apps which
1670 call sys.excepthook will generate a regular-looking exception from
1679 call sys.excepthook will generate a regular-looking exception from
1671 IPython, and the CrashHandler will only be triggered by real IPython
1680 IPython, and the CrashHandler will only be triggered by real IPython
1672 crashes.
1681 crashes.
1673
1682
1674 This hook should be used sparingly, only in places which are not likely
1683 This hook should be used sparingly, only in places which are not likely
1675 to be true IPython errors.
1684 to be true IPython errors.
1676 """
1685 """
1677 self.showtraceback((etype,value,tb),tb_offset=0)
1686 self.showtraceback((etype,value,tb),tb_offset=0)
1678
1687
1679 def expand_aliases(self,fn,rest):
1688 def expand_aliases(self,fn,rest):
1680 """ Expand multiple levels of aliases:
1689 """ Expand multiple levels of aliases:
1681
1690
1682 if:
1691 if:
1683
1692
1684 alias foo bar /tmp
1693 alias foo bar /tmp
1685 alias baz foo
1694 alias baz foo
1686
1695
1687 then:
1696 then:
1688
1697
1689 baz huhhahhei -> bar /tmp huhhahhei
1698 baz huhhahhei -> bar /tmp huhhahhei
1690
1699
1691 """
1700 """
1692 line = fn + " " + rest
1701 line = fn + " " + rest
1693
1702
1694 done = Set()
1703 done = Set()
1695 while 1:
1704 while 1:
1696 pre,fn,rest = self.split_user_input(line)
1705 pre,fn,rest = self.split_user_input(line)
1697 if fn in self.alias_table:
1706 if fn in self.alias_table:
1698 if fn in done:
1707 if fn in done:
1699 warn("Cyclic alias definition, repeated '%s'" % fn)
1708 warn("Cyclic alias definition, repeated '%s'" % fn)
1700 return ""
1709 return ""
1701 done.add(fn)
1710 done.add(fn)
1702
1711
1703 l2 = self.transform_alias(fn,rest)
1712 l2 = self.transform_alias(fn,rest)
1704 # dir -> dir
1713 # dir -> dir
1705 # print "alias",line, "->",l2 #dbg
1714 # print "alias",line, "->",l2 #dbg
1706 if l2 == line:
1715 if l2 == line:
1707 break
1716 break
1708 # ls -> ls -F should not recurse forever
1717 # ls -> ls -F should not recurse forever
1709 if l2.split(None,1)[0] == line.split(None,1)[0]:
1718 if l2.split(None,1)[0] == line.split(None,1)[0]:
1710 line = l2
1719 line = l2
1711 break
1720 break
1712
1721
1713 line=l2
1722 line=l2
1714
1723
1715
1724
1716 # print "al expand to",line #dbg
1725 # print "al expand to",line #dbg
1717 else:
1726 else:
1718 break
1727 break
1719
1728
1720 return line
1729 return line
1721
1730
1722 def transform_alias(self, alias,rest=''):
1731 def transform_alias(self, alias,rest=''):
1723 """ Transform alias to system command string.
1732 """ Transform alias to system command string.
1724 """
1733 """
1725 nargs,cmd = self.alias_table[alias]
1734 nargs,cmd = self.alias_table[alias]
1726 if ' ' in cmd and os.path.isfile(cmd):
1735 if ' ' in cmd and os.path.isfile(cmd):
1727 cmd = '"%s"' % cmd
1736 cmd = '"%s"' % cmd
1728
1737
1729 # Expand the %l special to be the user's input line
1738 # Expand the %l special to be the user's input line
1730 if cmd.find('%l') >= 0:
1739 if cmd.find('%l') >= 0:
1731 cmd = cmd.replace('%l',rest)
1740 cmd = cmd.replace('%l',rest)
1732 rest = ''
1741 rest = ''
1733 if nargs==0:
1742 if nargs==0:
1734 # Simple, argument-less aliases
1743 # Simple, argument-less aliases
1735 cmd = '%s %s' % (cmd,rest)
1744 cmd = '%s %s' % (cmd,rest)
1736 else:
1745 else:
1737 # Handle aliases with positional arguments
1746 # Handle aliases with positional arguments
1738 args = rest.split(None,nargs)
1747 args = rest.split(None,nargs)
1739 if len(args)< nargs:
1748 if len(args)< nargs:
1740 error('Alias <%s> requires %s arguments, %s given.' %
1749 error('Alias <%s> requires %s arguments, %s given.' %
1741 (alias,nargs,len(args)))
1750 (alias,nargs,len(args)))
1742 return None
1751 return None
1743 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1752 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1744 # Now call the macro, evaluating in the user's namespace
1753 # Now call the macro, evaluating in the user's namespace
1745 #print 'new command: <%r>' % cmd # dbg
1754 #print 'new command: <%r>' % cmd # dbg
1746 return cmd
1755 return cmd
1747
1756
1748 def call_alias(self,alias,rest=''):
1757 def call_alias(self,alias,rest=''):
1749 """Call an alias given its name and the rest of the line.
1758 """Call an alias given its name and the rest of the line.
1750
1759
1751 This is only used to provide backwards compatibility for users of
1760 This is only used to provide backwards compatibility for users of
1752 ipalias(), use of which is not recommended for anymore."""
1761 ipalias(), use of which is not recommended for anymore."""
1753
1762
1754 # Now call the macro, evaluating in the user's namespace
1763 # Now call the macro, evaluating in the user's namespace
1755 cmd = self.transform_alias(alias, rest)
1764 cmd = self.transform_alias(alias, rest)
1756 try:
1765 try:
1757 self.system(cmd)
1766 self.system(cmd)
1758 except:
1767 except:
1759 self.showtraceback()
1768 self.showtraceback()
1760
1769
1761 def indent_current_str(self):
1770 def indent_current_str(self):
1762 """return the current level of indentation as a string"""
1771 """return the current level of indentation as a string"""
1763 return self.indent_current_nsp * ' '
1772 return self.indent_current_nsp * ' '
1764
1773
1765 def autoindent_update(self,line):
1774 def autoindent_update(self,line):
1766 """Keep track of the indent level."""
1775 """Keep track of the indent level."""
1767
1776
1768 #debugx('line')
1777 #debugx('line')
1769 #debugx('self.indent_current_nsp')
1778 #debugx('self.indent_current_nsp')
1770 if self.autoindent:
1779 if self.autoindent:
1771 if line:
1780 if line:
1772 inisp = num_ini_spaces(line)
1781 inisp = num_ini_spaces(line)
1773 if inisp < self.indent_current_nsp:
1782 if inisp < self.indent_current_nsp:
1774 self.indent_current_nsp = inisp
1783 self.indent_current_nsp = inisp
1775
1784
1776 if line[-1] == ':':
1785 if line[-1] == ':':
1777 self.indent_current_nsp += 4
1786 self.indent_current_nsp += 4
1778 elif dedent_re.match(line):
1787 elif dedent_re.match(line):
1779 self.indent_current_nsp -= 4
1788 self.indent_current_nsp -= 4
1780 else:
1789 else:
1781 self.indent_current_nsp = 0
1790 self.indent_current_nsp = 0
1782
1791
1783 def runlines(self,lines):
1792 def runlines(self,lines):
1784 """Run a string of one or more lines of source.
1793 """Run a string of one or more lines of source.
1785
1794
1786 This method is capable of running a string containing multiple source
1795 This method is capable of running a string containing multiple source
1787 lines, as if they had been entered at the IPython prompt. Since it
1796 lines, as if they had been entered at the IPython prompt. Since it
1788 exposes IPython's processing machinery, the given strings can contain
1797 exposes IPython's processing machinery, the given strings can contain
1789 magic calls (%magic), special shell access (!cmd), etc."""
1798 magic calls (%magic), special shell access (!cmd), etc."""
1790
1799
1791 # We must start with a clean buffer, in case this is run from an
1800 # We must start with a clean buffer, in case this is run from an
1792 # interactive IPython session (via a magic, for example).
1801 # interactive IPython session (via a magic, for example).
1793 self.resetbuffer()
1802 self.resetbuffer()
1794 lines = lines.split('\n')
1803 lines = lines.split('\n')
1795 more = 0
1804 more = 0
1796 for line in lines:
1805 for line in lines:
1797 # skip blank lines so we don't mess up the prompt counter, but do
1806 # skip blank lines so we don't mess up the prompt counter, but do
1798 # NOT skip even a blank line if we are in a code block (more is
1807 # NOT skip even a blank line if we are in a code block (more is
1799 # true)
1808 # true)
1800 if line or more:
1809 if line or more:
1801 more = self.push(self.prefilter(line,more))
1810 more = self.push(self.prefilter(line,more))
1802 # IPython's runsource returns None if there was an error
1811 # IPython's runsource returns None if there was an error
1803 # compiling the code. This allows us to stop processing right
1812 # compiling the code. This allows us to stop processing right
1804 # away, so the user gets the error message at the right place.
1813 # away, so the user gets the error message at the right place.
1805 if more is None:
1814 if more is None:
1806 break
1815 break
1807 # final newline in case the input didn't have it, so that the code
1816 # final newline in case the input didn't have it, so that the code
1808 # actually does get executed
1817 # actually does get executed
1809 if more:
1818 if more:
1810 self.push('\n')
1819 self.push('\n')
1811
1820
1812 def runsource(self, source, filename='<input>', symbol='single'):
1821 def runsource(self, source, filename='<input>', symbol='single'):
1813 """Compile and run some source in the interpreter.
1822 """Compile and run some source in the interpreter.
1814
1823
1815 Arguments are as for compile_command().
1824 Arguments are as for compile_command().
1816
1825
1817 One several things can happen:
1826 One several things can happen:
1818
1827
1819 1) The input is incorrect; compile_command() raised an
1828 1) The input is incorrect; compile_command() raised an
1820 exception (SyntaxError or OverflowError). A syntax traceback
1829 exception (SyntaxError or OverflowError). A syntax traceback
1821 will be printed by calling the showsyntaxerror() method.
1830 will be printed by calling the showsyntaxerror() method.
1822
1831
1823 2) The input is incomplete, and more input is required;
1832 2) The input is incomplete, and more input is required;
1824 compile_command() returned None. Nothing happens.
1833 compile_command() returned None. Nothing happens.
1825
1834
1826 3) The input is complete; compile_command() returned a code
1835 3) The input is complete; compile_command() returned a code
1827 object. The code is executed by calling self.runcode() (which
1836 object. The code is executed by calling self.runcode() (which
1828 also handles run-time exceptions, except for SystemExit).
1837 also handles run-time exceptions, except for SystemExit).
1829
1838
1830 The return value is:
1839 The return value is:
1831
1840
1832 - True in case 2
1841 - True in case 2
1833
1842
1834 - False in the other cases, unless an exception is raised, where
1843 - False in the other cases, unless an exception is raised, where
1835 None is returned instead. This can be used by external callers to
1844 None is returned instead. This can be used by external callers to
1836 know whether to continue feeding input or not.
1845 know whether to continue feeding input or not.
1837
1846
1838 The return value can be used to decide whether to use sys.ps1 or
1847 The return value can be used to decide whether to use sys.ps1 or
1839 sys.ps2 to prompt the next line."""
1848 sys.ps2 to prompt the next line."""
1840
1849
1841 # if the source code has leading blanks, add 'if 1:\n' to it
1850 # if the source code has leading blanks, add 'if 1:\n' to it
1842 # this allows execution of indented pasted code. It is tempting
1851 # this allows execution of indented pasted code. It is tempting
1843 # to add '\n' at the end of source to run commands like ' a=1'
1852 # to add '\n' at the end of source to run commands like ' a=1'
1844 # directly, but this fails for more complicated scenarios
1853 # directly, but this fails for more complicated scenarios
1845 if source[:1] in [' ', '\t']:
1854 if source[:1] in [' ', '\t']:
1846 source = 'if 1:\n%s' % source
1855 source = 'if 1:\n%s' % source
1847
1856
1848 try:
1857 try:
1849 code = self.compile(source,filename,symbol)
1858 code = self.compile(source,filename,symbol)
1850 except (OverflowError, SyntaxError, ValueError):
1859 except (OverflowError, SyntaxError, ValueError):
1851 # Case 1
1860 # Case 1
1852 self.showsyntaxerror(filename)
1861 self.showsyntaxerror(filename)
1853 return None
1862 return None
1854
1863
1855 if code is None:
1864 if code is None:
1856 # Case 2
1865 # Case 2
1857 return True
1866 return True
1858
1867
1859 # Case 3
1868 # Case 3
1860 # We store the code object so that threaded shells and
1869 # We store the code object so that threaded shells and
1861 # custom exception handlers can access all this info if needed.
1870 # custom exception handlers can access all this info if needed.
1862 # The source corresponding to this can be obtained from the
1871 # The source corresponding to this can be obtained from the
1863 # buffer attribute as '\n'.join(self.buffer).
1872 # buffer attribute as '\n'.join(self.buffer).
1864 self.code_to_run = code
1873 self.code_to_run = code
1865 # now actually execute the code object
1874 # now actually execute the code object
1866 if self.runcode(code) == 0:
1875 if self.runcode(code) == 0:
1867 return False
1876 return False
1868 else:
1877 else:
1869 return None
1878 return None
1870
1879
1871 def runcode(self,code_obj):
1880 def runcode(self,code_obj):
1872 """Execute a code object.
1881 """Execute a code object.
1873
1882
1874 When an exception occurs, self.showtraceback() is called to display a
1883 When an exception occurs, self.showtraceback() is called to display a
1875 traceback.
1884 traceback.
1876
1885
1877 Return value: a flag indicating whether the code to be run completed
1886 Return value: a flag indicating whether the code to be run completed
1878 successfully:
1887 successfully:
1879
1888
1880 - 0: successful execution.
1889 - 0: successful execution.
1881 - 1: an error occurred.
1890 - 1: an error occurred.
1882 """
1891 """
1883
1892
1884 # Set our own excepthook in case the user code tries to call it
1893 # Set our own excepthook in case the user code tries to call it
1885 # directly, so that the IPython crash handler doesn't get triggered
1894 # directly, so that the IPython crash handler doesn't get triggered
1886 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1895 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1887
1896
1888 # we save the original sys.excepthook in the instance, in case config
1897 # we save the original sys.excepthook in the instance, in case config
1889 # code (such as magics) needs access to it.
1898 # code (such as magics) needs access to it.
1890 self.sys_excepthook = old_excepthook
1899 self.sys_excepthook = old_excepthook
1891 outflag = 1 # happens in more places, so it's easier as default
1900 outflag = 1 # happens in more places, so it's easier as default
1892 try:
1901 try:
1893 try:
1902 try:
1894 # Embedded instances require separate global/local namespaces
1903 # Embedded instances require separate global/local namespaces
1895 # so they can see both the surrounding (local) namespace and
1904 # so they can see both the surrounding (local) namespace and
1896 # the module-level globals when called inside another function.
1905 # the module-level globals when called inside another function.
1897 if self.embedded:
1906 if self.embedded:
1898 exec code_obj in self.user_global_ns, self.user_ns
1907 exec code_obj in self.user_global_ns, self.user_ns
1899 # Normal (non-embedded) instances should only have a single
1908 # Normal (non-embedded) instances should only have a single
1900 # namespace for user code execution, otherwise functions won't
1909 # namespace for user code execution, otherwise functions won't
1901 # see interactive top-level globals.
1910 # see interactive top-level globals.
1902 else:
1911 else:
1903 exec code_obj in self.user_ns
1912 exec code_obj in self.user_ns
1904 finally:
1913 finally:
1905 # Reset our crash handler in place
1914 # Reset our crash handler in place
1906 sys.excepthook = old_excepthook
1915 sys.excepthook = old_excepthook
1907 except SystemExit:
1916 except SystemExit:
1908 self.resetbuffer()
1917 self.resetbuffer()
1909 self.showtraceback()
1918 self.showtraceback()
1910 warn("Type %exit or %quit to exit IPython "
1919 warn("Type %exit or %quit to exit IPython "
1911 "(%Exit or %Quit do so unconditionally).",level=1)
1920 "(%Exit or %Quit do so unconditionally).",level=1)
1912 except self.custom_exceptions:
1921 except self.custom_exceptions:
1913 etype,value,tb = sys.exc_info()
1922 etype,value,tb = sys.exc_info()
1914 self.CustomTB(etype,value,tb)
1923 self.CustomTB(etype,value,tb)
1915 except:
1924 except:
1916 self.showtraceback()
1925 self.showtraceback()
1917 else:
1926 else:
1918 outflag = 0
1927 outflag = 0
1919 if softspace(sys.stdout, 0):
1928 if softspace(sys.stdout, 0):
1920 print
1929 print
1921 # Flush out code object which has been run (and source)
1930 # Flush out code object which has been run (and source)
1922 self.code_to_run = None
1931 self.code_to_run = None
1923 return outflag
1932 return outflag
1924
1933
1925 def push(self, line):
1934 def push(self, line):
1926 """Push a line to the interpreter.
1935 """Push a line to the interpreter.
1927
1936
1928 The line should not have a trailing newline; it may have
1937 The line should not have a trailing newline; it may have
1929 internal newlines. The line is appended to a buffer and the
1938 internal newlines. The line is appended to a buffer and the
1930 interpreter's runsource() method is called with the
1939 interpreter's runsource() method is called with the
1931 concatenated contents of the buffer as source. If this
1940 concatenated contents of the buffer as source. If this
1932 indicates that the command was executed or invalid, the buffer
1941 indicates that the command was executed or invalid, the buffer
1933 is reset; otherwise, the command is incomplete, and the buffer
1942 is reset; otherwise, the command is incomplete, and the buffer
1934 is left as it was after the line was appended. The return
1943 is left as it was after the line was appended. The return
1935 value is 1 if more input is required, 0 if the line was dealt
1944 value is 1 if more input is required, 0 if the line was dealt
1936 with in some way (this is the same as runsource()).
1945 with in some way (this is the same as runsource()).
1937 """
1946 """
1938
1947
1939 # autoindent management should be done here, and not in the
1948 # autoindent management should be done here, and not in the
1940 # interactive loop, since that one is only seen by keyboard input. We
1949 # interactive loop, since that one is only seen by keyboard input. We
1941 # need this done correctly even for code run via runlines (which uses
1950 # need this done correctly even for code run via runlines (which uses
1942 # push).
1951 # push).
1943
1952
1944 #print 'push line: <%s>' % line # dbg
1953 #print 'push line: <%s>' % line # dbg
1945 for subline in line.splitlines():
1954 for subline in line.splitlines():
1946 self.autoindent_update(subline)
1955 self.autoindent_update(subline)
1947 self.buffer.append(line)
1956 self.buffer.append(line)
1948 more = self.runsource('\n'.join(self.buffer), self.filename)
1957 more = self.runsource('\n'.join(self.buffer), self.filename)
1949 if not more:
1958 if not more:
1950 self.resetbuffer()
1959 self.resetbuffer()
1951 return more
1960 return more
1952
1961
1953 def resetbuffer(self):
1962 def resetbuffer(self):
1954 """Reset the input buffer."""
1963 """Reset the input buffer."""
1955 self.buffer[:] = []
1964 self.buffer[:] = []
1956
1965
1957 def raw_input(self,prompt='',continue_prompt=False):
1966 def raw_input(self,prompt='',continue_prompt=False):
1958 """Write a prompt and read a line.
1967 """Write a prompt and read a line.
1959
1968
1960 The returned line does not include the trailing newline.
1969 The returned line does not include the trailing newline.
1961 When the user enters the EOF key sequence, EOFError is raised.
1970 When the user enters the EOF key sequence, EOFError is raised.
1962
1971
1963 Optional inputs:
1972 Optional inputs:
1964
1973
1965 - prompt(''): a string to be printed to prompt the user.
1974 - prompt(''): a string to be printed to prompt the user.
1966
1975
1967 - continue_prompt(False): whether this line is the first one or a
1976 - continue_prompt(False): whether this line is the first one or a
1968 continuation in a sequence of inputs.
1977 continuation in a sequence of inputs.
1969 """
1978 """
1970
1979
1971 try:
1980 try:
1972 line = raw_input_original(prompt)
1981 line = raw_input_original(prompt)
1973 except ValueError:
1982 except ValueError:
1974 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1983 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1975 self.exit_now = True
1984 self.exit_now = True
1976 return ""
1985 return ""
1977
1986
1978
1987
1979 # Try to be reasonably smart about not re-indenting pasted input more
1988 # Try to be reasonably smart about not re-indenting pasted input more
1980 # than necessary. We do this by trimming out the auto-indent initial
1989 # than necessary. We do this by trimming out the auto-indent initial
1981 # spaces, if the user's actual input started itself with whitespace.
1990 # spaces, if the user's actual input started itself with whitespace.
1982 #debugx('self.buffer[-1]')
1991 #debugx('self.buffer[-1]')
1983
1992
1984 if self.autoindent:
1993 if self.autoindent:
1985 if num_ini_spaces(line) > self.indent_current_nsp:
1994 if num_ini_spaces(line) > self.indent_current_nsp:
1986 line = line[self.indent_current_nsp:]
1995 line = line[self.indent_current_nsp:]
1987 self.indent_current_nsp = 0
1996 self.indent_current_nsp = 0
1988
1997
1989 # store the unfiltered input before the user has any chance to modify
1998 # store the unfiltered input before the user has any chance to modify
1990 # it.
1999 # it.
1991 if line.strip():
2000 if line.strip():
1992 if continue_prompt:
2001 if continue_prompt:
1993 self.input_hist_raw[-1] += '%s\n' % line
2002 self.input_hist_raw[-1] += '%s\n' % line
1994 if self.has_readline: # and some config option is set?
2003 if self.has_readline: # and some config option is set?
1995 try:
2004 try:
1996 histlen = self.readline.get_current_history_length()
2005 histlen = self.readline.get_current_history_length()
1997 newhist = self.input_hist_raw[-1].rstrip()
2006 newhist = self.input_hist_raw[-1].rstrip()
1998 self.readline.remove_history_item(histlen-1)
2007 self.readline.remove_history_item(histlen-1)
1999 self.readline.replace_history_item(histlen-2,newhist)
2008 self.readline.replace_history_item(histlen-2,newhist)
2000 except AttributeError:
2009 except AttributeError:
2001 pass # re{move,place}_history_item are new in 2.4.
2010 pass # re{move,place}_history_item are new in 2.4.
2002 else:
2011 else:
2003 self.input_hist_raw.append('%s\n' % line)
2012 self.input_hist_raw.append('%s\n' % line)
2004
2013
2005 try:
2014 try:
2006 lineout = self.prefilter(line,continue_prompt)
2015 lineout = self.prefilter(line,continue_prompt)
2007 except:
2016 except:
2008 # blanket except, in case a user-defined prefilter crashes, so it
2017 # blanket except, in case a user-defined prefilter crashes, so it
2009 # can't take all of ipython with it.
2018 # can't take all of ipython with it.
2010 self.showtraceback()
2019 self.showtraceback()
2011 return ''
2020 return ''
2012 else:
2021 else:
2013 return lineout
2022 return lineout
2014
2023
2015 def split_user_input(self,line):
2024 def split_user_input(self,line):
2016 """Split user input into pre-char, function part and rest."""
2025 """Split user input into pre-char, function part and rest."""
2017
2026
2018 lsplit = self.line_split.match(line)
2027 lsplit = self.line_split.match(line)
2019 if lsplit is None: # no regexp match returns None
2028 if lsplit is None: # no regexp match returns None
2020 try:
2029 lsplit = self.line_split_fallback.match(line)
2021 iFun,theRest = line.split(None,1)
2022 except ValueError:
2023 iFun,theRest = line,''
2024 pre = re.match('^(\s*)(.*)',line).groups()[0]
2025 else:
2026 pre,iFun,theRest = lsplit.groups()
2027
2030
2031 #pre,iFun,theRest = lsplit.groups() # dbg
2028 #print 'line:<%s>' % line # dbg
2032 #print 'line:<%s>' % line # dbg
2029 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2033 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2030 return pre,iFun.strip(),theRest
2034 #return pre,iFun.strip(),theRest # dbg
2035
2036 return lsplit.groups()
2031
2037
2032 def _prefilter(self, line, continue_prompt):
2038 def _prefilter(self, line, continue_prompt):
2033 """Calls different preprocessors, depending on the form of line."""
2039 """Calls different preprocessors, depending on the form of line."""
2034
2040
2035 # All handlers *must* return a value, even if it's blank ('').
2041 # All handlers *must* return a value, even if it's blank ('').
2036
2042
2037 # Lines are NOT logged here. Handlers should process the line as
2043 # Lines are NOT logged here. Handlers should process the line as
2038 # needed, update the cache AND log it (so that the input cache array
2044 # needed, update the cache AND log it (so that the input cache array
2039 # stays synced).
2045 # stays synced).
2040
2046
2041 # This function is _very_ delicate, and since it's also the one which
2047 # This function is _very_ delicate, and since it's also the one which
2042 # determines IPython's response to user input, it must be as efficient
2048 # determines IPython's response to user input, it must be as efficient
2043 # as possible. For this reason it has _many_ returns in it, trying
2049 # as possible. For this reason it has _many_ returns in it, trying
2044 # always to exit as quickly as it can figure out what it needs to do.
2050 # always to exit as quickly as it can figure out what it needs to do.
2045
2051
2046 # This function is the main responsible for maintaining IPython's
2052 # This function is the main responsible for maintaining IPython's
2047 # behavior respectful of Python's semantics. So be _very_ careful if
2053 # behavior respectful of Python's semantics. So be _very_ careful if
2048 # making changes to anything here.
2054 # making changes to anything here.
2049
2055
2050 #.....................................................................
2056 #.....................................................................
2051 # Code begins
2057 # Code begins
2052
2058
2053 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2059 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2054
2060
2055 # save the line away in case we crash, so the post-mortem handler can
2061 # save the line away in case we crash, so the post-mortem handler can
2056 # record it
2062 # record it
2057 self._last_input_line = line
2063 self._last_input_line = line
2058
2064
2059 #print '***line: <%s>' % line # dbg
2065 #print '***line: <%s>' % line # dbg
2060
2066
2061 # the input history needs to track even empty lines
2067 # the input history needs to track even empty lines
2062 stripped = line.strip()
2068 stripped = line.strip()
2063
2069
2064 if not stripped:
2070 if not stripped:
2065 if not continue_prompt:
2071 if not continue_prompt:
2066 self.outputcache.prompt_count -= 1
2072 self.outputcache.prompt_count -= 1
2067 return self.handle_normal(line,continue_prompt)
2073 return self.handle_normal(line,continue_prompt)
2068 #return self.handle_normal('',continue_prompt)
2074 #return self.handle_normal('',continue_prompt)
2069
2075
2070 # print '***cont',continue_prompt # dbg
2076 # print '***cont',continue_prompt # dbg
2071 # special handlers are only allowed for single line statements
2077 # special handlers are only allowed for single line statements
2072 if continue_prompt and not self.rc.multi_line_specials:
2078 if continue_prompt and not self.rc.multi_line_specials:
2073 return self.handle_normal(line,continue_prompt)
2079 return self.handle_normal(line,continue_prompt)
2074
2080
2075
2081
2076 # For the rest, we need the structure of the input
2082 # For the rest, we need the structure of the input
2077 pre,iFun,theRest = self.split_user_input(line)
2083 pre,iFun,theRest = self.split_user_input(line)
2078
2084
2079 # See whether any pre-existing handler can take care of it
2085 # See whether any pre-existing handler can take care of it
2080
2086
2081 rewritten = self.hooks.input_prefilter(stripped)
2087 rewritten = self.hooks.input_prefilter(stripped)
2082 if rewritten != stripped: # ok, some prefilter did something
2088 if rewritten != stripped: # ok, some prefilter did something
2083 rewritten = pre + rewritten # add indentation
2089 rewritten = pre + rewritten # add indentation
2084 return self.handle_normal(rewritten)
2090 return self.handle_normal(rewritten)
2085
2091
2086 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2092 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2087
2093
2088 # First check for explicit escapes in the last/first character
2094 # First check for explicit escapes in the last/first character
2089 handler = None
2095 handler = None
2090 if line[-1] == self.ESC_HELP:
2096 if line[-1] == self.ESC_HELP:
2091 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2097 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2092 if handler is None:
2098 if handler is None:
2093 # look at the first character of iFun, NOT of line, so we skip
2099 # look at the first character of iFun, NOT of line, so we skip
2094 # leading whitespace in multiline input
2100 # leading whitespace in multiline input
2095 handler = self.esc_handlers.get(iFun[0:1])
2101 handler = self.esc_handlers.get(iFun[0:1])
2096 if handler is not None:
2102 if handler is not None:
2097 return handler(line,continue_prompt,pre,iFun,theRest)
2103 return handler(line,continue_prompt,pre,iFun,theRest)
2098 # Emacs ipython-mode tags certain input lines
2104 # Emacs ipython-mode tags certain input lines
2099 if line.endswith('# PYTHON-MODE'):
2105 if line.endswith('# PYTHON-MODE'):
2100 return self.handle_emacs(line,continue_prompt)
2106 return self.handle_emacs(line,continue_prompt)
2101
2107
2102 # Next, check if we can automatically execute this thing
2108 # Next, check if we can automatically execute this thing
2103
2109
2104 # Allow ! in multi-line statements if multi_line_specials is on:
2110 # Allow ! in multi-line statements if multi_line_specials is on:
2105 if continue_prompt and self.rc.multi_line_specials and \
2111 if continue_prompt and self.rc.multi_line_specials and \
2106 iFun.startswith(self.ESC_SHELL):
2112 iFun.startswith(self.ESC_SHELL):
2107 return self.handle_shell_escape(line,continue_prompt,
2113 return self.handle_shell_escape(line,continue_prompt,
2108 pre=pre,iFun=iFun,
2114 pre=pre,iFun=iFun,
2109 theRest=theRest)
2115 theRest=theRest)
2110
2116
2111 # Let's try to find if the input line is a magic fn
2117 # Let's try to find if the input line is a magic fn
2112 oinfo = None
2118 oinfo = None
2113 if hasattr(self,'magic_'+iFun):
2119 if hasattr(self,'magic_'+iFun):
2114 # WARNING: _ofind uses getattr(), so it can consume generators and
2120 # WARNING: _ofind uses getattr(), so it can consume generators and
2115 # cause other side effects.
2121 # cause other side effects.
2116 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2122 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2117 if oinfo['ismagic']:
2123 if oinfo['ismagic']:
2118 # Be careful not to call magics when a variable assignment is
2124 # Be careful not to call magics when a variable assignment is
2119 # being made (ls='hi', for example)
2125 # being made (ls='hi', for example)
2120 if self.rc.automagic and \
2126 if self.rc.automagic and \
2121 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2127 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2122 (self.rc.multi_line_specials or not continue_prompt):
2128 (self.rc.multi_line_specials or not continue_prompt):
2123 return self.handle_magic(line,continue_prompt,
2129 return self.handle_magic(line,continue_prompt,
2124 pre,iFun,theRest)
2130 pre,iFun,theRest)
2125 else:
2131 else:
2126 return self.handle_normal(line,continue_prompt)
2132 return self.handle_normal(line,continue_prompt)
2127
2133
2128 # If the rest of the line begins with an (in)equality, assginment or
2134 # If the rest of the line begins with an (in)equality, assginment or
2129 # function call, we should not call _ofind but simply execute it.
2135 # function call, we should not call _ofind but simply execute it.
2130 # This avoids spurious geattr() accesses on objects upon assignment.
2136 # This avoids spurious geattr() accesses on objects upon assignment.
2131 #
2137 #
2132 # It also allows users to assign to either alias or magic names true
2138 # It also allows users to assign to either alias or magic names true
2133 # python variables (the magic/alias systems always take second seat to
2139 # python variables (the magic/alias systems always take second seat to
2134 # true python code).
2140 # true python code).
2135 if theRest and theRest[0] in '!=()':
2141 if theRest and theRest[0] in '!=()':
2136 return self.handle_normal(line,continue_prompt)
2142 return self.handle_normal(line,continue_prompt)
2137
2143
2138 if oinfo is None:
2144 if oinfo is None:
2139 # let's try to ensure that _oinfo is ONLY called when autocall is
2145 # let's try to ensure that _oinfo is ONLY called when autocall is
2140 # on. Since it has inevitable potential side effects, at least
2146 # on. Since it has inevitable potential side effects, at least
2141 # having autocall off should be a guarantee to the user that no
2147 # having autocall off should be a guarantee to the user that no
2142 # weird things will happen.
2148 # weird things will happen.
2143
2149
2144 if self.rc.autocall:
2150 if self.rc.autocall:
2145 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2151 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2146 else:
2152 else:
2147 # in this case, all that's left is either an alias or
2153 # in this case, all that's left is either an alias or
2148 # processing the line normally.
2154 # processing the line normally.
2149 if iFun in self.alias_table:
2155 if iFun in self.alias_table:
2150 # if autocall is off, by not running _ofind we won't know
2156 # if autocall is off, by not running _ofind we won't know
2151 # whether the given name may also exist in one of the
2157 # whether the given name may also exist in one of the
2152 # user's namespace. At this point, it's best to do a
2158 # user's namespace. At this point, it's best to do a
2153 # quick check just to be sure that we don't let aliases
2159 # quick check just to be sure that we don't let aliases
2154 # shadow variables.
2160 # shadow variables.
2155 head = iFun.split('.',1)[0]
2161 head = iFun.split('.',1)[0]
2156 if head in self.user_ns or head in self.internal_ns \
2162 if head in self.user_ns or head in self.internal_ns \
2157 or head in __builtin__.__dict__:
2163 or head in __builtin__.__dict__:
2158 return self.handle_normal(line,continue_prompt)
2164 return self.handle_normal(line,continue_prompt)
2159 else:
2165 else:
2160 return self.handle_alias(line,continue_prompt,
2166 return self.handle_alias(line,continue_prompt,
2161 pre,iFun,theRest)
2167 pre,iFun,theRest)
2162
2168
2163 else:
2169 else:
2164 return self.handle_normal(line,continue_prompt)
2170 return self.handle_normal(line,continue_prompt)
2165
2171
2166 if not oinfo['found']:
2172 if not oinfo['found']:
2167 return self.handle_normal(line,continue_prompt)
2173 return self.handle_normal(line,continue_prompt)
2168 else:
2174 else:
2169 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2175 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2170 if oinfo['isalias']:
2176 if oinfo['isalias']:
2171 return self.handle_alias(line,continue_prompt,
2177 return self.handle_alias(line,continue_prompt,
2172 pre,iFun,theRest)
2178 pre,iFun,theRest)
2173
2179
2174 if (self.rc.autocall
2180 if (self.rc.autocall
2175 and
2181 and
2176 (
2182 (
2177 #only consider exclusion re if not "," or ";" autoquoting
2183 #only consider exclusion re if not "," or ";" autoquoting
2178 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2184 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2179 or pre == self.ESC_PAREN) or
2185 or pre == self.ESC_PAREN) or
2180 (not self.re_exclude_auto.match(theRest)))
2186 (not self.re_exclude_auto.match(theRest)))
2181 and
2187 and
2182 self.re_fun_name.match(iFun) and
2188 self.re_fun_name.match(iFun) and
2183 callable(oinfo['obj'])) :
2189 callable(oinfo['obj'])) :
2184 #print 'going auto' # dbg
2190 #print 'going auto' # dbg
2185 return self.handle_auto(line,continue_prompt,
2191 return self.handle_auto(line,continue_prompt,
2186 pre,iFun,theRest,oinfo['obj'])
2192 pre,iFun,theRest,oinfo['obj'])
2187 else:
2193 else:
2188 #print 'was callable?', callable(oinfo['obj']) # dbg
2194 #print 'was callable?', callable(oinfo['obj']) # dbg
2189 return self.handle_normal(line,continue_prompt)
2195 return self.handle_normal(line,continue_prompt)
2190
2196
2191 # If we get here, we have a normal Python line. Log and return.
2197 # If we get here, we have a normal Python line. Log and return.
2192 return self.handle_normal(line,continue_prompt)
2198 return self.handle_normal(line,continue_prompt)
2193
2199
2194 def _prefilter_dumb(self, line, continue_prompt):
2200 def _prefilter_dumb(self, line, continue_prompt):
2195 """simple prefilter function, for debugging"""
2201 """simple prefilter function, for debugging"""
2196 return self.handle_normal(line,continue_prompt)
2202 return self.handle_normal(line,continue_prompt)
2197
2203
2198
2204
2199 def multiline_prefilter(self, line, continue_prompt):
2205 def multiline_prefilter(self, line, continue_prompt):
2200 """ Run _prefilter for each line of input
2206 """ Run _prefilter for each line of input
2201
2207
2202 Covers cases where there are multiple lines in the user entry,
2208 Covers cases where there are multiple lines in the user entry,
2203 which is the case when the user goes back to a multiline history
2209 which is the case when the user goes back to a multiline history
2204 entry and presses enter.
2210 entry and presses enter.
2205
2211
2206 """
2212 """
2207 out = []
2213 out = []
2208 for l in line.rstrip('\n').split('\n'):
2214 for l in line.rstrip('\n').split('\n'):
2209 out.append(self._prefilter(l, continue_prompt))
2215 out.append(self._prefilter(l, continue_prompt))
2210 return '\n'.join(out)
2216 return '\n'.join(out)
2211
2217
2212 # Set the default prefilter() function (this can be user-overridden)
2218 # Set the default prefilter() function (this can be user-overridden)
2213 prefilter = multiline_prefilter
2219 prefilter = multiline_prefilter
2214
2220
2215 def handle_normal(self,line,continue_prompt=None,
2221 def handle_normal(self,line,continue_prompt=None,
2216 pre=None,iFun=None,theRest=None):
2222 pre=None,iFun=None,theRest=None):
2217 """Handle normal input lines. Use as a template for handlers."""
2223 """Handle normal input lines. Use as a template for handlers."""
2218
2224
2219 # With autoindent on, we need some way to exit the input loop, and I
2225 # With autoindent on, we need some way to exit the input loop, and I
2220 # don't want to force the user to have to backspace all the way to
2226 # don't want to force the user to have to backspace all the way to
2221 # clear the line. The rule will be in this case, that either two
2227 # clear the line. The rule will be in this case, that either two
2222 # lines of pure whitespace in a row, or a line of pure whitespace but
2228 # lines of pure whitespace in a row, or a line of pure whitespace but
2223 # of a size different to the indent level, will exit the input loop.
2229 # of a size different to the indent level, will exit the input loop.
2224
2230
2225 if (continue_prompt and self.autoindent and line.isspace() and
2231 if (continue_prompt and self.autoindent and line.isspace() and
2226 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2232 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2227 (self.buffer[-1]).isspace() )):
2233 (self.buffer[-1]).isspace() )):
2228 line = ''
2234 line = ''
2229
2235
2230 self.log(line,line,continue_prompt)
2236 self.log(line,line,continue_prompt)
2231 return line
2237 return line
2232
2238
2233 def handle_alias(self,line,continue_prompt=None,
2239 def handle_alias(self,line,continue_prompt=None,
2234 pre=None,iFun=None,theRest=None):
2240 pre=None,iFun=None,theRest=None):
2235 """Handle alias input lines. """
2241 """Handle alias input lines. """
2236
2242
2237 # pre is needed, because it carries the leading whitespace. Otherwise
2243 # pre is needed, because it carries the leading whitespace. Otherwise
2238 # aliases won't work in indented sections.
2244 # aliases won't work in indented sections.
2239 transformed = self.expand_aliases(iFun, theRest)
2245 transformed = self.expand_aliases(iFun, theRest)
2240 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2246 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2241 self.log(line,line_out,continue_prompt)
2247 self.log(line,line_out,continue_prompt)
2242 #print 'line out:',line_out # dbg
2248 #print 'line out:',line_out # dbg
2243 return line_out
2249 return line_out
2244
2250
2245 def handle_shell_escape(self, line, continue_prompt=None,
2251 def handle_shell_escape(self, line, continue_prompt=None,
2246 pre=None,iFun=None,theRest=None):
2252 pre=None,iFun=None,theRest=None):
2247 """Execute the line in a shell, empty return value"""
2253 """Execute the line in a shell, empty return value"""
2248
2254
2249 #print 'line in :', `line` # dbg
2255 #print 'line in :', `line` # dbg
2250 # Example of a special handler. Others follow a similar pattern.
2256 # Example of a special handler. Others follow a similar pattern.
2251 if line.lstrip().startswith('!!'):
2257 if line.lstrip().startswith('!!'):
2252 # rewrite iFun/theRest to properly hold the call to %sx and
2258 # rewrite iFun/theRest to properly hold the call to %sx and
2253 # the actual command to be executed, so handle_magic can work
2259 # the actual command to be executed, so handle_magic can work
2254 # correctly
2260 # correctly
2255 theRest = '%s %s' % (iFun[2:],theRest)
2261 theRest = '%s %s' % (iFun[2:],theRest)
2256 iFun = 'sx'
2262 iFun = 'sx'
2257 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2263 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2258 line.lstrip()[2:]),
2264 line.lstrip()[2:]),
2259 continue_prompt,pre,iFun,theRest)
2265 continue_prompt,pre,iFun,theRest)
2260 else:
2266 else:
2261 cmd=line.lstrip().lstrip('!')
2267 cmd=line.lstrip().lstrip('!')
2262 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2268 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2263 # update cache/log and return
2269 # update cache/log and return
2264 self.log(line,line_out,continue_prompt)
2270 self.log(line,line_out,continue_prompt)
2265 return line_out
2271 return line_out
2266
2272
2267 def handle_magic(self, line, continue_prompt=None,
2273 def handle_magic(self, line, continue_prompt=None,
2268 pre=None,iFun=None,theRest=None):
2274 pre=None,iFun=None,theRest=None):
2269 """Execute magic functions."""
2275 """Execute magic functions."""
2270
2276
2271
2277
2272 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2278 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2273 self.log(line,cmd,continue_prompt)
2279 self.log(line,cmd,continue_prompt)
2274 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2280 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2275 return cmd
2281 return cmd
2276
2282
2277 def handle_auto(self, line, continue_prompt=None,
2283 def handle_auto(self, line, continue_prompt=None,
2278 pre=None,iFun=None,theRest=None,obj=None):
2284 pre=None,iFun=None,theRest=None,obj=None):
2279 """Hande lines which can be auto-executed, quoting if requested."""
2285 """Hande lines which can be auto-executed, quoting if requested."""
2280
2286
2281 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2287 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2282
2288
2283 # This should only be active for single-line input!
2289 # This should only be active for single-line input!
2284 if continue_prompt:
2290 if continue_prompt:
2285 self.log(line,line,continue_prompt)
2291 self.log(line,line,continue_prompt)
2286 return line
2292 return line
2287
2293
2288 auto_rewrite = True
2294 auto_rewrite = True
2289
2295
2290 if pre == self.ESC_QUOTE:
2296 if pre == self.ESC_QUOTE:
2291 # Auto-quote splitting on whitespace
2297 # Auto-quote splitting on whitespace
2292 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2298 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2293 elif pre == self.ESC_QUOTE2:
2299 elif pre == self.ESC_QUOTE2:
2294 # Auto-quote whole string
2300 # Auto-quote whole string
2295 newcmd = '%s("%s")' % (iFun,theRest)
2301 newcmd = '%s("%s")' % (iFun,theRest)
2296 elif pre == self.ESC_PAREN:
2302 elif pre == self.ESC_PAREN:
2297 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2303 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2298 else:
2304 else:
2299 # Auto-paren.
2305 # Auto-paren.
2300 # We only apply it to argument-less calls if the autocall
2306 # We only apply it to argument-less calls if the autocall
2301 # parameter is set to 2. We only need to check that autocall is <
2307 # parameter is set to 2. We only need to check that autocall is <
2302 # 2, since this function isn't called unless it's at least 1.
2308 # 2, since this function isn't called unless it's at least 1.
2303 if not theRest and (self.rc.autocall < 2):
2309 if not theRest and (self.rc.autocall < 2):
2304 newcmd = '%s %s' % (iFun,theRest)
2310 newcmd = '%s %s' % (iFun,theRest)
2305 auto_rewrite = False
2311 auto_rewrite = False
2306 else:
2312 else:
2307 if theRest.startswith('['):
2313 if theRest.startswith('['):
2308 if hasattr(obj,'__getitem__'):
2314 if hasattr(obj,'__getitem__'):
2309 # Don't autocall in this case: item access for an object
2315 # Don't autocall in this case: item access for an object
2310 # which is BOTH callable and implements __getitem__.
2316 # which is BOTH callable and implements __getitem__.
2311 newcmd = '%s %s' % (iFun,theRest)
2317 newcmd = '%s %s' % (iFun,theRest)
2312 auto_rewrite = False
2318 auto_rewrite = False
2313 else:
2319 else:
2314 # if the object doesn't support [] access, go ahead and
2320 # if the object doesn't support [] access, go ahead and
2315 # autocall
2321 # autocall
2316 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2322 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2317 elif theRest.endswith(';'):
2323 elif theRest.endswith(';'):
2318 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2324 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2319 else:
2325 else:
2320 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2326 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2321
2327
2322 if auto_rewrite:
2328 if auto_rewrite:
2323 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2329 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2324 # log what is now valid Python, not the actual user input (without the
2330 # log what is now valid Python, not the actual user input (without the
2325 # final newline)
2331 # final newline)
2326 self.log(line,newcmd,continue_prompt)
2332 self.log(line,newcmd,continue_prompt)
2327 return newcmd
2333 return newcmd
2328
2334
2329 def handle_help(self, line, continue_prompt=None,
2335 def handle_help(self, line, continue_prompt=None,
2330 pre=None,iFun=None,theRest=None):
2336 pre=None,iFun=None,theRest=None):
2331 """Try to get some help for the object.
2337 """Try to get some help for the object.
2332
2338
2333 obj? or ?obj -> basic information.
2339 obj? or ?obj -> basic information.
2334 obj?? or ??obj -> more details.
2340 obj?? or ??obj -> more details.
2335 """
2341 """
2336
2342
2337 # We need to make sure that we don't process lines which would be
2343 # We need to make sure that we don't process lines which would be
2338 # otherwise valid python, such as "x=1 # what?"
2344 # otherwise valid python, such as "x=1 # what?"
2339 try:
2345 try:
2340 codeop.compile_command(line)
2346 codeop.compile_command(line)
2341 except SyntaxError:
2347 except SyntaxError:
2342 # We should only handle as help stuff which is NOT valid syntax
2348 # We should only handle as help stuff which is NOT valid syntax
2343 if line[0]==self.ESC_HELP:
2349 if line[0]==self.ESC_HELP:
2344 line = line[1:]
2350 line = line[1:]
2345 elif line[-1]==self.ESC_HELP:
2351 elif line[-1]==self.ESC_HELP:
2346 line = line[:-1]
2352 line = line[:-1]
2347 self.log(line,'#?'+line,continue_prompt)
2353 self.log(line,'#?'+line,continue_prompt)
2348 if line:
2354 if line:
2349 self.magic_pinfo(line)
2355 self.magic_pinfo(line)
2350 else:
2356 else:
2351 page(self.usage,screen_lines=self.rc.screen_length)
2357 page(self.usage,screen_lines=self.rc.screen_length)
2352 return '' # Empty string is needed here!
2358 return '' # Empty string is needed here!
2353 except:
2359 except:
2354 # Pass any other exceptions through to the normal handler
2360 # Pass any other exceptions through to the normal handler
2355 return self.handle_normal(line,continue_prompt)
2361 return self.handle_normal(line,continue_prompt)
2356 else:
2362 else:
2357 # If the code compiles ok, we should handle it normally
2363 # If the code compiles ok, we should handle it normally
2358 return self.handle_normal(line,continue_prompt)
2364 return self.handle_normal(line,continue_prompt)
2359
2365
2360 def getapi(self):
2366 def getapi(self):
2361 """ Get an IPApi object for this shell instance
2367 """ Get an IPApi object for this shell instance
2362
2368
2363 Getting an IPApi object is always preferable to accessing the shell
2369 Getting an IPApi object is always preferable to accessing the shell
2364 directly, but this holds true especially for extensions.
2370 directly, but this holds true especially for extensions.
2365
2371
2366 It should always be possible to implement an extension with IPApi
2372 It should always be possible to implement an extension with IPApi
2367 alone. If not, contact maintainer to request an addition.
2373 alone. If not, contact maintainer to request an addition.
2368
2374
2369 """
2375 """
2370 return self.api
2376 return self.api
2371
2377
2372 def handle_emacs(self,line,continue_prompt=None,
2378 def handle_emacs(self,line,continue_prompt=None,
2373 pre=None,iFun=None,theRest=None):
2379 pre=None,iFun=None,theRest=None):
2374 """Handle input lines marked by python-mode."""
2380 """Handle input lines marked by python-mode."""
2375
2381
2376 # Currently, nothing is done. Later more functionality can be added
2382 # Currently, nothing is done. Later more functionality can be added
2377 # here if needed.
2383 # here if needed.
2378
2384
2379 # The input cache shouldn't be updated
2385 # The input cache shouldn't be updated
2380
2386
2381 return line
2387 return line
2382
2388
2383 def mktempfile(self,data=None):
2389 def mktempfile(self,data=None):
2384 """Make a new tempfile and return its filename.
2390 """Make a new tempfile and return its filename.
2385
2391
2386 This makes a call to tempfile.mktemp, but it registers the created
2392 This makes a call to tempfile.mktemp, but it registers the created
2387 filename internally so ipython cleans it up at exit time.
2393 filename internally so ipython cleans it up at exit time.
2388
2394
2389 Optional inputs:
2395 Optional inputs:
2390
2396
2391 - data(None): if data is given, it gets written out to the temp file
2397 - data(None): if data is given, it gets written out to the temp file
2392 immediately, and the file is closed again."""
2398 immediately, and the file is closed again."""
2393
2399
2394 filename = tempfile.mktemp('.py','ipython_edit_')
2400 filename = tempfile.mktemp('.py','ipython_edit_')
2395 self.tempfiles.append(filename)
2401 self.tempfiles.append(filename)
2396
2402
2397 if data:
2403 if data:
2398 tmp_file = open(filename,'w')
2404 tmp_file = open(filename,'w')
2399 tmp_file.write(data)
2405 tmp_file.write(data)
2400 tmp_file.close()
2406 tmp_file.close()
2401 return filename
2407 return filename
2402
2408
2403 def write(self,data):
2409 def write(self,data):
2404 """Write a string to the default output"""
2410 """Write a string to the default output"""
2405 Term.cout.write(data)
2411 Term.cout.write(data)
2406
2412
2407 def write_err(self,data):
2413 def write_err(self,data):
2408 """Write a string to the default error output"""
2414 """Write a string to the default error output"""
2409 Term.cerr.write(data)
2415 Term.cerr.write(data)
2410
2416
2411 def exit(self):
2417 def exit(self):
2412 """Handle interactive exit.
2418 """Handle interactive exit.
2413
2419
2414 This method sets the exit_now attribute."""
2420 This method sets the exit_now attribute."""
2415
2421
2416 if self.rc.confirm_exit:
2422 if self.rc.confirm_exit:
2417 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2423 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2418 self.exit_now = True
2424 self.exit_now = True
2419 else:
2425 else:
2420 self.exit_now = True
2426 self.exit_now = True
2421
2427
2422 def safe_execfile(self,fname,*where,**kw):
2428 def safe_execfile(self,fname,*where,**kw):
2423 """A safe version of the builtin execfile().
2429 """A safe version of the builtin execfile().
2424
2430
2425 This version will never throw an exception, and knows how to handle
2431 This version will never throw an exception, and knows how to handle
2426 ipython logs as well."""
2432 ipython logs as well."""
2427
2433
2428 def syspath_cleanup():
2434 def syspath_cleanup():
2429 """Internal cleanup routine for sys.path."""
2435 """Internal cleanup routine for sys.path."""
2430 if add_dname:
2436 if add_dname:
2431 try:
2437 try:
2432 sys.path.remove(dname)
2438 sys.path.remove(dname)
2433 except ValueError:
2439 except ValueError:
2434 # For some reason the user has already removed it, ignore.
2440 # For some reason the user has already removed it, ignore.
2435 pass
2441 pass
2436
2442
2437 fname = os.path.expanduser(fname)
2443 fname = os.path.expanduser(fname)
2438
2444
2439 # Find things also in current directory. This is needed to mimic the
2445 # Find things also in current directory. This is needed to mimic the
2440 # behavior of running a script from the system command line, where
2446 # behavior of running a script from the system command line, where
2441 # Python inserts the script's directory into sys.path
2447 # Python inserts the script's directory into sys.path
2442 dname = os.path.dirname(os.path.abspath(fname))
2448 dname = os.path.dirname(os.path.abspath(fname))
2443 add_dname = False
2449 add_dname = False
2444 if dname not in sys.path:
2450 if dname not in sys.path:
2445 sys.path.insert(0,dname)
2451 sys.path.insert(0,dname)
2446 add_dname = True
2452 add_dname = True
2447
2453
2448 try:
2454 try:
2449 xfile = open(fname)
2455 xfile = open(fname)
2450 except:
2456 except:
2451 print >> Term.cerr, \
2457 print >> Term.cerr, \
2452 'Could not open file <%s> for safe execution.' % fname
2458 'Could not open file <%s> for safe execution.' % fname
2453 syspath_cleanup()
2459 syspath_cleanup()
2454 return None
2460 return None
2455
2461
2456 kw.setdefault('islog',0)
2462 kw.setdefault('islog',0)
2457 kw.setdefault('quiet',1)
2463 kw.setdefault('quiet',1)
2458 kw.setdefault('exit_ignore',0)
2464 kw.setdefault('exit_ignore',0)
2459 first = xfile.readline()
2465 first = xfile.readline()
2460 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2466 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2461 xfile.close()
2467 xfile.close()
2462 # line by line execution
2468 # line by line execution
2463 if first.startswith(loghead) or kw['islog']:
2469 if first.startswith(loghead) or kw['islog']:
2464 print 'Loading log file <%s> one line at a time...' % fname
2470 print 'Loading log file <%s> one line at a time...' % fname
2465 if kw['quiet']:
2471 if kw['quiet']:
2466 stdout_save = sys.stdout
2472 stdout_save = sys.stdout
2467 sys.stdout = StringIO.StringIO()
2473 sys.stdout = StringIO.StringIO()
2468 try:
2474 try:
2469 globs,locs = where[0:2]
2475 globs,locs = where[0:2]
2470 except:
2476 except:
2471 try:
2477 try:
2472 globs = locs = where[0]
2478 globs = locs = where[0]
2473 except:
2479 except:
2474 globs = locs = globals()
2480 globs = locs = globals()
2475 badblocks = []
2481 badblocks = []
2476
2482
2477 # we also need to identify indented blocks of code when replaying
2483 # we also need to identify indented blocks of code when replaying
2478 # logs and put them together before passing them to an exec
2484 # logs and put them together before passing them to an exec
2479 # statement. This takes a bit of regexp and look-ahead work in the
2485 # statement. This takes a bit of regexp and look-ahead work in the
2480 # file. It's easiest if we swallow the whole thing in memory
2486 # file. It's easiest if we swallow the whole thing in memory
2481 # first, and manually walk through the lines list moving the
2487 # first, and manually walk through the lines list moving the
2482 # counter ourselves.
2488 # counter ourselves.
2483 indent_re = re.compile('\s+\S')
2489 indent_re = re.compile('\s+\S')
2484 xfile = open(fname)
2490 xfile = open(fname)
2485 filelines = xfile.readlines()
2491 filelines = xfile.readlines()
2486 xfile.close()
2492 xfile.close()
2487 nlines = len(filelines)
2493 nlines = len(filelines)
2488 lnum = 0
2494 lnum = 0
2489 while lnum < nlines:
2495 while lnum < nlines:
2490 line = filelines[lnum]
2496 line = filelines[lnum]
2491 lnum += 1
2497 lnum += 1
2492 # don't re-insert logger status info into cache
2498 # don't re-insert logger status info into cache
2493 if line.startswith('#log#'):
2499 if line.startswith('#log#'):
2494 continue
2500 continue
2495 else:
2501 else:
2496 # build a block of code (maybe a single line) for execution
2502 # build a block of code (maybe a single line) for execution
2497 block = line
2503 block = line
2498 try:
2504 try:
2499 next = filelines[lnum] # lnum has already incremented
2505 next = filelines[lnum] # lnum has already incremented
2500 except:
2506 except:
2501 next = None
2507 next = None
2502 while next and indent_re.match(next):
2508 while next and indent_re.match(next):
2503 block += next
2509 block += next
2504 lnum += 1
2510 lnum += 1
2505 try:
2511 try:
2506 next = filelines[lnum]
2512 next = filelines[lnum]
2507 except:
2513 except:
2508 next = None
2514 next = None
2509 # now execute the block of one or more lines
2515 # now execute the block of one or more lines
2510 try:
2516 try:
2511 exec block in globs,locs
2517 exec block in globs,locs
2512 except SystemExit:
2518 except SystemExit:
2513 pass
2519 pass
2514 except:
2520 except:
2515 badblocks.append(block.rstrip())
2521 badblocks.append(block.rstrip())
2516 if kw['quiet']: # restore stdout
2522 if kw['quiet']: # restore stdout
2517 sys.stdout.close()
2523 sys.stdout.close()
2518 sys.stdout = stdout_save
2524 sys.stdout = stdout_save
2519 print 'Finished replaying log file <%s>' % fname
2525 print 'Finished replaying log file <%s>' % fname
2520 if badblocks:
2526 if badblocks:
2521 print >> sys.stderr, ('\nThe following lines/blocks in file '
2527 print >> sys.stderr, ('\nThe following lines/blocks in file '
2522 '<%s> reported errors:' % fname)
2528 '<%s> reported errors:' % fname)
2523
2529
2524 for badline in badblocks:
2530 for badline in badblocks:
2525 print >> sys.stderr, badline
2531 print >> sys.stderr, badline
2526 else: # regular file execution
2532 else: # regular file execution
2527 try:
2533 try:
2528 execfile(fname,*where)
2534 execfile(fname,*where)
2529 except SyntaxError:
2535 except SyntaxError:
2530 self.showsyntaxerror()
2536 self.showsyntaxerror()
2531 warn('Failure executing file: <%s>' % fname)
2537 warn('Failure executing file: <%s>' % fname)
2532 except SystemExit,status:
2538 except SystemExit,status:
2533 if not kw['exit_ignore']:
2539 if not kw['exit_ignore']:
2534 self.showtraceback()
2540 self.showtraceback()
2535 warn('Failure executing file: <%s>' % fname)
2541 warn('Failure executing file: <%s>' % fname)
2536 except:
2542 except:
2537 self.showtraceback()
2543 self.showtraceback()
2538 warn('Failure executing file: <%s>' % fname)
2544 warn('Failure executing file: <%s>' % fname)
2539
2545
2540 syspath_cleanup()
2546 syspath_cleanup()
2541
2547
2542 #************************* end of file <iplib.py> *****************************
2548 #************************* end of file <iplib.py> *****************************
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now