##// END OF EJS Templates
Added ipapi, the extension api for ipython....
vivainio -
Show More

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

@@ -0,0 +1,78 b''
1 ''' IPython customization API
2
3 Your one-stop module for configuring ipython
4
5 This is experimental, use at your own risk.
6
7 All names prefixed by underscores are for internal use, not part
8 of the public api.
9
10 No formal doc yet, here's an example that you can just put
11 to a module and import from ipython.
12
13 -----------------------------------------------
14 import IPython.ipapi as ip
15
16 def ankka_f(self, arg):
17 print "Ankka",self,"says uppercase:",arg.upper()
18
19 ip.expose_magic("ankka",ankka_f)
20
21 ip.magic('alias sayhi echo "Testing, hi ok"')
22 ip.magic('alias helloworld echo "Hello world"')
23 ip.system('pwd')
24
25 ip.ex('import re')
26 ip.ex("""
27 def funcci(a,b):
28 print a+b
29 print funcci(3,4)
30 """)
31 ip.ex("funcci(348,9)")
32
33 def jed_editor(self,filename, linenum=None):
34 print "Calling my own editor, jed ... via hook!"
35 import os
36 if linenum is None: linenum = 0
37 os.system('jed +%d %s' % (linenum, filename))
38 print "exiting jed"
39
40 ip.set_hook('editor',jed_editor)
41 print "done!"
42
43 '''
44
45
46
47
48 def _init_with_shell(ip):
49 global magic
50 magic = ip.ipmagic
51 global system
52 system = ip.ipsystem
53 global set_hook
54 set_hook = ip.set_hook
55 global __IP
56 __IP = ip
57
58 def user_ns():
59 return __IP.user_ns
60
61 def expose_magic(magicname, func):
62 ''' Expose own function as magic function for ipython
63
64 def foo_impl(self,parameter_s=''):
65 """My very own magic!. (Use docstrings, IPython reads them)."""
66 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
67 print 'The self object is:',self
68
69 ipapi.expose_magic("foo",foo_impl)
70 '''
71
72 from IPython import Magic
73
74 setattr(Magic.Magic, "magic_" + magicname, func)
75
76 def ex(cmd):
77 """ Execute a normal python statement """
78 exec cmd in user_ns() No newline at end of file
@@ -1,459 +1,461 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Tools for inspecting Python objects.
2 """Tools for inspecting Python objects.
3
3
4 Uses syntax highlighting for presenting the various information elements.
4 Uses syntax highlighting for presenting the various information elements.
5
5
6 Similar in spirit to the inspect module, but all calls take a name argument to
6 Similar in spirit to the inspect module, but all calls take a name argument to
7 reference the name under which an object is being read.
7 reference the name under which an object is being read.
8
8
9 $Id: OInspect.py 958 2005-12-27 23:17:51Z fperez $
9 $Id: OInspect.py 1016 2006-01-14 00:54:23Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
13 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
14 #
14 #
15 # Distributed under the terms of the BSD License. The full license is in
15 # Distributed under the terms of the BSD License. The full license is in
16 # the file COPYING, distributed as part of this software.
16 # the file COPYING, distributed as part of this software.
17 #*****************************************************************************
17 #*****************************************************************************
18
18
19 from IPython import Release
19 from IPython import Release
20 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __author__ = '%s <%s>' % Release.authors['Fernando']
21 __license__ = Release.license
21 __license__ = Release.license
22
22
23 __all__ = ['Inspector','InspectColors']
23 __all__ = ['Inspector','InspectColors']
24
24
25 # stdlib modules
25 # stdlib modules
26 import __builtin__
26 import __builtin__
27 import inspect
27 import inspect
28 import linecache
28 import linecache
29 import string
29 import string
30 import StringIO
30 import StringIO
31 import types
31 import types
32
32
33 # IPython's own
33 # IPython's own
34 from IPython import PyColorize
34 from IPython import PyColorize
35 from IPython.genutils import page,indent,Term,mkdict
35 from IPython.genutils import page,indent,Term,mkdict
36 from IPython.Itpl import itpl
36 from IPython.Itpl import itpl
37 from IPython.wildcard import list_namespace
37 from IPython.wildcard import list_namespace
38 from IPython.ColorANSI import *
38 from IPython.ColorANSI import *
39
39
40 #****************************************************************************
40 #****************************************************************************
41 # Builtin color schemes
41 # Builtin color schemes
42
42
43 Colors = TermColors # just a shorthand
43 Colors = TermColors # just a shorthand
44
44
45 # Build a few color schemes
45 # Build a few color schemes
46 NoColor = ColorScheme(
46 NoColor = ColorScheme(
47 'NoColor',{
47 'NoColor',{
48 'header' : Colors.NoColor,
48 'header' : Colors.NoColor,
49 'normal' : Colors.NoColor # color off (usu. Colors.Normal)
49 'normal' : Colors.NoColor # color off (usu. Colors.Normal)
50 } )
50 } )
51
51
52 LinuxColors = ColorScheme(
52 LinuxColors = ColorScheme(
53 'Linux',{
53 'Linux',{
54 'header' : Colors.LightRed,
54 'header' : Colors.LightRed,
55 'normal' : Colors.Normal # color off (usu. Colors.Normal)
55 'normal' : Colors.Normal # color off (usu. Colors.Normal)
56 } )
56 } )
57
57
58 LightBGColors = ColorScheme(
58 LightBGColors = ColorScheme(
59 'LightBG',{
59 'LightBG',{
60 'header' : Colors.Red,
60 'header' : Colors.Red,
61 'normal' : Colors.Normal # color off (usu. Colors.Normal)
61 'normal' : Colors.Normal # color off (usu. Colors.Normal)
62 } )
62 } )
63
63
64 # Build table of color schemes (needed by the parser)
64 # Build table of color schemes (needed by the parser)
65 InspectColors = ColorSchemeTable([NoColor,LinuxColors,LightBGColors],
65 InspectColors = ColorSchemeTable([NoColor,LinuxColors,LightBGColors],
66 'Linux')
66 'Linux')
67
67
68 #****************************************************************************
68 #****************************************************************************
69 # Auxiliary functions
69 # Auxiliary functions
70 def getdoc(obj):
70 def getdoc(obj):
71 """Stable wrapper around inspect.getdoc.
71 """Stable wrapper around inspect.getdoc.
72
72
73 This can't crash because of attribute problems.
73 This can't crash because of attribute problems.
74
74
75 It also attempts to call a getdoc() method on the given object. This
75 It also attempts to call a getdoc() method on the given object. This
76 allows objects which provide their docstrings via non-standard mechanisms
76 allows objects which provide their docstrings via non-standard mechanisms
77 (like Pyro proxies) to still be inspected by ipython's ? system."""
77 (like Pyro proxies) to still be inspected by ipython's ? system."""
78
78
79 ds = None # default return value
79 ds = None # default return value
80 try:
80 try:
81 ds = inspect.getdoc(obj)
81 ds = inspect.getdoc(obj)
82 except:
82 except:
83 # Harden against an inspect failure, which can occur with
83 # Harden against an inspect failure, which can occur with
84 # SWIG-wrapped extensions.
84 # SWIG-wrapped extensions.
85 pass
85 pass
86 # Allow objects to offer customized documentation via a getdoc method:
86 # Allow objects to offer customized documentation via a getdoc method:
87 try:
87 try:
88 ds2 = obj.getdoc()
88 ds2 = obj.getdoc()
89 except:
89 except:
90 pass
90 pass
91 else:
91 else:
92 # if we get extra info, we add it to the normal docstring.
92 # if we get extra info, we add it to the normal docstring.
93 if ds is None:
93 if ds is None:
94 ds = ds2
94 ds = ds2
95 else:
95 else:
96 ds = '%s\n%s' % (ds,ds2)
96 ds = '%s\n%s' % (ds,ds2)
97 return ds
97 return ds
98
98
99 #****************************************************************************
99 #****************************************************************************
100 # Class definitions
100 # Class definitions
101
101
102 class myStringIO(StringIO.StringIO):
102 class myStringIO(StringIO.StringIO):
103 """Adds a writeln method to normal StringIO."""
103 """Adds a writeln method to normal StringIO."""
104 def writeln(self,*arg,**kw):
104 def writeln(self,*arg,**kw):
105 """Does a write() and then a write('\n')"""
105 """Does a write() and then a write('\n')"""
106 self.write(*arg,**kw)
106 self.write(*arg,**kw)
107 self.write('\n')
107 self.write('\n')
108
108
109 class Inspector:
109 class Inspector:
110 def __init__(self,color_table,code_color_table,scheme):
110 def __init__(self,color_table,code_color_table,scheme):
111 self.color_table = color_table
111 self.color_table = color_table
112 self.parser = PyColorize.Parser(code_color_table,out='str')
112 self.parser = PyColorize.Parser(code_color_table,out='str')
113 self.format = self.parser.format
113 self.format = self.parser.format
114 self.set_active_scheme(scheme)
114 self.set_active_scheme(scheme)
115
115
116 def __getargspec(self,obj):
116 def __getargspec(self,obj):
117 """Get the names and default values of a function's arguments.
117 """Get the names and default values of a function's arguments.
118
118
119 A tuple of four things is returned: (args, varargs, varkw, defaults).
119 A tuple of four things is returned: (args, varargs, varkw, defaults).
120 'args' is a list of the argument names (it may contain nested lists).
120 'args' is a list of the argument names (it may contain nested lists).
121 'varargs' and 'varkw' are the names of the * and ** arguments or None.
121 'varargs' and 'varkw' are the names of the * and ** arguments or None.
122 'defaults' is an n-tuple of the default values of the last n arguments.
122 'defaults' is an n-tuple of the default values of the last n arguments.
123
123
124 Modified version of inspect.getargspec from the Python Standard
124 Modified version of inspect.getargspec from the Python Standard
125 Library."""
125 Library."""
126
126
127 if inspect.isfunction(obj):
127 if inspect.isfunction(obj):
128 func_obj = obj
128 func_obj = obj
129 elif inspect.ismethod(obj):
129 elif inspect.ismethod(obj):
130 func_obj = obj.im_func
130 func_obj = obj.im_func
131 else:
131 else:
132 raise TypeError, 'arg is not a Python function'
132 raise TypeError, 'arg is not a Python function'
133 args, varargs, varkw = inspect.getargs(func_obj.func_code)
133 args, varargs, varkw = inspect.getargs(func_obj.func_code)
134 return args, varargs, varkw, func_obj.func_defaults
134 return args, varargs, varkw, func_obj.func_defaults
135
135
136 def __getdef(self,obj,oname=''):
136 def __getdef(self,obj,oname=''):
137 """Return the definition header for any callable object.
137 """Return the definition header for any callable object.
138
138
139 If any exception is generated, None is returned instead and the
139 If any exception is generated, None is returned instead and the
140 exception is suppressed."""
140 exception is suppressed."""
141
141
142 try:
142 try:
143 return oname + inspect.formatargspec(*self.__getargspec(obj))
143 return oname + inspect.formatargspec(*self.__getargspec(obj))
144 except:
144 except:
145 return None
145 return None
146
146
147 def __head(self,h):
147 def __head(self,h):
148 """Return a header string with proper colors."""
148 """Return a header string with proper colors."""
149 return '%s%s%s' % (self.color_table.active_colors.header,h,
149 return '%s%s%s' % (self.color_table.active_colors.header,h,
150 self.color_table.active_colors.normal)
150 self.color_table.active_colors.normal)
151
151
152 def set_active_scheme(self,scheme):
152 def set_active_scheme(self,scheme):
153 self.color_table.set_active_scheme(scheme)
153 self.color_table.set_active_scheme(scheme)
154 self.parser.color_table.set_active_scheme(scheme)
154 self.parser.color_table.set_active_scheme(scheme)
155
155
156 def noinfo(self,msg,oname):
156 def noinfo(self,msg,oname):
157 """Generic message when no information is found."""
157 """Generic message when no information is found."""
158 print 'No %s found' % msg,
158 print 'No %s found' % msg,
159 if oname:
159 if oname:
160 print 'for %s' % oname
160 print 'for %s' % oname
161 else:
161 else:
162 print
162 print
163
163
164 def pdef(self,obj,oname=''):
164 def pdef(self,obj,oname=''):
165 """Print the definition header for any callable object.
165 """Print the definition header for any callable object.
166
166
167 If the object is a class, print the constructor information."""
167 If the object is a class, print the constructor information."""
168
168
169 if not callable(obj):
169 if not callable(obj):
170 print 'Object is not callable.'
170 print 'Object is not callable.'
171 return
171 return
172
172
173 header = ''
173 header = ''
174 if type(obj) is types.ClassType:
174 if type(obj) is types.ClassType:
175 header = self.__head('Class constructor information:\n')
175 header = self.__head('Class constructor information:\n')
176 obj = obj.__init__
176 obj = obj.__init__
177 elif type(obj) is types.InstanceType:
177 elif type(obj) is types.InstanceType:
178 obj = obj.__call__
178 obj = obj.__call__
179
179
180 output = self.__getdef(obj,oname)
180 output = self.__getdef(obj,oname)
181 if output is None:
181 if output is None:
182 self.noinfo('definition header',oname)
182 self.noinfo('definition header',oname)
183 else:
183 else:
184 print >>Term.cout, header,self.format(output),
184 print >>Term.cout, header,self.format(output),
185
185
186 def pdoc(self,obj,oname='',formatter = None):
186 def pdoc(self,obj,oname='',formatter = None):
187 """Print the docstring for any object.
187 """Print the docstring for any object.
188
188
189 Optional:
189 Optional:
190 -formatter: a function to run the docstring through for specially
190 -formatter: a function to run the docstring through for specially
191 formatted docstrings."""
191 formatted docstrings."""
192
192
193 head = self.__head # so that itpl can find it even if private
193 head = self.__head # so that itpl can find it even if private
194 ds = getdoc(obj)
194 ds = getdoc(obj)
195 if formatter:
195 if formatter:
196 ds = formatter(ds)
196 ds = formatter(ds)
197 if type(obj) is types.ClassType:
197 if type(obj) is types.ClassType:
198 init_ds = getdoc(obj.__init__)
198 init_ds = getdoc(obj.__init__)
199 output = itpl('$head("Class Docstring:")\n'
199 output = itpl('$head("Class Docstring:")\n'
200 '$indent(ds)\n'
200 '$indent(ds)\n'
201 '$head("Constructor Docstring"):\n'
201 '$head("Constructor Docstring"):\n'
202 '$indent(init_ds)')
202 '$indent(init_ds)')
203 elif type(obj) is types.InstanceType and hasattr(obj,'__call__'):
203 elif type(obj) is types.InstanceType and hasattr(obj,'__call__'):
204 call_ds = getdoc(obj.__call__)
204 call_ds = getdoc(obj.__call__)
205 if call_ds:
205 if call_ds:
206 output = itpl('$head("Class Docstring:")\n$indent(ds)\n'
206 output = itpl('$head("Class Docstring:")\n$indent(ds)\n'
207 '$head("Calling Docstring:")\n$indent(call_ds)')
207 '$head("Calling Docstring:")\n$indent(call_ds)')
208 else:
208 else:
209 output = ds
209 output = ds
210 else:
210 else:
211 output = ds
211 output = ds
212 if output is None:
212 if output is None:
213 self.noinfo('documentation',oname)
213 self.noinfo('documentation',oname)
214 return
214 return
215 page(output)
215 page(output)
216
216
217 def psource(self,obj,oname=''):
217 def psource(self,obj,oname=''):
218 """Print the source code for an object."""
218 """Print the source code for an object."""
219
219
220 # Flush the source cache because inspect can return out-of-date source
220 # Flush the source cache because inspect can return out-of-date source
221 linecache.checkcache()
221 linecache.checkcache()
222 try:
222 try:
223 src = inspect.getsource(obj)
223 src = inspect.getsource(obj)
224 except:
224 except:
225 self.noinfo('source',oname)
225 self.noinfo('source',oname)
226 else:
226 else:
227 page(self.format(src))
227 page(self.format(src))
228
228
229 def pfile(self,obj,oname=''):
229 def pfile(self,obj,oname=''):
230 """Show the whole file where an object was defined."""
230 """Show the whole file where an object was defined."""
231 try:
231 try:
232 sourcelines,lineno = inspect.getsourcelines(obj)
232 sourcelines,lineno = inspect.getsourcelines(obj)
233 except:
233 except:
234 self.noinfo('file',oname)
234 self.noinfo('file',oname)
235 else:
235 else:
236 # run contents of file through pager starting at line
236 # run contents of file through pager starting at line
237 # where the object is defined
237 # where the object is defined
238 page(self.format(open(inspect.getabsfile(obj)).read()),lineno)
238 page(self.format(open(inspect.getabsfile(obj)).read()),lineno)
239
239
240 def pinfo(self,obj,oname='',formatter=None,info=None,detail_level=0):
240 def pinfo(self,obj,oname='',formatter=None,info=None,detail_level=0):
241 """Show detailed information about an object.
241 """Show detailed information about an object.
242
242
243 Optional arguments:
243 Optional arguments:
244
244
245 - oname: name of the variable pointing to the object.
245 - oname: name of the variable pointing to the object.
246
246
247 - formatter: special formatter for docstrings (see pdoc)
247 - formatter: special formatter for docstrings (see pdoc)
248
248
249 - info: a structure with some information fields which may have been
249 - info: a structure with some information fields which may have been
250 precomputed already.
250 precomputed already.
251
251
252 - detail_level: if set to 1, more information is given.
252 - detail_level: if set to 1, more information is given.
253 """
253 """
254
254
255 obj_type = type(obj)
255 obj_type = type(obj)
256
256
257 header = self.__head
257 header = self.__head
258 if info is None:
258 if info is None:
259 ismagic = 0
259 ismagic = 0
260 isalias = 0
260 isalias = 0
261 ospace = ''
261 ospace = ''
262 else:
262 else:
263 ismagic = info.ismagic
263 ismagic = info.ismagic
264 isalias = info.isalias
264 isalias = info.isalias
265 ospace = info.namespace
265 ospace = info.namespace
266 # Get docstring, special-casing aliases:
266 # Get docstring, special-casing aliases:
267 if isalias:
267 if isalias:
268 ds = "Alias to the system command:\n %s" % obj[1]
268 ds = "Alias to the system command:\n %s" % obj[1]
269 else:
269 else:
270 ds = getdoc(obj)
270 ds = getdoc(obj)
271 if ds is None:
272 ds = '<no docstring>'
271 if formatter is not None:
273 if formatter is not None:
272 ds = formatter(ds)
274 ds = formatter(ds)
273
275
274 # store output in a list which gets joined with \n at the end.
276 # store output in a list which gets joined with \n at the end.
275 out = myStringIO()
277 out = myStringIO()
276
278
277 string_max = 200 # max size of strings to show (snipped if longer)
279 string_max = 200 # max size of strings to show (snipped if longer)
278 shalf = int((string_max -5)/2)
280 shalf = int((string_max -5)/2)
279
281
280 if ismagic:
282 if ismagic:
281 obj_type_name = 'Magic function'
283 obj_type_name = 'Magic function'
282 elif isalias:
284 elif isalias:
283 obj_type_name = 'System alias'
285 obj_type_name = 'System alias'
284 else:
286 else:
285 obj_type_name = obj_type.__name__
287 obj_type_name = obj_type.__name__
286 out.writeln(header('Type:\t\t')+obj_type_name)
288 out.writeln(header('Type:\t\t')+obj_type_name)
287
289
288 try:
290 try:
289 bclass = obj.__class__
291 bclass = obj.__class__
290 out.writeln(header('Base Class:\t')+str(bclass))
292 out.writeln(header('Base Class:\t')+str(bclass))
291 except: pass
293 except: pass
292
294
293 # String form, but snip if too long in ? form (full in ??)
295 # String form, but snip if too long in ? form (full in ??)
294 try:
296 try:
295 ostr = str(obj)
297 ostr = str(obj)
296 str_head = 'String Form:'
298 str_head = 'String Form:'
297 if not detail_level and len(ostr)>string_max:
299 if not detail_level and len(ostr)>string_max:
298 ostr = ostr[:shalf] + ' <...> ' + ostr[-shalf:]
300 ostr = ostr[:shalf] + ' <...> ' + ostr[-shalf:]
299 ostr = ("\n" + " " * len(str_head.expandtabs())).\
301 ostr = ("\n" + " " * len(str_head.expandtabs())).\
300 join(map(string.strip,ostr.split("\n")))
302 join(map(string.strip,ostr.split("\n")))
301 if ostr.find('\n') > -1:
303 if ostr.find('\n') > -1:
302 # Print multi-line strings starting at the next line.
304 # Print multi-line strings starting at the next line.
303 str_sep = '\n'
305 str_sep = '\n'
304 else:
306 else:
305 str_sep = '\t'
307 str_sep = '\t'
306 out.writeln("%s%s%s" % (header(str_head),str_sep,ostr))
308 out.writeln("%s%s%s" % (header(str_head),str_sep,ostr))
307 except:
309 except:
308 pass
310 pass
309
311
310 if ospace:
312 if ospace:
311 out.writeln(header('Namespace:\t')+ospace)
313 out.writeln(header('Namespace:\t')+ospace)
312
314
313 # Length (for strings and lists)
315 # Length (for strings and lists)
314 try:
316 try:
315 length = str(len(obj))
317 length = str(len(obj))
316 out.writeln(header('Length:\t\t')+length)
318 out.writeln(header('Length:\t\t')+length)
317 except: pass
319 except: pass
318
320
319 # Filename where object was defined
321 # Filename where object was defined
320 try:
322 try:
321 file = inspect.getabsfile(obj)
323 file = inspect.getabsfile(obj)
322 if file.endswith('<string>'):
324 if file.endswith('<string>'):
323 file = 'Dynamically generated function. No source code available.'
325 file = 'Dynamically generated function. No source code available.'
324 out.writeln(header('File:\t\t')+file)
326 out.writeln(header('File:\t\t')+file)
325 except: pass
327 except: pass
326
328
327 # reconstruct the function definition and print it:
329 # reconstruct the function definition and print it:
328 defln = self.__getdef(obj,oname)
330 defln = self.__getdef(obj,oname)
329 if defln:
331 if defln:
330 out.write(header('Definition:\t')+self.format(defln))
332 out.write(header('Definition:\t')+self.format(defln))
331
333
332 # Docstrings only in detail 0 mode, since source contains them (we
334 # Docstrings only in detail 0 mode, since source contains them (we
333 # avoid repetitions). If source fails, we add them back, see below.
335 # avoid repetitions). If source fails, we add them back, see below.
334 if ds and detail_level == 0:
336 if ds and detail_level == 0:
335 out.writeln(header('Docstring:\n') + indent(ds))
337 out.writeln(header('Docstring:\n') + indent(ds))
336
338
337 # Original source code for any callable
339 # Original source code for any callable
338 if detail_level:
340 if detail_level:
339 # Flush the source cache because inspect can return out-of-date source
341 # Flush the source cache because inspect can return out-of-date source
340 linecache.checkcache()
342 linecache.checkcache()
341 try:
343 try:
342 source = self.format(inspect.getsource(obj))
344 source = self.format(inspect.getsource(obj))
343 out.write(header('Source:\n')+source.rstrip())
345 out.write(header('Source:\n')+source.rstrip())
344 except:
346 except:
345 if ds:
347 if ds:
346 out.writeln(header('Docstring:\n') + indent(ds))
348 out.writeln(header('Docstring:\n') + indent(ds))
347
349
348 # Constructor docstring for classes
350 # Constructor docstring for classes
349 if obj_type is types.ClassType:
351 if obj_type is types.ClassType:
350 # reconstruct the function definition and print it:
352 # reconstruct the function definition and print it:
351 try:
353 try:
352 obj_init = obj.__init__
354 obj_init = obj.__init__
353 except AttributeError:
355 except AttributeError:
354 init_def = init_ds = None
356 init_def = init_ds = None
355 else:
357 else:
356 init_def = self.__getdef(obj_init,oname)
358 init_def = self.__getdef(obj_init,oname)
357 init_ds = getdoc(obj_init)
359 init_ds = getdoc(obj_init)
358
360
359 if init_def or init_ds:
361 if init_def or init_ds:
360 out.writeln(header('\nConstructor information:'))
362 out.writeln(header('\nConstructor information:'))
361 if init_def:
363 if init_def:
362 out.write(header('Definition:\t')+ self.format(init_def))
364 out.write(header('Definition:\t')+ self.format(init_def))
363 if init_ds:
365 if init_ds:
364 out.writeln(header('Docstring:\n') + indent(init_ds))
366 out.writeln(header('Docstring:\n') + indent(init_ds))
365 # and class docstring for instances:
367 # and class docstring for instances:
366 elif obj_type is types.InstanceType:
368 elif obj_type is types.InstanceType:
367
369
368 # First, check whether the instance docstring is identical to the
370 # First, check whether the instance docstring is identical to the
369 # class one, and print it separately if they don't coincide. In
371 # class one, and print it separately if they don't coincide. In
370 # most cases they will, but it's nice to print all the info for
372 # most cases they will, but it's nice to print all the info for
371 # objects which use instance-customized docstrings.
373 # objects which use instance-customized docstrings.
372 if ds:
374 if ds:
373 class_ds = getdoc(obj.__class__)
375 class_ds = getdoc(obj.__class__)
374 if class_ds and ds != class_ds:
376 if class_ds and ds != class_ds:
375 out.writeln(header('Class Docstring:\n') +
377 out.writeln(header('Class Docstring:\n') +
376 indent(class_ds))
378 indent(class_ds))
377
379
378 # Next, try to show constructor docstrings
380 # Next, try to show constructor docstrings
379 try:
381 try:
380 init_ds = getdoc(obj.__init__)
382 init_ds = getdoc(obj.__init__)
381 except AttributeError:
383 except AttributeError:
382 init_ds = None
384 init_ds = None
383 if init_ds:
385 if init_ds:
384 out.writeln(header('Constructor Docstring:\n') +
386 out.writeln(header('Constructor Docstring:\n') +
385 indent(init_ds))
387 indent(init_ds))
386
388
387 # Call form docstring for callable instances
389 # Call form docstring for callable instances
388 if hasattr(obj,'__call__'):
390 if hasattr(obj,'__call__'):
389 out.writeln(header('Callable:\t')+'Yes')
391 out.writeln(header('Callable:\t')+'Yes')
390 call_def = self.__getdef(obj.__call__,oname)
392 call_def = self.__getdef(obj.__call__,oname)
391 if call_def is None:
393 if call_def is None:
392 out.write(header('Call def:\t')+
394 out.write(header('Call def:\t')+
393 'Calling definition not available.')
395 'Calling definition not available.')
394 else:
396 else:
395 out.write(header('Call def:\t')+self.format(call_def))
397 out.write(header('Call def:\t')+self.format(call_def))
396 call_ds = getdoc(obj.__call__)
398 call_ds = getdoc(obj.__call__)
397 if call_ds:
399 if call_ds:
398 out.writeln(header('Call docstring:\n') + indent(call_ds))
400 out.writeln(header('Call docstring:\n') + indent(call_ds))
399
401
400 # Finally send to printer/pager
402 # Finally send to printer/pager
401 output = out.getvalue()
403 output = out.getvalue()
402 if output:
404 if output:
403 page(output)
405 page(output)
404 # end pinfo
406 # end pinfo
405
407
406 def psearch(self,pattern,ns_table,ns_search=[],
408 def psearch(self,pattern,ns_table,ns_search=[],
407 ignore_case=False,show_all=False):
409 ignore_case=False,show_all=False):
408 """Search namespaces with wildcards for objects.
410 """Search namespaces with wildcards for objects.
409
411
410 Arguments:
412 Arguments:
411
413
412 - pattern: string containing shell-like wildcards to use in namespace
414 - pattern: string containing shell-like wildcards to use in namespace
413 searches and optionally a type specification to narrow the search to
415 searches and optionally a type specification to narrow the search to
414 objects of that type.
416 objects of that type.
415
417
416 - ns_table: dict of name->namespaces for search.
418 - ns_table: dict of name->namespaces for search.
417
419
418 Optional arguments:
420 Optional arguments:
419
421
420 - ns_search: list of namespace names to include in search.
422 - ns_search: list of namespace names to include in search.
421
423
422 - ignore_case(False): make the search case-insensitive.
424 - ignore_case(False): make the search case-insensitive.
423
425
424 - show_all(False): show all names, including those starting with
426 - show_all(False): show all names, including those starting with
425 underscores.
427 underscores.
426 """
428 """
427 # defaults
429 # defaults
428 type_pattern = 'all'
430 type_pattern = 'all'
429 filter = ''
431 filter = ''
430
432
431 cmds = pattern.split()
433 cmds = pattern.split()
432 len_cmds = len(cmds)
434 len_cmds = len(cmds)
433 if len_cmds == 1:
435 if len_cmds == 1:
434 # Only filter pattern given
436 # Only filter pattern given
435 filter = cmds[0]
437 filter = cmds[0]
436 elif len_cmds == 2:
438 elif len_cmds == 2:
437 # Both filter and type specified
439 # Both filter and type specified
438 filter,type_pattern = cmds
440 filter,type_pattern = cmds
439 else:
441 else:
440 raise ValueError('invalid argument string for psearch: <%s>' %
442 raise ValueError('invalid argument string for psearch: <%s>' %
441 pattern)
443 pattern)
442
444
443 # filter search namespaces
445 # filter search namespaces
444 for name in ns_search:
446 for name in ns_search:
445 if name not in ns_table:
447 if name not in ns_table:
446 raise ValueError('invalid namespace <%s>. Valid names: %s' %
448 raise ValueError('invalid namespace <%s>. Valid names: %s' %
447 (name,ns_table.keys()))
449 (name,ns_table.keys()))
448
450
449 #print 'type_pattern:',type_pattern # dbg
451 #print 'type_pattern:',type_pattern # dbg
450 search_result = []
452 search_result = []
451 for ns_name in ns_search:
453 for ns_name in ns_search:
452 ns = ns_table[ns_name]
454 ns = ns_table[ns_name]
453 tmp_res = list(list_namespace(ns,type_pattern,filter,
455 tmp_res = list(list_namespace(ns,type_pattern,filter,
454 ignore_case=ignore_case,
456 ignore_case=ignore_case,
455 show_all=show_all))
457 show_all=show_all))
456 search_result.extend(tmp_res)
458 search_result.extend(tmp_res)
457 search_result.sort()
459 search_result.sort()
458
460
459 page('\n'.join(search_result))
461 page('\n'.join(search_result))
@@ -1,65 +1,66 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 One of Python's nicest features is its interactive interpreter. This allows
5 One of Python's nicest features is its interactive interpreter. This allows
6 very fast testing of ideas without the overhead of creating test files as is
6 very fast testing of ideas without the overhead of creating test files as is
7 typical in most programming languages. However, the interpreter supplied with
7 typical in most programming languages. However, the interpreter supplied with
8 the standard Python distribution is fairly primitive (and IDLE isn't really
8 the standard Python distribution is fairly primitive (and IDLE isn't really
9 much better).
9 much better).
10
10
11 IPython tries to:
11 IPython tries to:
12
12
13 i - provide an efficient environment for interactive work in Python
13 i - provide an efficient environment for interactive work in Python
14 programming. It tries to address what we see as shortcomings of the standard
14 programming. It tries to address what we see as shortcomings of the standard
15 Python prompt, and adds many features to make interactive work much more
15 Python prompt, and adds many features to make interactive work much more
16 efficient.
16 efficient.
17
17
18 ii - offer a flexible framework so that it can be used as the base
18 ii - offer a flexible framework so that it can be used as the base
19 environment for other projects and problems where Python can be the
19 environment for other projects and problems where Python can be the
20 underlying language. Specifically scientific environments like Mathematica,
20 underlying language. Specifically scientific environments like Mathematica,
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
22 fields. Python is a fabulous language for implementing this kind of system
22 fields. Python is a fabulous language for implementing this kind of system
23 (due to its dynamic and introspective features), and with suitable libraries
23 (due to its dynamic and introspective features), and with suitable libraries
24 entire systems could be built leveraging Python's power.
24 entire systems could be built leveraging Python's power.
25
25
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
27
27
28 IPython requires Python 2.2 or newer.
28 IPython requires Python 2.2 or newer.
29
29
30 $Id: __init__.py 1014 2006-01-13 19:16:41Z vivainio $"""
30 $Id: __init__.py 1016 2006-01-14 00:54:23Z vivainio $"""
31
31
32 #*****************************************************************************
32 #*****************************************************************************
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
34 #
34 #
35 # Distributed under the terms of the BSD License. The full license is in
35 # Distributed under the terms of the BSD License. The full license is in
36 # the file COPYING, distributed as part of this software.
36 # the file COPYING, distributed as part of this software.
37 #*****************************************************************************
37 #*****************************************************************************
38
38
39 # Enforce proper version requirements
39 # Enforce proper version requirements
40 import sys
40 import sys
41 if sys.version[0:3] < '2.3':
41 if sys.version[0:3] < '2.3':
42 raise ImportError, 'Python Version 2.3 or above is required.'
42 raise ImportError, 'Python Version 2.3 or above is required.'
43
43
44 # Define what gets imported with a 'from IPython import *'
44 # Define what gets imported with a 'from IPython import *'
45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
47 'platutils','platutils_win32','platutils_posix','platutils_dummy']
47 'platutils','platutils_win32','platutils_posix','platutils_dummy',
48 'ipapi']
48
49
49 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
50 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
50 # access to them via IPython.<name>
51 # access to them via IPython.<name>
51 glob,loc = globals(),locals()
52 glob,loc = globals(),locals()
52 for name in __all__:
53 for name in __all__:
53 __import__(name,glob,loc,[])
54 __import__(name,glob,loc,[])
54
55
55 # Release data
56 # Release data
56 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
57 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
57 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
58 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
58 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
59 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
59 Release.authors['Nathan'] )
60 Release.authors['Nathan'] )
60 __license__ = Release.license
61 __license__ = Release.license
61 __version__ = Release.version
62 __version__ = Release.version
62 __revision__ = Release.revision
63 __revision__ = Release.revision
63
64
64 # Namespace cleanup
65 # Namespace cleanup
65 del name,glob,loc
66 del name,glob,loc
@@ -1,2193 +1,2198 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.1 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 1015 2006-01-13 22:47:06Z vivainio $
9 $Id: iplib.py 1016 2006-01-14 00:54:23Z vivainio $
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 __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77
78
78 # Globals
79 # Globals
79
80
80 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
83 raw_input_original = raw_input
83
84
84 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
87
87
88
88 #****************************************************************************
89 #****************************************************************************
89 # Some utility function definitions
90 # Some utility function definitions
90
91
91 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
92
93
93 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
95
96
96 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
98 if ini_spaces:
98 return ini_spaces.end()
99 return ini_spaces.end()
99 else:
100 else:
100 return 0
101 return 0
101
102
102 def softspace(file, newvalue):
103 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
104
105
105 oldvalue = 0
106 oldvalue = 0
106 try:
107 try:
107 oldvalue = file.softspace
108 oldvalue = file.softspace
108 except AttributeError:
109 except AttributeError:
109 pass
110 pass
110 try:
111 try:
111 file.softspace = newvalue
112 file.softspace = newvalue
112 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
114 pass
115 pass
115 return oldvalue
116 return oldvalue
116
117
117
118
118 #****************************************************************************
119 #****************************************************************************
119 # Local use exceptions
120 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
121
122
122
123
123 #****************************************************************************
124 #****************************************************************************
124 # Local use classes
125 # Local use classes
125 class Bunch: pass
126 class Bunch: pass
126
127
127 class Undefined: pass
128 class Undefined: pass
128
129
129 class InputList(list):
130 class InputList(list):
130 """Class to store user input.
131 """Class to store user input.
131
132
132 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
133 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
134
135
135 exec In[4:7]
136 exec In[4:7]
136
137
137 or
138 or
138
139
139 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
140
141
141 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
142 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
143
144
144 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
145 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
146
147
147 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
148 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
149 self.last_syntax_error = None
150 self.last_syntax_error = None
150
151
151 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
152 self.last_syntax_error = value
153 self.last_syntax_error = value
153 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154
155
155 def clear_err_state(self):
156 def clear_err_state(self):
156 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
157 e = self.last_syntax_error
158 e = self.last_syntax_error
158 self.last_syntax_error = None
159 self.last_syntax_error = None
159 return e
160 return e
160
161
161 #****************************************************************************
162 #****************************************************************************
162 # Main IPython class
163 # Main IPython class
163
164
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 #
169 #
169 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
170 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
171 # chainsaw branch.
172 # chainsaw branch.
172
173
173 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class, to prevent clashes.
176 # class, to prevent clashes.
176
177
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.value']
181 # 'self.value']
181
182
182 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
183 """An enhanced console for Python."""
184 """An enhanced console for Python."""
184
185
185 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
186 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
187 isthreaded = False
188 isthreaded = False
188
189
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
191 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
192
193
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object. Uninitialized state is ok
196 IPython.ipapi._init_with_shell(self)
197
193 # some minimal strict typechecks. For some core data structures, I
198 # some minimal strict typechecks. For some core data structures, I
194 # want actual basic python types, not just anything that looks like
199 # want actual basic python types, not just anything that looks like
195 # one. This is especially true for namespaces.
200 # one. This is especially true for namespaces.
196 for ns in (user_ns,user_global_ns):
201 for ns in (user_ns,user_global_ns):
197 if ns is not None and type(ns) != types.DictType:
202 if ns is not None and type(ns) != types.DictType:
198 raise TypeError,'namespace must be a dictionary'
203 raise TypeError,'namespace must be a dictionary'
199
204
200 # Job manager (for jobs run as background threads)
205 # Job manager (for jobs run as background threads)
201 self.jobs = BackgroundJobManager()
206 self.jobs = BackgroundJobManager()
202
207
203 # track which builtins we add, so we can clean up later
208 # track which builtins we add, so we can clean up later
204 self.builtins_added = {}
209 self.builtins_added = {}
205 # This method will add the necessary builtins for operation, but
210 # This method will add the necessary builtins for operation, but
206 # tracking what it did via the builtins_added dict.
211 # tracking what it did via the builtins_added dict.
207 self.add_builtins()
212 self.add_builtins()
208
213
209 # Do the intuitively correct thing for quit/exit: we remove the
214 # Do the intuitively correct thing for quit/exit: we remove the
210 # builtins if they exist, and our own magics will deal with this
215 # builtins if they exist, and our own magics will deal with this
211 try:
216 try:
212 del __builtin__.exit, __builtin__.quit
217 del __builtin__.exit, __builtin__.quit
213 except AttributeError:
218 except AttributeError:
214 pass
219 pass
215
220
216 # Store the actual shell's name
221 # Store the actual shell's name
217 self.name = name
222 self.name = name
218
223
219 # We need to know whether the instance is meant for embedding, since
224 # We need to know whether the instance is meant for embedding, since
220 # global/local namespaces need to be handled differently in that case
225 # global/local namespaces need to be handled differently in that case
221 self.embedded = embedded
226 self.embedded = embedded
222
227
223 # command compiler
228 # command compiler
224 self.compile = codeop.CommandCompiler()
229 self.compile = codeop.CommandCompiler()
225
230
226 # User input buffer
231 # User input buffer
227 self.buffer = []
232 self.buffer = []
228
233
229 # Default name given in compilation of code
234 # Default name given in compilation of code
230 self.filename = '<ipython console>'
235 self.filename = '<ipython console>'
231
236
232 # Make an empty namespace, which extension writers can rely on both
237 # Make an empty namespace, which extension writers can rely on both
233 # existing and NEVER being used by ipython itself. This gives them a
238 # existing and NEVER being used by ipython itself. This gives them a
234 # convenient location for storing additional information and state
239 # convenient location for storing additional information and state
235 # their extensions may require, without fear of collisions with other
240 # their extensions may require, without fear of collisions with other
236 # ipython names that may develop later.
241 # ipython names that may develop later.
237 self.meta = Bunch()
242 self.meta = Bunch()
238
243
239 # Create the namespace where the user will operate. user_ns is
244 # Create the namespace where the user will operate. user_ns is
240 # normally the only one used, and it is passed to the exec calls as
245 # normally the only one used, and it is passed to the exec calls as
241 # the locals argument. But we do carry a user_global_ns namespace
246 # the locals argument. But we do carry a user_global_ns namespace
242 # given as the exec 'globals' argument, This is useful in embedding
247 # given as the exec 'globals' argument, This is useful in embedding
243 # situations where the ipython shell opens in a context where the
248 # situations where the ipython shell opens in a context where the
244 # distinction between locals and globals is meaningful.
249 # distinction between locals and globals is meaningful.
245
250
246 # FIXME. For some strange reason, __builtins__ is showing up at user
251 # FIXME. For some strange reason, __builtins__ is showing up at user
247 # level as a dict instead of a module. This is a manual fix, but I
252 # level as a dict instead of a module. This is a manual fix, but I
248 # should really track down where the problem is coming from. Alex
253 # should really track down where the problem is coming from. Alex
249 # Schmolck reported this problem first.
254 # Schmolck reported this problem first.
250
255
251 # A useful post by Alex Martelli on this topic:
256 # A useful post by Alex Martelli on this topic:
252 # Re: inconsistent value from __builtins__
257 # Re: inconsistent value from __builtins__
253 # Von: Alex Martelli <aleaxit@yahoo.com>
258 # Von: Alex Martelli <aleaxit@yahoo.com>
254 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
255 # Gruppen: comp.lang.python
260 # Gruppen: comp.lang.python
256
261
257 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
258 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
259 # > <type 'dict'>
264 # > <type 'dict'>
260 # > >>> print type(__builtins__)
265 # > >>> print type(__builtins__)
261 # > <type 'module'>
266 # > <type 'module'>
262 # > Is this difference in return value intentional?
267 # > Is this difference in return value intentional?
263
268
264 # Well, it's documented that '__builtins__' can be either a dictionary
269 # Well, it's documented that '__builtins__' can be either a dictionary
265 # or a module, and it's been that way for a long time. Whether it's
270 # or a module, and it's been that way for a long time. Whether it's
266 # intentional (or sensible), I don't know. In any case, the idea is
271 # intentional (or sensible), I don't know. In any case, the idea is
267 # that if you need to access the built-in namespace directly, you
272 # that if you need to access the built-in namespace directly, you
268 # should start with "import __builtin__" (note, no 's') which will
273 # should start with "import __builtin__" (note, no 's') which will
269 # definitely give you a module. Yeah, it's somewhat confusing:-(.
274 # definitely give you a module. Yeah, it's somewhat confusing:-(.
270
275
271 if user_ns is None:
276 if user_ns is None:
272 # Set __name__ to __main__ to better match the behavior of the
277 # Set __name__ to __main__ to better match the behavior of the
273 # normal interpreter.
278 # normal interpreter.
274 user_ns = {'__name__' :'__main__',
279 user_ns = {'__name__' :'__main__',
275 '__builtins__' : __builtin__,
280 '__builtins__' : __builtin__,
276 }
281 }
277
282
278 if user_global_ns is None:
283 if user_global_ns is None:
279 user_global_ns = {}
284 user_global_ns = {}
280
285
281 # Assign namespaces
286 # Assign namespaces
282 # This is the namespace where all normal user variables live
287 # This is the namespace where all normal user variables live
283 self.user_ns = user_ns
288 self.user_ns = user_ns
284 # Embedded instances require a separate namespace for globals.
289 # Embedded instances require a separate namespace for globals.
285 # Normally this one is unused by non-embedded instances.
290 # Normally this one is unused by non-embedded instances.
286 self.user_global_ns = user_global_ns
291 self.user_global_ns = user_global_ns
287 # A namespace to keep track of internal data structures to prevent
292 # A namespace to keep track of internal data structures to prevent
288 # them from cluttering user-visible stuff. Will be updated later
293 # them from cluttering user-visible stuff. Will be updated later
289 self.internal_ns = {}
294 self.internal_ns = {}
290
295
291 # Namespace of system aliases. Each entry in the alias
296 # Namespace of system aliases. Each entry in the alias
292 # table must be a 2-tuple of the form (N,name), where N is the number
297 # table must be a 2-tuple of the form (N,name), where N is the number
293 # of positional arguments of the alias.
298 # of positional arguments of the alias.
294 self.alias_table = {}
299 self.alias_table = {}
295
300
296 # A table holding all the namespaces IPython deals with, so that
301 # A table holding all the namespaces IPython deals with, so that
297 # introspection facilities can search easily.
302 # introspection facilities can search easily.
298 self.ns_table = {'user':user_ns,
303 self.ns_table = {'user':user_ns,
299 'user_global':user_global_ns,
304 'user_global':user_global_ns,
300 'alias':self.alias_table,
305 'alias':self.alias_table,
301 'internal':self.internal_ns,
306 'internal':self.internal_ns,
302 'builtin':__builtin__.__dict__
307 'builtin':__builtin__.__dict__
303 }
308 }
304
309
305 # The user namespace MUST have a pointer to the shell itself.
310 # The user namespace MUST have a pointer to the shell itself.
306 self.user_ns[name] = self
311 self.user_ns[name] = self
307
312
308 # We need to insert into sys.modules something that looks like a
313 # We need to insert into sys.modules something that looks like a
309 # module but which accesses the IPython namespace, for shelve and
314 # module but which accesses the IPython namespace, for shelve and
310 # pickle to work interactively. Normally they rely on getting
315 # pickle to work interactively. Normally they rely on getting
311 # everything out of __main__, but for embedding purposes each IPython
316 # everything out of __main__, but for embedding purposes each IPython
312 # instance has its own private namespace, so we can't go shoving
317 # instance has its own private namespace, so we can't go shoving
313 # everything into __main__.
318 # everything into __main__.
314
319
315 # note, however, that we should only do this for non-embedded
320 # note, however, that we should only do this for non-embedded
316 # ipythons, which really mimic the __main__.__dict__ with their own
321 # ipythons, which really mimic the __main__.__dict__ with their own
317 # namespace. Embedded instances, on the other hand, should not do
322 # namespace. Embedded instances, on the other hand, should not do
318 # this because they need to manage the user local/global namespaces
323 # this because they need to manage the user local/global namespaces
319 # only, but they live within a 'normal' __main__ (meaning, they
324 # only, but they live within a 'normal' __main__ (meaning, they
320 # shouldn't overtake the execution environment of the script they're
325 # shouldn't overtake the execution environment of the script they're
321 # embedded in).
326 # embedded in).
322
327
323 if not embedded:
328 if not embedded:
324 try:
329 try:
325 main_name = self.user_ns['__name__']
330 main_name = self.user_ns['__name__']
326 except KeyError:
331 except KeyError:
327 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
328 else:
333 else:
329 #print "pickle hack in place" # dbg
334 #print "pickle hack in place" # dbg
330 #print 'main_name:',main_name # dbg
335 #print 'main_name:',main_name # dbg
331 sys.modules[main_name] = FakeModule(self.user_ns)
336 sys.modules[main_name] = FakeModule(self.user_ns)
332
337
333 # List of input with multi-line handling.
338 # List of input with multi-line handling.
334 # Fill its zero entry, user counter starts at 1
339 # Fill its zero entry, user counter starts at 1
335 self.input_hist = InputList(['\n'])
340 self.input_hist = InputList(['\n'])
336
341
337 # list of visited directories
342 # list of visited directories
338 try:
343 try:
339 self.dir_hist = [os.getcwd()]
344 self.dir_hist = [os.getcwd()]
340 except IOError, e:
345 except IOError, e:
341 self.dir_hist = []
346 self.dir_hist = []
342
347
343 # dict of output history
348 # dict of output history
344 self.output_hist = {}
349 self.output_hist = {}
345
350
346 # dict of things NOT to alias (keywords, builtins and some magics)
351 # dict of things NOT to alias (keywords, builtins and some magics)
347 no_alias = {}
352 no_alias = {}
348 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
349 for key in keyword.kwlist + no_alias_magics:
354 for key in keyword.kwlist + no_alias_magics:
350 no_alias[key] = 1
355 no_alias[key] = 1
351 no_alias.update(__builtin__.__dict__)
356 no_alias.update(__builtin__.__dict__)
352 self.no_alias = no_alias
357 self.no_alias = no_alias
353
358
354 # make global variables for user access to these
359 # make global variables for user access to these
355 self.user_ns['_ih'] = self.input_hist
360 self.user_ns['_ih'] = self.input_hist
356 self.user_ns['_oh'] = self.output_hist
361 self.user_ns['_oh'] = self.output_hist
357 self.user_ns['_dh'] = self.dir_hist
362 self.user_ns['_dh'] = self.dir_hist
358
363
359 # user aliases to input and output histories
364 # user aliases to input and output histories
360 self.user_ns['In'] = self.input_hist
365 self.user_ns['In'] = self.input_hist
361 self.user_ns['Out'] = self.output_hist
366 self.user_ns['Out'] = self.output_hist
362
367
363 # Object variable to store code object waiting execution. This is
368 # Object variable to store code object waiting execution. This is
364 # used mainly by the multithreaded shells, but it can come in handy in
369 # used mainly by the multithreaded shells, but it can come in handy in
365 # other situations. No need to use a Queue here, since it's a single
370 # other situations. No need to use a Queue here, since it's a single
366 # item which gets cleared once run.
371 # item which gets cleared once run.
367 self.code_to_run = None
372 self.code_to_run = None
368
373
369 # escapes for automatic behavior on the command line
374 # escapes for automatic behavior on the command line
370 self.ESC_SHELL = '!'
375 self.ESC_SHELL = '!'
371 self.ESC_HELP = '?'
376 self.ESC_HELP = '?'
372 self.ESC_MAGIC = '%'
377 self.ESC_MAGIC = '%'
373 self.ESC_QUOTE = ','
378 self.ESC_QUOTE = ','
374 self.ESC_QUOTE2 = ';'
379 self.ESC_QUOTE2 = ';'
375 self.ESC_PAREN = '/'
380 self.ESC_PAREN = '/'
376
381
377 # And their associated handlers
382 # And their associated handlers
378 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
379 self.ESC_QUOTE : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
380 self.ESC_QUOTE2 : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
381 self.ESC_MAGIC : self.handle_magic,
386 self.ESC_MAGIC : self.handle_magic,
382 self.ESC_HELP : self.handle_help,
387 self.ESC_HELP : self.handle_help,
383 self.ESC_SHELL : self.handle_shell_escape,
388 self.ESC_SHELL : self.handle_shell_escape,
384 }
389 }
385
390
386 # class initializations
391 # class initializations
387 Magic.__init__(self,self)
392 Magic.__init__(self,self)
388
393
389 # Python source parser/formatter for syntax highlighting
394 # Python source parser/formatter for syntax highlighting
390 pyformat = PyColorize.Parser().format
395 pyformat = PyColorize.Parser().format
391 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
392
397
393 # hooks holds pointers used for user-side customizations
398 # hooks holds pointers used for user-side customizations
394 self.hooks = Struct()
399 self.hooks = Struct()
395
400
396 # Set all default hooks, defined in the IPython.hooks module.
401 # Set all default hooks, defined in the IPython.hooks module.
397 hooks = IPython.hooks
402 hooks = IPython.hooks
398 for hook_name in hooks.__all__:
403 for hook_name in hooks.__all__:
399 self.set_hook(hook_name,getattr(hooks,hook_name))
404 self.set_hook(hook_name,getattr(hooks,hook_name))
400
405
401 # Flag to mark unconditional exit
406 # Flag to mark unconditional exit
402 self.exit_now = False
407 self.exit_now = False
403
408
404 self.usage_min = """\
409 self.usage_min = """\
405 An enhanced console for Python.
410 An enhanced console for Python.
406 Some of its features are:
411 Some of its features are:
407 - Readline support if the readline library is present.
412 - Readline support if the readline library is present.
408 - Tab completion in the local namespace.
413 - Tab completion in the local namespace.
409 - Logging of input, see command-line options.
414 - Logging of input, see command-line options.
410 - System shell escape via ! , eg !ls.
415 - System shell escape via ! , eg !ls.
411 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
412 - Keeps track of locally defined variables via %who, %whos.
417 - Keeps track of locally defined variables via %who, %whos.
413 - Show object information with a ? eg ?x or x? (use ?? for more info).
418 - Show object information with a ? eg ?x or x? (use ?? for more info).
414 """
419 """
415 if usage: self.usage = usage
420 if usage: self.usage = usage
416 else: self.usage = self.usage_min
421 else: self.usage = self.usage_min
417
422
418 # Storage
423 # Storage
419 self.rc = rc # This will hold all configuration information
424 self.rc = rc # This will hold all configuration information
420 self.pager = 'less'
425 self.pager = 'less'
421 # temporary files used for various purposes. Deleted at exit.
426 # temporary files used for various purposes. Deleted at exit.
422 self.tempfiles = []
427 self.tempfiles = []
423
428
424 # Keep track of readline usage (later set by init_readline)
429 # Keep track of readline usage (later set by init_readline)
425 self.has_readline = False
430 self.has_readline = False
426
431
427 # template for logfile headers. It gets resolved at runtime by the
432 # template for logfile headers. It gets resolved at runtime by the
428 # logstart method.
433 # logstart method.
429 self.loghead_tpl = \
434 self.loghead_tpl = \
430 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
431 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
432 #log# opts = %s
437 #log# opts = %s
433 #log# args = %s
438 #log# args = %s
434 #log# It is safe to make manual edits below here.
439 #log# It is safe to make manual edits below here.
435 #log#-----------------------------------------------------------------------
440 #log#-----------------------------------------------------------------------
436 """
441 """
437 # for pushd/popd management
442 # for pushd/popd management
438 try:
443 try:
439 self.home_dir = get_home_dir()
444 self.home_dir = get_home_dir()
440 except HomeDirError,msg:
445 except HomeDirError,msg:
441 fatal(msg)
446 fatal(msg)
442
447
443 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
444
449
445 # Functions to call the underlying shell.
450 # Functions to call the underlying shell.
446
451
447 # utility to expand user variables via Itpl
452 # utility to expand user variables via Itpl
448 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
449 self.user_ns))
454 self.user_ns))
450 # The first is similar to os.system, but it doesn't return a value,
455 # The first is similar to os.system, but it doesn't return a value,
451 # and it allows interpolation of variables in the user's namespace.
456 # and it allows interpolation of variables in the user's namespace.
452 self.system = lambda cmd: shell(self.var_expand(cmd),
457 self.system = lambda cmd: shell(self.var_expand(cmd),
453 header='IPython system call: ',
458 header='IPython system call: ',
454 verbose=self.rc.system_verbose)
459 verbose=self.rc.system_verbose)
455 # These are for getoutput and getoutputerror:
460 # These are for getoutput and getoutputerror:
456 self.getoutput = lambda cmd: \
461 self.getoutput = lambda cmd: \
457 getoutput(self.var_expand(cmd),
462 getoutput(self.var_expand(cmd),
458 header='IPython system call: ',
463 header='IPython system call: ',
459 verbose=self.rc.system_verbose)
464 verbose=self.rc.system_verbose)
460 self.getoutputerror = lambda cmd: \
465 self.getoutputerror = lambda cmd: \
461 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
462 self.user_ns)),
467 self.user_ns)),
463 header='IPython system call: ',
468 header='IPython system call: ',
464 verbose=self.rc.system_verbose)
469 verbose=self.rc.system_verbose)
465
470
466 # RegExp for splitting line contents into pre-char//first
471 # RegExp for splitting line contents into pre-char//first
467 # word-method//rest. For clarity, each group in on one line.
472 # word-method//rest. For clarity, each group in on one line.
468
473
469 # WARNING: update the regexp if the above escapes are changed, as they
474 # WARNING: update the regexp if the above escapes are changed, as they
470 # are hardwired in.
475 # are hardwired in.
471
476
472 # Don't get carried away with trying to make the autocalling catch too
477 # Don't get carried away with trying to make the autocalling catch too
473 # much: it's better to be conservative rather than to trigger hidden
478 # much: it's better to be conservative rather than to trigger hidden
474 # evals() somewhere and end up causing side effects.
479 # evals() somewhere and end up causing side effects.
475
480
476 self.line_split = re.compile(r'^([\s*,;/])'
481 self.line_split = re.compile(r'^([\s*,;/])'
477 r'([\?\w\.]+\w*\s*)'
482 r'([\?\w\.]+\w*\s*)'
478 r'(\(?.*$)')
483 r'(\(?.*$)')
479
484
480 # Original re, keep around for a while in case changes break something
485 # Original re, keep around for a while in case changes break something
481 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
482 # r'(\s*[\?\w\.]+\w*\s*)'
487 # r'(\s*[\?\w\.]+\w*\s*)'
483 # r'(\(?.*$)')
488 # r'(\(?.*$)')
484
489
485 # RegExp to identify potential function names
490 # RegExp to identify potential function names
486 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
487
492
488 # RegExp to exclude strings with this start from autocalling. In
493 # RegExp to exclude strings with this start from autocalling. In
489 # particular, all binary operators should be excluded, so that if foo
494 # particular, all binary operators should be excluded, so that if foo
490 # is callable, foo OP bar doesn't become foo(OP bar), which is
495 # is callable, foo OP bar doesn't become foo(OP bar), which is
491 # invalid. The characters '!=()' don't need to be checked for, as the
496 # invalid. The characters '!=()' don't need to be checked for, as the
492 # _prefilter routine explicitely does so, to catch direct calls and
497 # _prefilter routine explicitely does so, to catch direct calls and
493 # rebindings of existing names.
498 # rebindings of existing names.
494
499
495 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
496 # it affects the rest of the group in square brackets.
501 # it affects the rest of the group in square brackets.
497 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
498 '|^is |^not |^in |^and |^or ')
503 '|^is |^not |^in |^and |^or ')
499
504
500 # try to catch also methods for stuff in lists/tuples/dicts: off
505 # try to catch also methods for stuff in lists/tuples/dicts: off
501 # (experimental). For this to work, the line_split regexp would need
506 # (experimental). For this to work, the line_split regexp would need
502 # to be modified so it wouldn't break things at '['. That line is
507 # to be modified so it wouldn't break things at '['. That line is
503 # nasty enough that I shouldn't change it until I can test it _well_.
508 # nasty enough that I shouldn't change it until I can test it _well_.
504 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
505
510
506 # keep track of where we started running (mainly for crash post-mortem)
511 # keep track of where we started running (mainly for crash post-mortem)
507 self.starting_dir = os.getcwd()
512 self.starting_dir = os.getcwd()
508
513
509 # Various switches which can be set
514 # Various switches which can be set
510 self.CACHELENGTH = 5000 # this is cheap, it's just text
515 self.CACHELENGTH = 5000 # this is cheap, it's just text
511 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
512 self.banner2 = banner2
517 self.banner2 = banner2
513
518
514 # TraceBack handlers:
519 # TraceBack handlers:
515
520
516 # Syntax error handler.
521 # Syntax error handler.
517 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
518
523
519 # The interactive one is initialized with an offset, meaning we always
524 # The interactive one is initialized with an offset, meaning we always
520 # want to remove the topmost item in the traceback, which is our own
525 # want to remove the topmost item in the traceback, which is our own
521 # internal code. Valid modes: ['Plain','Context','Verbose']
526 # internal code. Valid modes: ['Plain','Context','Verbose']
522 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
523 color_scheme='NoColor',
528 color_scheme='NoColor',
524 tb_offset = 1)
529 tb_offset = 1)
525
530
526 # IPython itself shouldn't crash. This will produce a detailed
531 # IPython itself shouldn't crash. This will produce a detailed
527 # post-mortem if it does. But we only install the crash handler for
532 # post-mortem if it does. But we only install the crash handler for
528 # non-threaded shells, the threaded ones use a normal verbose reporter
533 # non-threaded shells, the threaded ones use a normal verbose reporter
529 # and lose the crash handler. This is because exceptions in the main
534 # and lose the crash handler. This is because exceptions in the main
530 # thread (such as in GUI code) propagate directly to sys.excepthook,
535 # thread (such as in GUI code) propagate directly to sys.excepthook,
531 # and there's no point in printing crash dumps for every user exception.
536 # and there's no point in printing crash dumps for every user exception.
532 if self.isthreaded:
537 if self.isthreaded:
533 sys.excepthook = ultraTB.FormattedTB()
538 sys.excepthook = ultraTB.FormattedTB()
534 else:
539 else:
535 from IPython import CrashHandler
540 from IPython import CrashHandler
536 sys.excepthook = CrashHandler.CrashHandler(self)
541 sys.excepthook = CrashHandler.CrashHandler(self)
537
542
538 # The instance will store a pointer to this, so that runtime code
543 # The instance will store a pointer to this, so that runtime code
539 # (such as magics) can access it. This is because during the
544 # (such as magics) can access it. This is because during the
540 # read-eval loop, it gets temporarily overwritten (to deal with GUI
545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
541 # frameworks).
546 # frameworks).
542 self.sys_excepthook = sys.excepthook
547 self.sys_excepthook = sys.excepthook
543
548
544 # and add any custom exception handlers the user may have specified
549 # and add any custom exception handlers the user may have specified
545 self.set_custom_exc(*custom_exceptions)
550 self.set_custom_exc(*custom_exceptions)
546
551
547 # Object inspector
552 # Object inspector
548 self.inspector = OInspect.Inspector(OInspect.InspectColors,
553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
549 PyColorize.ANSICodeColors,
554 PyColorize.ANSICodeColors,
550 'NoColor')
555 'NoColor')
551 # indentation management
556 # indentation management
552 self.autoindent = False
557 self.autoindent = False
553 self.indent_current_nsp = 0
558 self.indent_current_nsp = 0
554 self.indent_current = '' # actual indent string
559 self.indent_current = '' # actual indent string
555
560
556 # Make some aliases automatically
561 # Make some aliases automatically
557 # Prepare list of shell aliases to auto-define
562 # Prepare list of shell aliases to auto-define
558 if os.name == 'posix':
563 if os.name == 'posix':
559 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
560 'mv mv -i','rm rm -i','cp cp -i',
565 'mv mv -i','rm rm -i','cp cp -i',
561 'cat cat','less less','clear clear',
566 'cat cat','less less','clear clear',
562 # a better ls
567 # a better ls
563 'ls ls -F',
568 'ls ls -F',
564 # long ls
569 # long ls
565 'll ls -lF',
570 'll ls -lF',
566 # color ls
571 # color ls
567 'lc ls -F -o --color',
572 'lc ls -F -o --color',
568 # ls normal files only
573 # ls normal files only
569 'lf ls -F -o --color %l | grep ^-',
574 'lf ls -F -o --color %l | grep ^-',
570 # ls symbolic links
575 # ls symbolic links
571 'lk ls -F -o --color %l | grep ^l',
576 'lk ls -F -o --color %l | grep ^l',
572 # directories or links to directories,
577 # directories or links to directories,
573 'ldir ls -F -o --color %l | grep /$',
578 'ldir ls -F -o --color %l | grep /$',
574 # things which are executable
579 # things which are executable
575 'lx ls -F -o --color %l | grep ^-..x',
580 'lx ls -F -o --color %l | grep ^-..x',
576 )
581 )
577 elif os.name in ['nt','dos']:
582 elif os.name in ['nt','dos']:
578 auto_alias = ('dir dir /on', 'ls dir /on',
583 auto_alias = ('dir dir /on', 'ls dir /on',
579 'ddir dir /ad /on', 'ldir dir /ad /on',
584 'ddir dir /ad /on', 'ldir dir /ad /on',
580 'mkdir mkdir','rmdir rmdir','echo echo',
585 'mkdir mkdir','rmdir rmdir','echo echo',
581 'ren ren','cls cls','copy copy')
586 'ren ren','cls cls','copy copy')
582 else:
587 else:
583 auto_alias = ()
588 auto_alias = ()
584 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
585 # Call the actual (public) initializer
590 # Call the actual (public) initializer
586 self.init_auto_alias()
591 self.init_auto_alias()
587 # end __init__
592 # end __init__
588
593
589 def post_config_initialization(self):
594 def post_config_initialization(self):
590 """Post configuration init method
595 """Post configuration init method
591
596
592 This is called after the configuration files have been processed to
597 This is called after the configuration files have been processed to
593 'finalize' the initialization."""
598 'finalize' the initialization."""
594
599
595 rc = self.rc
600 rc = self.rc
596
601
597 # Load readline proper
602 # Load readline proper
598 if rc.readline:
603 if rc.readline:
599 self.init_readline()
604 self.init_readline()
600
605
601 # log system
606 # log system
602 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
603 # local shortcut, this is used a LOT
608 # local shortcut, this is used a LOT
604 self.log = self.logger.log
609 self.log = self.logger.log
605
610
606 # Initialize cache, set in/out prompts and printing system
611 # Initialize cache, set in/out prompts and printing system
607 self.outputcache = CachedOutput(self,
612 self.outputcache = CachedOutput(self,
608 rc.cache_size,
613 rc.cache_size,
609 rc.pprint,
614 rc.pprint,
610 input_sep = rc.separate_in,
615 input_sep = rc.separate_in,
611 output_sep = rc.separate_out,
616 output_sep = rc.separate_out,
612 output_sep2 = rc.separate_out2,
617 output_sep2 = rc.separate_out2,
613 ps1 = rc.prompt_in1,
618 ps1 = rc.prompt_in1,
614 ps2 = rc.prompt_in2,
619 ps2 = rc.prompt_in2,
615 ps_out = rc.prompt_out,
620 ps_out = rc.prompt_out,
616 pad_left = rc.prompts_pad_left)
621 pad_left = rc.prompts_pad_left)
617
622
618 # user may have over-ridden the default print hook:
623 # user may have over-ridden the default print hook:
619 try:
624 try:
620 self.outputcache.__class__.display = self.hooks.display
625 self.outputcache.__class__.display = self.hooks.display
621 except AttributeError:
626 except AttributeError:
622 pass
627 pass
623
628
624 # I don't like assigning globally to sys, because it means when embedding
629 # I don't like assigning globally to sys, because it means when embedding
625 # instances, each embedded instance overrides the previous choice. But
630 # instances, each embedded instance overrides the previous choice. But
626 # sys.displayhook seems to be called internally by exec, so I don't see a
631 # sys.displayhook seems to be called internally by exec, so I don't see a
627 # way around it.
632 # way around it.
628 sys.displayhook = self.outputcache
633 sys.displayhook = self.outputcache
629
634
630 # Set user colors (don't do it in the constructor above so that it
635 # Set user colors (don't do it in the constructor above so that it
631 # doesn't crash if colors option is invalid)
636 # doesn't crash if colors option is invalid)
632 self.magic_colors(rc.colors)
637 self.magic_colors(rc.colors)
633
638
634 # Set calling of pdb on exceptions
639 # Set calling of pdb on exceptions
635 self.call_pdb = rc.pdb
640 self.call_pdb = rc.pdb
636
641
637 # Load user aliases
642 # Load user aliases
638 for alias in rc.alias:
643 for alias in rc.alias:
639 self.magic_alias(alias)
644 self.magic_alias(alias)
640
645
641 # dynamic data that survives through sessions
646 # dynamic data that survives through sessions
642 # XXX make the filename a config option?
647 # XXX make the filename a config option?
643 persist_base = 'persist'
648 persist_base = 'persist'
644 if rc.profile:
649 if rc.profile:
645 persist_base += '_%s' % rc.profile
650 persist_base += '_%s' % rc.profile
646 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
647
652
648 try:
653 try:
649 self.persist = pickle.load(file(self.persist_fname))
654 self.persist = pickle.load(file(self.persist_fname))
650 except:
655 except:
651 self.persist = {}
656 self.persist = {}
652
657
653
658
654 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
655 try:
660 try:
656 obj = pickle.loads(value)
661 obj = pickle.loads(value)
657 except:
662 except:
658
663
659 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
660 print "The error was:",sys.exc_info()[0]
665 print "The error was:",sys.exc_info()[0]
661 continue
666 continue
662
667
663
668
664 self.user_ns[key] = obj
669 self.user_ns[key] = obj
665
670
666 def add_builtins(self):
671 def add_builtins(self):
667 """Store ipython references into the builtin namespace.
672 """Store ipython references into the builtin namespace.
668
673
669 Some parts of ipython operate via builtins injected here, which hold a
674 Some parts of ipython operate via builtins injected here, which hold a
670 reference to IPython itself."""
675 reference to IPython itself."""
671
676
672 builtins_new = dict(__IPYTHON__ = self,
677 builtins_new = dict(__IPYTHON__ = self,
673 ip_set_hook = self.set_hook,
678 ip_set_hook = self.set_hook,
674 jobs = self.jobs,
679 jobs = self.jobs,
675 ipmagic = self.ipmagic,
680 ipmagic = self.ipmagic,
676 ipalias = self.ipalias,
681 ipalias = self.ipalias,
677 ipsystem = self.ipsystem,
682 ipsystem = self.ipsystem,
678 )
683 )
679 for biname,bival in builtins_new.items():
684 for biname,bival in builtins_new.items():
680 try:
685 try:
681 # store the orignal value so we can restore it
686 # store the orignal value so we can restore it
682 self.builtins_added[biname] = __builtin__.__dict__[biname]
687 self.builtins_added[biname] = __builtin__.__dict__[biname]
683 except KeyError:
688 except KeyError:
684 # or mark that it wasn't defined, and we'll just delete it at
689 # or mark that it wasn't defined, and we'll just delete it at
685 # cleanup
690 # cleanup
686 self.builtins_added[biname] = Undefined
691 self.builtins_added[biname] = Undefined
687 __builtin__.__dict__[biname] = bival
692 __builtin__.__dict__[biname] = bival
688
693
689 # Keep in the builtins a flag for when IPython is active. We set it
694 # Keep in the builtins a flag for when IPython is active. We set it
690 # with setdefault so that multiple nested IPythons don't clobber one
695 # with setdefault so that multiple nested IPythons don't clobber one
691 # another. Each will increase its value by one upon being activated,
696 # another. Each will increase its value by one upon being activated,
692 # which also gives us a way to determine the nesting level.
697 # which also gives us a way to determine the nesting level.
693 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
694
699
695 def clean_builtins(self):
700 def clean_builtins(self):
696 """Remove any builtins which might have been added by add_builtins, or
701 """Remove any builtins which might have been added by add_builtins, or
697 restore overwritten ones to their previous values."""
702 restore overwritten ones to their previous values."""
698 for biname,bival in self.builtins_added.items():
703 for biname,bival in self.builtins_added.items():
699 if bival is Undefined:
704 if bival is Undefined:
700 del __builtin__.__dict__[biname]
705 del __builtin__.__dict__[biname]
701 else:
706 else:
702 __builtin__.__dict__[biname] = bival
707 __builtin__.__dict__[biname] = bival
703 self.builtins_added.clear()
708 self.builtins_added.clear()
704
709
705 def set_hook(self,name,hook):
710 def set_hook(self,name,hook):
706 """set_hook(name,hook) -> sets an internal IPython hook.
711 """set_hook(name,hook) -> sets an internal IPython hook.
707
712
708 IPython exposes some of its internal API as user-modifiable hooks. By
713 IPython exposes some of its internal API as user-modifiable hooks. By
709 resetting one of these hooks, you can modify IPython's behavior to
714 resetting one of these hooks, you can modify IPython's behavior to
710 call at runtime your own routines."""
715 call at runtime your own routines."""
711
716
712 # At some point in the future, this should validate the hook before it
717 # At some point in the future, this should validate the hook before it
713 # accepts it. Probably at least check that the hook takes the number
718 # accepts it. Probably at least check that the hook takes the number
714 # of args it's supposed to.
719 # of args it's supposed to.
715 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
716
721
717 def set_custom_exc(self,exc_tuple,handler):
722 def set_custom_exc(self,exc_tuple,handler):
718 """set_custom_exc(exc_tuple,handler)
723 """set_custom_exc(exc_tuple,handler)
719
724
720 Set a custom exception handler, which will be called if any of the
725 Set a custom exception handler, which will be called if any of the
721 exceptions in exc_tuple occur in the mainloop (specifically, in the
726 exceptions in exc_tuple occur in the mainloop (specifically, in the
722 runcode() method.
727 runcode() method.
723
728
724 Inputs:
729 Inputs:
725
730
726 - exc_tuple: a *tuple* of valid exceptions to call the defined
731 - exc_tuple: a *tuple* of valid exceptions to call the defined
727 handler for. It is very important that you use a tuple, and NOT A
732 handler for. It is very important that you use a tuple, and NOT A
728 LIST here, because of the way Python's except statement works. If
733 LIST here, because of the way Python's except statement works. If
729 you only want to trap a single exception, use a singleton tuple:
734 you only want to trap a single exception, use a singleton tuple:
730
735
731 exc_tuple == (MyCustomException,)
736 exc_tuple == (MyCustomException,)
732
737
733 - handler: this must be defined as a function with the following
738 - handler: this must be defined as a function with the following
734 basic interface: def my_handler(self,etype,value,tb).
739 basic interface: def my_handler(self,etype,value,tb).
735
740
736 This will be made into an instance method (via new.instancemethod)
741 This will be made into an instance method (via new.instancemethod)
737 of IPython itself, and it will be called if any of the exceptions
742 of IPython itself, and it will be called if any of the exceptions
738 listed in the exc_tuple are caught. If the handler is None, an
743 listed in the exc_tuple are caught. If the handler is None, an
739 internal basic one is used, which just prints basic info.
744 internal basic one is used, which just prints basic info.
740
745
741 WARNING: by putting in your own exception handler into IPython's main
746 WARNING: by putting in your own exception handler into IPython's main
742 execution loop, you run a very good chance of nasty crashes. This
747 execution loop, you run a very good chance of nasty crashes. This
743 facility should only be used if you really know what you are doing."""
748 facility should only be used if you really know what you are doing."""
744
749
745 assert type(exc_tuple)==type(()) , \
750 assert type(exc_tuple)==type(()) , \
746 "The custom exceptions must be given AS A TUPLE."
751 "The custom exceptions must be given AS A TUPLE."
747
752
748 def dummy_handler(self,etype,value,tb):
753 def dummy_handler(self,etype,value,tb):
749 print '*** Simple custom exception handler ***'
754 print '*** Simple custom exception handler ***'
750 print 'Exception type :',etype
755 print 'Exception type :',etype
751 print 'Exception value:',value
756 print 'Exception value:',value
752 print 'Traceback :',tb
757 print 'Traceback :',tb
753 print 'Source code :','\n'.join(self.buffer)
758 print 'Source code :','\n'.join(self.buffer)
754
759
755 if handler is None: handler = dummy_handler
760 if handler is None: handler = dummy_handler
756
761
757 self.CustomTB = new.instancemethod(handler,self,self.__class__)
762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
758 self.custom_exceptions = exc_tuple
763 self.custom_exceptions = exc_tuple
759
764
760 def set_custom_completer(self,completer,pos=0):
765 def set_custom_completer(self,completer,pos=0):
761 """set_custom_completer(completer,pos=0)
766 """set_custom_completer(completer,pos=0)
762
767
763 Adds a new custom completer function.
768 Adds a new custom completer function.
764
769
765 The position argument (defaults to 0) is the index in the completers
770 The position argument (defaults to 0) is the index in the completers
766 list where you want the completer to be inserted."""
771 list where you want the completer to be inserted."""
767
772
768 newcomp = new.instancemethod(completer,self.Completer,
773 newcomp = new.instancemethod(completer,self.Completer,
769 self.Completer.__class__)
774 self.Completer.__class__)
770 self.Completer.matchers.insert(pos,newcomp)
775 self.Completer.matchers.insert(pos,newcomp)
771
776
772 def _get_call_pdb(self):
777 def _get_call_pdb(self):
773 return self._call_pdb
778 return self._call_pdb
774
779
775 def _set_call_pdb(self,val):
780 def _set_call_pdb(self,val):
776
781
777 if val not in (0,1,False,True):
782 if val not in (0,1,False,True):
778 raise ValueError,'new call_pdb value must be boolean'
783 raise ValueError,'new call_pdb value must be boolean'
779
784
780 # store value in instance
785 # store value in instance
781 self._call_pdb = val
786 self._call_pdb = val
782
787
783 # notify the actual exception handlers
788 # notify the actual exception handlers
784 self.InteractiveTB.call_pdb = val
789 self.InteractiveTB.call_pdb = val
785 if self.isthreaded:
790 if self.isthreaded:
786 try:
791 try:
787 self.sys_excepthook.call_pdb = val
792 self.sys_excepthook.call_pdb = val
788 except:
793 except:
789 warn('Failed to activate pdb for threaded exception handler')
794 warn('Failed to activate pdb for threaded exception handler')
790
795
791 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
792 'Control auto-activation of pdb at exceptions')
797 'Control auto-activation of pdb at exceptions')
793
798
794
799
795 # These special functions get installed in the builtin namespace, to
800 # These special functions get installed in the builtin namespace, to
796 # provide programmatic (pure python) access to magics, aliases and system
801 # provide programmatic (pure python) access to magics, aliases and system
797 # calls. This is important for logging, user scripting, and more.
802 # calls. This is important for logging, user scripting, and more.
798
803
799 # We are basically exposing, via normal python functions, the three
804 # We are basically exposing, via normal python functions, the three
800 # mechanisms in which ipython offers special call modes (magics for
805 # mechanisms in which ipython offers special call modes (magics for
801 # internal control, aliases for direct system access via pre-selected
806 # internal control, aliases for direct system access via pre-selected
802 # names, and !cmd for calling arbitrary system commands).
807 # names, and !cmd for calling arbitrary system commands).
803
808
804 def ipmagic(self,arg_s):
809 def ipmagic(self,arg_s):
805 """Call a magic function by name.
810 """Call a magic function by name.
806
811
807 Input: a string containing the name of the magic function to call and any
812 Input: a string containing the name of the magic function to call and any
808 additional arguments to be passed to the magic.
813 additional arguments to be passed to the magic.
809
814
810 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
811 prompt:
816 prompt:
812
817
813 In[1]: %name -opt foo bar
818 In[1]: %name -opt foo bar
814
819
815 To call a magic without arguments, simply use ipmagic('name').
820 To call a magic without arguments, simply use ipmagic('name').
816
821
817 This provides a proper Python function to call IPython's magics in any
822 This provides a proper Python function to call IPython's magics in any
818 valid Python code you can type at the interpreter, including loops and
823 valid Python code you can type at the interpreter, including loops and
819 compound statements. It is added by IPython to the Python builtin
824 compound statements. It is added by IPython to the Python builtin
820 namespace upon initialization."""
825 namespace upon initialization."""
821
826
822 args = arg_s.split(' ',1)
827 args = arg_s.split(' ',1)
823 magic_name = args[0]
828 magic_name = args[0]
824 if magic_name.startswith(self.ESC_MAGIC):
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
825 magic_name = magic_name[1:]
830
826 try:
831 try:
827 magic_args = args[1]
832 magic_args = args[1]
828 except IndexError:
833 except IndexError:
829 magic_args = ''
834 magic_args = ''
830 fn = getattr(self,'magic_'+magic_name,None)
835 fn = getattr(self,'magic_'+magic_name,None)
831 if fn is None:
836 if fn is None:
832 error("Magic function `%s` not found." % magic_name)
837 error("Magic function `%s` not found." % magic_name)
833 else:
838 else:
834 magic_args = self.var_expand(magic_args)
839 magic_args = self.var_expand(magic_args)
835 return fn(magic_args)
840 return fn(magic_args)
836
841
837 def ipalias(self,arg_s):
842 def ipalias(self,arg_s):
838 """Call an alias by name.
843 """Call an alias by name.
839
844
840 Input: a string containing the name of the alias to call and any
845 Input: a string containing the name of the alias to call and any
841 additional arguments to be passed to the magic.
846 additional arguments to be passed to the magic.
842
847
843 ipalias('name -opt foo bar') is equivalent to typing at the ipython
848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
844 prompt:
849 prompt:
845
850
846 In[1]: name -opt foo bar
851 In[1]: name -opt foo bar
847
852
848 To call an alias without arguments, simply use ipalias('name').
853 To call an alias without arguments, simply use ipalias('name').
849
854
850 This provides a proper Python function to call IPython's aliases in any
855 This provides a proper Python function to call IPython's aliases in any
851 valid Python code you can type at the interpreter, including loops and
856 valid Python code you can type at the interpreter, including loops and
852 compound statements. It is added by IPython to the Python builtin
857 compound statements. It is added by IPython to the Python builtin
853 namespace upon initialization."""
858 namespace upon initialization."""
854
859
855 args = arg_s.split(' ',1)
860 args = arg_s.split(' ',1)
856 alias_name = args[0]
861 alias_name = args[0]
857 try:
862 try:
858 alias_args = args[1]
863 alias_args = args[1]
859 except IndexError:
864 except IndexError:
860 alias_args = ''
865 alias_args = ''
861 if alias_name in self.alias_table:
866 if alias_name in self.alias_table:
862 self.call_alias(alias_name,alias_args)
867 self.call_alias(alias_name,alias_args)
863 else:
868 else:
864 error("Alias `%s` not found." % alias_name)
869 error("Alias `%s` not found." % alias_name)
865
870
866 def ipsystem(self,arg_s):
871 def ipsystem(self,arg_s):
867 """Make a system call, using IPython."""
872 """Make a system call, using IPython."""
868
873
869 self.system(arg_s)
874 self.system(arg_s)
870
875
871 def complete(self,text):
876 def complete(self,text):
872 """Return a sorted list of all possible completions on text.
877 """Return a sorted list of all possible completions on text.
873
878
874 Inputs:
879 Inputs:
875
880
876 - text: a string of text to be completed on.
881 - text: a string of text to be completed on.
877
882
878 This is a wrapper around the completion mechanism, similar to what
883 This is a wrapper around the completion mechanism, similar to what
879 readline does at the command line when the TAB key is hit. By
884 readline does at the command line when the TAB key is hit. By
880 exposing it as a method, it can be used by other non-readline
885 exposing it as a method, it can be used by other non-readline
881 environments (such as GUIs) for text completion.
886 environments (such as GUIs) for text completion.
882
887
883 Simple usage example:
888 Simple usage example:
884
889
885 In [1]: x = 'hello'
890 In [1]: x = 'hello'
886
891
887 In [2]: __IP.complete('x.l')
892 In [2]: __IP.complete('x.l')
888 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
889
894
890 complete = self.Completer.complete
895 complete = self.Completer.complete
891 state = 0
896 state = 0
892 # use a dict so we get unique keys, since ipyhton's multiple
897 # use a dict so we get unique keys, since ipyhton's multiple
893 # completers can return duplicates.
898 # completers can return duplicates.
894 comps = {}
899 comps = {}
895 while True:
900 while True:
896 newcomp = complete(text,state)
901 newcomp = complete(text,state)
897 if newcomp is None:
902 if newcomp is None:
898 break
903 break
899 comps[newcomp] = 1
904 comps[newcomp] = 1
900 state += 1
905 state += 1
901 outcomps = comps.keys()
906 outcomps = comps.keys()
902 outcomps.sort()
907 outcomps.sort()
903 return outcomps
908 return outcomps
904
909
905 def set_completer_frame(self, frame=None):
910 def set_completer_frame(self, frame=None):
906 if frame:
911 if frame:
907 self.Completer.namespace = frame.f_locals
912 self.Completer.namespace = frame.f_locals
908 self.Completer.global_namespace = frame.f_globals
913 self.Completer.global_namespace = frame.f_globals
909 else:
914 else:
910 self.Completer.namespace = self.user_ns
915 self.Completer.namespace = self.user_ns
911 self.Completer.global_namespace = self.user_global_ns
916 self.Completer.global_namespace = self.user_global_ns
912
917
913 def init_auto_alias(self):
918 def init_auto_alias(self):
914 """Define some aliases automatically.
919 """Define some aliases automatically.
915
920
916 These are ALL parameter-less aliases"""
921 These are ALL parameter-less aliases"""
917
922
918 for alias,cmd in self.auto_alias:
923 for alias,cmd in self.auto_alias:
919 self.alias_table[alias] = (0,cmd)
924 self.alias_table[alias] = (0,cmd)
920
925
921 def alias_table_validate(self,verbose=0):
926 def alias_table_validate(self,verbose=0):
922 """Update information about the alias table.
927 """Update information about the alias table.
923
928
924 In particular, make sure no Python keywords/builtins are in it."""
929 In particular, make sure no Python keywords/builtins are in it."""
925
930
926 no_alias = self.no_alias
931 no_alias = self.no_alias
927 for k in self.alias_table.keys():
932 for k in self.alias_table.keys():
928 if k in no_alias:
933 if k in no_alias:
929 del self.alias_table[k]
934 del self.alias_table[k]
930 if verbose:
935 if verbose:
931 print ("Deleting alias <%s>, it's a Python "
936 print ("Deleting alias <%s>, it's a Python "
932 "keyword or builtin." % k)
937 "keyword or builtin." % k)
933
938
934 def set_autoindent(self,value=None):
939 def set_autoindent(self,value=None):
935 """Set the autoindent flag, checking for readline support.
940 """Set the autoindent flag, checking for readline support.
936
941
937 If called with no arguments, it acts as a toggle."""
942 If called with no arguments, it acts as a toggle."""
938
943
939 if not self.has_readline:
944 if not self.has_readline:
940 if os.name == 'posix':
945 if os.name == 'posix':
941 warn("The auto-indent feature requires the readline library")
946 warn("The auto-indent feature requires the readline library")
942 self.autoindent = 0
947 self.autoindent = 0
943 return
948 return
944 if value is None:
949 if value is None:
945 self.autoindent = not self.autoindent
950 self.autoindent = not self.autoindent
946 else:
951 else:
947 self.autoindent = value
952 self.autoindent = value
948
953
949 def rc_set_toggle(self,rc_field,value=None):
954 def rc_set_toggle(self,rc_field,value=None):
950 """Set or toggle a field in IPython's rc config. structure.
955 """Set or toggle a field in IPython's rc config. structure.
951
956
952 If called with no arguments, it acts as a toggle.
957 If called with no arguments, it acts as a toggle.
953
958
954 If called with a non-existent field, the resulting AttributeError
959 If called with a non-existent field, the resulting AttributeError
955 exception will propagate out."""
960 exception will propagate out."""
956
961
957 rc_val = getattr(self.rc,rc_field)
962 rc_val = getattr(self.rc,rc_field)
958 if value is None:
963 if value is None:
959 value = not rc_val
964 value = not rc_val
960 setattr(self.rc,rc_field,value)
965 setattr(self.rc,rc_field,value)
961
966
962 def user_setup(self,ipythondir,rc_suffix,mode='install'):
967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
963 """Install the user configuration directory.
968 """Install the user configuration directory.
964
969
965 Can be called when running for the first time or to upgrade the user's
970 Can be called when running for the first time or to upgrade the user's
966 .ipython/ directory with the mode parameter. Valid modes are 'install'
971 .ipython/ directory with the mode parameter. Valid modes are 'install'
967 and 'upgrade'."""
972 and 'upgrade'."""
968
973
969 def wait():
974 def wait():
970 try:
975 try:
971 raw_input("Please press <RETURN> to start IPython.")
976 raw_input("Please press <RETURN> to start IPython.")
972 except EOFError:
977 except EOFError:
973 print >> Term.cout
978 print >> Term.cout
974 print '*'*70
979 print '*'*70
975
980
976 cwd = os.getcwd() # remember where we started
981 cwd = os.getcwd() # remember where we started
977 glb = glob.glob
982 glb = glob.glob
978 print '*'*70
983 print '*'*70
979 if mode == 'install':
984 if mode == 'install':
980 print \
985 print \
981 """Welcome to IPython. I will try to create a personal configuration directory
986 """Welcome to IPython. I will try to create a personal configuration directory
982 where you can customize many aspects of IPython's functionality in:\n"""
987 where you can customize many aspects of IPython's functionality in:\n"""
983 else:
988 else:
984 print 'I am going to upgrade your configuration in:'
989 print 'I am going to upgrade your configuration in:'
985
990
986 print ipythondir
991 print ipythondir
987
992
988 rcdirend = os.path.join('IPython','UserConfig')
993 rcdirend = os.path.join('IPython','UserConfig')
989 cfg = lambda d: os.path.join(d,rcdirend)
994 cfg = lambda d: os.path.join(d,rcdirend)
990 try:
995 try:
991 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
992 except IOError:
997 except IOError:
993 warning = """
998 warning = """
994 Installation error. IPython's directory was not found.
999 Installation error. IPython's directory was not found.
995
1000
996 Check the following:
1001 Check the following:
997
1002
998 The ipython/IPython directory should be in a directory belonging to your
1003 The ipython/IPython directory should be in a directory belonging to your
999 PYTHONPATH environment variable (that is, it should be in a directory
1004 PYTHONPATH environment variable (that is, it should be in a directory
1000 belonging to sys.path). You can copy it explicitly there or just link to it.
1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1001
1006
1002 IPython will proceed with builtin defaults.
1007 IPython will proceed with builtin defaults.
1003 """
1008 """
1004 warn(warning)
1009 warn(warning)
1005 wait()
1010 wait()
1006 return
1011 return
1007
1012
1008 if mode == 'install':
1013 if mode == 'install':
1009 try:
1014 try:
1010 shutil.copytree(rcdir,ipythondir)
1015 shutil.copytree(rcdir,ipythondir)
1011 os.chdir(ipythondir)
1016 os.chdir(ipythondir)
1012 rc_files = glb("ipythonrc*")
1017 rc_files = glb("ipythonrc*")
1013 for rc_file in rc_files:
1018 for rc_file in rc_files:
1014 os.rename(rc_file,rc_file+rc_suffix)
1019 os.rename(rc_file,rc_file+rc_suffix)
1015 except:
1020 except:
1016 warning = """
1021 warning = """
1017
1022
1018 There was a problem with the installation:
1023 There was a problem with the installation:
1019 %s
1024 %s
1020 Try to correct it or contact the developers if you think it's a bug.
1025 Try to correct it or contact the developers if you think it's a bug.
1021 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1022 warn(warning)
1027 warn(warning)
1023 wait()
1028 wait()
1024 return
1029 return
1025
1030
1026 elif mode == 'upgrade':
1031 elif mode == 'upgrade':
1027 try:
1032 try:
1028 os.chdir(ipythondir)
1033 os.chdir(ipythondir)
1029 except:
1034 except:
1030 print """
1035 print """
1031 Can not upgrade: changing to directory %s failed. Details:
1036 Can not upgrade: changing to directory %s failed. Details:
1032 %s
1037 %s
1033 """ % (ipythondir,sys.exc_info()[1])
1038 """ % (ipythondir,sys.exc_info()[1])
1034 wait()
1039 wait()
1035 return
1040 return
1036 else:
1041 else:
1037 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1038 for new_full_path in sources:
1043 for new_full_path in sources:
1039 new_filename = os.path.basename(new_full_path)
1044 new_filename = os.path.basename(new_full_path)
1040 if new_filename.startswith('ipythonrc'):
1045 if new_filename.startswith('ipythonrc'):
1041 new_filename = new_filename + rc_suffix
1046 new_filename = new_filename + rc_suffix
1042 # The config directory should only contain files, skip any
1047 # The config directory should only contain files, skip any
1043 # directories which may be there (like CVS)
1048 # directories which may be there (like CVS)
1044 if os.path.isdir(new_full_path):
1049 if os.path.isdir(new_full_path):
1045 continue
1050 continue
1046 if os.path.exists(new_filename):
1051 if os.path.exists(new_filename):
1047 old_file = new_filename+'.old'
1052 old_file = new_filename+'.old'
1048 if os.path.exists(old_file):
1053 if os.path.exists(old_file):
1049 os.remove(old_file)
1054 os.remove(old_file)
1050 os.rename(new_filename,old_file)
1055 os.rename(new_filename,old_file)
1051 shutil.copy(new_full_path,new_filename)
1056 shutil.copy(new_full_path,new_filename)
1052 else:
1057 else:
1053 raise ValueError,'unrecognized mode for install:',`mode`
1058 raise ValueError,'unrecognized mode for install:',`mode`
1054
1059
1055 # Fix line-endings to those native to each platform in the config
1060 # Fix line-endings to those native to each platform in the config
1056 # directory.
1061 # directory.
1057 try:
1062 try:
1058 os.chdir(ipythondir)
1063 os.chdir(ipythondir)
1059 except:
1064 except:
1060 print """
1065 print """
1061 Problem: changing to directory %s failed.
1066 Problem: changing to directory %s failed.
1062 Details:
1067 Details:
1063 %s
1068 %s
1064
1069
1065 Some configuration files may have incorrect line endings. This should not
1070 Some configuration files may have incorrect line endings. This should not
1066 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1067 wait()
1072 wait()
1068 else:
1073 else:
1069 for fname in glb('ipythonrc*'):
1074 for fname in glb('ipythonrc*'):
1070 try:
1075 try:
1071 native_line_ends(fname,backup=0)
1076 native_line_ends(fname,backup=0)
1072 except IOError:
1077 except IOError:
1073 pass
1078 pass
1074
1079
1075 if mode == 'install':
1080 if mode == 'install':
1076 print """
1081 print """
1077 Successful installation!
1082 Successful installation!
1078
1083
1079 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1080 IPython manual (there are both HTML and PDF versions supplied with the
1085 IPython manual (there are both HTML and PDF versions supplied with the
1081 distribution) to make sure that your system environment is properly configured
1086 distribution) to make sure that your system environment is properly configured
1082 to take advantage of IPython's features."""
1087 to take advantage of IPython's features."""
1083 else:
1088 else:
1084 print """
1089 print """
1085 Successful upgrade!
1090 Successful upgrade!
1086
1091
1087 All files in your directory:
1092 All files in your directory:
1088 %(ipythondir)s
1093 %(ipythondir)s
1089 which would have been overwritten by the upgrade were backed up with a .old
1094 which would have been overwritten by the upgrade were backed up with a .old
1090 extension. If you had made particular customizations in those files you may
1095 extension. If you had made particular customizations in those files you may
1091 want to merge them back into the new files.""" % locals()
1096 want to merge them back into the new files.""" % locals()
1092 wait()
1097 wait()
1093 os.chdir(cwd)
1098 os.chdir(cwd)
1094 # end user_setup()
1099 # end user_setup()
1095
1100
1096 def atexit_operations(self):
1101 def atexit_operations(self):
1097 """This will be executed at the time of exit.
1102 """This will be executed at the time of exit.
1098
1103
1099 Saving of persistent data should be performed here. """
1104 Saving of persistent data should be performed here. """
1100
1105
1101 #print '*** IPython exit cleanup ***' # dbg
1106 #print '*** IPython exit cleanup ***' # dbg
1102 # input history
1107 # input history
1103 self.savehist()
1108 self.savehist()
1104
1109
1105 # Cleanup all tempfiles left around
1110 # Cleanup all tempfiles left around
1106 for tfile in self.tempfiles:
1111 for tfile in self.tempfiles:
1107 try:
1112 try:
1108 os.unlink(tfile)
1113 os.unlink(tfile)
1109 except OSError:
1114 except OSError:
1110 pass
1115 pass
1111
1116
1112 # save the "persistent data" catch-all dictionary
1117 # save the "persistent data" catch-all dictionary
1113 try:
1118 try:
1114 pickle.dump(self.persist, open(self.persist_fname,"w"))
1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1115 except:
1120 except:
1116 print "*** ERROR *** persistent data saving failed."
1121 print "*** ERROR *** persistent data saving failed."
1117
1122
1118 def savehist(self):
1123 def savehist(self):
1119 """Save input history to a file (via readline library)."""
1124 """Save input history to a file (via readline library)."""
1120 try:
1125 try:
1121 self.readline.write_history_file(self.histfile)
1126 self.readline.write_history_file(self.histfile)
1122 except:
1127 except:
1123 print 'Unable to save IPython command history to file: ' + \
1128 print 'Unable to save IPython command history to file: ' + \
1124 `self.histfile`
1129 `self.histfile`
1125
1130
1126 def pre_readline(self):
1131 def pre_readline(self):
1127 """readline hook to be used at the start of each line.
1132 """readline hook to be used at the start of each line.
1128
1133
1129 Currently it handles auto-indent only."""
1134 Currently it handles auto-indent only."""
1130
1135
1131 self.readline.insert_text(self.indent_current)
1136 self.readline.insert_text(self.indent_current)
1132
1137
1133 def init_readline(self):
1138 def init_readline(self):
1134 """Command history completion/saving/reloading."""
1139 """Command history completion/saving/reloading."""
1135 try:
1140 try:
1136 import readline
1141 import readline
1137 except ImportError:
1142 except ImportError:
1138 self.has_readline = 0
1143 self.has_readline = 0
1139 self.readline = None
1144 self.readline = None
1140 # no point in bugging windows users with this every time:
1145 # no point in bugging windows users with this every time:
1141 if os.name == 'posix':
1146 if os.name == 'posix':
1142 warn('Readline services not available on this platform.')
1147 warn('Readline services not available on this platform.')
1143 else:
1148 else:
1144 import atexit
1149 import atexit
1145 from IPython.completer import IPCompleter
1150 from IPython.completer import IPCompleter
1146 self.Completer = IPCompleter(self,
1151 self.Completer = IPCompleter(self,
1147 self.user_ns,
1152 self.user_ns,
1148 self.user_global_ns,
1153 self.user_global_ns,
1149 self.rc.readline_omit__names,
1154 self.rc.readline_omit__names,
1150 self.alias_table)
1155 self.alias_table)
1151
1156
1152 # Platform-specific configuration
1157 # Platform-specific configuration
1153 if os.name == 'nt':
1158 if os.name == 'nt':
1154 self.readline_startup_hook = readline.set_pre_input_hook
1159 self.readline_startup_hook = readline.set_pre_input_hook
1155 else:
1160 else:
1156 self.readline_startup_hook = readline.set_startup_hook
1161 self.readline_startup_hook = readline.set_startup_hook
1157
1162
1158 # Load user's initrc file (readline config)
1163 # Load user's initrc file (readline config)
1159 inputrc_name = os.environ.get('INPUTRC')
1164 inputrc_name = os.environ.get('INPUTRC')
1160 if inputrc_name is None:
1165 if inputrc_name is None:
1161 home_dir = get_home_dir()
1166 home_dir = get_home_dir()
1162 if home_dir is not None:
1167 if home_dir is not None:
1163 inputrc_name = os.path.join(home_dir,'.inputrc')
1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1164 if os.path.isfile(inputrc_name):
1169 if os.path.isfile(inputrc_name):
1165 try:
1170 try:
1166 readline.read_init_file(inputrc_name)
1171 readline.read_init_file(inputrc_name)
1167 except:
1172 except:
1168 warn('Problems reading readline initialization file <%s>'
1173 warn('Problems reading readline initialization file <%s>'
1169 % inputrc_name)
1174 % inputrc_name)
1170
1175
1171 self.has_readline = 1
1176 self.has_readline = 1
1172 self.readline = readline
1177 self.readline = readline
1173 # save this in sys so embedded copies can restore it properly
1178 # save this in sys so embedded copies can restore it properly
1174 sys.ipcompleter = self.Completer.complete
1179 sys.ipcompleter = self.Completer.complete
1175 readline.set_completer(self.Completer.complete)
1180 readline.set_completer(self.Completer.complete)
1176
1181
1177 # Configure readline according to user's prefs
1182 # Configure readline according to user's prefs
1178 for rlcommand in self.rc.readline_parse_and_bind:
1183 for rlcommand in self.rc.readline_parse_and_bind:
1179 readline.parse_and_bind(rlcommand)
1184 readline.parse_and_bind(rlcommand)
1180
1185
1181 # remove some chars from the delimiters list
1186 # remove some chars from the delimiters list
1182 delims = readline.get_completer_delims()
1187 delims = readline.get_completer_delims()
1183 delims = delims.translate(string._idmap,
1188 delims = delims.translate(string._idmap,
1184 self.rc.readline_remove_delims)
1189 self.rc.readline_remove_delims)
1185 readline.set_completer_delims(delims)
1190 readline.set_completer_delims(delims)
1186 # otherwise we end up with a monster history after a while:
1191 # otherwise we end up with a monster history after a while:
1187 readline.set_history_length(1000)
1192 readline.set_history_length(1000)
1188 try:
1193 try:
1189 #print '*** Reading readline history' # dbg
1194 #print '*** Reading readline history' # dbg
1190 readline.read_history_file(self.histfile)
1195 readline.read_history_file(self.histfile)
1191 except IOError:
1196 except IOError:
1192 pass # It doesn't exist yet.
1197 pass # It doesn't exist yet.
1193
1198
1194 atexit.register(self.atexit_operations)
1199 atexit.register(self.atexit_operations)
1195 del atexit
1200 del atexit
1196
1201
1197 # Configure auto-indent for all platforms
1202 # Configure auto-indent for all platforms
1198 self.set_autoindent(self.rc.autoindent)
1203 self.set_autoindent(self.rc.autoindent)
1199
1204
1200 def _should_recompile(self,e):
1205 def _should_recompile(self,e):
1201 """Utility routine for edit_syntax_error"""
1206 """Utility routine for edit_syntax_error"""
1202
1207
1203 if e.filename in ('<ipython console>','<input>','<string>',
1208 if e.filename in ('<ipython console>','<input>','<string>',
1204 '<console>',None):
1209 '<console>',None):
1205
1210
1206 return False
1211 return False
1207 try:
1212 try:
1208 if not ask_yes_no('Return to editor to correct syntax error? '
1213 if not ask_yes_no('Return to editor to correct syntax error? '
1209 '[Y/n] ','y'):
1214 '[Y/n] ','y'):
1210 return False
1215 return False
1211 except EOFError:
1216 except EOFError:
1212 return False
1217 return False
1213
1218
1214 def int0(x):
1219 def int0(x):
1215 try:
1220 try:
1216 return int(x)
1221 return int(x)
1217 except TypeError:
1222 except TypeError:
1218 return 0
1223 return 0
1219 # always pass integer line and offset values to editor hook
1224 # always pass integer line and offset values to editor hook
1220 self.hooks.fix_error_editor(e.filename,
1225 self.hooks.fix_error_editor(e.filename,
1221 int0(e.lineno),int0(e.offset),e.msg)
1226 int0(e.lineno),int0(e.offset),e.msg)
1222 return True
1227 return True
1223
1228
1224 def edit_syntax_error(self):
1229 def edit_syntax_error(self):
1225 """The bottom half of the syntax error handler called in the main loop.
1230 """The bottom half of the syntax error handler called in the main loop.
1226
1231
1227 Loop until syntax error is fixed or user cancels.
1232 Loop until syntax error is fixed or user cancels.
1228 """
1233 """
1229
1234
1230 while self.SyntaxTB.last_syntax_error:
1235 while self.SyntaxTB.last_syntax_error:
1231 # copy and clear last_syntax_error
1236 # copy and clear last_syntax_error
1232 err = self.SyntaxTB.clear_err_state()
1237 err = self.SyntaxTB.clear_err_state()
1233 if not self._should_recompile(err):
1238 if not self._should_recompile(err):
1234 return
1239 return
1235 try:
1240 try:
1236 # may set last_syntax_error again if a SyntaxError is raised
1241 # may set last_syntax_error again if a SyntaxError is raised
1237 self.safe_execfile(err.filename,self.shell.user_ns)
1242 self.safe_execfile(err.filename,self.shell.user_ns)
1238 except:
1243 except:
1239 self.showtraceback()
1244 self.showtraceback()
1240 else:
1245 else:
1241 f = file(err.filename)
1246 f = file(err.filename)
1242 try:
1247 try:
1243 sys.displayhook(f.read())
1248 sys.displayhook(f.read())
1244 finally:
1249 finally:
1245 f.close()
1250 f.close()
1246
1251
1247 def showsyntaxerror(self, filename=None):
1252 def showsyntaxerror(self, filename=None):
1248 """Display the syntax error that just occurred.
1253 """Display the syntax error that just occurred.
1249
1254
1250 This doesn't display a stack trace because there isn't one.
1255 This doesn't display a stack trace because there isn't one.
1251
1256
1252 If a filename is given, it is stuffed in the exception instead
1257 If a filename is given, it is stuffed in the exception instead
1253 of what was there before (because Python's parser always uses
1258 of what was there before (because Python's parser always uses
1254 "<string>" when reading from a string).
1259 "<string>" when reading from a string).
1255 """
1260 """
1256 etype, value, last_traceback = sys.exc_info()
1261 etype, value, last_traceback = sys.exc_info()
1257 if filename and etype is SyntaxError:
1262 if filename and etype is SyntaxError:
1258 # Work hard to stuff the correct filename in the exception
1263 # Work hard to stuff the correct filename in the exception
1259 try:
1264 try:
1260 msg, (dummy_filename, lineno, offset, line) = value
1265 msg, (dummy_filename, lineno, offset, line) = value
1261 except:
1266 except:
1262 # Not the format we expect; leave it alone
1267 # Not the format we expect; leave it alone
1263 pass
1268 pass
1264 else:
1269 else:
1265 # Stuff in the right filename
1270 # Stuff in the right filename
1266 try:
1271 try:
1267 # Assume SyntaxError is a class exception
1272 # Assume SyntaxError is a class exception
1268 value = SyntaxError(msg, (filename, lineno, offset, line))
1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1269 except:
1274 except:
1270 # If that failed, assume SyntaxError is a string
1275 # If that failed, assume SyntaxError is a string
1271 value = msg, (filename, lineno, offset, line)
1276 value = msg, (filename, lineno, offset, line)
1272 self.SyntaxTB(etype,value,[])
1277 self.SyntaxTB(etype,value,[])
1273
1278
1274 def debugger(self):
1279 def debugger(self):
1275 """Call the pdb debugger."""
1280 """Call the pdb debugger."""
1276
1281
1277 if not self.rc.pdb:
1282 if not self.rc.pdb:
1278 return
1283 return
1279 pdb.pm()
1284 pdb.pm()
1280
1285
1281 def showtraceback(self,exc_tuple = None,filename=None):
1286 def showtraceback(self,exc_tuple = None,filename=None):
1282 """Display the exception that just occurred."""
1287 """Display the exception that just occurred."""
1283
1288
1284 # Though this won't be called by syntax errors in the input line,
1289 # Though this won't be called by syntax errors in the input line,
1285 # there may be SyntaxError cases whith imported code.
1290 # there may be SyntaxError cases whith imported code.
1286 if exc_tuple is None:
1291 if exc_tuple is None:
1287 type, value, tb = sys.exc_info()
1292 type, value, tb = sys.exc_info()
1288 else:
1293 else:
1289 type, value, tb = exc_tuple
1294 type, value, tb = exc_tuple
1290 if type is SyntaxError:
1295 if type is SyntaxError:
1291 self.showsyntaxerror(filename)
1296 self.showsyntaxerror(filename)
1292 else:
1297 else:
1293 self.InteractiveTB()
1298 self.InteractiveTB()
1294 if self.InteractiveTB.call_pdb and self.has_readline:
1299 if self.InteractiveTB.call_pdb and self.has_readline:
1295 # pdb mucks up readline, fix it back
1300 # pdb mucks up readline, fix it back
1296 self.readline.set_completer(self.Completer.complete)
1301 self.readline.set_completer(self.Completer.complete)
1297
1302
1298 def mainloop(self,banner=None):
1303 def mainloop(self,banner=None):
1299 """Creates the local namespace and starts the mainloop.
1304 """Creates the local namespace and starts the mainloop.
1300
1305
1301 If an optional banner argument is given, it will override the
1306 If an optional banner argument is given, it will override the
1302 internally created default banner."""
1307 internally created default banner."""
1303
1308
1304 if self.rc.c: # Emulate Python's -c option
1309 if self.rc.c: # Emulate Python's -c option
1305 self.exec_init_cmd()
1310 self.exec_init_cmd()
1306 if banner is None:
1311 if banner is None:
1307 if self.rc.banner:
1312 if self.rc.banner:
1308 banner = self.BANNER+self.banner2
1313 banner = self.BANNER+self.banner2
1309 else:
1314 else:
1310 banner = ''
1315 banner = ''
1311 self.interact(banner)
1316 self.interact(banner)
1312
1317
1313 def exec_init_cmd(self):
1318 def exec_init_cmd(self):
1314 """Execute a command given at the command line.
1319 """Execute a command given at the command line.
1315
1320
1316 This emulates Python's -c option."""
1321 This emulates Python's -c option."""
1317
1322
1318 sys.argv = ['-c']
1323 sys.argv = ['-c']
1319 self.push(self.rc.c)
1324 self.push(self.rc.c)
1320
1325
1321 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1322 """Embeds IPython into a running python program.
1327 """Embeds IPython into a running python program.
1323
1328
1324 Input:
1329 Input:
1325
1330
1326 - header: An optional header message can be specified.
1331 - header: An optional header message can be specified.
1327
1332
1328 - local_ns, global_ns: working namespaces. If given as None, the
1333 - local_ns, global_ns: working namespaces. If given as None, the
1329 IPython-initialized one is updated with __main__.__dict__, so that
1334 IPython-initialized one is updated with __main__.__dict__, so that
1330 program variables become visible but user-specific configuration
1335 program variables become visible but user-specific configuration
1331 remains possible.
1336 remains possible.
1332
1337
1333 - stack_depth: specifies how many levels in the stack to go to
1338 - stack_depth: specifies how many levels in the stack to go to
1334 looking for namespaces (when local_ns and global_ns are None). This
1339 looking for namespaces (when local_ns and global_ns are None). This
1335 allows an intermediate caller to make sure that this function gets
1340 allows an intermediate caller to make sure that this function gets
1336 the namespace from the intended level in the stack. By default (0)
1341 the namespace from the intended level in the stack. By default (0)
1337 it will get its locals and globals from the immediate caller.
1342 it will get its locals and globals from the immediate caller.
1338
1343
1339 Warning: it's possible to use this in a program which is being run by
1344 Warning: it's possible to use this in a program which is being run by
1340 IPython itself (via %run), but some funny things will happen (a few
1345 IPython itself (via %run), but some funny things will happen (a few
1341 globals get overwritten). In the future this will be cleaned up, as
1346 globals get overwritten). In the future this will be cleaned up, as
1342 there is no fundamental reason why it can't work perfectly."""
1347 there is no fundamental reason why it can't work perfectly."""
1343
1348
1344 # Get locals and globals from caller
1349 # Get locals and globals from caller
1345 if local_ns is None or global_ns is None:
1350 if local_ns is None or global_ns is None:
1346 call_frame = sys._getframe(stack_depth).f_back
1351 call_frame = sys._getframe(stack_depth).f_back
1347
1352
1348 if local_ns is None:
1353 if local_ns is None:
1349 local_ns = call_frame.f_locals
1354 local_ns = call_frame.f_locals
1350 if global_ns is None:
1355 if global_ns is None:
1351 global_ns = call_frame.f_globals
1356 global_ns = call_frame.f_globals
1352
1357
1353 # Update namespaces and fire up interpreter
1358 # Update namespaces and fire up interpreter
1354
1359
1355 # The global one is easy, we can just throw it in
1360 # The global one is easy, we can just throw it in
1356 self.user_global_ns = global_ns
1361 self.user_global_ns = global_ns
1357
1362
1358 # but the user/local one is tricky: ipython needs it to store internal
1363 # but the user/local one is tricky: ipython needs it to store internal
1359 # data, but we also need the locals. We'll copy locals in the user
1364 # data, but we also need the locals. We'll copy locals in the user
1360 # one, but will track what got copied so we can delete them at exit.
1365 # one, but will track what got copied so we can delete them at exit.
1361 # This is so that a later embedded call doesn't see locals from a
1366 # This is so that a later embedded call doesn't see locals from a
1362 # previous call (which most likely existed in a separate scope).
1367 # previous call (which most likely existed in a separate scope).
1363 local_varnames = local_ns.keys()
1368 local_varnames = local_ns.keys()
1364 self.user_ns.update(local_ns)
1369 self.user_ns.update(local_ns)
1365
1370
1366 # Patch for global embedding to make sure that things don't overwrite
1371 # Patch for global embedding to make sure that things don't overwrite
1367 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1368 # FIXME. Test this a bit more carefully (the if.. is new)
1373 # FIXME. Test this a bit more carefully (the if.. is new)
1369 if local_ns is None and global_ns is None:
1374 if local_ns is None and global_ns is None:
1370 self.user_global_ns.update(__main__.__dict__)
1375 self.user_global_ns.update(__main__.__dict__)
1371
1376
1372 # make sure the tab-completer has the correct frame information, so it
1377 # make sure the tab-completer has the correct frame information, so it
1373 # actually completes using the frame's locals/globals
1378 # actually completes using the frame's locals/globals
1374 self.set_completer_frame()
1379 self.set_completer_frame()
1375
1380
1376 # before activating the interactive mode, we need to make sure that
1381 # before activating the interactive mode, we need to make sure that
1377 # all names in the builtin namespace needed by ipython point to
1382 # all names in the builtin namespace needed by ipython point to
1378 # ourselves, and not to other instances.
1383 # ourselves, and not to other instances.
1379 self.add_builtins()
1384 self.add_builtins()
1380
1385
1381 self.interact(header)
1386 self.interact(header)
1382
1387
1383 # now, purge out the user namespace from anything we might have added
1388 # now, purge out the user namespace from anything we might have added
1384 # from the caller's local namespace
1389 # from the caller's local namespace
1385 delvar = self.user_ns.pop
1390 delvar = self.user_ns.pop
1386 for var in local_varnames:
1391 for var in local_varnames:
1387 delvar(var,None)
1392 delvar(var,None)
1388 # and clean builtins we may have overridden
1393 # and clean builtins we may have overridden
1389 self.clean_builtins()
1394 self.clean_builtins()
1390
1395
1391 def interact(self, banner=None):
1396 def interact(self, banner=None):
1392 """Closely emulate the interactive Python console.
1397 """Closely emulate the interactive Python console.
1393
1398
1394 The optional banner argument specify the banner to print
1399 The optional banner argument specify the banner to print
1395 before the first interaction; by default it prints a banner
1400 before the first interaction; by default it prints a banner
1396 similar to the one printed by the real Python interpreter,
1401 similar to the one printed by the real Python interpreter,
1397 followed by the current class name in parentheses (so as not
1402 followed by the current class name in parentheses (so as not
1398 to confuse this with the real interpreter -- since it's so
1403 to confuse this with the real interpreter -- since it's so
1399 close!).
1404 close!).
1400
1405
1401 """
1406 """
1402 cprt = 'Type "copyright", "credits" or "license" for more information.'
1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1403 if banner is None:
1408 if banner is None:
1404 self.write("Python %s on %s\n%s\n(%s)\n" %
1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1405 (sys.version, sys.platform, cprt,
1410 (sys.version, sys.platform, cprt,
1406 self.__class__.__name__))
1411 self.__class__.__name__))
1407 else:
1412 else:
1408 self.write(banner)
1413 self.write(banner)
1409
1414
1410 more = 0
1415 more = 0
1411
1416
1412 # Mark activity in the builtins
1417 # Mark activity in the builtins
1413 __builtin__.__dict__['__IPYTHON__active'] += 1
1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1414
1419
1415 # exit_now is set by a call to %Exit or %Quit
1420 # exit_now is set by a call to %Exit or %Quit
1416 self.exit_now = False
1421 self.exit_now = False
1417 while not self.exit_now:
1422 while not self.exit_now:
1418
1423
1419 try:
1424 try:
1420 if more:
1425 if more:
1421 prompt = self.outputcache.prompt2
1426 prompt = self.outputcache.prompt2
1422 if self.autoindent:
1427 if self.autoindent:
1423 self.readline_startup_hook(self.pre_readline)
1428 self.readline_startup_hook(self.pre_readline)
1424 else:
1429 else:
1425 prompt = self.outputcache.prompt1
1430 prompt = self.outputcache.prompt1
1426 try:
1431 try:
1427 line = self.raw_input(prompt,more)
1432 line = self.raw_input(prompt,more)
1428 if self.autoindent:
1433 if self.autoindent:
1429 self.readline_startup_hook(None)
1434 self.readline_startup_hook(None)
1430 except EOFError:
1435 except EOFError:
1431 if self.autoindent:
1436 if self.autoindent:
1432 self.readline_startup_hook(None)
1437 self.readline_startup_hook(None)
1433 self.write("\n")
1438 self.write("\n")
1434 self.exit()
1439 self.exit()
1435 else:
1440 else:
1436 more = self.push(line)
1441 more = self.push(line)
1437
1442
1438 if (self.SyntaxTB.last_syntax_error and
1443 if (self.SyntaxTB.last_syntax_error and
1439 self.rc.autoedit_syntax):
1444 self.rc.autoedit_syntax):
1440 self.edit_syntax_error()
1445 self.edit_syntax_error()
1441
1446
1442 except KeyboardInterrupt:
1447 except KeyboardInterrupt:
1443 self.write("\nKeyboardInterrupt\n")
1448 self.write("\nKeyboardInterrupt\n")
1444 self.resetbuffer()
1449 self.resetbuffer()
1445 more = 0
1450 more = 0
1446 # keep cache in sync with the prompt counter:
1451 # keep cache in sync with the prompt counter:
1447 self.outputcache.prompt_count -= 1
1452 self.outputcache.prompt_count -= 1
1448
1453
1449 if self.autoindent:
1454 if self.autoindent:
1450 self.indent_current_nsp = 0
1455 self.indent_current_nsp = 0
1451 self.indent_current = ' '* self.indent_current_nsp
1456 self.indent_current = ' '* self.indent_current_nsp
1452
1457
1453 except bdb.BdbQuit:
1458 except bdb.BdbQuit:
1454 warn("The Python debugger has exited with a BdbQuit exception.\n"
1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1455 "Because of how pdb handles the stack, it is impossible\n"
1460 "Because of how pdb handles the stack, it is impossible\n"
1456 "for IPython to properly format this particular exception.\n"
1461 "for IPython to properly format this particular exception.\n"
1457 "IPython will resume normal operation.")
1462 "IPython will resume normal operation.")
1458
1463
1459 # We are off again...
1464 # We are off again...
1460 __builtin__.__dict__['__IPYTHON__active'] -= 1
1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1461
1466
1462 def excepthook(self, type, value, tb):
1467 def excepthook(self, type, value, tb):
1463 """One more defense for GUI apps that call sys.excepthook.
1468 """One more defense for GUI apps that call sys.excepthook.
1464
1469
1465 GUI frameworks like wxPython trap exceptions and call
1470 GUI frameworks like wxPython trap exceptions and call
1466 sys.excepthook themselves. I guess this is a feature that
1471 sys.excepthook themselves. I guess this is a feature that
1467 enables them to keep running after exceptions that would
1472 enables them to keep running after exceptions that would
1468 otherwise kill their mainloop. This is a bother for IPython
1473 otherwise kill their mainloop. This is a bother for IPython
1469 which excepts to catch all of the program exceptions with a try:
1474 which excepts to catch all of the program exceptions with a try:
1470 except: statement.
1475 except: statement.
1471
1476
1472 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1473 any app directly invokes sys.excepthook, it will look to the user like
1478 any app directly invokes sys.excepthook, it will look to the user like
1474 IPython crashed. In order to work around this, we can disable the
1479 IPython crashed. In order to work around this, we can disable the
1475 CrashHandler and replace it with this excepthook instead, which prints a
1480 CrashHandler and replace it with this excepthook instead, which prints a
1476 regular traceback using our InteractiveTB. In this fashion, apps which
1481 regular traceback using our InteractiveTB. In this fashion, apps which
1477 call sys.excepthook will generate a regular-looking exception from
1482 call sys.excepthook will generate a regular-looking exception from
1478 IPython, and the CrashHandler will only be triggered by real IPython
1483 IPython, and the CrashHandler will only be triggered by real IPython
1479 crashes.
1484 crashes.
1480
1485
1481 This hook should be used sparingly, only in places which are not likely
1486 This hook should be used sparingly, only in places which are not likely
1482 to be true IPython errors.
1487 to be true IPython errors.
1483 """
1488 """
1484
1489
1485 self.InteractiveTB(type, value, tb, tb_offset=0)
1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1486 if self.InteractiveTB.call_pdb and self.has_readline:
1491 if self.InteractiveTB.call_pdb and self.has_readline:
1487 self.readline.set_completer(self.Completer.complete)
1492 self.readline.set_completer(self.Completer.complete)
1488
1493
1489 def call_alias(self,alias,rest=''):
1494 def call_alias(self,alias,rest=''):
1490 """Call an alias given its name and the rest of the line.
1495 """Call an alias given its name and the rest of the line.
1491
1496
1492 This function MUST be given a proper alias, because it doesn't make
1497 This function MUST be given a proper alias, because it doesn't make
1493 any checks when looking up into the alias table. The caller is
1498 any checks when looking up into the alias table. The caller is
1494 responsible for invoking it only with a valid alias."""
1499 responsible for invoking it only with a valid alias."""
1495
1500
1496 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1497 nargs,cmd = self.alias_table[alias]
1502 nargs,cmd = self.alias_table[alias]
1498 # Expand the %l special to be the user's input line
1503 # Expand the %l special to be the user's input line
1499 if cmd.find('%l') >= 0:
1504 if cmd.find('%l') >= 0:
1500 cmd = cmd.replace('%l',rest)
1505 cmd = cmd.replace('%l',rest)
1501 rest = ''
1506 rest = ''
1502 if nargs==0:
1507 if nargs==0:
1503 # Simple, argument-less aliases
1508 # Simple, argument-less aliases
1504 cmd = '%s %s' % (cmd,rest)
1509 cmd = '%s %s' % (cmd,rest)
1505 else:
1510 else:
1506 # Handle aliases with positional arguments
1511 # Handle aliases with positional arguments
1507 args = rest.split(None,nargs)
1512 args = rest.split(None,nargs)
1508 if len(args)< nargs:
1513 if len(args)< nargs:
1509 error('Alias <%s> requires %s arguments, %s given.' %
1514 error('Alias <%s> requires %s arguments, %s given.' %
1510 (alias,nargs,len(args)))
1515 (alias,nargs,len(args)))
1511 return
1516 return
1512 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1513 # Now call the macro, evaluating in the user's namespace
1518 # Now call the macro, evaluating in the user's namespace
1514 try:
1519 try:
1515 self.system(cmd)
1520 self.system(cmd)
1516 except:
1521 except:
1517 self.showtraceback()
1522 self.showtraceback()
1518
1523
1519 def autoindent_update(self,line):
1524 def autoindent_update(self,line):
1520 """Keep track of the indent level."""
1525 """Keep track of the indent level."""
1521
1526
1522 if self.autoindent:
1527 if self.autoindent:
1523 if line:
1528 if line:
1524 self.indent_current_nsp = num_ini_spaces(line)
1529 self.indent_current_nsp = num_ini_spaces(line)
1525
1530
1526 if line[-1] == ':':
1531 if line[-1] == ':':
1527 self.indent_current_nsp += 4
1532 self.indent_current_nsp += 4
1528 elif dedent_re.match(line):
1533 elif dedent_re.match(line):
1529 self.indent_current_nsp -= 4
1534 self.indent_current_nsp -= 4
1530 else:
1535 else:
1531 self.indent_current_nsp = 0
1536 self.indent_current_nsp = 0
1532
1537
1533 # indent_current is the actual string to be inserted
1538 # indent_current is the actual string to be inserted
1534 # by the readline hooks for indentation
1539 # by the readline hooks for indentation
1535 self.indent_current = ' '* self.indent_current_nsp
1540 self.indent_current = ' '* self.indent_current_nsp
1536
1541
1537 def runlines(self,lines):
1542 def runlines(self,lines):
1538 """Run a string of one or more lines of source.
1543 """Run a string of one or more lines of source.
1539
1544
1540 This method is capable of running a string containing multiple source
1545 This method is capable of running a string containing multiple source
1541 lines, as if they had been entered at the IPython prompt. Since it
1546 lines, as if they had been entered at the IPython prompt. Since it
1542 exposes IPython's processing machinery, the given strings can contain
1547 exposes IPython's processing machinery, the given strings can contain
1543 magic calls (%magic), special shell access (!cmd), etc."""
1548 magic calls (%magic), special shell access (!cmd), etc."""
1544
1549
1545 # We must start with a clean buffer, in case this is run from an
1550 # We must start with a clean buffer, in case this is run from an
1546 # interactive IPython session (via a magic, for example).
1551 # interactive IPython session (via a magic, for example).
1547 self.resetbuffer()
1552 self.resetbuffer()
1548 lines = lines.split('\n')
1553 lines = lines.split('\n')
1549 more = 0
1554 more = 0
1550 for line in lines:
1555 for line in lines:
1551 # skip blank lines so we don't mess up the prompt counter, but do
1556 # skip blank lines so we don't mess up the prompt counter, but do
1552 # NOT skip even a blank line if we are in a code block (more is
1557 # NOT skip even a blank line if we are in a code block (more is
1553 # true)
1558 # true)
1554 if line or more:
1559 if line or more:
1555 more = self.push(self.prefilter(line,more))
1560 more = self.push(self.prefilter(line,more))
1556 # IPython's runsource returns None if there was an error
1561 # IPython's runsource returns None if there was an error
1557 # compiling the code. This allows us to stop processing right
1562 # compiling the code. This allows us to stop processing right
1558 # away, so the user gets the error message at the right place.
1563 # away, so the user gets the error message at the right place.
1559 if more is None:
1564 if more is None:
1560 break
1565 break
1561 # final newline in case the input didn't have it, so that the code
1566 # final newline in case the input didn't have it, so that the code
1562 # actually does get executed
1567 # actually does get executed
1563 if more:
1568 if more:
1564 self.push('\n')
1569 self.push('\n')
1565
1570
1566 def runsource(self, source, filename='<input>', symbol='single'):
1571 def runsource(self, source, filename='<input>', symbol='single'):
1567 """Compile and run some source in the interpreter.
1572 """Compile and run some source in the interpreter.
1568
1573
1569 Arguments are as for compile_command().
1574 Arguments are as for compile_command().
1570
1575
1571 One several things can happen:
1576 One several things can happen:
1572
1577
1573 1) The input is incorrect; compile_command() raised an
1578 1) The input is incorrect; compile_command() raised an
1574 exception (SyntaxError or OverflowError). A syntax traceback
1579 exception (SyntaxError or OverflowError). A syntax traceback
1575 will be printed by calling the showsyntaxerror() method.
1580 will be printed by calling the showsyntaxerror() method.
1576
1581
1577 2) The input is incomplete, and more input is required;
1582 2) The input is incomplete, and more input is required;
1578 compile_command() returned None. Nothing happens.
1583 compile_command() returned None. Nothing happens.
1579
1584
1580 3) The input is complete; compile_command() returned a code
1585 3) The input is complete; compile_command() returned a code
1581 object. The code is executed by calling self.runcode() (which
1586 object. The code is executed by calling self.runcode() (which
1582 also handles run-time exceptions, except for SystemExit).
1587 also handles run-time exceptions, except for SystemExit).
1583
1588
1584 The return value is:
1589 The return value is:
1585
1590
1586 - True in case 2
1591 - True in case 2
1587
1592
1588 - False in the other cases, unless an exception is raised, where
1593 - False in the other cases, unless an exception is raised, where
1589 None is returned instead. This can be used by external callers to
1594 None is returned instead. This can be used by external callers to
1590 know whether to continue feeding input or not.
1595 know whether to continue feeding input or not.
1591
1596
1592 The return value can be used to decide whether to use sys.ps1 or
1597 The return value can be used to decide whether to use sys.ps1 or
1593 sys.ps2 to prompt the next line."""
1598 sys.ps2 to prompt the next line."""
1594
1599
1595 try:
1600 try:
1596 code = self.compile(source,filename,symbol)
1601 code = self.compile(source,filename,symbol)
1597 except (OverflowError, SyntaxError, ValueError):
1602 except (OverflowError, SyntaxError, ValueError):
1598 # Case 1
1603 # Case 1
1599 self.showsyntaxerror(filename)
1604 self.showsyntaxerror(filename)
1600 return None
1605 return None
1601
1606
1602 if code is None:
1607 if code is None:
1603 # Case 2
1608 # Case 2
1604 return True
1609 return True
1605
1610
1606 # Case 3
1611 # Case 3
1607 # We store the code object so that threaded shells and
1612 # We store the code object so that threaded shells and
1608 # custom exception handlers can access all this info if needed.
1613 # custom exception handlers can access all this info if needed.
1609 # The source corresponding to this can be obtained from the
1614 # The source corresponding to this can be obtained from the
1610 # buffer attribute as '\n'.join(self.buffer).
1615 # buffer attribute as '\n'.join(self.buffer).
1611 self.code_to_run = code
1616 self.code_to_run = code
1612 # now actually execute the code object
1617 # now actually execute the code object
1613 if self.runcode(code) == 0:
1618 if self.runcode(code) == 0:
1614 return False
1619 return False
1615 else:
1620 else:
1616 return None
1621 return None
1617
1622
1618 def runcode(self,code_obj):
1623 def runcode(self,code_obj):
1619 """Execute a code object.
1624 """Execute a code object.
1620
1625
1621 When an exception occurs, self.showtraceback() is called to display a
1626 When an exception occurs, self.showtraceback() is called to display a
1622 traceback.
1627 traceback.
1623
1628
1624 Return value: a flag indicating whether the code to be run completed
1629 Return value: a flag indicating whether the code to be run completed
1625 successfully:
1630 successfully:
1626
1631
1627 - 0: successful execution.
1632 - 0: successful execution.
1628 - 1: an error occurred.
1633 - 1: an error occurred.
1629 """
1634 """
1630
1635
1631 # Set our own excepthook in case the user code tries to call it
1636 # Set our own excepthook in case the user code tries to call it
1632 # directly, so that the IPython crash handler doesn't get triggered
1637 # directly, so that the IPython crash handler doesn't get triggered
1633 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1634
1639
1635 # we save the original sys.excepthook in the instance, in case config
1640 # we save the original sys.excepthook in the instance, in case config
1636 # code (such as magics) needs access to it.
1641 # code (such as magics) needs access to it.
1637 self.sys_excepthook = old_excepthook
1642 self.sys_excepthook = old_excepthook
1638 outflag = 1 # happens in more places, so it's easier as default
1643 outflag = 1 # happens in more places, so it's easier as default
1639 try:
1644 try:
1640 try:
1645 try:
1641 # Embedded instances require separate global/local namespaces
1646 # Embedded instances require separate global/local namespaces
1642 # so they can see both the surrounding (local) namespace and
1647 # so they can see both the surrounding (local) namespace and
1643 # the module-level globals when called inside another function.
1648 # the module-level globals when called inside another function.
1644 if self.embedded:
1649 if self.embedded:
1645 exec code_obj in self.user_global_ns, self.user_ns
1650 exec code_obj in self.user_global_ns, self.user_ns
1646 # Normal (non-embedded) instances should only have a single
1651 # Normal (non-embedded) instances should only have a single
1647 # namespace for user code execution, otherwise functions won't
1652 # namespace for user code execution, otherwise functions won't
1648 # see interactive top-level globals.
1653 # see interactive top-level globals.
1649 else:
1654 else:
1650 exec code_obj in self.user_ns
1655 exec code_obj in self.user_ns
1651 finally:
1656 finally:
1652 # Reset our crash handler in place
1657 # Reset our crash handler in place
1653 sys.excepthook = old_excepthook
1658 sys.excepthook = old_excepthook
1654 except SystemExit:
1659 except SystemExit:
1655 self.resetbuffer()
1660 self.resetbuffer()
1656 self.showtraceback()
1661 self.showtraceback()
1657 warn("Type exit or quit to exit IPython "
1662 warn("Type exit or quit to exit IPython "
1658 "(%Exit or %Quit do so unconditionally).",level=1)
1663 "(%Exit or %Quit do so unconditionally).",level=1)
1659 except self.custom_exceptions:
1664 except self.custom_exceptions:
1660 etype,value,tb = sys.exc_info()
1665 etype,value,tb = sys.exc_info()
1661 self.CustomTB(etype,value,tb)
1666 self.CustomTB(etype,value,tb)
1662 except:
1667 except:
1663 self.showtraceback()
1668 self.showtraceback()
1664 else:
1669 else:
1665 outflag = 0
1670 outflag = 0
1666 if softspace(sys.stdout, 0):
1671 if softspace(sys.stdout, 0):
1667 print
1672 print
1668 # Flush out code object which has been run (and source)
1673 # Flush out code object which has been run (and source)
1669 self.code_to_run = None
1674 self.code_to_run = None
1670 return outflag
1675 return outflag
1671
1676
1672 def push(self, line):
1677 def push(self, line):
1673 """Push a line to the interpreter.
1678 """Push a line to the interpreter.
1674
1679
1675 The line should not have a trailing newline; it may have
1680 The line should not have a trailing newline; it may have
1676 internal newlines. The line is appended to a buffer and the
1681 internal newlines. The line is appended to a buffer and the
1677 interpreter's runsource() method is called with the
1682 interpreter's runsource() method is called with the
1678 concatenated contents of the buffer as source. If this
1683 concatenated contents of the buffer as source. If this
1679 indicates that the command was executed or invalid, the buffer
1684 indicates that the command was executed or invalid, the buffer
1680 is reset; otherwise, the command is incomplete, and the buffer
1685 is reset; otherwise, the command is incomplete, and the buffer
1681 is left as it was after the line was appended. The return
1686 is left as it was after the line was appended. The return
1682 value is 1 if more input is required, 0 if the line was dealt
1687 value is 1 if more input is required, 0 if the line was dealt
1683 with in some way (this is the same as runsource()).
1688 with in some way (this is the same as runsource()).
1684 """
1689 """
1685
1690
1686 # autoindent management should be done here, and not in the
1691 # autoindent management should be done here, and not in the
1687 # interactive loop, since that one is only seen by keyboard input. We
1692 # interactive loop, since that one is only seen by keyboard input. We
1688 # need this done correctly even for code run via runlines (which uses
1693 # need this done correctly even for code run via runlines (which uses
1689 # push).
1694 # push).
1690
1695
1691 #print 'push line: <%s>' % line # dbg
1696 #print 'push line: <%s>' % line # dbg
1692 self.autoindent_update(line)
1697 self.autoindent_update(line)
1693
1698
1694 self.buffer.append(line)
1699 self.buffer.append(line)
1695 more = self.runsource('\n'.join(self.buffer), self.filename)
1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1696 if not more:
1701 if not more:
1697 self.resetbuffer()
1702 self.resetbuffer()
1698 return more
1703 return more
1699
1704
1700 def resetbuffer(self):
1705 def resetbuffer(self):
1701 """Reset the input buffer."""
1706 """Reset the input buffer."""
1702 self.buffer[:] = []
1707 self.buffer[:] = []
1703
1708
1704 def raw_input(self,prompt='',continue_prompt=False):
1709 def raw_input(self,prompt='',continue_prompt=False):
1705 """Write a prompt and read a line.
1710 """Write a prompt and read a line.
1706
1711
1707 The returned line does not include the trailing newline.
1712 The returned line does not include the trailing newline.
1708 When the user enters the EOF key sequence, EOFError is raised.
1713 When the user enters the EOF key sequence, EOFError is raised.
1709
1714
1710 Optional inputs:
1715 Optional inputs:
1711
1716
1712 - prompt(''): a string to be printed to prompt the user.
1717 - prompt(''): a string to be printed to prompt the user.
1713
1718
1714 - continue_prompt(False): whether this line is the first one or a
1719 - continue_prompt(False): whether this line is the first one or a
1715 continuation in a sequence of inputs.
1720 continuation in a sequence of inputs.
1716 """
1721 """
1717
1722
1718 line = raw_input_original(prompt)
1723 line = raw_input_original(prompt)
1719 # Try to be reasonably smart about not re-indenting pasted input more
1724 # Try to be reasonably smart about not re-indenting pasted input more
1720 # than necessary. We do this by trimming out the auto-indent initial
1725 # than necessary. We do this by trimming out the auto-indent initial
1721 # spaces, if the user's actual input started itself with whitespace.
1726 # spaces, if the user's actual input started itself with whitespace.
1722 #debugp('self.buffer[-1]')
1727 #debugp('self.buffer[-1]')
1723 ## if self.autoindent:
1728 ## if self.autoindent:
1724 ## try:
1729 ## try:
1725 ## prev_line = self.buffer[-1]
1730 ## prev_line = self.buffer[-1]
1726 ## except IndexError:
1731 ## except IndexError:
1727 ## prev_line = ''
1732 ## prev_line = ''
1728 ## prev_indent = num_ini_spaces(prev_line)
1733 ## prev_indent = num_ini_spaces(prev_line)
1729 ## debugp('prev_indent')
1734 ## debugp('prev_indent')
1730 ## # Split the user's input
1735 ## # Split the user's input
1731 ## line1 = line[:self.indent_current_nsp]
1736 ## line1 = line[:self.indent_current_nsp]
1732 ## line2 = line[self.indent_current_nsp:]
1737 ## line2 = line[self.indent_current_nsp:]
1733 ## if line1.isspace() and line2 and \
1738 ## if line1.isspace() and line2 and \
1734 ## num_ini_spaces(line2)==prev_indent:
1739 ## num_ini_spaces(line2)==prev_indent:
1735 ## line = line2
1740 ## line = line2
1736 #debugp('line')
1741 #debugp('line')
1737 #debugp('line1')
1742 #debugp('line1')
1738 #debugp('line2')
1743 #debugp('line2')
1739 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1740 ## line = line2
1745 ## line = line2
1741 ## debugp('line')
1746 ## debugp('line')
1742 return self.prefilter(line,continue_prompt)
1747 return self.prefilter(line,continue_prompt)
1743
1748
1744 def split_user_input(self,line):
1749 def split_user_input(self,line):
1745 """Split user input into pre-char, function part and rest."""
1750 """Split user input into pre-char, function part and rest."""
1746
1751
1747 lsplit = self.line_split.match(line)
1752 lsplit = self.line_split.match(line)
1748 if lsplit is None: # no regexp match returns None
1753 if lsplit is None: # no regexp match returns None
1749 try:
1754 try:
1750 iFun,theRest = line.split(None,1)
1755 iFun,theRest = line.split(None,1)
1751 except ValueError:
1756 except ValueError:
1752 iFun,theRest = line,''
1757 iFun,theRest = line,''
1753 pre = re.match('^(\s*)(.*)',line).groups()[0]
1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1754 else:
1759 else:
1755 pre,iFun,theRest = lsplit.groups()
1760 pre,iFun,theRest = lsplit.groups()
1756
1761
1757 #print 'line:<%s>' % line # dbg
1762 #print 'line:<%s>' % line # dbg
1758 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1759 return pre,iFun.strip(),theRest
1764 return pre,iFun.strip(),theRest
1760
1765
1761 def _prefilter(self, line, continue_prompt):
1766 def _prefilter(self, line, continue_prompt):
1762 """Calls different preprocessors, depending on the form of line."""
1767 """Calls different preprocessors, depending on the form of line."""
1763
1768
1764 # All handlers *must* return a value, even if it's blank ('').
1769 # All handlers *must* return a value, even if it's blank ('').
1765
1770
1766 # Lines are NOT logged here. Handlers should process the line as
1771 # Lines are NOT logged here. Handlers should process the line as
1767 # needed, update the cache AND log it (so that the input cache array
1772 # needed, update the cache AND log it (so that the input cache array
1768 # stays synced).
1773 # stays synced).
1769
1774
1770 # This function is _very_ delicate, and since it's also the one which
1775 # This function is _very_ delicate, and since it's also the one which
1771 # determines IPython's response to user input, it must be as efficient
1776 # determines IPython's response to user input, it must be as efficient
1772 # as possible. For this reason it has _many_ returns in it, trying
1777 # as possible. For this reason it has _many_ returns in it, trying
1773 # always to exit as quickly as it can figure out what it needs to do.
1778 # always to exit as quickly as it can figure out what it needs to do.
1774
1779
1775 # This function is the main responsible for maintaining IPython's
1780 # This function is the main responsible for maintaining IPython's
1776 # behavior respectful of Python's semantics. So be _very_ careful if
1781 # behavior respectful of Python's semantics. So be _very_ careful if
1777 # making changes to anything here.
1782 # making changes to anything here.
1778
1783
1779 #.....................................................................
1784 #.....................................................................
1780 # Code begins
1785 # Code begins
1781
1786
1782 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1783
1788
1784 # save the line away in case we crash, so the post-mortem handler can
1789 # save the line away in case we crash, so the post-mortem handler can
1785 # record it
1790 # record it
1786 self._last_input_line = line
1791 self._last_input_line = line
1787
1792
1788 #print '***line: <%s>' % line # dbg
1793 #print '***line: <%s>' % line # dbg
1789
1794
1790 # the input history needs to track even empty lines
1795 # the input history needs to track even empty lines
1791 if not line.strip():
1796 if not line.strip():
1792 if not continue_prompt:
1797 if not continue_prompt:
1793 self.outputcache.prompt_count -= 1
1798 self.outputcache.prompt_count -= 1
1794 return self.handle_normal(line,continue_prompt)
1799 return self.handle_normal(line,continue_prompt)
1795 #return self.handle_normal('',continue_prompt)
1800 #return self.handle_normal('',continue_prompt)
1796
1801
1797 # print '***cont',continue_prompt # dbg
1802 # print '***cont',continue_prompt # dbg
1798 # special handlers are only allowed for single line statements
1803 # special handlers are only allowed for single line statements
1799 if continue_prompt and not self.rc.multi_line_specials:
1804 if continue_prompt and not self.rc.multi_line_specials:
1800 return self.handle_normal(line,continue_prompt)
1805 return self.handle_normal(line,continue_prompt)
1801
1806
1802 # For the rest, we need the structure of the input
1807 # For the rest, we need the structure of the input
1803 pre,iFun,theRest = self.split_user_input(line)
1808 pre,iFun,theRest = self.split_user_input(line)
1804 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1805
1810
1806 # First check for explicit escapes in the last/first character
1811 # First check for explicit escapes in the last/first character
1807 handler = None
1812 handler = None
1808 if line[-1] == self.ESC_HELP:
1813 if line[-1] == self.ESC_HELP:
1809 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1810 if handler is None:
1815 if handler is None:
1811 # look at the first character of iFun, NOT of line, so we skip
1816 # look at the first character of iFun, NOT of line, so we skip
1812 # leading whitespace in multiline input
1817 # leading whitespace in multiline input
1813 handler = self.esc_handlers.get(iFun[0:1])
1818 handler = self.esc_handlers.get(iFun[0:1])
1814 if handler is not None:
1819 if handler is not None:
1815 return handler(line,continue_prompt,pre,iFun,theRest)
1820 return handler(line,continue_prompt,pre,iFun,theRest)
1816 # Emacs ipython-mode tags certain input lines
1821 # Emacs ipython-mode tags certain input lines
1817 if line.endswith('# PYTHON-MODE'):
1822 if line.endswith('# PYTHON-MODE'):
1818 return self.handle_emacs(line,continue_prompt)
1823 return self.handle_emacs(line,continue_prompt)
1819
1824
1820 # Next, check if we can automatically execute this thing
1825 # Next, check if we can automatically execute this thing
1821
1826
1822 # Allow ! in multi-line statements if multi_line_specials is on:
1827 # Allow ! in multi-line statements if multi_line_specials is on:
1823 if continue_prompt and self.rc.multi_line_specials and \
1828 if continue_prompt and self.rc.multi_line_specials and \
1824 iFun.startswith(self.ESC_SHELL):
1829 iFun.startswith(self.ESC_SHELL):
1825 return self.handle_shell_escape(line,continue_prompt,
1830 return self.handle_shell_escape(line,continue_prompt,
1826 pre=pre,iFun=iFun,
1831 pre=pre,iFun=iFun,
1827 theRest=theRest)
1832 theRest=theRest)
1828
1833
1829 # Let's try to find if the input line is a magic fn
1834 # Let's try to find if the input line is a magic fn
1830 oinfo = None
1835 oinfo = None
1831 if hasattr(self,'magic_'+iFun):
1836 if hasattr(self,'magic_'+iFun):
1832 # WARNING: _ofind uses getattr(), so it can consume generators and
1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1833 # cause other side effects.
1838 # cause other side effects.
1834 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1835 if oinfo['ismagic']:
1840 if oinfo['ismagic']:
1836 # Be careful not to call magics when a variable assignment is
1841 # Be careful not to call magics when a variable assignment is
1837 # being made (ls='hi', for example)
1842 # being made (ls='hi', for example)
1838 if self.rc.automagic and \
1843 if self.rc.automagic and \
1839 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1840 (self.rc.multi_line_specials or not continue_prompt):
1845 (self.rc.multi_line_specials or not continue_prompt):
1841 return self.handle_magic(line,continue_prompt,
1846 return self.handle_magic(line,continue_prompt,
1842 pre,iFun,theRest)
1847 pre,iFun,theRest)
1843 else:
1848 else:
1844 return self.handle_normal(line,continue_prompt)
1849 return self.handle_normal(line,continue_prompt)
1845
1850
1846 # If the rest of the line begins with an (in)equality, assginment or
1851 # If the rest of the line begins with an (in)equality, assginment or
1847 # function call, we should not call _ofind but simply execute it.
1852 # function call, we should not call _ofind but simply execute it.
1848 # This avoids spurious geattr() accesses on objects upon assignment.
1853 # This avoids spurious geattr() accesses on objects upon assignment.
1849 #
1854 #
1850 # It also allows users to assign to either alias or magic names true
1855 # It also allows users to assign to either alias or magic names true
1851 # python variables (the magic/alias systems always take second seat to
1856 # python variables (the magic/alias systems always take second seat to
1852 # true python code).
1857 # true python code).
1853 if theRest and theRest[0] in '!=()':
1858 if theRest and theRest[0] in '!=()':
1854 return self.handle_normal(line,continue_prompt)
1859 return self.handle_normal(line,continue_prompt)
1855
1860
1856 if oinfo is None:
1861 if oinfo is None:
1857 # let's try to ensure that _oinfo is ONLY called when autocall is
1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1858 # on. Since it has inevitable potential side effects, at least
1863 # on. Since it has inevitable potential side effects, at least
1859 # having autocall off should be a guarantee to the user that no
1864 # having autocall off should be a guarantee to the user that no
1860 # weird things will happen.
1865 # weird things will happen.
1861
1866
1862 if self.rc.autocall:
1867 if self.rc.autocall:
1863 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1864 else:
1869 else:
1865 # in this case, all that's left is either an alias or
1870 # in this case, all that's left is either an alias or
1866 # processing the line normally.
1871 # processing the line normally.
1867 if iFun in self.alias_table:
1872 if iFun in self.alias_table:
1868 return self.handle_alias(line,continue_prompt,
1873 return self.handle_alias(line,continue_prompt,
1869 pre,iFun,theRest)
1874 pre,iFun,theRest)
1870
1875
1871 else:
1876 else:
1872 return self.handle_normal(line,continue_prompt)
1877 return self.handle_normal(line,continue_prompt)
1873
1878
1874 if not oinfo['found']:
1879 if not oinfo['found']:
1875 return self.handle_normal(line,continue_prompt)
1880 return self.handle_normal(line,continue_prompt)
1876 else:
1881 else:
1877 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1878 if oinfo['isalias']:
1883 if oinfo['isalias']:
1879 return self.handle_alias(line,continue_prompt,
1884 return self.handle_alias(line,continue_prompt,
1880 pre,iFun,theRest)
1885 pre,iFun,theRest)
1881
1886
1882 if self.rc.autocall and \
1887 if self.rc.autocall and \
1883 not self.re_exclude_auto.match(theRest) and \
1888 not self.re_exclude_auto.match(theRest) and \
1884 self.re_fun_name.match(iFun) and \
1889 self.re_fun_name.match(iFun) and \
1885 callable(oinfo['obj']) :
1890 callable(oinfo['obj']) :
1886 #print 'going auto' # dbg
1891 #print 'going auto' # dbg
1887 return self.handle_auto(line,continue_prompt,
1892 return self.handle_auto(line,continue_prompt,
1888 pre,iFun,theRest,oinfo['obj'])
1893 pre,iFun,theRest,oinfo['obj'])
1889 else:
1894 else:
1890 #print 'was callable?', callable(oinfo['obj']) # dbg
1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1891 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1892
1897
1893 # If we get here, we have a normal Python line. Log and return.
1898 # If we get here, we have a normal Python line. Log and return.
1894 return self.handle_normal(line,continue_prompt)
1899 return self.handle_normal(line,continue_prompt)
1895
1900
1896 def _prefilter_dumb(self, line, continue_prompt):
1901 def _prefilter_dumb(self, line, continue_prompt):
1897 """simple prefilter function, for debugging"""
1902 """simple prefilter function, for debugging"""
1898 return self.handle_normal(line,continue_prompt)
1903 return self.handle_normal(line,continue_prompt)
1899
1904
1900 # Set the default prefilter() function (this can be user-overridden)
1905 # Set the default prefilter() function (this can be user-overridden)
1901 prefilter = _prefilter
1906 prefilter = _prefilter
1902
1907
1903 def handle_normal(self,line,continue_prompt=None,
1908 def handle_normal(self,line,continue_prompt=None,
1904 pre=None,iFun=None,theRest=None):
1909 pre=None,iFun=None,theRest=None):
1905 """Handle normal input lines. Use as a template for handlers."""
1910 """Handle normal input lines. Use as a template for handlers."""
1906
1911
1907 # With autoindent on, we need some way to exit the input loop, and I
1912 # With autoindent on, we need some way to exit the input loop, and I
1908 # don't want to force the user to have to backspace all the way to
1913 # don't want to force the user to have to backspace all the way to
1909 # clear the line. The rule will be in this case, that either two
1914 # clear the line. The rule will be in this case, that either two
1910 # lines of pure whitespace in a row, or a line of pure whitespace but
1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1911 # of a size different to the indent level, will exit the input loop.
1916 # of a size different to the indent level, will exit the input loop.
1912
1917
1913 if (continue_prompt and self.autoindent and line.isspace() and
1918 if (continue_prompt and self.autoindent and line.isspace() and
1914 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1915 line = ''
1920 line = ''
1916
1921
1917 self.log(line,continue_prompt)
1922 self.log(line,continue_prompt)
1918 return line
1923 return line
1919
1924
1920 def handle_alias(self,line,continue_prompt=None,
1925 def handle_alias(self,line,continue_prompt=None,
1921 pre=None,iFun=None,theRest=None):
1926 pre=None,iFun=None,theRest=None):
1922 """Handle alias input lines. """
1927 """Handle alias input lines. """
1923
1928
1924 # pre is needed, because it carries the leading whitespace. Otherwise
1929 # pre is needed, because it carries the leading whitespace. Otherwise
1925 # aliases won't work in indented sections.
1930 # aliases won't work in indented sections.
1926 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1927 self.log(line_out,continue_prompt)
1932 self.log(line_out,continue_prompt)
1928 return line_out
1933 return line_out
1929
1934
1930 def handle_shell_escape(self, line, continue_prompt=None,
1935 def handle_shell_escape(self, line, continue_prompt=None,
1931 pre=None,iFun=None,theRest=None):
1936 pre=None,iFun=None,theRest=None):
1932 """Execute the line in a shell, empty return value"""
1937 """Execute the line in a shell, empty return value"""
1933
1938
1934 #print 'line in :', `line` # dbg
1939 #print 'line in :', `line` # dbg
1935 # Example of a special handler. Others follow a similar pattern.
1940 # Example of a special handler. Others follow a similar pattern.
1936 if line.lstrip().startswith('!!'):
1941 if line.lstrip().startswith('!!'):
1937 # rewrite iFun/theRest to properly hold the call to %sx and
1942 # rewrite iFun/theRest to properly hold the call to %sx and
1938 # the actual command to be executed, so handle_magic can work
1943 # the actual command to be executed, so handle_magic can work
1939 # correctly
1944 # correctly
1940 theRest = '%s %s' % (iFun[2:],theRest)
1945 theRest = '%s %s' % (iFun[2:],theRest)
1941 iFun = 'sx'
1946 iFun = 'sx'
1942 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1943 line.lstrip()[2:]),
1948 line.lstrip()[2:]),
1944 continue_prompt,pre,iFun,theRest)
1949 continue_prompt,pre,iFun,theRest)
1945 else:
1950 else:
1946 cmd=line.lstrip().lstrip('!')
1951 cmd=line.lstrip().lstrip('!')
1947 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1948 # update cache/log and return
1953 # update cache/log and return
1949 self.log(line_out,continue_prompt)
1954 self.log(line_out,continue_prompt)
1950 return line_out
1955 return line_out
1951
1956
1952 def handle_magic(self, line, continue_prompt=None,
1957 def handle_magic(self, line, continue_prompt=None,
1953 pre=None,iFun=None,theRest=None):
1958 pre=None,iFun=None,theRest=None):
1954 """Execute magic functions."""
1959 """Execute magic functions."""
1955
1960
1956
1961
1957 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1958 self.log(cmd,continue_prompt)
1963 self.log(cmd,continue_prompt)
1959 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1960 return cmd
1965 return cmd
1961
1966
1962 def handle_auto(self, line, continue_prompt=None,
1967 def handle_auto(self, line, continue_prompt=None,
1963 pre=None,iFun=None,theRest=None,obj=None):
1968 pre=None,iFun=None,theRest=None,obj=None):
1964 """Hande lines which can be auto-executed, quoting if requested."""
1969 """Hande lines which can be auto-executed, quoting if requested."""
1965
1970
1966 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1967
1972
1968 # This should only be active for single-line input!
1973 # This should only be active for single-line input!
1969 if continue_prompt:
1974 if continue_prompt:
1970 self.log(line,continue_prompt)
1975 self.log(line,continue_prompt)
1971 return line
1976 return line
1972
1977
1973 auto_rewrite = True
1978 auto_rewrite = True
1974 if pre == self.ESC_QUOTE:
1979 if pre == self.ESC_QUOTE:
1975 # Auto-quote splitting on whitespace
1980 # Auto-quote splitting on whitespace
1976 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1977 elif pre == self.ESC_QUOTE2:
1982 elif pre == self.ESC_QUOTE2:
1978 # Auto-quote whole string
1983 # Auto-quote whole string
1979 newcmd = '%s("%s")' % (iFun,theRest)
1984 newcmd = '%s("%s")' % (iFun,theRest)
1980 else:
1985 else:
1981 # Auto-paren.
1986 # Auto-paren.
1982 # We only apply it to argument-less calls if the autocall
1987 # We only apply it to argument-less calls if the autocall
1983 # parameter is set to 2. We only need to check that autocall is <
1988 # parameter is set to 2. We only need to check that autocall is <
1984 # 2, since this function isn't called unless it's at least 1.
1989 # 2, since this function isn't called unless it's at least 1.
1985 if not theRest and (self.rc.autocall < 2):
1990 if not theRest and (self.rc.autocall < 2):
1986 newcmd = '%s %s' % (iFun,theRest)
1991 newcmd = '%s %s' % (iFun,theRest)
1987 auto_rewrite = False
1992 auto_rewrite = False
1988 else:
1993 else:
1989 if theRest.startswith('['):
1994 if theRest.startswith('['):
1990 if hasattr(obj,'__getitem__'):
1995 if hasattr(obj,'__getitem__'):
1991 # Don't autocall in this case: item access for an object
1996 # Don't autocall in this case: item access for an object
1992 # which is BOTH callable and implements __getitem__.
1997 # which is BOTH callable and implements __getitem__.
1993 newcmd = '%s %s' % (iFun,theRest)
1998 newcmd = '%s %s' % (iFun,theRest)
1994 auto_rewrite = False
1999 auto_rewrite = False
1995 else:
2000 else:
1996 # if the object doesn't support [] access, go ahead and
2001 # if the object doesn't support [] access, go ahead and
1997 # autocall
2002 # autocall
1998 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1999 elif theRest.endswith(';'):
2004 elif theRest.endswith(';'):
2000 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2001 else:
2006 else:
2002 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003
2008
2004 if auto_rewrite:
2009 if auto_rewrite:
2005 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2006 # log what is now valid Python, not the actual user input (without the
2011 # log what is now valid Python, not the actual user input (without the
2007 # final newline)
2012 # final newline)
2008 self.log(newcmd,continue_prompt)
2013 self.log(newcmd,continue_prompt)
2009 return newcmd
2014 return newcmd
2010
2015
2011 def handle_help(self, line, continue_prompt=None,
2016 def handle_help(self, line, continue_prompt=None,
2012 pre=None,iFun=None,theRest=None):
2017 pre=None,iFun=None,theRest=None):
2013 """Try to get some help for the object.
2018 """Try to get some help for the object.
2014
2019
2015 obj? or ?obj -> basic information.
2020 obj? or ?obj -> basic information.
2016 obj?? or ??obj -> more details.
2021 obj?? or ??obj -> more details.
2017 """
2022 """
2018
2023
2019 # We need to make sure that we don't process lines which would be
2024 # We need to make sure that we don't process lines which would be
2020 # otherwise valid python, such as "x=1 # what?"
2025 # otherwise valid python, such as "x=1 # what?"
2021 try:
2026 try:
2022 codeop.compile_command(line)
2027 codeop.compile_command(line)
2023 except SyntaxError:
2028 except SyntaxError:
2024 # We should only handle as help stuff which is NOT valid syntax
2029 # We should only handle as help stuff which is NOT valid syntax
2025 if line[0]==self.ESC_HELP:
2030 if line[0]==self.ESC_HELP:
2026 line = line[1:]
2031 line = line[1:]
2027 elif line[-1]==self.ESC_HELP:
2032 elif line[-1]==self.ESC_HELP:
2028 line = line[:-1]
2033 line = line[:-1]
2029 self.log('#?'+line)
2034 self.log('#?'+line)
2030 if line:
2035 if line:
2031 self.magic_pinfo(line)
2036 self.magic_pinfo(line)
2032 else:
2037 else:
2033 page(self.usage,screen_lines=self.rc.screen_length)
2038 page(self.usage,screen_lines=self.rc.screen_length)
2034 return '' # Empty string is needed here!
2039 return '' # Empty string is needed here!
2035 except:
2040 except:
2036 # Pass any other exceptions through to the normal handler
2041 # Pass any other exceptions through to the normal handler
2037 return self.handle_normal(line,continue_prompt)
2042 return self.handle_normal(line,continue_prompt)
2038 else:
2043 else:
2039 # If the code compiles ok, we should handle it normally
2044 # If the code compiles ok, we should handle it normally
2040 return self.handle_normal(line,continue_prompt)
2045 return self.handle_normal(line,continue_prompt)
2041
2046
2042 def handle_emacs(self,line,continue_prompt=None,
2047 def handle_emacs(self,line,continue_prompt=None,
2043 pre=None,iFun=None,theRest=None):
2048 pre=None,iFun=None,theRest=None):
2044 """Handle input lines marked by python-mode."""
2049 """Handle input lines marked by python-mode."""
2045
2050
2046 # Currently, nothing is done. Later more functionality can be added
2051 # Currently, nothing is done. Later more functionality can be added
2047 # here if needed.
2052 # here if needed.
2048
2053
2049 # The input cache shouldn't be updated
2054 # The input cache shouldn't be updated
2050
2055
2051 return line
2056 return line
2052
2057
2053 def mktempfile(self,data=None):
2058 def mktempfile(self,data=None):
2054 """Make a new tempfile and return its filename.
2059 """Make a new tempfile and return its filename.
2055
2060
2056 This makes a call to tempfile.mktemp, but it registers the created
2061 This makes a call to tempfile.mktemp, but it registers the created
2057 filename internally so ipython cleans it up at exit time.
2062 filename internally so ipython cleans it up at exit time.
2058
2063
2059 Optional inputs:
2064 Optional inputs:
2060
2065
2061 - data(None): if data is given, it gets written out to the temp file
2066 - data(None): if data is given, it gets written out to the temp file
2062 immediately, and the file is closed again."""
2067 immediately, and the file is closed again."""
2063
2068
2064 filename = tempfile.mktemp('.py','ipython_edit_')
2069 filename = tempfile.mktemp('.py','ipython_edit_')
2065 self.tempfiles.append(filename)
2070 self.tempfiles.append(filename)
2066
2071
2067 if data:
2072 if data:
2068 tmp_file = open(filename,'w')
2073 tmp_file = open(filename,'w')
2069 tmp_file.write(data)
2074 tmp_file.write(data)
2070 tmp_file.close()
2075 tmp_file.close()
2071 return filename
2076 return filename
2072
2077
2073 def write(self,data):
2078 def write(self,data):
2074 """Write a string to the default output"""
2079 """Write a string to the default output"""
2075 Term.cout.write(data)
2080 Term.cout.write(data)
2076
2081
2077 def write_err(self,data):
2082 def write_err(self,data):
2078 """Write a string to the default error output"""
2083 """Write a string to the default error output"""
2079 Term.cerr.write(data)
2084 Term.cerr.write(data)
2080
2085
2081 def exit(self):
2086 def exit(self):
2082 """Handle interactive exit.
2087 """Handle interactive exit.
2083
2088
2084 This method sets the exit_now attribute."""
2089 This method sets the exit_now attribute."""
2085
2090
2086 if self.rc.confirm_exit:
2091 if self.rc.confirm_exit:
2087 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2088 self.exit_now = True
2093 self.exit_now = True
2089 else:
2094 else:
2090 self.exit_now = True
2095 self.exit_now = True
2091 return self.exit_now
2096 return self.exit_now
2092
2097
2093 def safe_execfile(self,fname,*where,**kw):
2098 def safe_execfile(self,fname,*where,**kw):
2094 fname = os.path.expanduser(fname)
2099 fname = os.path.expanduser(fname)
2095
2100
2096 # find things also in current directory
2101 # find things also in current directory
2097 dname = os.path.dirname(fname)
2102 dname = os.path.dirname(fname)
2098 if not sys.path.count(dname):
2103 if not sys.path.count(dname):
2099 sys.path.append(dname)
2104 sys.path.append(dname)
2100
2105
2101 try:
2106 try:
2102 xfile = open(fname)
2107 xfile = open(fname)
2103 except:
2108 except:
2104 print >> Term.cerr, \
2109 print >> Term.cerr, \
2105 'Could not open file <%s> for safe execution.' % fname
2110 'Could not open file <%s> for safe execution.' % fname
2106 return None
2111 return None
2107
2112
2108 kw.setdefault('islog',0)
2113 kw.setdefault('islog',0)
2109 kw.setdefault('quiet',1)
2114 kw.setdefault('quiet',1)
2110 kw.setdefault('exit_ignore',0)
2115 kw.setdefault('exit_ignore',0)
2111 first = xfile.readline()
2116 first = xfile.readline()
2112 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2113 xfile.close()
2118 xfile.close()
2114 # line by line execution
2119 # line by line execution
2115 if first.startswith(loghead) or kw['islog']:
2120 if first.startswith(loghead) or kw['islog']:
2116 print 'Loading log file <%s> one line at a time...' % fname
2121 print 'Loading log file <%s> one line at a time...' % fname
2117 if kw['quiet']:
2122 if kw['quiet']:
2118 stdout_save = sys.stdout
2123 stdout_save = sys.stdout
2119 sys.stdout = StringIO.StringIO()
2124 sys.stdout = StringIO.StringIO()
2120 try:
2125 try:
2121 globs,locs = where[0:2]
2126 globs,locs = where[0:2]
2122 except:
2127 except:
2123 try:
2128 try:
2124 globs = locs = where[0]
2129 globs = locs = where[0]
2125 except:
2130 except:
2126 globs = locs = globals()
2131 globs = locs = globals()
2127 badblocks = []
2132 badblocks = []
2128
2133
2129 # we also need to identify indented blocks of code when replaying
2134 # we also need to identify indented blocks of code when replaying
2130 # logs and put them together before passing them to an exec
2135 # logs and put them together before passing them to an exec
2131 # statement. This takes a bit of regexp and look-ahead work in the
2136 # statement. This takes a bit of regexp and look-ahead work in the
2132 # file. It's easiest if we swallow the whole thing in memory
2137 # file. It's easiest if we swallow the whole thing in memory
2133 # first, and manually walk through the lines list moving the
2138 # first, and manually walk through the lines list moving the
2134 # counter ourselves.
2139 # counter ourselves.
2135 indent_re = re.compile('\s+\S')
2140 indent_re = re.compile('\s+\S')
2136 xfile = open(fname)
2141 xfile = open(fname)
2137 filelines = xfile.readlines()
2142 filelines = xfile.readlines()
2138 xfile.close()
2143 xfile.close()
2139 nlines = len(filelines)
2144 nlines = len(filelines)
2140 lnum = 0
2145 lnum = 0
2141 while lnum < nlines:
2146 while lnum < nlines:
2142 line = filelines[lnum]
2147 line = filelines[lnum]
2143 lnum += 1
2148 lnum += 1
2144 # don't re-insert logger status info into cache
2149 # don't re-insert logger status info into cache
2145 if line.startswith('#log#'):
2150 if line.startswith('#log#'):
2146 continue
2151 continue
2147 else:
2152 else:
2148 # build a block of code (maybe a single line) for execution
2153 # build a block of code (maybe a single line) for execution
2149 block = line
2154 block = line
2150 try:
2155 try:
2151 next = filelines[lnum] # lnum has already incremented
2156 next = filelines[lnum] # lnum has already incremented
2152 except:
2157 except:
2153 next = None
2158 next = None
2154 while next and indent_re.match(next):
2159 while next and indent_re.match(next):
2155 block += next
2160 block += next
2156 lnum += 1
2161 lnum += 1
2157 try:
2162 try:
2158 next = filelines[lnum]
2163 next = filelines[lnum]
2159 except:
2164 except:
2160 next = None
2165 next = None
2161 # now execute the block of one or more lines
2166 # now execute the block of one or more lines
2162 try:
2167 try:
2163 exec block in globs,locs
2168 exec block in globs,locs
2164 except SystemExit:
2169 except SystemExit:
2165 pass
2170 pass
2166 except:
2171 except:
2167 badblocks.append(block.rstrip())
2172 badblocks.append(block.rstrip())
2168 if kw['quiet']: # restore stdout
2173 if kw['quiet']: # restore stdout
2169 sys.stdout.close()
2174 sys.stdout.close()
2170 sys.stdout = stdout_save
2175 sys.stdout = stdout_save
2171 print 'Finished replaying log file <%s>' % fname
2176 print 'Finished replaying log file <%s>' % fname
2172 if badblocks:
2177 if badblocks:
2173 print >> sys.stderr, ('\nThe following lines/blocks in file '
2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2174 '<%s> reported errors:' % fname)
2179 '<%s> reported errors:' % fname)
2175
2180
2176 for badline in badblocks:
2181 for badline in badblocks:
2177 print >> sys.stderr, badline
2182 print >> sys.stderr, badline
2178 else: # regular file execution
2183 else: # regular file execution
2179 try:
2184 try:
2180 execfile(fname,*where)
2185 execfile(fname,*where)
2181 except SyntaxError:
2186 except SyntaxError:
2182 etype,evalue = sys.exc_info()[:2]
2187 etype,evalue = sys.exc_info()[:2]
2183 self.SyntaxTB(etype,evalue,[])
2188 self.SyntaxTB(etype,evalue,[])
2184 warn('Failure executing file: <%s>' % fname)
2189 warn('Failure executing file: <%s>' % fname)
2185 except SystemExit,status:
2190 except SystemExit,status:
2186 if not kw['exit_ignore']:
2191 if not kw['exit_ignore']:
2187 self.InteractiveTB()
2192 self.InteractiveTB()
2188 warn('Failure executing file: <%s>' % fname)
2193 warn('Failure executing file: <%s>' % fname)
2189 except:
2194 except:
2190 self.InteractiveTB()
2195 self.InteractiveTB()
2191 warn('Failure executing file: <%s>' % fname)
2196 warn('Failure executing file: <%s>' % fname)
2192
2197
2193 #************************* end of file <iplib.py> *****************************
2198 #************************* 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