##// END OF EJS Templates
Merging in Jorgen's changes to iplib.py for ticket 315392.
Brian Granger -
r1950:a7cd14da merge
parent child Browse files
Show More
@@ -1,2865 +1,2866 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.4 or newer.
5 Requires Python 2.4 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
9
10 #*****************************************************************************
10 #*****************************************************************************
11 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
11 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 #
13 #
14 # Distributed under the terms of the BSD License. The full license is in
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
15 # the file COPYING, distributed as part of this software.
16 #
16 #
17 # Note: this code originally subclassed code.InteractiveConsole from the
17 # Note: this code originally subclassed code.InteractiveConsole from the
18 # Python standard library. Over time, all of that class has been copied
18 # Python standard library. Over time, all of that class has been copied
19 # verbatim here for modifications which could not be accomplished by
19 # verbatim here for modifications which could not be accomplished by
20 # subclassing. At this point, there are no dependencies at all on the code
20 # subclassing. At this point, there are no dependencies at all on the code
21 # module anymore (it is not even imported). The Python License (sec. 2)
21 # module anymore (it is not even imported). The Python License (sec. 2)
22 # allows for this, but it's always nice to acknowledge credit where credit is
22 # allows for this, but it's always nice to acknowledge credit where credit is
23 # due.
23 # due.
24 #*****************************************************************************
24 #*****************************************************************************
25
25
26 #****************************************************************************
26 #****************************************************************************
27 # Modules and globals
27 # Modules and globals
28
28
29 # Python standard modules
29 # Python standard modules
30 import __main__
30 import __main__
31 import __builtin__
31 import __builtin__
32 import StringIO
32 import StringIO
33 import bdb
33 import bdb
34 import cPickle as pickle
34 import cPickle as pickle
35 import codeop
35 import codeop
36 import exceptions
36 import exceptions
37 import glob
37 import glob
38 import inspect
38 import inspect
39 import keyword
39 import keyword
40 import new
40 import new
41 import os
41 import os
42 import pydoc
42 import pydoc
43 import re
43 import re
44 import shutil
44 import shutil
45 import string
45 import string
46 import sys
46 import sys
47 import tempfile
47 import tempfile
48 import traceback
48 import traceback
49 import types
49 import types
50 from pprint import pprint, pformat
50 from pprint import pprint, pformat
51
51
52 # IPython's own modules
52 # IPython's own modules
53 #import IPython
53 #import IPython
54 from IPython import Debugger,OInspect,PyColorize,ultraTB
54 from IPython import Debugger,OInspect,PyColorize,ultraTB
55 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
55 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
56 from IPython.Extensions import pickleshare
56 from IPython.Extensions import pickleshare
57 from IPython.FakeModule import FakeModule, init_fakemod_dict
57 from IPython.FakeModule import FakeModule, init_fakemod_dict
58 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
58 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
59 from IPython.Logger import Logger
59 from IPython.Logger import Logger
60 from IPython.Magic import Magic
60 from IPython.Magic import Magic
61 from IPython.Prompts import CachedOutput
61 from IPython.Prompts import CachedOutput
62 from IPython.ipstruct import Struct
62 from IPython.ipstruct import Struct
63 from IPython.background_jobs import BackgroundJobManager
63 from IPython.background_jobs import BackgroundJobManager
64 from IPython.usage import cmd_line_usage,interactive_usage
64 from IPython.usage import cmd_line_usage,interactive_usage
65 from IPython.genutils import *
65 from IPython.genutils import *
66 from IPython.strdispatch import StrDispatch
66 from IPython.strdispatch import StrDispatch
67 import IPython.ipapi
67 import IPython.ipapi
68 import IPython.history
68 import IPython.history
69 import IPython.prefilter as prefilter
69 import IPython.prefilter as prefilter
70 import IPython.shadowns
70 import IPython.shadowns
71 # Globals
71 # Globals
72
72
73 # store the builtin raw_input globally, and use this always, in case user code
73 # store the builtin raw_input globally, and use this always, in case user code
74 # overwrites it (like wx.py.PyShell does)
74 # overwrites it (like wx.py.PyShell does)
75 raw_input_original = raw_input
75 raw_input_original = raw_input
76
76
77 # compiled regexps for autoindent management
77 # compiled regexps for autoindent management
78 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
78 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
79
79
80
80
81 #****************************************************************************
81 #****************************************************************************
82 # Some utility function definitions
82 # Some utility function definitions
83
83
84 ini_spaces_re = re.compile(r'^(\s+)')
84 ini_spaces_re = re.compile(r'^(\s+)')
85
85
86 def num_ini_spaces(strng):
86 def num_ini_spaces(strng):
87 """Return the number of initial spaces in a string"""
87 """Return the number of initial spaces in a string"""
88
88
89 ini_spaces = ini_spaces_re.match(strng)
89 ini_spaces = ini_spaces_re.match(strng)
90 if ini_spaces:
90 if ini_spaces:
91 return ini_spaces.end()
91 return ini_spaces.end()
92 else:
92 else:
93 return 0
93 return 0
94
94
95 def softspace(file, newvalue):
95 def softspace(file, newvalue):
96 """Copied from code.py, to remove the dependency"""
96 """Copied from code.py, to remove the dependency"""
97
97
98 oldvalue = 0
98 oldvalue = 0
99 try:
99 try:
100 oldvalue = file.softspace
100 oldvalue = file.softspace
101 except AttributeError:
101 except AttributeError:
102 pass
102 pass
103 try:
103 try:
104 file.softspace = newvalue
104 file.softspace = newvalue
105 except (AttributeError, TypeError):
105 except (AttributeError, TypeError):
106 # "attribute-less object" or "read-only attributes"
106 # "attribute-less object" or "read-only attributes"
107 pass
107 pass
108 return oldvalue
108 return oldvalue
109
109
110
110
111 def user_setup(ipythondir,rc_suffix,mode='install',interactive=True):
111 def user_setup(ipythondir,rc_suffix,mode='install',interactive=True):
112 """Install or upgrade the user configuration directory.
112 """Install or upgrade the user configuration directory.
113
113
114 Can be called when running for the first time or to upgrade the user's
114 Can be called when running for the first time or to upgrade the user's
115 .ipython/ directory.
115 .ipython/ directory.
116
116
117 Parameters
117 Parameters
118 ----------
118 ----------
119 ipythondir : path
119 ipythondir : path
120 The directory to be used for installation/upgrade. In 'install' mode,
120 The directory to be used for installation/upgrade. In 'install' mode,
121 if this path already exists, the function exits immediately.
121 if this path already exists, the function exits immediately.
122
122
123 rc_suffix : str
123 rc_suffix : str
124 Extension for the config files. On *nix platforms it is typically the
124 Extension for the config files. On *nix platforms it is typically the
125 empty string, while Windows normally uses '.ini'.
125 empty string, while Windows normally uses '.ini'.
126
126
127 mode : str, optional
127 mode : str, optional
128 Valid modes are 'install' and 'upgrade'.
128 Valid modes are 'install' and 'upgrade'.
129
129
130 interactive : bool, optional
130 interactive : bool, optional
131 If False, do not wait for user input on any errors. Normally after
131 If False, do not wait for user input on any errors. Normally after
132 printing its status information, this function waits for the user to
132 printing its status information, this function waits for the user to
133 hit Return before proceeding. This is because the default use case is
133 hit Return before proceeding. This is because the default use case is
134 when first installing the IPython configuration, so we want the user to
134 when first installing the IPython configuration, so we want the user to
135 acknowledge the initial message, which contains some useful
135 acknowledge the initial message, which contains some useful
136 information.
136 information.
137 """
137 """
138
138
139 # For automatic use, deactivate all i/o
139 # For automatic use, deactivate all i/o
140 if interactive:
140 if interactive:
141 def wait():
141 def wait():
142 try:
142 try:
143 raw_input("Please press <RETURN> to start IPython.")
143 raw_input("Please press <RETURN> to start IPython.")
144 except EOFError:
144 except EOFError:
145 print >> Term.cout
145 print >> Term.cout
146 print '*'*70
146 print '*'*70
147
147
148 def printf(s):
148 def printf(s):
149 print s
149 print s
150 else:
150 else:
151 wait = lambda : None
151 wait = lambda : None
152 printf = lambda s : None
152 printf = lambda s : None
153
153
154 # Install mode should be re-entrant: if the install dir already exists,
154 # Install mode should be re-entrant: if the install dir already exists,
155 # bail out cleanly
155 # bail out cleanly
156 if mode == 'install' and os.path.isdir(ipythondir):
156 if mode == 'install' and os.path.isdir(ipythondir):
157 return
157 return
158
158
159 cwd = os.getcwd() # remember where we started
159 cwd = os.getcwd() # remember where we started
160 glb = glob.glob
160 glb = glob.glob
161
161
162 printf('*'*70)
162 printf('*'*70)
163 if mode == 'install':
163 if mode == 'install':
164 printf(
164 printf(
165 """Welcome to IPython. I will try to create a personal configuration directory
165 """Welcome to IPython. I will try to create a personal configuration directory
166 where you can customize many aspects of IPython's functionality in:\n""")
166 where you can customize many aspects of IPython's functionality in:\n""")
167 else:
167 else:
168 printf('I am going to upgrade your configuration in:')
168 printf('I am going to upgrade your configuration in:')
169
169
170 printf(ipythondir)
170 printf(ipythondir)
171
171
172 rcdirend = os.path.join('IPython','UserConfig')
172 rcdirend = os.path.join('IPython','UserConfig')
173 cfg = lambda d: os.path.join(d,rcdirend)
173 cfg = lambda d: os.path.join(d,rcdirend)
174 try:
174 try:
175 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
175 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
176 printf("Initializing from configuration: %s" % rcdir)
176 printf("Initializing from configuration: %s" % rcdir)
177 except IndexError:
177 except IndexError:
178 warning = """
178 warning = """
179 Installation error. IPython's directory was not found.
179 Installation error. IPython's directory was not found.
180
180
181 Check the following:
181 Check the following:
182
182
183 The ipython/IPython directory should be in a directory belonging to your
183 The ipython/IPython directory should be in a directory belonging to your
184 PYTHONPATH environment variable (that is, it should be in a directory
184 PYTHONPATH environment variable (that is, it should be in a directory
185 belonging to sys.path). You can copy it explicitly there or just link to it.
185 belonging to sys.path). You can copy it explicitly there or just link to it.
186
186
187 IPython will create a minimal default configuration for you.
187 IPython will create a minimal default configuration for you.
188
188
189 """
189 """
190 warn(warning)
190 warn(warning)
191 wait()
191 wait()
192
192
193 if sys.platform =='win32':
193 if sys.platform =='win32':
194 inif = 'ipythonrc.ini'
194 inif = 'ipythonrc.ini'
195 else:
195 else:
196 inif = 'ipythonrc'
196 inif = 'ipythonrc'
197 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults',
197 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults',
198 inif : '# intentionally left blank' }
198 inif : '# intentionally left blank' }
199 os.makedirs(ipythondir, mode = 0777)
199 os.makedirs(ipythondir, mode = 0777)
200 for f, cont in minimal_setup.items():
200 for f, cont in minimal_setup.items():
201 # In 2.5, this can be more cleanly done using 'with'
201 # In 2.5, this can be more cleanly done using 'with'
202 fobj = file(ipythondir + '/' + f,'w')
202 fobj = file(ipythondir + '/' + f,'w')
203 fobj.write(cont)
203 fobj.write(cont)
204 fobj.close()
204 fobj.close()
205
205
206 return
206 return
207
207
208 if mode == 'install':
208 if mode == 'install':
209 try:
209 try:
210 shutil.copytree(rcdir,ipythondir)
210 shutil.copytree(rcdir,ipythondir)
211 os.chdir(ipythondir)
211 os.chdir(ipythondir)
212 rc_files = glb("ipythonrc*")
212 rc_files = glb("ipythonrc*")
213 for rc_file in rc_files:
213 for rc_file in rc_files:
214 os.rename(rc_file,rc_file+rc_suffix)
214 os.rename(rc_file,rc_file+rc_suffix)
215 except:
215 except:
216 warning = """
216 warning = """
217
217
218 There was a problem with the installation:
218 There was a problem with the installation:
219 %s
219 %s
220 Try to correct it or contact the developers if you think it's a bug.
220 Try to correct it or contact the developers if you think it's a bug.
221 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
221 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
222 warn(warning)
222 warn(warning)
223 wait()
223 wait()
224 return
224 return
225
225
226 elif mode == 'upgrade':
226 elif mode == 'upgrade':
227 try:
227 try:
228 os.chdir(ipythondir)
228 os.chdir(ipythondir)
229 except:
229 except:
230 printf("""
230 printf("""
231 Can not upgrade: changing to directory %s failed. Details:
231 Can not upgrade: changing to directory %s failed. Details:
232 %s
232 %s
233 """ % (ipythondir,sys.exc_info()[1]) )
233 """ % (ipythondir,sys.exc_info()[1]) )
234 wait()
234 wait()
235 return
235 return
236 else:
236 else:
237 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
237 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
238 for new_full_path in sources:
238 for new_full_path in sources:
239 new_filename = os.path.basename(new_full_path)
239 new_filename = os.path.basename(new_full_path)
240 if new_filename.startswith('ipythonrc'):
240 if new_filename.startswith('ipythonrc'):
241 new_filename = new_filename + rc_suffix
241 new_filename = new_filename + rc_suffix
242 # The config directory should only contain files, skip any
242 # The config directory should only contain files, skip any
243 # directories which may be there (like CVS)
243 # directories which may be there (like CVS)
244 if os.path.isdir(new_full_path):
244 if os.path.isdir(new_full_path):
245 continue
245 continue
246 if os.path.exists(new_filename):
246 if os.path.exists(new_filename):
247 old_file = new_filename+'.old'
247 old_file = new_filename+'.old'
248 if os.path.exists(old_file):
248 if os.path.exists(old_file):
249 os.remove(old_file)
249 os.remove(old_file)
250 os.rename(new_filename,old_file)
250 os.rename(new_filename,old_file)
251 shutil.copy(new_full_path,new_filename)
251 shutil.copy(new_full_path,new_filename)
252 else:
252 else:
253 raise ValueError('unrecognized mode for install: %r' % mode)
253 raise ValueError('unrecognized mode for install: %r' % mode)
254
254
255 # Fix line-endings to those native to each platform in the config
255 # Fix line-endings to those native to each platform in the config
256 # directory.
256 # directory.
257 try:
257 try:
258 os.chdir(ipythondir)
258 os.chdir(ipythondir)
259 except:
259 except:
260 printf("""
260 printf("""
261 Problem: changing to directory %s failed.
261 Problem: changing to directory %s failed.
262 Details:
262 Details:
263 %s
263 %s
264
264
265 Some configuration files may have incorrect line endings. This should not
265 Some configuration files may have incorrect line endings. This should not
266 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1]) )
266 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1]) )
267 wait()
267 wait()
268 else:
268 else:
269 for fname in glb('ipythonrc*'):
269 for fname in glb('ipythonrc*'):
270 try:
270 try:
271 native_line_ends(fname,backup=0)
271 native_line_ends(fname,backup=0)
272 except IOError:
272 except IOError:
273 pass
273 pass
274
274
275 if mode == 'install':
275 if mode == 'install':
276 printf("""
276 printf("""
277 Successful installation!
277 Successful installation!
278
278
279 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
279 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
280 IPython manual (there are both HTML and PDF versions supplied with the
280 IPython manual (there are both HTML and PDF versions supplied with the
281 distribution) to make sure that your system environment is properly configured
281 distribution) to make sure that your system environment is properly configured
282 to take advantage of IPython's features.
282 to take advantage of IPython's features.
283
283
284 Important note: the configuration system has changed! The old system is
284 Important note: the configuration system has changed! The old system is
285 still in place, but its setting may be partly overridden by the settings in
285 still in place, but its setting may be partly overridden by the settings in
286 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
286 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
287 if some of the new settings bother you.
287 if some of the new settings bother you.
288
288
289 """)
289 """)
290 else:
290 else:
291 printf("""
291 printf("""
292 Successful upgrade!
292 Successful upgrade!
293
293
294 All files in your directory:
294 All files in your directory:
295 %(ipythondir)s
295 %(ipythondir)s
296 which would have been overwritten by the upgrade were backed up with a .old
296 which would have been overwritten by the upgrade were backed up with a .old
297 extension. If you had made particular customizations in those files you may
297 extension. If you had made particular customizations in those files you may
298 want to merge them back into the new files.""" % locals() )
298 want to merge them back into the new files.""" % locals() )
299 wait()
299 wait()
300 os.chdir(cwd)
300 os.chdir(cwd)
301
301
302 #****************************************************************************
302 #****************************************************************************
303 # Local use exceptions
303 # Local use exceptions
304 class SpaceInInput(exceptions.Exception): pass
304 class SpaceInInput(exceptions.Exception): pass
305
305
306
306
307 #****************************************************************************
307 #****************************************************************************
308 # Local use classes
308 # Local use classes
309 class Bunch: pass
309 class Bunch: pass
310
310
311 class Undefined: pass
311 class Undefined: pass
312
312
313 class Quitter(object):
313 class Quitter(object):
314 """Simple class to handle exit, similar to Python 2.5's.
314 """Simple class to handle exit, similar to Python 2.5's.
315
315
316 It handles exiting in an ipython-safe manner, which the one in Python 2.5
316 It handles exiting in an ipython-safe manner, which the one in Python 2.5
317 doesn't do (obviously, since it doesn't know about ipython)."""
317 doesn't do (obviously, since it doesn't know about ipython)."""
318
318
319 def __init__(self,shell,name):
319 def __init__(self,shell,name):
320 self.shell = shell
320 self.shell = shell
321 self.name = name
321 self.name = name
322
322
323 def __repr__(self):
323 def __repr__(self):
324 return 'Type %s() to exit.' % self.name
324 return 'Type %s() to exit.' % self.name
325 __str__ = __repr__
325 __str__ = __repr__
326
326
327 def __call__(self):
327 def __call__(self):
328 self.shell.exit()
328 self.shell.exit()
329
329
330 class InputList(list):
330 class InputList(list):
331 """Class to store user input.
331 """Class to store user input.
332
332
333 It's basically a list, but slices return a string instead of a list, thus
333 It's basically a list, but slices return a string instead of a list, thus
334 allowing things like (assuming 'In' is an instance):
334 allowing things like (assuming 'In' is an instance):
335
335
336 exec In[4:7]
336 exec In[4:7]
337
337
338 or
338 or
339
339
340 exec In[5:9] + In[14] + In[21:25]"""
340 exec In[5:9] + In[14] + In[21:25]"""
341
341
342 def __getslice__(self,i,j):
342 def __getslice__(self,i,j):
343 return ''.join(list.__getslice__(self,i,j))
343 return ''.join(list.__getslice__(self,i,j))
344
344
345 class SyntaxTB(ultraTB.ListTB):
345 class SyntaxTB(ultraTB.ListTB):
346 """Extension which holds some state: the last exception value"""
346 """Extension which holds some state: the last exception value"""
347
347
348 def __init__(self,color_scheme = 'NoColor'):
348 def __init__(self,color_scheme = 'NoColor'):
349 ultraTB.ListTB.__init__(self,color_scheme)
349 ultraTB.ListTB.__init__(self,color_scheme)
350 self.last_syntax_error = None
350 self.last_syntax_error = None
351
351
352 def __call__(self, etype, value, elist):
352 def __call__(self, etype, value, elist):
353 self.last_syntax_error = value
353 self.last_syntax_error = value
354 ultraTB.ListTB.__call__(self,etype,value,elist)
354 ultraTB.ListTB.__call__(self,etype,value,elist)
355
355
356 def clear_err_state(self):
356 def clear_err_state(self):
357 """Return the current error state and clear it"""
357 """Return the current error state and clear it"""
358 e = self.last_syntax_error
358 e = self.last_syntax_error
359 self.last_syntax_error = None
359 self.last_syntax_error = None
360 return e
360 return e
361
361
362 #****************************************************************************
362 #****************************************************************************
363 # Main IPython class
363 # Main IPython class
364
364
365 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
365 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
366 # until a full rewrite is made. I've cleaned all cross-class uses of
366 # until a full rewrite is made. I've cleaned all cross-class uses of
367 # attributes and methods, but too much user code out there relies on the
367 # attributes and methods, but too much user code out there relies on the
368 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
368 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
369 #
369 #
370 # But at least now, all the pieces have been separated and we could, in
370 # But at least now, all the pieces have been separated and we could, in
371 # principle, stop using the mixin. This will ease the transition to the
371 # principle, stop using the mixin. This will ease the transition to the
372 # chainsaw branch.
372 # chainsaw branch.
373
373
374 # For reference, the following is the list of 'self.foo' uses in the Magic
374 # For reference, the following is the list of 'self.foo' uses in the Magic
375 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
375 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
376 # class, to prevent clashes.
376 # class, to prevent clashes.
377
377
378 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
378 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
379 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
379 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
380 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
380 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
381 # 'self.value']
381 # 'self.value']
382
382
383 class InteractiveShell(object,Magic):
383 class InteractiveShell(object,Magic):
384 """An enhanced console for Python."""
384 """An enhanced console for Python."""
385
385
386 # class attribute to indicate whether the class supports threads or not.
386 # class attribute to indicate whether the class supports threads or not.
387 # Subclasses with thread support should override this as needed.
387 # Subclasses with thread support should override this as needed.
388 isthreaded = False
388 isthreaded = False
389
389
390 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
390 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
391 user_ns=None,user_global_ns=None,banner2='',
391 user_ns=None,user_global_ns=None,banner2='',
392 custom_exceptions=((),None),embedded=False):
392 custom_exceptions=((),None),embedded=False):
393
393
394 # log system
394 # log system
395 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
395 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
396
396
397 # Job manager (for jobs run as background threads)
397 # Job manager (for jobs run as background threads)
398 self.jobs = BackgroundJobManager()
398 self.jobs = BackgroundJobManager()
399
399
400 # Store the actual shell's name
400 # Store the actual shell's name
401 self.name = name
401 self.name = name
402 self.more = False
402 self.more = False
403
403
404 # We need to know whether the instance is meant for embedding, since
404 # We need to know whether the instance is meant for embedding, since
405 # global/local namespaces need to be handled differently in that case
405 # global/local namespaces need to be handled differently in that case
406 self.embedded = embedded
406 self.embedded = embedded
407 if embedded:
407 if embedded:
408 # Control variable so users can, from within the embedded instance,
408 # Control variable so users can, from within the embedded instance,
409 # permanently deactivate it.
409 # permanently deactivate it.
410 self.embedded_active = True
410 self.embedded_active = True
411
411
412 # command compiler
412 # command compiler
413 self.compile = codeop.CommandCompiler()
413 self.compile = codeop.CommandCompiler()
414
414
415 # User input buffer
415 # User input buffer
416 self.buffer = []
416 self.buffer = []
417
417
418 # Default name given in compilation of code
418 # Default name given in compilation of code
419 self.filename = '<ipython console>'
419 self.filename = '<ipython console>'
420
420
421 # Install our own quitter instead of the builtins. For python2.3-2.4,
421 # Install our own quitter instead of the builtins. For python2.3-2.4,
422 # this brings in behavior like 2.5, and for 2.5 it's identical.
422 # this brings in behavior like 2.5, and for 2.5 it's identical.
423 __builtin__.exit = Quitter(self,'exit')
423 __builtin__.exit = Quitter(self,'exit')
424 __builtin__.quit = Quitter(self,'quit')
424 __builtin__.quit = Quitter(self,'quit')
425
425
426 # Make an empty namespace, which extension writers can rely on both
426 # Make an empty namespace, which extension writers can rely on both
427 # existing and NEVER being used by ipython itself. This gives them a
427 # existing and NEVER being used by ipython itself. This gives them a
428 # convenient location for storing additional information and state
428 # convenient location for storing additional information and state
429 # their extensions may require, without fear of collisions with other
429 # their extensions may require, without fear of collisions with other
430 # ipython names that may develop later.
430 # ipython names that may develop later.
431 self.meta = Struct()
431 self.meta = Struct()
432
432
433 # Create the namespace where the user will operate. user_ns is
433 # Create the namespace where the user will operate. user_ns is
434 # normally the only one used, and it is passed to the exec calls as
434 # normally the only one used, and it is passed to the exec calls as
435 # the locals argument. But we do carry a user_global_ns namespace
435 # the locals argument. But we do carry a user_global_ns namespace
436 # given as the exec 'globals' argument, This is useful in embedding
436 # given as the exec 'globals' argument, This is useful in embedding
437 # situations where the ipython shell opens in a context where the
437 # situations where the ipython shell opens in a context where the
438 # distinction between locals and globals is meaningful. For
438 # distinction between locals and globals is meaningful. For
439 # non-embedded contexts, it is just the same object as the user_ns dict.
439 # non-embedded contexts, it is just the same object as the user_ns dict.
440
440
441 # FIXME. For some strange reason, __builtins__ is showing up at user
441 # FIXME. For some strange reason, __builtins__ is showing up at user
442 # level as a dict instead of a module. This is a manual fix, but I
442 # level as a dict instead of a module. This is a manual fix, but I
443 # should really track down where the problem is coming from. Alex
443 # should really track down where the problem is coming from. Alex
444 # Schmolck reported this problem first.
444 # Schmolck reported this problem first.
445
445
446 # A useful post by Alex Martelli on this topic:
446 # A useful post by Alex Martelli on this topic:
447 # Re: inconsistent value from __builtins__
447 # Re: inconsistent value from __builtins__
448 # Von: Alex Martelli <aleaxit@yahoo.com>
448 # Von: Alex Martelli <aleaxit@yahoo.com>
449 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
449 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
450 # Gruppen: comp.lang.python
450 # Gruppen: comp.lang.python
451
451
452 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
452 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
453 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
453 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
454 # > <type 'dict'>
454 # > <type 'dict'>
455 # > >>> print type(__builtins__)
455 # > >>> print type(__builtins__)
456 # > <type 'module'>
456 # > <type 'module'>
457 # > Is this difference in return value intentional?
457 # > Is this difference in return value intentional?
458
458
459 # Well, it's documented that '__builtins__' can be either a dictionary
459 # Well, it's documented that '__builtins__' can be either a dictionary
460 # or a module, and it's been that way for a long time. Whether it's
460 # or a module, and it's been that way for a long time. Whether it's
461 # intentional (or sensible), I don't know. In any case, the idea is
461 # intentional (or sensible), I don't know. In any case, the idea is
462 # that if you need to access the built-in namespace directly, you
462 # that if you need to access the built-in namespace directly, you
463 # should start with "import __builtin__" (note, no 's') which will
463 # should start with "import __builtin__" (note, no 's') which will
464 # definitely give you a module. Yeah, it's somewhat confusing:-(.
464 # definitely give you a module. Yeah, it's somewhat confusing:-(.
465
465
466 # These routines return properly built dicts as needed by the rest of
466 # These routines return properly built dicts as needed by the rest of
467 # the code, and can also be used by extension writers to generate
467 # the code, and can also be used by extension writers to generate
468 # properly initialized namespaces.
468 # properly initialized namespaces.
469 user_ns, user_global_ns = IPython.ipapi.make_user_namespaces(user_ns,
469 user_ns, user_global_ns = IPython.ipapi.make_user_namespaces(user_ns,
470 user_global_ns)
470 user_global_ns)
471
471
472 # Assign namespaces
472 # Assign namespaces
473 # This is the namespace where all normal user variables live
473 # This is the namespace where all normal user variables live
474 self.user_ns = user_ns
474 self.user_ns = user_ns
475 self.user_global_ns = user_global_ns
475 self.user_global_ns = user_global_ns
476
476
477 # An auxiliary namespace that checks what parts of the user_ns were
477 # An auxiliary namespace that checks what parts of the user_ns were
478 # loaded at startup, so we can list later only variables defined in
478 # loaded at startup, so we can list later only variables defined in
479 # actual interactive use. Since it is always a subset of user_ns, it
479 # actual interactive use. Since it is always a subset of user_ns, it
480 # doesn't need to be seaparately tracked in the ns_table
480 # doesn't need to be seaparately tracked in the ns_table
481 self.user_config_ns = {}
481 self.user_config_ns = {}
482
482
483 # A namespace to keep track of internal data structures to prevent
483 # A namespace to keep track of internal data structures to prevent
484 # them from cluttering user-visible stuff. Will be updated later
484 # them from cluttering user-visible stuff. Will be updated later
485 self.internal_ns = {}
485 self.internal_ns = {}
486
486
487 # Namespace of system aliases. Each entry in the alias
487 # Namespace of system aliases. Each entry in the alias
488 # table must be a 2-tuple of the form (N,name), where N is the number
488 # table must be a 2-tuple of the form (N,name), where N is the number
489 # of positional arguments of the alias.
489 # of positional arguments of the alias.
490 self.alias_table = {}
490 self.alias_table = {}
491
491
492 # Now that FakeModule produces a real module, we've run into a nasty
492 # Now that FakeModule produces a real module, we've run into a nasty
493 # problem: after script execution (via %run), the module where the user
493 # problem: after script execution (via %run), the module where the user
494 # code ran is deleted. Now that this object is a true module (needed
494 # code ran is deleted. Now that this object is a true module (needed
495 # so docetst and other tools work correctly), the Python module
495 # so docetst and other tools work correctly), the Python module
496 # teardown mechanism runs over it, and sets to None every variable
496 # teardown mechanism runs over it, and sets to None every variable
497 # present in that module. Top-level references to objects from the
497 # present in that module. Top-level references to objects from the
498 # script survive, because the user_ns is updated with them. However,
498 # script survive, because the user_ns is updated with them. However,
499 # calling functions defined in the script that use other things from
499 # calling functions defined in the script that use other things from
500 # the script will fail, because the function's closure had references
500 # the script will fail, because the function's closure had references
501 # to the original objects, which are now all None. So we must protect
501 # to the original objects, which are now all None. So we must protect
502 # these modules from deletion by keeping a cache.
502 # these modules from deletion by keeping a cache.
503 #
503 #
504 # To avoid keeping stale modules around (we only need the one from the
504 # To avoid keeping stale modules around (we only need the one from the
505 # last run), we use a dict keyed with the full path to the script, so
505 # last run), we use a dict keyed with the full path to the script, so
506 # only the last version of the module is held in the cache. Note,
506 # only the last version of the module is held in the cache. Note,
507 # however, that we must cache the module *namespace contents* (their
507 # however, that we must cache the module *namespace contents* (their
508 # __dict__). Because if we try to cache the actual modules, old ones
508 # __dict__). Because if we try to cache the actual modules, old ones
509 # (uncached) could be destroyed while still holding references (such as
509 # (uncached) could be destroyed while still holding references (such as
510 # those held by GUI objects that tend to be long-lived)>
510 # those held by GUI objects that tend to be long-lived)>
511 #
511 #
512 # The %reset command will flush this cache. See the cache_main_mod()
512 # The %reset command will flush this cache. See the cache_main_mod()
513 # and clear_main_mod_cache() methods for details on use.
513 # and clear_main_mod_cache() methods for details on use.
514
514
515 # This is the cache used for 'main' namespaces
515 # This is the cache used for 'main' namespaces
516 self._main_ns_cache = {}
516 self._main_ns_cache = {}
517 # And this is the single instance of FakeModule whose __dict__ we keep
517 # And this is the single instance of FakeModule whose __dict__ we keep
518 # copying and clearing for reuse on each %run
518 # copying and clearing for reuse on each %run
519 self._user_main_module = FakeModule()
519 self._user_main_module = FakeModule()
520
520
521 # A table holding all the namespaces IPython deals with, so that
521 # A table holding all the namespaces IPython deals with, so that
522 # introspection facilities can search easily.
522 # introspection facilities can search easily.
523 self.ns_table = {'user':user_ns,
523 self.ns_table = {'user':user_ns,
524 'user_global':user_global_ns,
524 'user_global':user_global_ns,
525 'alias':self.alias_table,
525 'alias':self.alias_table,
526 'internal':self.internal_ns,
526 'internal':self.internal_ns,
527 'builtin':__builtin__.__dict__
527 'builtin':__builtin__.__dict__
528 }
528 }
529
529
530 # Similarly, track all namespaces where references can be held and that
530 # Similarly, track all namespaces where references can be held and that
531 # we can safely clear (so it can NOT include builtin). This one can be
531 # we can safely clear (so it can NOT include builtin). This one can be
532 # a simple list.
532 # a simple list.
533 self.ns_refs_table = [ user_ns, user_global_ns, self.user_config_ns,
533 self.ns_refs_table = [ user_ns, user_global_ns, self.user_config_ns,
534 self.alias_table, self.internal_ns,
534 self.alias_table, self.internal_ns,
535 self._main_ns_cache ]
535 self._main_ns_cache ]
536
536
537 # We need to insert into sys.modules something that looks like a
537 # We need to insert into sys.modules something that looks like a
538 # module but which accesses the IPython namespace, for shelve and
538 # module but which accesses the IPython namespace, for shelve and
539 # pickle to work interactively. Normally they rely on getting
539 # pickle to work interactively. Normally they rely on getting
540 # everything out of __main__, but for embedding purposes each IPython
540 # everything out of __main__, but for embedding purposes each IPython
541 # instance has its own private namespace, so we can't go shoving
541 # instance has its own private namespace, so we can't go shoving
542 # everything into __main__.
542 # everything into __main__.
543
543
544 # note, however, that we should only do this for non-embedded
544 # note, however, that we should only do this for non-embedded
545 # ipythons, which really mimic the __main__.__dict__ with their own
545 # ipythons, which really mimic the __main__.__dict__ with their own
546 # namespace. Embedded instances, on the other hand, should not do
546 # namespace. Embedded instances, on the other hand, should not do
547 # this because they need to manage the user local/global namespaces
547 # this because they need to manage the user local/global namespaces
548 # only, but they live within a 'normal' __main__ (meaning, they
548 # only, but they live within a 'normal' __main__ (meaning, they
549 # shouldn't overtake the execution environment of the script they're
549 # shouldn't overtake the execution environment of the script they're
550 # embedded in).
550 # embedded in).
551
551
552 if not embedded:
552 if not embedded:
553 try:
553 try:
554 main_name = self.user_ns['__name__']
554 main_name = self.user_ns['__name__']
555 except KeyError:
555 except KeyError:
556 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
556 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
557 else:
557 else:
558 #print "pickle hack in place" # dbg
558 #print "pickle hack in place" # dbg
559 #print 'main_name:',main_name # dbg
559 #print 'main_name:',main_name # dbg
560 sys.modules[main_name] = FakeModule(self.user_ns)
560 sys.modules[main_name] = FakeModule(self.user_ns)
561
561
562 # List of input with multi-line handling.
562 # List of input with multi-line handling.
563 self.input_hist = InputList()
563 self.input_hist = InputList()
564 # This one will hold the 'raw' input history, without any
564 # This one will hold the 'raw' input history, without any
565 # pre-processing. This will allow users to retrieve the input just as
565 # pre-processing. This will allow users to retrieve the input just as
566 # it was exactly typed in by the user, with %hist -r.
566 # it was exactly typed in by the user, with %hist -r.
567 self.input_hist_raw = InputList()
567 self.input_hist_raw = InputList()
568
568
569 # list of visited directories
569 # list of visited directories
570 try:
570 try:
571 self.dir_hist = [os.getcwd()]
571 self.dir_hist = [os.getcwd()]
572 except OSError:
572 except OSError:
573 self.dir_hist = []
573 self.dir_hist = []
574
574
575 # dict of output history
575 # dict of output history
576 self.output_hist = {}
576 self.output_hist = {}
577
577
578 # Get system encoding at startup time. Certain terminals (like Emacs
578 # Get system encoding at startup time. Certain terminals (like Emacs
579 # under Win32 have it set to None, and we need to have a known valid
579 # under Win32 have it set to None, and we need to have a known valid
580 # encoding to use in the raw_input() method
580 # encoding to use in the raw_input() method
581 try:
581 try:
582 self.stdin_encoding = sys.stdin.encoding or 'ascii'
582 self.stdin_encoding = sys.stdin.encoding or 'ascii'
583 except AttributeError:
583 except AttributeError:
584 self.stdin_encoding = 'ascii'
584 self.stdin_encoding = 'ascii'
585
585
586 # dict of things NOT to alias (keywords, builtins and some magics)
586 # dict of things NOT to alias (keywords, builtins and some magics)
587 no_alias = {}
587 no_alias = {}
588 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
588 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
589 for key in keyword.kwlist + no_alias_magics:
589 for key in keyword.kwlist + no_alias_magics:
590 no_alias[key] = 1
590 no_alias[key] = 1
591 no_alias.update(__builtin__.__dict__)
591 no_alias.update(__builtin__.__dict__)
592 self.no_alias = no_alias
592 self.no_alias = no_alias
593
593
594 # Object variable to store code object waiting execution. This is
594 # Object variable to store code object waiting execution. This is
595 # used mainly by the multithreaded shells, but it can come in handy in
595 # used mainly by the multithreaded shells, but it can come in handy in
596 # other situations. No need to use a Queue here, since it's a single
596 # other situations. No need to use a Queue here, since it's a single
597 # item which gets cleared once run.
597 # item which gets cleared once run.
598 self.code_to_run = None
598 self.code_to_run = None
599
599
600 # escapes for automatic behavior on the command line
600 # escapes for automatic behavior on the command line
601 self.ESC_SHELL = '!'
601 self.ESC_SHELL = '!'
602 self.ESC_SH_CAP = '!!'
602 self.ESC_SH_CAP = '!!'
603 self.ESC_HELP = '?'
603 self.ESC_HELP = '?'
604 self.ESC_MAGIC = '%'
604 self.ESC_MAGIC = '%'
605 self.ESC_QUOTE = ','
605 self.ESC_QUOTE = ','
606 self.ESC_QUOTE2 = ';'
606 self.ESC_QUOTE2 = ';'
607 self.ESC_PAREN = '/'
607 self.ESC_PAREN = '/'
608
608
609 # And their associated handlers
609 # And their associated handlers
610 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
610 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
611 self.ESC_QUOTE : self.handle_auto,
611 self.ESC_QUOTE : self.handle_auto,
612 self.ESC_QUOTE2 : self.handle_auto,
612 self.ESC_QUOTE2 : self.handle_auto,
613 self.ESC_MAGIC : self.handle_magic,
613 self.ESC_MAGIC : self.handle_magic,
614 self.ESC_HELP : self.handle_help,
614 self.ESC_HELP : self.handle_help,
615 self.ESC_SHELL : self.handle_shell_escape,
615 self.ESC_SHELL : self.handle_shell_escape,
616 self.ESC_SH_CAP : self.handle_shell_escape,
616 self.ESC_SH_CAP : self.handle_shell_escape,
617 }
617 }
618
618
619 # class initializations
619 # class initializations
620 Magic.__init__(self,self)
620 Magic.__init__(self,self)
621
621
622 # Python source parser/formatter for syntax highlighting
622 # Python source parser/formatter for syntax highlighting
623 pyformat = PyColorize.Parser().format
623 pyformat = PyColorize.Parser().format
624 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
624 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
625
625
626 # hooks holds pointers used for user-side customizations
626 # hooks holds pointers used for user-side customizations
627 self.hooks = Struct()
627 self.hooks = Struct()
628
628
629 self.strdispatchers = {}
629 self.strdispatchers = {}
630
630
631 # Set all default hooks, defined in the IPython.hooks module.
631 # Set all default hooks, defined in the IPython.hooks module.
632 hooks = IPython.hooks
632 hooks = IPython.hooks
633 for hook_name in hooks.__all__:
633 for hook_name in hooks.__all__:
634 # default hooks have priority 100, i.e. low; user hooks should have
634 # default hooks have priority 100, i.e. low; user hooks should have
635 # 0-100 priority
635 # 0-100 priority
636 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
636 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
637 #print "bound hook",hook_name
637 #print "bound hook",hook_name
638
638
639 # Flag to mark unconditional exit
639 # Flag to mark unconditional exit
640 self.exit_now = False
640 self.exit_now = False
641
641
642 self.usage_min = """\
642 self.usage_min = """\
643 An enhanced console for Python.
643 An enhanced console for Python.
644 Some of its features are:
644 Some of its features are:
645 - Readline support if the readline library is present.
645 - Readline support if the readline library is present.
646 - Tab completion in the local namespace.
646 - Tab completion in the local namespace.
647 - Logging of input, see command-line options.
647 - Logging of input, see command-line options.
648 - System shell escape via ! , eg !ls.
648 - System shell escape via ! , eg !ls.
649 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
649 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
650 - Keeps track of locally defined variables via %who, %whos.
650 - Keeps track of locally defined variables via %who, %whos.
651 - Show object information with a ? eg ?x or x? (use ?? for more info).
651 - Show object information with a ? eg ?x or x? (use ?? for more info).
652 """
652 """
653 if usage: self.usage = usage
653 if usage: self.usage = usage
654 else: self.usage = self.usage_min
654 else: self.usage = self.usage_min
655
655
656 # Storage
656 # Storage
657 self.rc = rc # This will hold all configuration information
657 self.rc = rc # This will hold all configuration information
658 self.pager = 'less'
658 self.pager = 'less'
659 # temporary files used for various purposes. Deleted at exit.
659 # temporary files used for various purposes. Deleted at exit.
660 self.tempfiles = []
660 self.tempfiles = []
661
661
662 # Keep track of readline usage (later set by init_readline)
662 # Keep track of readline usage (later set by init_readline)
663 self.has_readline = False
663 self.has_readline = False
664
664
665 # template for logfile headers. It gets resolved at runtime by the
665 # template for logfile headers. It gets resolved at runtime by the
666 # logstart method.
666 # logstart method.
667 self.loghead_tpl = \
667 self.loghead_tpl = \
668 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
668 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
669 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
669 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
670 #log# opts = %s
670 #log# opts = %s
671 #log# args = %s
671 #log# args = %s
672 #log# It is safe to make manual edits below here.
672 #log# It is safe to make manual edits below here.
673 #log#-----------------------------------------------------------------------
673 #log#-----------------------------------------------------------------------
674 """
674 """
675 # for pushd/popd management
675 # for pushd/popd management
676 try:
676 try:
677 self.home_dir = get_home_dir()
677 self.home_dir = get_home_dir()
678 except HomeDirError,msg:
678 except HomeDirError,msg:
679 fatal(msg)
679 fatal(msg)
680
680
681 self.dir_stack = []
681 self.dir_stack = []
682
682
683 # Functions to call the underlying shell.
683 # Functions to call the underlying shell.
684
684
685 # The first is similar to os.system, but it doesn't return a value,
685 # The first is similar to os.system, but it doesn't return a value,
686 # and it allows interpolation of variables in the user's namespace.
686 # and it allows interpolation of variables in the user's namespace.
687 self.system = lambda cmd: \
687 self.system = lambda cmd: \
688 self.hooks.shell_hook(self.var_expand(cmd,depth=2))
688 self.hooks.shell_hook(self.var_expand(cmd,depth=2))
689
689
690 # These are for getoutput and getoutputerror:
690 # These are for getoutput and getoutputerror:
691 self.getoutput = lambda cmd: \
691 self.getoutput = lambda cmd: \
692 getoutput(self.var_expand(cmd,depth=2),
692 getoutput(self.var_expand(cmd,depth=2),
693 header=self.rc.system_header,
693 header=self.rc.system_header,
694 verbose=self.rc.system_verbose)
694 verbose=self.rc.system_verbose)
695
695
696 self.getoutputerror = lambda cmd: \
696 self.getoutputerror = lambda cmd: \
697 getoutputerror(self.var_expand(cmd,depth=2),
697 getoutputerror(self.var_expand(cmd,depth=2),
698 header=self.rc.system_header,
698 header=self.rc.system_header,
699 verbose=self.rc.system_verbose)
699 verbose=self.rc.system_verbose)
700
700
701
701
702 # keep track of where we started running (mainly for crash post-mortem)
702 # keep track of where we started running (mainly for crash post-mortem)
703 self.starting_dir = os.getcwd()
703 self.starting_dir = os.getcwd()
704
704
705 # Various switches which can be set
705 # Various switches which can be set
706 self.CACHELENGTH = 5000 # this is cheap, it's just text
706 self.CACHELENGTH = 5000 # this is cheap, it's just text
707 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
707 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
708 self.banner2 = banner2
708 self.banner2 = banner2
709
709
710 # TraceBack handlers:
710 # TraceBack handlers:
711
711
712 # Syntax error handler.
712 # Syntax error handler.
713 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
713 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
714
714
715 # The interactive one is initialized with an offset, meaning we always
715 # The interactive one is initialized with an offset, meaning we always
716 # want to remove the topmost item in the traceback, which is our own
716 # want to remove the topmost item in the traceback, which is our own
717 # internal code. Valid modes: ['Plain','Context','Verbose']
717 # internal code. Valid modes: ['Plain','Context','Verbose']
718 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
718 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
719 color_scheme='NoColor',
719 color_scheme='NoColor',
720 tb_offset = 1)
720 tb_offset = 1)
721
721
722 # IPython itself shouldn't crash. This will produce a detailed
722 # IPython itself shouldn't crash. This will produce a detailed
723 # post-mortem if it does. But we only install the crash handler for
723 # post-mortem if it does. But we only install the crash handler for
724 # non-threaded shells, the threaded ones use a normal verbose reporter
724 # non-threaded shells, the threaded ones use a normal verbose reporter
725 # and lose the crash handler. This is because exceptions in the main
725 # and lose the crash handler. This is because exceptions in the main
726 # thread (such as in GUI code) propagate directly to sys.excepthook,
726 # thread (such as in GUI code) propagate directly to sys.excepthook,
727 # and there's no point in printing crash dumps for every user exception.
727 # and there's no point in printing crash dumps for every user exception.
728 if self.isthreaded:
728 if self.isthreaded:
729 ipCrashHandler = ultraTB.FormattedTB()
729 ipCrashHandler = ultraTB.FormattedTB()
730 else:
730 else:
731 from IPython import CrashHandler
731 from IPython import CrashHandler
732 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
732 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
733 self.set_crash_handler(ipCrashHandler)
733 self.set_crash_handler(ipCrashHandler)
734
734
735 # and add any custom exception handlers the user may have specified
735 # and add any custom exception handlers the user may have specified
736 self.set_custom_exc(*custom_exceptions)
736 self.set_custom_exc(*custom_exceptions)
737
737
738 # indentation management
738 # indentation management
739 self.autoindent = False
739 self.autoindent = False
740 self.indent_current_nsp = 0
740 self.indent_current_nsp = 0
741
741
742 # Make some aliases automatically
742 # Make some aliases automatically
743 # Prepare list of shell aliases to auto-define
743 # Prepare list of shell aliases to auto-define
744 if os.name == 'posix':
744 if os.name == 'posix':
745 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
745 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
746 'mv mv -i','rm rm -i','cp cp -i',
746 'mv mv -i','rm rm -i','cp cp -i',
747 'cat cat','less less','clear clear',
747 'cat cat','less less','clear clear',
748 # a better ls
748 # a better ls
749 'ls ls -F',
749 'ls ls -F',
750 # long ls
750 # long ls
751 'll ls -lF')
751 'll ls -lF')
752 # Extra ls aliases with color, which need special treatment on BSD
752 # Extra ls aliases with color, which need special treatment on BSD
753 # variants
753 # variants
754 ls_extra = ( # color ls
754 ls_extra = ( # color ls
755 'lc ls -F -o --color',
755 'lc ls -F -o --color',
756 # ls normal files only
756 # ls normal files only
757 'lf ls -F -o --color %l | grep ^-',
757 'lf ls -F -o --color %l | grep ^-',
758 # ls symbolic links
758 # ls symbolic links
759 'lk ls -F -o --color %l | grep ^l',
759 'lk ls -F -o --color %l | grep ^l',
760 # directories or links to directories,
760 # directories or links to directories,
761 'ldir ls -F -o --color %l | grep /$',
761 'ldir ls -F -o --color %l | grep /$',
762 # things which are executable
762 # things which are executable
763 'lx ls -F -o --color %l | grep ^-..x',
763 'lx ls -F -o --color %l | grep ^-..x',
764 )
764 )
765 # The BSDs don't ship GNU ls, so they don't understand the
765 # The BSDs don't ship GNU ls, so they don't understand the
766 # --color switch out of the box
766 # --color switch out of the box
767 if 'bsd' in sys.platform:
767 if 'bsd' in sys.platform:
768 ls_extra = ( # ls normal files only
768 ls_extra = ( # ls normal files only
769 'lf ls -lF | grep ^-',
769 'lf ls -lF | grep ^-',
770 # ls symbolic links
770 # ls symbolic links
771 'lk ls -lF | grep ^l',
771 'lk ls -lF | grep ^l',
772 # directories or links to directories,
772 # directories or links to directories,
773 'ldir ls -lF | grep /$',
773 'ldir ls -lF | grep /$',
774 # things which are executable
774 # things which are executable
775 'lx ls -lF | grep ^-..x',
775 'lx ls -lF | grep ^-..x',
776 )
776 )
777 auto_alias = auto_alias + ls_extra
777 auto_alias = auto_alias + ls_extra
778 elif os.name in ['nt','dos']:
778 elif os.name in ['nt','dos']:
779 auto_alias = ('ls dir /on',
779 auto_alias = ('ls dir /on',
780 'ddir dir /ad /on', 'ldir dir /ad /on',
780 'ddir dir /ad /on', 'ldir dir /ad /on',
781 'mkdir mkdir','rmdir rmdir','echo echo',
781 'mkdir mkdir','rmdir rmdir','echo echo',
782 'ren ren','cls cls','copy copy')
782 'ren ren','cls cls','copy copy')
783 else:
783 else:
784 auto_alias = ()
784 auto_alias = ()
785 self.auto_alias = [s.split(None,1) for s in auto_alias]
785 self.auto_alias = [s.split(None,1) for s in auto_alias]
786
786
787 # Produce a public API instance
787 # Produce a public API instance
788 self.api = IPython.ipapi.IPApi(self)
788 self.api = IPython.ipapi.IPApi(self)
789
789
790 # Initialize all user-visible namespaces
790 # Initialize all user-visible namespaces
791 self.init_namespaces()
791 self.init_namespaces()
792
792
793 # Call the actual (public) initializer
793 # Call the actual (public) initializer
794 self.init_auto_alias()
794 self.init_auto_alias()
795
795
796 # track which builtins we add, so we can clean up later
796 # track which builtins we add, so we can clean up later
797 self.builtins_added = {}
797 self.builtins_added = {}
798 # This method will add the necessary builtins for operation, but
798 # This method will add the necessary builtins for operation, but
799 # tracking what it did via the builtins_added dict.
799 # tracking what it did via the builtins_added dict.
800
800
801 #TODO: remove this, redundant
801 #TODO: remove this, redundant
802 self.add_builtins()
802 self.add_builtins()
803 # end __init__
803 # end __init__
804
804
805 def var_expand(self,cmd,depth=0):
805 def var_expand(self,cmd,depth=0):
806 """Expand python variables in a string.
806 """Expand python variables in a string.
807
807
808 The depth argument indicates how many frames above the caller should
808 The depth argument indicates how many frames above the caller should
809 be walked to look for the local namespace where to expand variables.
809 be walked to look for the local namespace where to expand variables.
810
810
811 The global namespace for expansion is always the user's interactive
811 The global namespace for expansion is always the user's interactive
812 namespace.
812 namespace.
813 """
813 """
814
814
815 return str(ItplNS(cmd,
815 return str(ItplNS(cmd,
816 self.user_ns, # globals
816 self.user_ns, # globals
817 # Skip our own frame in searching for locals:
817 # Skip our own frame in searching for locals:
818 sys._getframe(depth+1).f_locals # locals
818 sys._getframe(depth+1).f_locals # locals
819 ))
819 ))
820
820
821 def pre_config_initialization(self):
821 def pre_config_initialization(self):
822 """Pre-configuration init method
822 """Pre-configuration init method
823
823
824 This is called before the configuration files are processed to
824 This is called before the configuration files are processed to
825 prepare the services the config files might need.
825 prepare the services the config files might need.
826
826
827 self.rc already has reasonable default values at this point.
827 self.rc already has reasonable default values at this point.
828 """
828 """
829 rc = self.rc
829 rc = self.rc
830 try:
830 try:
831 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
831 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
832 except exceptions.UnicodeDecodeError:
832 except exceptions.UnicodeDecodeError:
833 print "Your ipythondir can't be decoded to unicode!"
833 print "Your ipythondir can't be decoded to unicode!"
834 print "Please set HOME environment variable to something that"
834 print "Please set HOME environment variable to something that"
835 print r"only has ASCII characters, e.g. c:\home"
835 print r"only has ASCII characters, e.g. c:\home"
836 print "Now it is",rc.ipythondir
836 print "Now it is",rc.ipythondir
837 sys.exit()
837 sys.exit()
838 self.shadowhist = IPython.history.ShadowHist(self.db)
838 self.shadowhist = IPython.history.ShadowHist(self.db)
839
839
840 def post_config_initialization(self):
840 def post_config_initialization(self):
841 """Post configuration init method
841 """Post configuration init method
842
842
843 This is called after the configuration files have been processed to
843 This is called after the configuration files have been processed to
844 'finalize' the initialization."""
844 'finalize' the initialization."""
845
845
846 rc = self.rc
846 rc = self.rc
847
847
848 # Object inspector
848 # Object inspector
849 self.inspector = OInspect.Inspector(OInspect.InspectColors,
849 self.inspector = OInspect.Inspector(OInspect.InspectColors,
850 PyColorize.ANSICodeColors,
850 PyColorize.ANSICodeColors,
851 'NoColor',
851 'NoColor',
852 rc.object_info_string_level)
852 rc.object_info_string_level)
853
853
854 self.rl_next_input = None
854 self.rl_next_input = None
855 self.rl_do_indent = False
855 self.rl_do_indent = False
856 # Load readline proper
856 # Load readline proper
857 if rc.readline:
857 if rc.readline:
858 self.init_readline()
858 self.init_readline()
859
859
860 # local shortcut, this is used a LOT
860 # local shortcut, this is used a LOT
861 self.log = self.logger.log
861 self.log = self.logger.log
862
862
863 # Initialize cache, set in/out prompts and printing system
863 # Initialize cache, set in/out prompts and printing system
864 self.outputcache = CachedOutput(self,
864 self.outputcache = CachedOutput(self,
865 rc.cache_size,
865 rc.cache_size,
866 rc.pprint,
866 rc.pprint,
867 input_sep = rc.separate_in,
867 input_sep = rc.separate_in,
868 output_sep = rc.separate_out,
868 output_sep = rc.separate_out,
869 output_sep2 = rc.separate_out2,
869 output_sep2 = rc.separate_out2,
870 ps1 = rc.prompt_in1,
870 ps1 = rc.prompt_in1,
871 ps2 = rc.prompt_in2,
871 ps2 = rc.prompt_in2,
872 ps_out = rc.prompt_out,
872 ps_out = rc.prompt_out,
873 pad_left = rc.prompts_pad_left)
873 pad_left = rc.prompts_pad_left)
874
874
875 # user may have over-ridden the default print hook:
875 # user may have over-ridden the default print hook:
876 try:
876 try:
877 self.outputcache.__class__.display = self.hooks.display
877 self.outputcache.__class__.display = self.hooks.display
878 except AttributeError:
878 except AttributeError:
879 pass
879 pass
880
880
881 # I don't like assigning globally to sys, because it means when
881 # I don't like assigning globally to sys, because it means when
882 # embedding instances, each embedded instance overrides the previous
882 # embedding instances, each embedded instance overrides the previous
883 # choice. But sys.displayhook seems to be called internally by exec,
883 # choice. But sys.displayhook seems to be called internally by exec,
884 # so I don't see a way around it. We first save the original and then
884 # so I don't see a way around it. We first save the original and then
885 # overwrite it.
885 # overwrite it.
886 self.sys_displayhook = sys.displayhook
886 self.sys_displayhook = sys.displayhook
887 sys.displayhook = self.outputcache
887 sys.displayhook = self.outputcache
888
888
889 # Do a proper resetting of doctest, including the necessary displayhook
889 # Do a proper resetting of doctest, including the necessary displayhook
890 # monkeypatching
890 # monkeypatching
891 try:
891 try:
892 doctest_reload()
892 doctest_reload()
893 except ImportError:
893 except ImportError:
894 warn("doctest module does not exist.")
894 warn("doctest module does not exist.")
895
895
896 # Set user colors (don't do it in the constructor above so that it
896 # Set user colors (don't do it in the constructor above so that it
897 # doesn't crash if colors option is invalid)
897 # doesn't crash if colors option is invalid)
898 self.magic_colors(rc.colors)
898 self.magic_colors(rc.colors)
899
899
900 # Set calling of pdb on exceptions
900 # Set calling of pdb on exceptions
901 self.call_pdb = rc.pdb
901 self.call_pdb = rc.pdb
902
902
903 # Load user aliases
903 # Load user aliases
904 for alias in rc.alias:
904 for alias in rc.alias:
905 self.magic_alias(alias)
905 self.magic_alias(alias)
906
906
907 self.hooks.late_startup_hook()
907 self.hooks.late_startup_hook()
908
908
909 for cmd in self.rc.autoexec:
909 for cmd in self.rc.autoexec:
910 #print "autoexec>",cmd #dbg
910 #print "autoexec>",cmd #dbg
911 self.api.runlines(cmd)
911 self.api.runlines(cmd)
912
912
913 batchrun = False
913 batchrun = False
914 for batchfile in [path(arg) for arg in self.rc.args
914 for batchfile in [path(arg) for arg in self.rc.args
915 if arg.lower().endswith('.ipy')]:
915 if arg.lower().endswith('.ipy')]:
916 if not batchfile.isfile():
916 if not batchfile.isfile():
917 print "No such batch file:", batchfile
917 print "No such batch file:", batchfile
918 continue
918 continue
919 self.api.runlines(batchfile.text())
919 self.api.runlines(batchfile.text())
920 batchrun = True
920 batchrun = True
921 # without -i option, exit after running the batch file
921 # without -i option, exit after running the batch file
922 if batchrun and not self.rc.interact:
922 if batchrun and not self.rc.interact:
923 self.ask_exit()
923 self.ask_exit()
924
924
925 def init_namespaces(self):
925 def init_namespaces(self):
926 """Initialize all user-visible namespaces to their minimum defaults.
926 """Initialize all user-visible namespaces to their minimum defaults.
927
927
928 Certain history lists are also initialized here, as they effectively
928 Certain history lists are also initialized here, as they effectively
929 act as user namespaces.
929 act as user namespaces.
930
930
931 Note
931 Note
932 ----
932 ----
933 All data structures here are only filled in, they are NOT reset by this
933 All data structures here are only filled in, they are NOT reset by this
934 method. If they were not empty before, data will simply be added to
934 method. If they were not empty before, data will simply be added to
935 therm.
935 therm.
936 """
936 """
937 # The user namespace MUST have a pointer to the shell itself.
937 # The user namespace MUST have a pointer to the shell itself.
938 self.user_ns[self.name] = self
938 self.user_ns[self.name] = self
939
939
940 # Store the public api instance
940 # Store the public api instance
941 self.user_ns['_ip'] = self.api
941 self.user_ns['_ip'] = self.api
942
942
943 # make global variables for user access to the histories
943 # make global variables for user access to the histories
944 self.user_ns['_ih'] = self.input_hist
944 self.user_ns['_ih'] = self.input_hist
945 self.user_ns['_oh'] = self.output_hist
945 self.user_ns['_oh'] = self.output_hist
946 self.user_ns['_dh'] = self.dir_hist
946 self.user_ns['_dh'] = self.dir_hist
947
947
948 # user aliases to input and output histories
948 # user aliases to input and output histories
949 self.user_ns['In'] = self.input_hist
949 self.user_ns['In'] = self.input_hist
950 self.user_ns['Out'] = self.output_hist
950 self.user_ns['Out'] = self.output_hist
951
951
952 self.user_ns['_sh'] = IPython.shadowns
952 self.user_ns['_sh'] = IPython.shadowns
953
953
954 # Fill the history zero entry, user counter starts at 1
954 # Fill the history zero entry, user counter starts at 1
955 self.input_hist.append('\n')
955 self.input_hist.append('\n')
956 self.input_hist_raw.append('\n')
956 self.input_hist_raw.append('\n')
957
957
958 def add_builtins(self):
958 def add_builtins(self):
959 """Store ipython references into the builtin namespace.
959 """Store ipython references into the builtin namespace.
960
960
961 Some parts of ipython operate via builtins injected here, which hold a
961 Some parts of ipython operate via builtins injected here, which hold a
962 reference to IPython itself."""
962 reference to IPython itself."""
963
963
964 # TODO: deprecate all of these, they are unsafe
964 # TODO: deprecate all of these, they are unsafe
965 builtins_new = dict(__IPYTHON__ = self,
965 builtins_new = dict(__IPYTHON__ = self,
966 ip_set_hook = self.set_hook,
966 ip_set_hook = self.set_hook,
967 jobs = self.jobs,
967 jobs = self.jobs,
968 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
968 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
969 ipalias = wrap_deprecated(self.ipalias),
969 ipalias = wrap_deprecated(self.ipalias),
970 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
970 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
971 #_ip = self.api
971 #_ip = self.api
972 )
972 )
973 for biname,bival in builtins_new.items():
973 for biname,bival in builtins_new.items():
974 try:
974 try:
975 # store the orignal value so we can restore it
975 # store the orignal value so we can restore it
976 self.builtins_added[biname] = __builtin__.__dict__[biname]
976 self.builtins_added[biname] = __builtin__.__dict__[biname]
977 except KeyError:
977 except KeyError:
978 # or mark that it wasn't defined, and we'll just delete it at
978 # or mark that it wasn't defined, and we'll just delete it at
979 # cleanup
979 # cleanup
980 self.builtins_added[biname] = Undefined
980 self.builtins_added[biname] = Undefined
981 __builtin__.__dict__[biname] = bival
981 __builtin__.__dict__[biname] = bival
982
982
983 # Keep in the builtins a flag for when IPython is active. We set it
983 # Keep in the builtins a flag for when IPython is active. We set it
984 # with setdefault so that multiple nested IPythons don't clobber one
984 # with setdefault so that multiple nested IPythons don't clobber one
985 # another. Each will increase its value by one upon being activated,
985 # another. Each will increase its value by one upon being activated,
986 # which also gives us a way to determine the nesting level.
986 # which also gives us a way to determine the nesting level.
987 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
987 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
988
988
989 def clean_builtins(self):
989 def clean_builtins(self):
990 """Remove any builtins which might have been added by add_builtins, or
990 """Remove any builtins which might have been added by add_builtins, or
991 restore overwritten ones to their previous values."""
991 restore overwritten ones to their previous values."""
992 for biname,bival in self.builtins_added.items():
992 for biname,bival in self.builtins_added.items():
993 if bival is Undefined:
993 if bival is Undefined:
994 del __builtin__.__dict__[biname]
994 del __builtin__.__dict__[biname]
995 else:
995 else:
996 __builtin__.__dict__[biname] = bival
996 __builtin__.__dict__[biname] = bival
997 self.builtins_added.clear()
997 self.builtins_added.clear()
998
998
999 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
999 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
1000 """set_hook(name,hook) -> sets an internal IPython hook.
1000 """set_hook(name,hook) -> sets an internal IPython hook.
1001
1001
1002 IPython exposes some of its internal API as user-modifiable hooks. By
1002 IPython exposes some of its internal API as user-modifiable hooks. By
1003 adding your function to one of these hooks, you can modify IPython's
1003 adding your function to one of these hooks, you can modify IPython's
1004 behavior to call at runtime your own routines."""
1004 behavior to call at runtime your own routines."""
1005
1005
1006 # At some point in the future, this should validate the hook before it
1006 # At some point in the future, this should validate the hook before it
1007 # accepts it. Probably at least check that the hook takes the number
1007 # accepts it. Probably at least check that the hook takes the number
1008 # of args it's supposed to.
1008 # of args it's supposed to.
1009
1009
1010 f = new.instancemethod(hook,self,self.__class__)
1010 f = new.instancemethod(hook,self,self.__class__)
1011
1011
1012 # check if the hook is for strdispatcher first
1012 # check if the hook is for strdispatcher first
1013 if str_key is not None:
1013 if str_key is not None:
1014 sdp = self.strdispatchers.get(name, StrDispatch())
1014 sdp = self.strdispatchers.get(name, StrDispatch())
1015 sdp.add_s(str_key, f, priority )
1015 sdp.add_s(str_key, f, priority )
1016 self.strdispatchers[name] = sdp
1016 self.strdispatchers[name] = sdp
1017 return
1017 return
1018 if re_key is not None:
1018 if re_key is not None:
1019 sdp = self.strdispatchers.get(name, StrDispatch())
1019 sdp = self.strdispatchers.get(name, StrDispatch())
1020 sdp.add_re(re.compile(re_key), f, priority )
1020 sdp.add_re(re.compile(re_key), f, priority )
1021 self.strdispatchers[name] = sdp
1021 self.strdispatchers[name] = sdp
1022 return
1022 return
1023
1023
1024 dp = getattr(self.hooks, name, None)
1024 dp = getattr(self.hooks, name, None)
1025 if name not in IPython.hooks.__all__:
1025 if name not in IPython.hooks.__all__:
1026 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
1026 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
1027 if not dp:
1027 if not dp:
1028 dp = IPython.hooks.CommandChainDispatcher()
1028 dp = IPython.hooks.CommandChainDispatcher()
1029
1029
1030 try:
1030 try:
1031 dp.add(f,priority)
1031 dp.add(f,priority)
1032 except AttributeError:
1032 except AttributeError:
1033 # it was not commandchain, plain old func - replace
1033 # it was not commandchain, plain old func - replace
1034 dp = f
1034 dp = f
1035
1035
1036 setattr(self.hooks,name, dp)
1036 setattr(self.hooks,name, dp)
1037
1037
1038
1038
1039 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
1039 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
1040
1040
1041 def set_crash_handler(self,crashHandler):
1041 def set_crash_handler(self,crashHandler):
1042 """Set the IPython crash handler.
1042 """Set the IPython crash handler.
1043
1043
1044 This must be a callable with a signature suitable for use as
1044 This must be a callable with a signature suitable for use as
1045 sys.excepthook."""
1045 sys.excepthook."""
1046
1046
1047 # Install the given crash handler as the Python exception hook
1047 # Install the given crash handler as the Python exception hook
1048 sys.excepthook = crashHandler
1048 sys.excepthook = crashHandler
1049
1049
1050 # The instance will store a pointer to this, so that runtime code
1050 # The instance will store a pointer to this, so that runtime code
1051 # (such as magics) can access it. This is because during the
1051 # (such as magics) can access it. This is because during the
1052 # read-eval loop, it gets temporarily overwritten (to deal with GUI
1052 # read-eval loop, it gets temporarily overwritten (to deal with GUI
1053 # frameworks).
1053 # frameworks).
1054 self.sys_excepthook = sys.excepthook
1054 self.sys_excepthook = sys.excepthook
1055
1055
1056
1056
1057 def set_custom_exc(self,exc_tuple,handler):
1057 def set_custom_exc(self,exc_tuple,handler):
1058 """set_custom_exc(exc_tuple,handler)
1058 """set_custom_exc(exc_tuple,handler)
1059
1059
1060 Set a custom exception handler, which will be called if any of the
1060 Set a custom exception handler, which will be called if any of the
1061 exceptions in exc_tuple occur in the mainloop (specifically, in the
1061 exceptions in exc_tuple occur in the mainloop (specifically, in the
1062 runcode() method.
1062 runcode() method.
1063
1063
1064 Inputs:
1064 Inputs:
1065
1065
1066 - exc_tuple: a *tuple* of valid exceptions to call the defined
1066 - exc_tuple: a *tuple* of valid exceptions to call the defined
1067 handler for. It is very important that you use a tuple, and NOT A
1067 handler for. It is very important that you use a tuple, and NOT A
1068 LIST here, because of the way Python's except statement works. If
1068 LIST here, because of the way Python's except statement works. If
1069 you only want to trap a single exception, use a singleton tuple:
1069 you only want to trap a single exception, use a singleton tuple:
1070
1070
1071 exc_tuple == (MyCustomException,)
1071 exc_tuple == (MyCustomException,)
1072
1072
1073 - handler: this must be defined as a function with the following
1073 - handler: this must be defined as a function with the following
1074 basic interface: def my_handler(self,etype,value,tb).
1074 basic interface: def my_handler(self,etype,value,tb).
1075
1075
1076 This will be made into an instance method (via new.instancemethod)
1076 This will be made into an instance method (via new.instancemethod)
1077 of IPython itself, and it will be called if any of the exceptions
1077 of IPython itself, and it will be called if any of the exceptions
1078 listed in the exc_tuple are caught. If the handler is None, an
1078 listed in the exc_tuple are caught. If the handler is None, an
1079 internal basic one is used, which just prints basic info.
1079 internal basic one is used, which just prints basic info.
1080
1080
1081 WARNING: by putting in your own exception handler into IPython's main
1081 WARNING: by putting in your own exception handler into IPython's main
1082 execution loop, you run a very good chance of nasty crashes. This
1082 execution loop, you run a very good chance of nasty crashes. This
1083 facility should only be used if you really know what you are doing."""
1083 facility should only be used if you really know what you are doing."""
1084
1084
1085 assert type(exc_tuple)==type(()) , \
1085 assert type(exc_tuple)==type(()) , \
1086 "The custom exceptions must be given AS A TUPLE."
1086 "The custom exceptions must be given AS A TUPLE."
1087
1087
1088 def dummy_handler(self,etype,value,tb):
1088 def dummy_handler(self,etype,value,tb):
1089 print '*** Simple custom exception handler ***'
1089 print '*** Simple custom exception handler ***'
1090 print 'Exception type :',etype
1090 print 'Exception type :',etype
1091 print 'Exception value:',value
1091 print 'Exception value:',value
1092 print 'Traceback :',tb
1092 print 'Traceback :',tb
1093 print 'Source code :','\n'.join(self.buffer)
1093 print 'Source code :','\n'.join(self.buffer)
1094
1094
1095 if handler is None: handler = dummy_handler
1095 if handler is None: handler = dummy_handler
1096
1096
1097 self.CustomTB = new.instancemethod(handler,self,self.__class__)
1097 self.CustomTB = new.instancemethod(handler,self,self.__class__)
1098 self.custom_exceptions = exc_tuple
1098 self.custom_exceptions = exc_tuple
1099
1099
1100 def set_custom_completer(self,completer,pos=0):
1100 def set_custom_completer(self,completer,pos=0):
1101 """set_custom_completer(completer,pos=0)
1101 """set_custom_completer(completer,pos=0)
1102
1102
1103 Adds a new custom completer function.
1103 Adds a new custom completer function.
1104
1104
1105 The position argument (defaults to 0) is the index in the completers
1105 The position argument (defaults to 0) is the index in the completers
1106 list where you want the completer to be inserted."""
1106 list where you want the completer to be inserted."""
1107
1107
1108 newcomp = new.instancemethod(completer,self.Completer,
1108 newcomp = new.instancemethod(completer,self.Completer,
1109 self.Completer.__class__)
1109 self.Completer.__class__)
1110 self.Completer.matchers.insert(pos,newcomp)
1110 self.Completer.matchers.insert(pos,newcomp)
1111
1111
1112 def set_completer(self):
1112 def set_completer(self):
1113 """reset readline's completer to be our own."""
1113 """reset readline's completer to be our own."""
1114 self.readline.set_completer(self.Completer.complete)
1114 self.readline.set_completer(self.Completer.complete)
1115
1115
1116 def _get_call_pdb(self):
1116 def _get_call_pdb(self):
1117 return self._call_pdb
1117 return self._call_pdb
1118
1118
1119 def _set_call_pdb(self,val):
1119 def _set_call_pdb(self,val):
1120
1120
1121 if val not in (0,1,False,True):
1121 if val not in (0,1,False,True):
1122 raise ValueError,'new call_pdb value must be boolean'
1122 raise ValueError,'new call_pdb value must be boolean'
1123
1123
1124 # store value in instance
1124 # store value in instance
1125 self._call_pdb = val
1125 self._call_pdb = val
1126
1126
1127 # notify the actual exception handlers
1127 # notify the actual exception handlers
1128 self.InteractiveTB.call_pdb = val
1128 self.InteractiveTB.call_pdb = val
1129 if self.isthreaded:
1129 if self.isthreaded:
1130 try:
1130 try:
1131 self.sys_excepthook.call_pdb = val
1131 self.sys_excepthook.call_pdb = val
1132 except:
1132 except:
1133 warn('Failed to activate pdb for threaded exception handler')
1133 warn('Failed to activate pdb for threaded exception handler')
1134
1134
1135 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1135 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
1136 'Control auto-activation of pdb at exceptions')
1136 'Control auto-activation of pdb at exceptions')
1137
1137
1138 # These special functions get installed in the builtin namespace, to
1138 # These special functions get installed in the builtin namespace, to
1139 # provide programmatic (pure python) access to magics, aliases and system
1139 # provide programmatic (pure python) access to magics, aliases and system
1140 # calls. This is important for logging, user scripting, and more.
1140 # calls. This is important for logging, user scripting, and more.
1141
1141
1142 # We are basically exposing, via normal python functions, the three
1142 # We are basically exposing, via normal python functions, the three
1143 # mechanisms in which ipython offers special call modes (magics for
1143 # mechanisms in which ipython offers special call modes (magics for
1144 # internal control, aliases for direct system access via pre-selected
1144 # internal control, aliases for direct system access via pre-selected
1145 # names, and !cmd for calling arbitrary system commands).
1145 # names, and !cmd for calling arbitrary system commands).
1146
1146
1147 def ipmagic(self,arg_s):
1147 def ipmagic(self,arg_s):
1148 """Call a magic function by name.
1148 """Call a magic function by name.
1149
1149
1150 Input: a string containing the name of the magic function to call and any
1150 Input: a string containing the name of the magic function to call and any
1151 additional arguments to be passed to the magic.
1151 additional arguments to be passed to the magic.
1152
1152
1153 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
1153 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
1154 prompt:
1154 prompt:
1155
1155
1156 In[1]: %name -opt foo bar
1156 In[1]: %name -opt foo bar
1157
1157
1158 To call a magic without arguments, simply use ipmagic('name').
1158 To call a magic without arguments, simply use ipmagic('name').
1159
1159
1160 This provides a proper Python function to call IPython's magics in any
1160 This provides a proper Python function to call IPython's magics in any
1161 valid Python code you can type at the interpreter, including loops and
1161 valid Python code you can type at the interpreter, including loops and
1162 compound statements. It is added by IPython to the Python builtin
1162 compound statements. It is added by IPython to the Python builtin
1163 namespace upon initialization."""
1163 namespace upon initialization."""
1164
1164
1165 args = arg_s.split(' ',1)
1165 args = arg_s.split(' ',1)
1166 magic_name = args[0]
1166 magic_name = args[0]
1167 magic_name = magic_name.lstrip(self.ESC_MAGIC)
1167 magic_name = magic_name.lstrip(self.ESC_MAGIC)
1168
1168
1169 try:
1169 try:
1170 magic_args = args[1]
1170 magic_args = args[1]
1171 except IndexError:
1171 except IndexError:
1172 magic_args = ''
1172 magic_args = ''
1173 fn = getattr(self,'magic_'+magic_name,None)
1173 fn = getattr(self,'magic_'+magic_name,None)
1174 if fn is None:
1174 if fn is None:
1175 error("Magic function `%s` not found." % magic_name)
1175 error("Magic function `%s` not found." % magic_name)
1176 else:
1176 else:
1177 magic_args = self.var_expand(magic_args,1)
1177 magic_args = self.var_expand(magic_args,1)
1178 return fn(magic_args)
1178 return fn(magic_args)
1179
1179
1180 def ipalias(self,arg_s):
1180 def ipalias(self,arg_s):
1181 """Call an alias by name.
1181 """Call an alias by name.
1182
1182
1183 Input: a string containing the name of the alias to call and any
1183 Input: a string containing the name of the alias to call and any
1184 additional arguments to be passed to the magic.
1184 additional arguments to be passed to the magic.
1185
1185
1186 ipalias('name -opt foo bar') is equivalent to typing at the ipython
1186 ipalias('name -opt foo bar') is equivalent to typing at the ipython
1187 prompt:
1187 prompt:
1188
1188
1189 In[1]: name -opt foo bar
1189 In[1]: name -opt foo bar
1190
1190
1191 To call an alias without arguments, simply use ipalias('name').
1191 To call an alias without arguments, simply use ipalias('name').
1192
1192
1193 This provides a proper Python function to call IPython's aliases in any
1193 This provides a proper Python function to call IPython's aliases in any
1194 valid Python code you can type at the interpreter, including loops and
1194 valid Python code you can type at the interpreter, including loops and
1195 compound statements. It is added by IPython to the Python builtin
1195 compound statements. It is added by IPython to the Python builtin
1196 namespace upon initialization."""
1196 namespace upon initialization."""
1197
1197
1198 args = arg_s.split(' ',1)
1198 args = arg_s.split(' ',1)
1199 alias_name = args[0]
1199 alias_name = args[0]
1200 try:
1200 try:
1201 alias_args = args[1]
1201 alias_args = args[1]
1202 except IndexError:
1202 except IndexError:
1203 alias_args = ''
1203 alias_args = ''
1204 if alias_name in self.alias_table:
1204 if alias_name in self.alias_table:
1205 self.call_alias(alias_name,alias_args)
1205 self.call_alias(alias_name,alias_args)
1206 else:
1206 else:
1207 error("Alias `%s` not found." % alias_name)
1207 error("Alias `%s` not found." % alias_name)
1208
1208
1209 def ipsystem(self,arg_s):
1209 def ipsystem(self,arg_s):
1210 """Make a system call, using IPython."""
1210 """Make a system call, using IPython."""
1211
1211
1212 self.system(arg_s)
1212 self.system(arg_s)
1213
1213
1214 def complete(self,text):
1214 def complete(self,text):
1215 """Return a sorted list of all possible completions on text.
1215 """Return a sorted list of all possible completions on text.
1216
1216
1217 Inputs:
1217 Inputs:
1218
1218
1219 - text: a string of text to be completed on.
1219 - text: a string of text to be completed on.
1220
1220
1221 This is a wrapper around the completion mechanism, similar to what
1221 This is a wrapper around the completion mechanism, similar to what
1222 readline does at the command line when the TAB key is hit. By
1222 readline does at the command line when the TAB key is hit. By
1223 exposing it as a method, it can be used by other non-readline
1223 exposing it as a method, it can be used by other non-readline
1224 environments (such as GUIs) for text completion.
1224 environments (such as GUIs) for text completion.
1225
1225
1226 Simple usage example:
1226 Simple usage example:
1227
1227
1228 In [7]: x = 'hello'
1228 In [7]: x = 'hello'
1229
1229
1230 In [8]: x
1230 In [8]: x
1231 Out[8]: 'hello'
1231 Out[8]: 'hello'
1232
1232
1233 In [9]: print x
1233 In [9]: print x
1234 hello
1234 hello
1235
1235
1236 In [10]: _ip.IP.complete('x.l')
1236 In [10]: _ip.IP.complete('x.l')
1237 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1237 Out[10]: ['x.ljust', 'x.lower', 'x.lstrip']
1238 """
1238 """
1239
1239
1240 complete = self.Completer.complete
1240 complete = self.Completer.complete
1241 state = 0
1241 state = 0
1242 # use a dict so we get unique keys, since ipyhton's multiple
1242 # use a dict so we get unique keys, since ipyhton's multiple
1243 # completers can return duplicates. When we make 2.4 a requirement,
1243 # completers can return duplicates. When we make 2.4 a requirement,
1244 # start using sets instead, which are faster.
1244 # start using sets instead, which are faster.
1245 comps = {}
1245 comps = {}
1246 while True:
1246 while True:
1247 newcomp = complete(text,state,line_buffer=text)
1247 newcomp = complete(text,state,line_buffer=text)
1248 if newcomp is None:
1248 if newcomp is None:
1249 break
1249 break
1250 comps[newcomp] = 1
1250 comps[newcomp] = 1
1251 state += 1
1251 state += 1
1252 outcomps = comps.keys()
1252 outcomps = comps.keys()
1253 outcomps.sort()
1253 outcomps.sort()
1254 #print "T:",text,"OC:",outcomps # dbg
1254 #print "T:",text,"OC:",outcomps # dbg
1255 #print "vars:",self.user_ns.keys()
1255 #print "vars:",self.user_ns.keys()
1256 return outcomps
1256 return outcomps
1257
1257
1258 def set_completer_frame(self, frame=None):
1258 def set_completer_frame(self, frame=None):
1259 if frame:
1259 if frame:
1260 self.Completer.namespace = frame.f_locals
1260 self.Completer.namespace = frame.f_locals
1261 self.Completer.global_namespace = frame.f_globals
1261 self.Completer.global_namespace = frame.f_globals
1262 else:
1262 else:
1263 self.Completer.namespace = self.user_ns
1263 self.Completer.namespace = self.user_ns
1264 self.Completer.global_namespace = self.user_global_ns
1264 self.Completer.global_namespace = self.user_global_ns
1265
1265
1266 def init_auto_alias(self):
1266 def init_auto_alias(self):
1267 """Define some aliases automatically.
1267 """Define some aliases automatically.
1268
1268
1269 These are ALL parameter-less aliases"""
1269 These are ALL parameter-less aliases"""
1270
1270
1271 for alias,cmd in self.auto_alias:
1271 for alias,cmd in self.auto_alias:
1272 self.getapi().defalias(alias,cmd)
1272 self.getapi().defalias(alias,cmd)
1273
1273
1274
1274
1275 def alias_table_validate(self,verbose=0):
1275 def alias_table_validate(self,verbose=0):
1276 """Update information about the alias table.
1276 """Update information about the alias table.
1277
1277
1278 In particular, make sure no Python keywords/builtins are in it."""
1278 In particular, make sure no Python keywords/builtins are in it."""
1279
1279
1280 no_alias = self.no_alias
1280 no_alias = self.no_alias
1281 for k in self.alias_table.keys():
1281 for k in self.alias_table.keys():
1282 if k in no_alias:
1282 if k in no_alias:
1283 del self.alias_table[k]
1283 del self.alias_table[k]
1284 if verbose:
1284 if verbose:
1285 print ("Deleting alias <%s>, it's a Python "
1285 print ("Deleting alias <%s>, it's a Python "
1286 "keyword or builtin." % k)
1286 "keyword or builtin." % k)
1287
1287
1288 def set_autoindent(self,value=None):
1288 def set_autoindent(self,value=None):
1289 """Set the autoindent flag, checking for readline support.
1289 """Set the autoindent flag, checking for readline support.
1290
1290
1291 If called with no arguments, it acts as a toggle."""
1291 If called with no arguments, it acts as a toggle."""
1292
1292
1293 if not self.has_readline:
1293 if not self.has_readline:
1294 if os.name == 'posix':
1294 if os.name == 'posix':
1295 warn("The auto-indent feature requires the readline library")
1295 warn("The auto-indent feature requires the readline library")
1296 self.autoindent = 0
1296 self.autoindent = 0
1297 return
1297 return
1298 if value is None:
1298 if value is None:
1299 self.autoindent = not self.autoindent
1299 self.autoindent = not self.autoindent
1300 else:
1300 else:
1301 self.autoindent = value
1301 self.autoindent = value
1302
1302
1303 def rc_set_toggle(self,rc_field,value=None):
1303 def rc_set_toggle(self,rc_field,value=None):
1304 """Set or toggle a field in IPython's rc config. structure.
1304 """Set or toggle a field in IPython's rc config. structure.
1305
1305
1306 If called with no arguments, it acts as a toggle.
1306 If called with no arguments, it acts as a toggle.
1307
1307
1308 If called with a non-existent field, the resulting AttributeError
1308 If called with a non-existent field, the resulting AttributeError
1309 exception will propagate out."""
1309 exception will propagate out."""
1310
1310
1311 rc_val = getattr(self.rc,rc_field)
1311 rc_val = getattr(self.rc,rc_field)
1312 if value is None:
1312 if value is None:
1313 value = not rc_val
1313 value = not rc_val
1314 setattr(self.rc,rc_field,value)
1314 setattr(self.rc,rc_field,value)
1315
1315
1316 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1316 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1317 """Install the user configuration directory.
1317 """Install the user configuration directory.
1318
1318
1319 Note
1319 Note
1320 ----
1320 ----
1321 DEPRECATED: use the top-level user_setup() function instead.
1321 DEPRECATED: use the top-level user_setup() function instead.
1322 """
1322 """
1323 return user_setup(ipythondir,rc_suffix,mode)
1323 return user_setup(ipythondir,rc_suffix,mode)
1324
1324
1325 def atexit_operations(self):
1325 def atexit_operations(self):
1326 """This will be executed at the time of exit.
1326 """This will be executed at the time of exit.
1327
1327
1328 Saving of persistent data should be performed here. """
1328 Saving of persistent data should be performed here. """
1329
1329
1330 #print '*** IPython exit cleanup ***' # dbg
1330 #print '*** IPython exit cleanup ***' # dbg
1331 # input history
1331 # input history
1332 self.savehist()
1332 self.savehist()
1333
1333
1334 # Cleanup all tempfiles left around
1334 # Cleanup all tempfiles left around
1335 for tfile in self.tempfiles:
1335 for tfile in self.tempfiles:
1336 try:
1336 try:
1337 os.unlink(tfile)
1337 os.unlink(tfile)
1338 except OSError:
1338 except OSError:
1339 pass
1339 pass
1340
1340
1341 # Clear all user namespaces to release all references cleanly.
1341 # Clear all user namespaces to release all references cleanly.
1342 self.reset()
1342 self.reset()
1343
1343
1344 # Run user hooks
1344 # Run user hooks
1345 self.hooks.shutdown_hook()
1345 self.hooks.shutdown_hook()
1346
1346
1347 def reset(self):
1347 def reset(self):
1348 """Clear all internal namespaces.
1348 """Clear all internal namespaces.
1349
1349
1350 Note that this is much more aggressive than %reset, since it clears
1350 Note that this is much more aggressive than %reset, since it clears
1351 fully all namespaces, as well as all input/output lists.
1351 fully all namespaces, as well as all input/output lists.
1352 """
1352 """
1353 for ns in self.ns_refs_table:
1353 for ns in self.ns_refs_table:
1354 ns.clear()
1354 ns.clear()
1355
1355
1356 # Clear input and output histories
1356 # Clear input and output histories
1357 self.input_hist[:] = []
1357 self.input_hist[:] = []
1358 self.input_hist_raw[:] = []
1358 self.input_hist_raw[:] = []
1359 self.output_hist.clear()
1359 self.output_hist.clear()
1360 # Restore the user namespaces to minimal usability
1360 # Restore the user namespaces to minimal usability
1361 self.init_namespaces()
1361 self.init_namespaces()
1362
1362
1363 def savehist(self):
1363 def savehist(self):
1364 """Save input history to a file (via readline library)."""
1364 """Save input history to a file (via readline library)."""
1365
1365
1366 if not self.has_readline:
1366 if not self.has_readline:
1367 return
1367 return
1368
1368
1369 try:
1369 try:
1370 self.readline.write_history_file(self.histfile)
1370 self.readline.write_history_file(self.histfile)
1371 except:
1371 except:
1372 print 'Unable to save IPython command history to file: ' + \
1372 print 'Unable to save IPython command history to file: ' + \
1373 `self.histfile`
1373 `self.histfile`
1374
1374
1375 def reloadhist(self):
1375 def reloadhist(self):
1376 """Reload the input history from disk file."""
1376 """Reload the input history from disk file."""
1377
1377
1378 if self.has_readline:
1378 if self.has_readline:
1379 try:
1379 try:
1380 self.readline.clear_history()
1380 self.readline.clear_history()
1381 self.readline.read_history_file(self.shell.histfile)
1381 self.readline.read_history_file(self.shell.histfile)
1382 except AttributeError:
1382 except AttributeError:
1383 pass
1383 pass
1384
1384
1385
1385
1386 def history_saving_wrapper(self, func):
1386 def history_saving_wrapper(self, func):
1387 """ Wrap func for readline history saving
1387 """ Wrap func for readline history saving
1388
1388
1389 Convert func into callable that saves & restores
1389 Convert func into callable that saves & restores
1390 history around the call """
1390 history around the call """
1391
1391
1392 if not self.has_readline:
1392 if not self.has_readline:
1393 return func
1393 return func
1394
1394
1395 def wrapper():
1395 def wrapper():
1396 self.savehist()
1396 self.savehist()
1397 try:
1397 try:
1398 func()
1398 func()
1399 finally:
1399 finally:
1400 readline.read_history_file(self.histfile)
1400 readline.read_history_file(self.histfile)
1401 return wrapper
1401 return wrapper
1402
1402
1403 def pre_readline(self):
1403 def pre_readline(self):
1404 """readline hook to be used at the start of each line.
1404 """readline hook to be used at the start of each line.
1405
1405
1406 Currently it handles auto-indent only."""
1406 Currently it handles auto-indent only."""
1407
1407
1408 #debugx('self.indent_current_nsp','pre_readline:')
1408 #debugx('self.indent_current_nsp','pre_readline:')
1409
1409
1410 if self.rl_do_indent:
1410 if self.rl_do_indent:
1411 self.readline.insert_text(self.indent_current_str())
1411 self.readline.insert_text(self.indent_current_str())
1412 if self.rl_next_input is not None:
1412 if self.rl_next_input is not None:
1413 self.readline.insert_text(self.rl_next_input)
1413 self.readline.insert_text(self.rl_next_input)
1414 self.rl_next_input = None
1414 self.rl_next_input = None
1415
1415
1416 def init_readline(self):
1416 def init_readline(self):
1417 """Command history completion/saving/reloading."""
1417 """Command history completion/saving/reloading."""
1418
1418
1419
1419
1420 import IPython.rlineimpl as readline
1420 import IPython.rlineimpl as readline
1421
1421
1422 if not readline.have_readline:
1422 if not readline.have_readline:
1423 self.has_readline = 0
1423 self.has_readline = 0
1424 self.readline = None
1424 self.readline = None
1425 # no point in bugging windows users with this every time:
1425 # no point in bugging windows users with this every time:
1426 warn('Readline services not available on this platform.')
1426 warn('Readline services not available on this platform.')
1427 else:
1427 else:
1428 sys.modules['readline'] = readline
1428 sys.modules['readline'] = readline
1429 import atexit
1429 import atexit
1430 from IPython.completer import IPCompleter
1430 from IPython.completer import IPCompleter
1431 self.Completer = IPCompleter(self,
1431 self.Completer = IPCompleter(self,
1432 self.user_ns,
1432 self.user_ns,
1433 self.user_global_ns,
1433 self.user_global_ns,
1434 self.rc.readline_omit__names,
1434 self.rc.readline_omit__names,
1435 self.alias_table)
1435 self.alias_table)
1436 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1436 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1437 self.strdispatchers['complete_command'] = sdisp
1437 self.strdispatchers['complete_command'] = sdisp
1438 self.Completer.custom_completers = sdisp
1438 self.Completer.custom_completers = sdisp
1439 # Platform-specific configuration
1439 # Platform-specific configuration
1440 if os.name == 'nt':
1440 if os.name == 'nt':
1441 self.readline_startup_hook = readline.set_pre_input_hook
1441 self.readline_startup_hook = readline.set_pre_input_hook
1442 else:
1442 else:
1443 self.readline_startup_hook = readline.set_startup_hook
1443 self.readline_startup_hook = readline.set_startup_hook
1444
1444
1445 # Load user's initrc file (readline config)
1445 # Load user's initrc file (readline config)
1446 # Or if libedit is used, load editrc.
1446 # Or if libedit is used, load editrc.
1447 inputrc_name = os.environ.get('INPUTRC')
1447 inputrc_name = os.environ.get('INPUTRC')
1448 if inputrc_name is None:
1448 if inputrc_name is None:
1449 home_dir = get_home_dir()
1449 home_dir = get_home_dir()
1450 if home_dir is not None:
1450 if home_dir is not None:
1451 inputrc_name = '.inputrc'
1451 inputrc_name = '.inputrc'
1452 if readline.uses_libedit:
1452 if readline.uses_libedit:
1453 inputrc_name = '.editrc'
1453 inputrc_name = '.editrc'
1454 inputrc_name = os.path.join(home_dir, inputrc_name)
1454 inputrc_name = os.path.join(home_dir, inputrc_name)
1455 if os.path.isfile(inputrc_name):
1455 if os.path.isfile(inputrc_name):
1456 try:
1456 try:
1457 readline.read_init_file(inputrc_name)
1457 readline.read_init_file(inputrc_name)
1458 except:
1458 except:
1459 warn('Problems reading readline initialization file <%s>'
1459 warn('Problems reading readline initialization file <%s>'
1460 % inputrc_name)
1460 % inputrc_name)
1461
1461
1462 self.has_readline = 1
1462 self.has_readline = 1
1463 self.readline = readline
1463 self.readline = readline
1464 # save this in sys so embedded copies can restore it properly
1464 # save this in sys so embedded copies can restore it properly
1465 sys.ipcompleter = self.Completer.complete
1465 sys.ipcompleter = self.Completer.complete
1466 self.set_completer()
1466 self.set_completer()
1467
1467
1468 # Configure readline according to user's prefs
1468 # Configure readline according to user's prefs
1469 # This is only done if GNU readline is being used. If libedit
1469 # This is only done if GNU readline is being used. If libedit
1470 # is being used (as on Leopard) the readline config is
1470 # is being used (as on Leopard) the readline config is
1471 # not run as the syntax for libedit is different.
1471 # not run as the syntax for libedit is different.
1472 if not readline.uses_libedit:
1472 if not readline.uses_libedit:
1473 for rlcommand in self.rc.readline_parse_and_bind:
1473 for rlcommand in self.rc.readline_parse_and_bind:
1474 #print "loading rl:",rlcommand # dbg
1474 #print "loading rl:",rlcommand # dbg
1475 readline.parse_and_bind(rlcommand)
1475 readline.parse_and_bind(rlcommand)
1476
1476
1477 # remove some chars from the delimiters list
1477 # Remove some chars from the delimiters list. If we encounter
1478 delims = readline.get_completer_delims()
1478 # unicode chars, discard them.
1479 delims = readline.get_completer_delims().encode("ascii", "ignore")
1479 delims = delims.translate(string._idmap,
1480 delims = delims.translate(string._idmap,
1480 self.rc.readline_remove_delims)
1481 self.rc.readline_remove_delims)
1481 readline.set_completer_delims(delims)
1482 readline.set_completer_delims(delims)
1482 # otherwise we end up with a monster history after a while:
1483 # otherwise we end up with a monster history after a while:
1483 readline.set_history_length(1000)
1484 readline.set_history_length(1000)
1484 try:
1485 try:
1485 #print '*** Reading readline history' # dbg
1486 #print '*** Reading readline history' # dbg
1486 readline.read_history_file(self.histfile)
1487 readline.read_history_file(self.histfile)
1487 except IOError:
1488 except IOError:
1488 pass # It doesn't exist yet.
1489 pass # It doesn't exist yet.
1489
1490
1490 atexit.register(self.atexit_operations)
1491 atexit.register(self.atexit_operations)
1491 del atexit
1492 del atexit
1492
1493
1493 # Configure auto-indent for all platforms
1494 # Configure auto-indent for all platforms
1494 self.set_autoindent(self.rc.autoindent)
1495 self.set_autoindent(self.rc.autoindent)
1495
1496
1496 def ask_yes_no(self,prompt,default=True):
1497 def ask_yes_no(self,prompt,default=True):
1497 if self.rc.quiet:
1498 if self.rc.quiet:
1498 return True
1499 return True
1499 return ask_yes_no(prompt,default)
1500 return ask_yes_no(prompt,default)
1500
1501
1501 def new_main_mod(self,ns=None):
1502 def new_main_mod(self,ns=None):
1502 """Return a new 'main' module object for user code execution.
1503 """Return a new 'main' module object for user code execution.
1503 """
1504 """
1504 main_mod = self._user_main_module
1505 main_mod = self._user_main_module
1505 init_fakemod_dict(main_mod,ns)
1506 init_fakemod_dict(main_mod,ns)
1506 return main_mod
1507 return main_mod
1507
1508
1508 def cache_main_mod(self,ns,fname):
1509 def cache_main_mod(self,ns,fname):
1509 """Cache a main module's namespace.
1510 """Cache a main module's namespace.
1510
1511
1511 When scripts are executed via %run, we must keep a reference to the
1512 When scripts are executed via %run, we must keep a reference to the
1512 namespace of their __main__ module (a FakeModule instance) around so
1513 namespace of their __main__ module (a FakeModule instance) around so
1513 that Python doesn't clear it, rendering objects defined therein
1514 that Python doesn't clear it, rendering objects defined therein
1514 useless.
1515 useless.
1515
1516
1516 This method keeps said reference in a private dict, keyed by the
1517 This method keeps said reference in a private dict, keyed by the
1517 absolute path of the module object (which corresponds to the script
1518 absolute path of the module object (which corresponds to the script
1518 path). This way, for multiple executions of the same script we only
1519 path). This way, for multiple executions of the same script we only
1519 keep one copy of the namespace (the last one), thus preventing memory
1520 keep one copy of the namespace (the last one), thus preventing memory
1520 leaks from old references while allowing the objects from the last
1521 leaks from old references while allowing the objects from the last
1521 execution to be accessible.
1522 execution to be accessible.
1522
1523
1523 Note: we can not allow the actual FakeModule instances to be deleted,
1524 Note: we can not allow the actual FakeModule instances to be deleted,
1524 because of how Python tears down modules (it hard-sets all their
1525 because of how Python tears down modules (it hard-sets all their
1525 references to None without regard for reference counts). This method
1526 references to None without regard for reference counts). This method
1526 must therefore make a *copy* of the given namespace, to allow the
1527 must therefore make a *copy* of the given namespace, to allow the
1527 original module's __dict__ to be cleared and reused.
1528 original module's __dict__ to be cleared and reused.
1528
1529
1529
1530
1530 Parameters
1531 Parameters
1531 ----------
1532 ----------
1532 ns : a namespace (a dict, typically)
1533 ns : a namespace (a dict, typically)
1533
1534
1534 fname : str
1535 fname : str
1535 Filename associated with the namespace.
1536 Filename associated with the namespace.
1536
1537
1537 Examples
1538 Examples
1538 --------
1539 --------
1539
1540
1540 In [10]: import IPython
1541 In [10]: import IPython
1541
1542
1542 In [11]: _ip.IP.cache_main_mod(IPython.__dict__,IPython.__file__)
1543 In [11]: _ip.IP.cache_main_mod(IPython.__dict__,IPython.__file__)
1543
1544
1544 In [12]: IPython.__file__ in _ip.IP._main_ns_cache
1545 In [12]: IPython.__file__ in _ip.IP._main_ns_cache
1545 Out[12]: True
1546 Out[12]: True
1546 """
1547 """
1547 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
1548 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
1548
1549
1549 def clear_main_mod_cache(self):
1550 def clear_main_mod_cache(self):
1550 """Clear the cache of main modules.
1551 """Clear the cache of main modules.
1551
1552
1552 Mainly for use by utilities like %reset.
1553 Mainly for use by utilities like %reset.
1553
1554
1554 Examples
1555 Examples
1555 --------
1556 --------
1556
1557
1557 In [15]: import IPython
1558 In [15]: import IPython
1558
1559
1559 In [16]: _ip.IP.cache_main_mod(IPython.__dict__,IPython.__file__)
1560 In [16]: _ip.IP.cache_main_mod(IPython.__dict__,IPython.__file__)
1560
1561
1561 In [17]: len(_ip.IP._main_ns_cache) > 0
1562 In [17]: len(_ip.IP._main_ns_cache) > 0
1562 Out[17]: True
1563 Out[17]: True
1563
1564
1564 In [18]: _ip.IP.clear_main_mod_cache()
1565 In [18]: _ip.IP.clear_main_mod_cache()
1565
1566
1566 In [19]: len(_ip.IP._main_ns_cache) == 0
1567 In [19]: len(_ip.IP._main_ns_cache) == 0
1567 Out[19]: True
1568 Out[19]: True
1568 """
1569 """
1569 self._main_ns_cache.clear()
1570 self._main_ns_cache.clear()
1570
1571
1571 def _should_recompile(self,e):
1572 def _should_recompile(self,e):
1572 """Utility routine for edit_syntax_error"""
1573 """Utility routine for edit_syntax_error"""
1573
1574
1574 if e.filename in ('<ipython console>','<input>','<string>',
1575 if e.filename in ('<ipython console>','<input>','<string>',
1575 '<console>','<BackgroundJob compilation>',
1576 '<console>','<BackgroundJob compilation>',
1576 None):
1577 None):
1577
1578
1578 return False
1579 return False
1579 try:
1580 try:
1580 if (self.rc.autoedit_syntax and
1581 if (self.rc.autoedit_syntax and
1581 not self.ask_yes_no('Return to editor to correct syntax error? '
1582 not self.ask_yes_no('Return to editor to correct syntax error? '
1582 '[Y/n] ','y')):
1583 '[Y/n] ','y')):
1583 return False
1584 return False
1584 except EOFError:
1585 except EOFError:
1585 return False
1586 return False
1586
1587
1587 def int0(x):
1588 def int0(x):
1588 try:
1589 try:
1589 return int(x)
1590 return int(x)
1590 except TypeError:
1591 except TypeError:
1591 return 0
1592 return 0
1592 # always pass integer line and offset values to editor hook
1593 # always pass integer line and offset values to editor hook
1593 try:
1594 try:
1594 self.hooks.fix_error_editor(e.filename,
1595 self.hooks.fix_error_editor(e.filename,
1595 int0(e.lineno),int0(e.offset),e.msg)
1596 int0(e.lineno),int0(e.offset),e.msg)
1596 except IPython.ipapi.TryNext:
1597 except IPython.ipapi.TryNext:
1597 warn('Could not open editor')
1598 warn('Could not open editor')
1598 return False
1599 return False
1599 return True
1600 return True
1600
1601
1601 def edit_syntax_error(self):
1602 def edit_syntax_error(self):
1602 """The bottom half of the syntax error handler called in the main loop.
1603 """The bottom half of the syntax error handler called in the main loop.
1603
1604
1604 Loop until syntax error is fixed or user cancels.
1605 Loop until syntax error is fixed or user cancels.
1605 """
1606 """
1606
1607
1607 while self.SyntaxTB.last_syntax_error:
1608 while self.SyntaxTB.last_syntax_error:
1608 # copy and clear last_syntax_error
1609 # copy and clear last_syntax_error
1609 err = self.SyntaxTB.clear_err_state()
1610 err = self.SyntaxTB.clear_err_state()
1610 if not self._should_recompile(err):
1611 if not self._should_recompile(err):
1611 return
1612 return
1612 try:
1613 try:
1613 # may set last_syntax_error again if a SyntaxError is raised
1614 # may set last_syntax_error again if a SyntaxError is raised
1614 self.safe_execfile(err.filename,self.user_ns)
1615 self.safe_execfile(err.filename,self.user_ns)
1615 except:
1616 except:
1616 self.showtraceback()
1617 self.showtraceback()
1617 else:
1618 else:
1618 try:
1619 try:
1619 f = file(err.filename)
1620 f = file(err.filename)
1620 try:
1621 try:
1621 sys.displayhook(f.read())
1622 sys.displayhook(f.read())
1622 finally:
1623 finally:
1623 f.close()
1624 f.close()
1624 except:
1625 except:
1625 self.showtraceback()
1626 self.showtraceback()
1626
1627
1627 def showsyntaxerror(self, filename=None):
1628 def showsyntaxerror(self, filename=None):
1628 """Display the syntax error that just occurred.
1629 """Display the syntax error that just occurred.
1629
1630
1630 This doesn't display a stack trace because there isn't one.
1631 This doesn't display a stack trace because there isn't one.
1631
1632
1632 If a filename is given, it is stuffed in the exception instead
1633 If a filename is given, it is stuffed in the exception instead
1633 of what was there before (because Python's parser always uses
1634 of what was there before (because Python's parser always uses
1634 "<string>" when reading from a string).
1635 "<string>" when reading from a string).
1635 """
1636 """
1636 etype, value, last_traceback = sys.exc_info()
1637 etype, value, last_traceback = sys.exc_info()
1637
1638
1638 # See note about these variables in showtraceback() below
1639 # See note about these variables in showtraceback() below
1639 sys.last_type = etype
1640 sys.last_type = etype
1640 sys.last_value = value
1641 sys.last_value = value
1641 sys.last_traceback = last_traceback
1642 sys.last_traceback = last_traceback
1642
1643
1643 if filename and etype is SyntaxError:
1644 if filename and etype is SyntaxError:
1644 # Work hard to stuff the correct filename in the exception
1645 # Work hard to stuff the correct filename in the exception
1645 try:
1646 try:
1646 msg, (dummy_filename, lineno, offset, line) = value
1647 msg, (dummy_filename, lineno, offset, line) = value
1647 except:
1648 except:
1648 # Not the format we expect; leave it alone
1649 # Not the format we expect; leave it alone
1649 pass
1650 pass
1650 else:
1651 else:
1651 # Stuff in the right filename
1652 # Stuff in the right filename
1652 try:
1653 try:
1653 # Assume SyntaxError is a class exception
1654 # Assume SyntaxError is a class exception
1654 value = SyntaxError(msg, (filename, lineno, offset, line))
1655 value = SyntaxError(msg, (filename, lineno, offset, line))
1655 except:
1656 except:
1656 # If that failed, assume SyntaxError is a string
1657 # If that failed, assume SyntaxError is a string
1657 value = msg, (filename, lineno, offset, line)
1658 value = msg, (filename, lineno, offset, line)
1658 self.SyntaxTB(etype,value,[])
1659 self.SyntaxTB(etype,value,[])
1659
1660
1660 def debugger(self,force=False):
1661 def debugger(self,force=False):
1661 """Call the pydb/pdb debugger.
1662 """Call the pydb/pdb debugger.
1662
1663
1663 Keywords:
1664 Keywords:
1664
1665
1665 - force(False): by default, this routine checks the instance call_pdb
1666 - force(False): by default, this routine checks the instance call_pdb
1666 flag and does not actually invoke the debugger if the flag is false.
1667 flag and does not actually invoke the debugger if the flag is false.
1667 The 'force' option forces the debugger to activate even if the flag
1668 The 'force' option forces the debugger to activate even if the flag
1668 is false.
1669 is false.
1669 """
1670 """
1670
1671
1671 if not (force or self.call_pdb):
1672 if not (force or self.call_pdb):
1672 return
1673 return
1673
1674
1674 if not hasattr(sys,'last_traceback'):
1675 if not hasattr(sys,'last_traceback'):
1675 error('No traceback has been produced, nothing to debug.')
1676 error('No traceback has been produced, nothing to debug.')
1676 return
1677 return
1677
1678
1678 # use pydb if available
1679 # use pydb if available
1679 if Debugger.has_pydb:
1680 if Debugger.has_pydb:
1680 from pydb import pm
1681 from pydb import pm
1681 else:
1682 else:
1682 # fallback to our internal debugger
1683 # fallback to our internal debugger
1683 pm = lambda : self.InteractiveTB.debugger(force=True)
1684 pm = lambda : self.InteractiveTB.debugger(force=True)
1684 self.history_saving_wrapper(pm)()
1685 self.history_saving_wrapper(pm)()
1685
1686
1686 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1687 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1687 """Display the exception that just occurred.
1688 """Display the exception that just occurred.
1688
1689
1689 If nothing is known about the exception, this is the method which
1690 If nothing is known about the exception, this is the method which
1690 should be used throughout the code for presenting user tracebacks,
1691 should be used throughout the code for presenting user tracebacks,
1691 rather than directly invoking the InteractiveTB object.
1692 rather than directly invoking the InteractiveTB object.
1692
1693
1693 A specific showsyntaxerror() also exists, but this method can take
1694 A specific showsyntaxerror() also exists, but this method can take
1694 care of calling it if needed, so unless you are explicitly catching a
1695 care of calling it if needed, so unless you are explicitly catching a
1695 SyntaxError exception, don't try to analyze the stack manually and
1696 SyntaxError exception, don't try to analyze the stack manually and
1696 simply call this method."""
1697 simply call this method."""
1697
1698
1698
1699
1699 # Though this won't be called by syntax errors in the input line,
1700 # Though this won't be called by syntax errors in the input line,
1700 # there may be SyntaxError cases whith imported code.
1701 # there may be SyntaxError cases whith imported code.
1701
1702
1702 try:
1703 try:
1703 if exc_tuple is None:
1704 if exc_tuple is None:
1704 etype, value, tb = sys.exc_info()
1705 etype, value, tb = sys.exc_info()
1705 else:
1706 else:
1706 etype, value, tb = exc_tuple
1707 etype, value, tb = exc_tuple
1707
1708
1708 if etype is SyntaxError:
1709 if etype is SyntaxError:
1709 self.showsyntaxerror(filename)
1710 self.showsyntaxerror(filename)
1710 elif etype is IPython.ipapi.UsageError:
1711 elif etype is IPython.ipapi.UsageError:
1711 print "UsageError:", value
1712 print "UsageError:", value
1712 else:
1713 else:
1713 # WARNING: these variables are somewhat deprecated and not
1714 # WARNING: these variables are somewhat deprecated and not
1714 # necessarily safe to use in a threaded environment, but tools
1715 # necessarily safe to use in a threaded environment, but tools
1715 # like pdb depend on their existence, so let's set them. If we
1716 # like pdb depend on their existence, so let's set them. If we
1716 # find problems in the field, we'll need to revisit their use.
1717 # find problems in the field, we'll need to revisit their use.
1717 sys.last_type = etype
1718 sys.last_type = etype
1718 sys.last_value = value
1719 sys.last_value = value
1719 sys.last_traceback = tb
1720 sys.last_traceback = tb
1720
1721
1721 if etype in self.custom_exceptions:
1722 if etype in self.custom_exceptions:
1722 self.CustomTB(etype,value,tb)
1723 self.CustomTB(etype,value,tb)
1723 else:
1724 else:
1724 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1725 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1725 if self.InteractiveTB.call_pdb and self.has_readline:
1726 if self.InteractiveTB.call_pdb and self.has_readline:
1726 # pdb mucks up readline, fix it back
1727 # pdb mucks up readline, fix it back
1727 self.set_completer()
1728 self.set_completer()
1728 except KeyboardInterrupt:
1729 except KeyboardInterrupt:
1729 self.write("\nKeyboardInterrupt\n")
1730 self.write("\nKeyboardInterrupt\n")
1730
1731
1731 def mainloop(self,banner=None):
1732 def mainloop(self,banner=None):
1732 """Creates the local namespace and starts the mainloop.
1733 """Creates the local namespace and starts the mainloop.
1733
1734
1734 If an optional banner argument is given, it will override the
1735 If an optional banner argument is given, it will override the
1735 internally created default banner."""
1736 internally created default banner."""
1736
1737
1737 if self.rc.c: # Emulate Python's -c option
1738 if self.rc.c: # Emulate Python's -c option
1738 self.exec_init_cmd()
1739 self.exec_init_cmd()
1739 if banner is None:
1740 if banner is None:
1740 if not self.rc.banner:
1741 if not self.rc.banner:
1741 banner = ''
1742 banner = ''
1742 # banner is string? Use it directly!
1743 # banner is string? Use it directly!
1743 elif isinstance(self.rc.banner,basestring):
1744 elif isinstance(self.rc.banner,basestring):
1744 banner = self.rc.banner
1745 banner = self.rc.banner
1745 else:
1746 else:
1746 banner = self.BANNER+self.banner2
1747 banner = self.BANNER+self.banner2
1747
1748
1748 # if you run stuff with -c <cmd>, raw hist is not updated
1749 # if you run stuff with -c <cmd>, raw hist is not updated
1749 # ensure that it's in sync
1750 # ensure that it's in sync
1750 if len(self.input_hist) != len (self.input_hist_raw):
1751 if len(self.input_hist) != len (self.input_hist_raw):
1751 self.input_hist_raw = InputList(self.input_hist)
1752 self.input_hist_raw = InputList(self.input_hist)
1752
1753
1753 while 1:
1754 while 1:
1754 try:
1755 try:
1755 self.interact(banner)
1756 self.interact(banner)
1756 #self.interact_with_readline()
1757 #self.interact_with_readline()
1757
1758
1758 # XXX for testing of a readline-decoupled repl loop, call
1759 # XXX for testing of a readline-decoupled repl loop, call
1759 # interact_with_readline above
1760 # interact_with_readline above
1760
1761
1761 break
1762 break
1762 except KeyboardInterrupt:
1763 except KeyboardInterrupt:
1763 # this should not be necessary, but KeyboardInterrupt
1764 # this should not be necessary, but KeyboardInterrupt
1764 # handling seems rather unpredictable...
1765 # handling seems rather unpredictable...
1765 self.write("\nKeyboardInterrupt in interact()\n")
1766 self.write("\nKeyboardInterrupt in interact()\n")
1766
1767
1767 def exec_init_cmd(self):
1768 def exec_init_cmd(self):
1768 """Execute a command given at the command line.
1769 """Execute a command given at the command line.
1769
1770
1770 This emulates Python's -c option."""
1771 This emulates Python's -c option."""
1771
1772
1772 #sys.argv = ['-c']
1773 #sys.argv = ['-c']
1773 self.push(self.prefilter(self.rc.c, False))
1774 self.push(self.prefilter(self.rc.c, False))
1774 if not self.rc.interact:
1775 if not self.rc.interact:
1775 self.ask_exit()
1776 self.ask_exit()
1776
1777
1777 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1778 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1778 """Embeds IPython into a running python program.
1779 """Embeds IPython into a running python program.
1779
1780
1780 Input:
1781 Input:
1781
1782
1782 - header: An optional header message can be specified.
1783 - header: An optional header message can be specified.
1783
1784
1784 - local_ns, global_ns: working namespaces. If given as None, the
1785 - local_ns, global_ns: working namespaces. If given as None, the
1785 IPython-initialized one is updated with __main__.__dict__, so that
1786 IPython-initialized one is updated with __main__.__dict__, so that
1786 program variables become visible but user-specific configuration
1787 program variables become visible but user-specific configuration
1787 remains possible.
1788 remains possible.
1788
1789
1789 - stack_depth: specifies how many levels in the stack to go to
1790 - stack_depth: specifies how many levels in the stack to go to
1790 looking for namespaces (when local_ns and global_ns are None). This
1791 looking for namespaces (when local_ns and global_ns are None). This
1791 allows an intermediate caller to make sure that this function gets
1792 allows an intermediate caller to make sure that this function gets
1792 the namespace from the intended level in the stack. By default (0)
1793 the namespace from the intended level in the stack. By default (0)
1793 it will get its locals and globals from the immediate caller.
1794 it will get its locals and globals from the immediate caller.
1794
1795
1795 Warning: it's possible to use this in a program which is being run by
1796 Warning: it's possible to use this in a program which is being run by
1796 IPython itself (via %run), but some funny things will happen (a few
1797 IPython itself (via %run), but some funny things will happen (a few
1797 globals get overwritten). In the future this will be cleaned up, as
1798 globals get overwritten). In the future this will be cleaned up, as
1798 there is no fundamental reason why it can't work perfectly."""
1799 there is no fundamental reason why it can't work perfectly."""
1799
1800
1800 # Get locals and globals from caller
1801 # Get locals and globals from caller
1801 if local_ns is None or global_ns is None:
1802 if local_ns is None or global_ns is None:
1802 call_frame = sys._getframe(stack_depth).f_back
1803 call_frame = sys._getframe(stack_depth).f_back
1803
1804
1804 if local_ns is None:
1805 if local_ns is None:
1805 local_ns = call_frame.f_locals
1806 local_ns = call_frame.f_locals
1806 if global_ns is None:
1807 if global_ns is None:
1807 global_ns = call_frame.f_globals
1808 global_ns = call_frame.f_globals
1808
1809
1809 # Update namespaces and fire up interpreter
1810 # Update namespaces and fire up interpreter
1810
1811
1811 # The global one is easy, we can just throw it in
1812 # The global one is easy, we can just throw it in
1812 self.user_global_ns = global_ns
1813 self.user_global_ns = global_ns
1813
1814
1814 # but the user/local one is tricky: ipython needs it to store internal
1815 # but the user/local one is tricky: ipython needs it to store internal
1815 # data, but we also need the locals. We'll copy locals in the user
1816 # data, but we also need the locals. We'll copy locals in the user
1816 # one, but will track what got copied so we can delete them at exit.
1817 # one, but will track what got copied so we can delete them at exit.
1817 # This is so that a later embedded call doesn't see locals from a
1818 # This is so that a later embedded call doesn't see locals from a
1818 # previous call (which most likely existed in a separate scope).
1819 # previous call (which most likely existed in a separate scope).
1819 local_varnames = local_ns.keys()
1820 local_varnames = local_ns.keys()
1820 self.user_ns.update(local_ns)
1821 self.user_ns.update(local_ns)
1821 #self.user_ns['local_ns'] = local_ns # dbg
1822 #self.user_ns['local_ns'] = local_ns # dbg
1822
1823
1823 # Patch for global embedding to make sure that things don't overwrite
1824 # Patch for global embedding to make sure that things don't overwrite
1824 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1825 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1825 # FIXME. Test this a bit more carefully (the if.. is new)
1826 # FIXME. Test this a bit more carefully (the if.. is new)
1826 if local_ns is None and global_ns is None:
1827 if local_ns is None and global_ns is None:
1827 self.user_global_ns.update(__main__.__dict__)
1828 self.user_global_ns.update(__main__.__dict__)
1828
1829
1829 # make sure the tab-completer has the correct frame information, so it
1830 # make sure the tab-completer has the correct frame information, so it
1830 # actually completes using the frame's locals/globals
1831 # actually completes using the frame's locals/globals
1831 self.set_completer_frame()
1832 self.set_completer_frame()
1832
1833
1833 # before activating the interactive mode, we need to make sure that
1834 # before activating the interactive mode, we need to make sure that
1834 # all names in the builtin namespace needed by ipython point to
1835 # all names in the builtin namespace needed by ipython point to
1835 # ourselves, and not to other instances.
1836 # ourselves, and not to other instances.
1836 self.add_builtins()
1837 self.add_builtins()
1837
1838
1838 self.interact(header)
1839 self.interact(header)
1839
1840
1840 # now, purge out the user namespace from anything we might have added
1841 # now, purge out the user namespace from anything we might have added
1841 # from the caller's local namespace
1842 # from the caller's local namespace
1842 delvar = self.user_ns.pop
1843 delvar = self.user_ns.pop
1843 for var in local_varnames:
1844 for var in local_varnames:
1844 delvar(var,None)
1845 delvar(var,None)
1845 # and clean builtins we may have overridden
1846 # and clean builtins we may have overridden
1846 self.clean_builtins()
1847 self.clean_builtins()
1847
1848
1848 def interact_prompt(self):
1849 def interact_prompt(self):
1849 """ Print the prompt (in read-eval-print loop)
1850 """ Print the prompt (in read-eval-print loop)
1850
1851
1851 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1852 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1852 used in standard IPython flow.
1853 used in standard IPython flow.
1853 """
1854 """
1854 if self.more:
1855 if self.more:
1855 try:
1856 try:
1856 prompt = self.hooks.generate_prompt(True)
1857 prompt = self.hooks.generate_prompt(True)
1857 except:
1858 except:
1858 self.showtraceback()
1859 self.showtraceback()
1859 if self.autoindent:
1860 if self.autoindent:
1860 self.rl_do_indent = True
1861 self.rl_do_indent = True
1861
1862
1862 else:
1863 else:
1863 try:
1864 try:
1864 prompt = self.hooks.generate_prompt(False)
1865 prompt = self.hooks.generate_prompt(False)
1865 except:
1866 except:
1866 self.showtraceback()
1867 self.showtraceback()
1867 self.write(prompt)
1868 self.write(prompt)
1868
1869
1869 def interact_handle_input(self,line):
1870 def interact_handle_input(self,line):
1870 """ Handle the input line (in read-eval-print loop)
1871 """ Handle the input line (in read-eval-print loop)
1871
1872
1872 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1873 Provided for those who want to implement their own read-eval-print loop (e.g. GUIs), not
1873 used in standard IPython flow.
1874 used in standard IPython flow.
1874 """
1875 """
1875 if line.lstrip() == line:
1876 if line.lstrip() == line:
1876 self.shadowhist.add(line.strip())
1877 self.shadowhist.add(line.strip())
1877 lineout = self.prefilter(line,self.more)
1878 lineout = self.prefilter(line,self.more)
1878
1879
1879 if line.strip():
1880 if line.strip():
1880 if self.more:
1881 if self.more:
1881 self.input_hist_raw[-1] += '%s\n' % line
1882 self.input_hist_raw[-1] += '%s\n' % line
1882 else:
1883 else:
1883 self.input_hist_raw.append('%s\n' % line)
1884 self.input_hist_raw.append('%s\n' % line)
1884
1885
1885
1886
1886 self.more = self.push(lineout)
1887 self.more = self.push(lineout)
1887 if (self.SyntaxTB.last_syntax_error and
1888 if (self.SyntaxTB.last_syntax_error and
1888 self.rc.autoedit_syntax):
1889 self.rc.autoedit_syntax):
1889 self.edit_syntax_error()
1890 self.edit_syntax_error()
1890
1891
1891 def interact_with_readline(self):
1892 def interact_with_readline(self):
1892 """ Demo of using interact_handle_input, interact_prompt
1893 """ Demo of using interact_handle_input, interact_prompt
1893
1894
1894 This is the main read-eval-print loop. If you need to implement your own (e.g. for GUI),
1895 This is the main read-eval-print loop. If you need to implement your own (e.g. for GUI),
1895 it should work like this.
1896 it should work like this.
1896 """
1897 """
1897 self.readline_startup_hook(self.pre_readline)
1898 self.readline_startup_hook(self.pre_readline)
1898 while not self.exit_now:
1899 while not self.exit_now:
1899 self.interact_prompt()
1900 self.interact_prompt()
1900 if self.more:
1901 if self.more:
1901 self.rl_do_indent = True
1902 self.rl_do_indent = True
1902 else:
1903 else:
1903 self.rl_do_indent = False
1904 self.rl_do_indent = False
1904 line = raw_input_original().decode(self.stdin_encoding)
1905 line = raw_input_original().decode(self.stdin_encoding)
1905 self.interact_handle_input(line)
1906 self.interact_handle_input(line)
1906
1907
1907
1908
1908 def interact(self, banner=None):
1909 def interact(self, banner=None):
1909 """Closely emulate the interactive Python console.
1910 """Closely emulate the interactive Python console.
1910
1911
1911 The optional banner argument specify the banner to print
1912 The optional banner argument specify the banner to print
1912 before the first interaction; by default it prints a banner
1913 before the first interaction; by default it prints a banner
1913 similar to the one printed by the real Python interpreter,
1914 similar to the one printed by the real Python interpreter,
1914 followed by the current class name in parentheses (so as not
1915 followed by the current class name in parentheses (so as not
1915 to confuse this with the real interpreter -- since it's so
1916 to confuse this with the real interpreter -- since it's so
1916 close!).
1917 close!).
1917
1918
1918 """
1919 """
1919
1920
1920 if self.exit_now:
1921 if self.exit_now:
1921 # batch run -> do not interact
1922 # batch run -> do not interact
1922 return
1923 return
1923 cprt = 'Type "copyright", "credits" or "license" for more information.'
1924 cprt = 'Type "copyright", "credits" or "license" for more information.'
1924 if banner is None:
1925 if banner is None:
1925 self.write("Python %s on %s\n%s\n(%s)\n" %
1926 self.write("Python %s on %s\n%s\n(%s)\n" %
1926 (sys.version, sys.platform, cprt,
1927 (sys.version, sys.platform, cprt,
1927 self.__class__.__name__))
1928 self.__class__.__name__))
1928 else:
1929 else:
1929 self.write(banner)
1930 self.write(banner)
1930
1931
1931 more = 0
1932 more = 0
1932
1933
1933 # Mark activity in the builtins
1934 # Mark activity in the builtins
1934 __builtin__.__dict__['__IPYTHON__active'] += 1
1935 __builtin__.__dict__['__IPYTHON__active'] += 1
1935
1936
1936 if self.has_readline:
1937 if self.has_readline:
1937 self.readline_startup_hook(self.pre_readline)
1938 self.readline_startup_hook(self.pre_readline)
1938 # exit_now is set by a call to %Exit or %Quit, through the
1939 # exit_now is set by a call to %Exit or %Quit, through the
1939 # ask_exit callback.
1940 # ask_exit callback.
1940
1941
1941 while not self.exit_now:
1942 while not self.exit_now:
1942 self.hooks.pre_prompt_hook()
1943 self.hooks.pre_prompt_hook()
1943 if more:
1944 if more:
1944 try:
1945 try:
1945 prompt = self.hooks.generate_prompt(True)
1946 prompt = self.hooks.generate_prompt(True)
1946 except:
1947 except:
1947 self.showtraceback()
1948 self.showtraceback()
1948 if self.autoindent:
1949 if self.autoindent:
1949 self.rl_do_indent = True
1950 self.rl_do_indent = True
1950
1951
1951 else:
1952 else:
1952 try:
1953 try:
1953 prompt = self.hooks.generate_prompt(False)
1954 prompt = self.hooks.generate_prompt(False)
1954 except:
1955 except:
1955 self.showtraceback()
1956 self.showtraceback()
1956 try:
1957 try:
1957 line = self.raw_input(prompt,more)
1958 line = self.raw_input(prompt,more)
1958 if self.exit_now:
1959 if self.exit_now:
1959 # quick exit on sys.std[in|out] close
1960 # quick exit on sys.std[in|out] close
1960 break
1961 break
1961 if self.autoindent:
1962 if self.autoindent:
1962 self.rl_do_indent = False
1963 self.rl_do_indent = False
1963
1964
1964 except KeyboardInterrupt:
1965 except KeyboardInterrupt:
1965 #double-guard against keyboardinterrupts during kbdint handling
1966 #double-guard against keyboardinterrupts during kbdint handling
1966 try:
1967 try:
1967 self.write('\nKeyboardInterrupt\n')
1968 self.write('\nKeyboardInterrupt\n')
1968 self.resetbuffer()
1969 self.resetbuffer()
1969 # keep cache in sync with the prompt counter:
1970 # keep cache in sync with the prompt counter:
1970 self.outputcache.prompt_count -= 1
1971 self.outputcache.prompt_count -= 1
1971
1972
1972 if self.autoindent:
1973 if self.autoindent:
1973 self.indent_current_nsp = 0
1974 self.indent_current_nsp = 0
1974 more = 0
1975 more = 0
1975 except KeyboardInterrupt:
1976 except KeyboardInterrupt:
1976 pass
1977 pass
1977 except EOFError:
1978 except EOFError:
1978 if self.autoindent:
1979 if self.autoindent:
1979 self.rl_do_indent = False
1980 self.rl_do_indent = False
1980 self.readline_startup_hook(None)
1981 self.readline_startup_hook(None)
1981 self.write('\n')
1982 self.write('\n')
1982 self.exit()
1983 self.exit()
1983 except bdb.BdbQuit:
1984 except bdb.BdbQuit:
1984 warn('The Python debugger has exited with a BdbQuit exception.\n'
1985 warn('The Python debugger has exited with a BdbQuit exception.\n'
1985 'Because of how pdb handles the stack, it is impossible\n'
1986 'Because of how pdb handles the stack, it is impossible\n'
1986 'for IPython to properly format this particular exception.\n'
1987 'for IPython to properly format this particular exception.\n'
1987 'IPython will resume normal operation.')
1988 'IPython will resume normal operation.')
1988 except:
1989 except:
1989 # exceptions here are VERY RARE, but they can be triggered
1990 # exceptions here are VERY RARE, but they can be triggered
1990 # asynchronously by signal handlers, for example.
1991 # asynchronously by signal handlers, for example.
1991 self.showtraceback()
1992 self.showtraceback()
1992 else:
1993 else:
1993 more = self.push(line)
1994 more = self.push(line)
1994 if (self.SyntaxTB.last_syntax_error and
1995 if (self.SyntaxTB.last_syntax_error and
1995 self.rc.autoedit_syntax):
1996 self.rc.autoedit_syntax):
1996 self.edit_syntax_error()
1997 self.edit_syntax_error()
1997
1998
1998 # We are off again...
1999 # We are off again...
1999 __builtin__.__dict__['__IPYTHON__active'] -= 1
2000 __builtin__.__dict__['__IPYTHON__active'] -= 1
2000
2001
2001 def excepthook(self, etype, value, tb):
2002 def excepthook(self, etype, value, tb):
2002 """One more defense for GUI apps that call sys.excepthook.
2003 """One more defense for GUI apps that call sys.excepthook.
2003
2004
2004 GUI frameworks like wxPython trap exceptions and call
2005 GUI frameworks like wxPython trap exceptions and call
2005 sys.excepthook themselves. I guess this is a feature that
2006 sys.excepthook themselves. I guess this is a feature that
2006 enables them to keep running after exceptions that would
2007 enables them to keep running after exceptions that would
2007 otherwise kill their mainloop. This is a bother for IPython
2008 otherwise kill their mainloop. This is a bother for IPython
2008 which excepts to catch all of the program exceptions with a try:
2009 which excepts to catch all of the program exceptions with a try:
2009 except: statement.
2010 except: statement.
2010
2011
2011 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
2012 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
2012 any app directly invokes sys.excepthook, it will look to the user like
2013 any app directly invokes sys.excepthook, it will look to the user like
2013 IPython crashed. In order to work around this, we can disable the
2014 IPython crashed. In order to work around this, we can disable the
2014 CrashHandler and replace it with this excepthook instead, which prints a
2015 CrashHandler and replace it with this excepthook instead, which prints a
2015 regular traceback using our InteractiveTB. In this fashion, apps which
2016 regular traceback using our InteractiveTB. In this fashion, apps which
2016 call sys.excepthook will generate a regular-looking exception from
2017 call sys.excepthook will generate a regular-looking exception from
2017 IPython, and the CrashHandler will only be triggered by real IPython
2018 IPython, and the CrashHandler will only be triggered by real IPython
2018 crashes.
2019 crashes.
2019
2020
2020 This hook should be used sparingly, only in places which are not likely
2021 This hook should be used sparingly, only in places which are not likely
2021 to be true IPython errors.
2022 to be true IPython errors.
2022 """
2023 """
2023 self.showtraceback((etype,value,tb),tb_offset=0)
2024 self.showtraceback((etype,value,tb),tb_offset=0)
2024
2025
2025 def expand_aliases(self,fn,rest):
2026 def expand_aliases(self,fn,rest):
2026 """ Expand multiple levels of aliases:
2027 """ Expand multiple levels of aliases:
2027
2028
2028 if:
2029 if:
2029
2030
2030 alias foo bar /tmp
2031 alias foo bar /tmp
2031 alias baz foo
2032 alias baz foo
2032
2033
2033 then:
2034 then:
2034
2035
2035 baz huhhahhei -> bar /tmp huhhahhei
2036 baz huhhahhei -> bar /tmp huhhahhei
2036
2037
2037 """
2038 """
2038 line = fn + " " + rest
2039 line = fn + " " + rest
2039
2040
2040 done = set()
2041 done = set()
2041 while 1:
2042 while 1:
2042 pre,fn,rest = prefilter.splitUserInput(line,
2043 pre,fn,rest = prefilter.splitUserInput(line,
2043 prefilter.shell_line_split)
2044 prefilter.shell_line_split)
2044 if fn in self.alias_table:
2045 if fn in self.alias_table:
2045 if fn in done:
2046 if fn in done:
2046 warn("Cyclic alias definition, repeated '%s'" % fn)
2047 warn("Cyclic alias definition, repeated '%s'" % fn)
2047 return ""
2048 return ""
2048 done.add(fn)
2049 done.add(fn)
2049
2050
2050 l2 = self.transform_alias(fn,rest)
2051 l2 = self.transform_alias(fn,rest)
2051 # dir -> dir
2052 # dir -> dir
2052 # print "alias",line, "->",l2 #dbg
2053 # print "alias",line, "->",l2 #dbg
2053 if l2 == line:
2054 if l2 == line:
2054 break
2055 break
2055 # ls -> ls -F should not recurse forever
2056 # ls -> ls -F should not recurse forever
2056 if l2.split(None,1)[0] == line.split(None,1)[0]:
2057 if l2.split(None,1)[0] == line.split(None,1)[0]:
2057 line = l2
2058 line = l2
2058 break
2059 break
2059
2060
2060 line=l2
2061 line=l2
2061
2062
2062
2063
2063 # print "al expand to",line #dbg
2064 # print "al expand to",line #dbg
2064 else:
2065 else:
2065 break
2066 break
2066
2067
2067 return line
2068 return line
2068
2069
2069 def transform_alias(self, alias,rest=''):
2070 def transform_alias(self, alias,rest=''):
2070 """ Transform alias to system command string.
2071 """ Transform alias to system command string.
2071 """
2072 """
2072 trg = self.alias_table[alias]
2073 trg = self.alias_table[alias]
2073
2074
2074 nargs,cmd = trg
2075 nargs,cmd = trg
2075 # print trg #dbg
2076 # print trg #dbg
2076 if ' ' in cmd and os.path.isfile(cmd):
2077 if ' ' in cmd and os.path.isfile(cmd):
2077 cmd = '"%s"' % cmd
2078 cmd = '"%s"' % cmd
2078
2079
2079 # Expand the %l special to be the user's input line
2080 # Expand the %l special to be the user's input line
2080 if cmd.find('%l') >= 0:
2081 if cmd.find('%l') >= 0:
2081 cmd = cmd.replace('%l',rest)
2082 cmd = cmd.replace('%l',rest)
2082 rest = ''
2083 rest = ''
2083 if nargs==0:
2084 if nargs==0:
2084 # Simple, argument-less aliases
2085 # Simple, argument-less aliases
2085 cmd = '%s %s' % (cmd,rest)
2086 cmd = '%s %s' % (cmd,rest)
2086 else:
2087 else:
2087 # Handle aliases with positional arguments
2088 # Handle aliases with positional arguments
2088 args = rest.split(None,nargs)
2089 args = rest.split(None,nargs)
2089 if len(args)< nargs:
2090 if len(args)< nargs:
2090 error('Alias <%s> requires %s arguments, %s given.' %
2091 error('Alias <%s> requires %s arguments, %s given.' %
2091 (alias,nargs,len(args)))
2092 (alias,nargs,len(args)))
2092 return None
2093 return None
2093 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
2094 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
2094 # Now call the macro, evaluating in the user's namespace
2095 # Now call the macro, evaluating in the user's namespace
2095 #print 'new command: <%r>' % cmd # dbg
2096 #print 'new command: <%r>' % cmd # dbg
2096 return cmd
2097 return cmd
2097
2098
2098 def call_alias(self,alias,rest=''):
2099 def call_alias(self,alias,rest=''):
2099 """Call an alias given its name and the rest of the line.
2100 """Call an alias given its name and the rest of the line.
2100
2101
2101 This is only used to provide backwards compatibility for users of
2102 This is only used to provide backwards compatibility for users of
2102 ipalias(), use of which is not recommended for anymore."""
2103 ipalias(), use of which is not recommended for anymore."""
2103
2104
2104 # Now call the macro, evaluating in the user's namespace
2105 # Now call the macro, evaluating in the user's namespace
2105 cmd = self.transform_alias(alias, rest)
2106 cmd = self.transform_alias(alias, rest)
2106 try:
2107 try:
2107 self.system(cmd)
2108 self.system(cmd)
2108 except:
2109 except:
2109 self.showtraceback()
2110 self.showtraceback()
2110
2111
2111 def indent_current_str(self):
2112 def indent_current_str(self):
2112 """return the current level of indentation as a string"""
2113 """return the current level of indentation as a string"""
2113 return self.indent_current_nsp * ' '
2114 return self.indent_current_nsp * ' '
2114
2115
2115 def autoindent_update(self,line):
2116 def autoindent_update(self,line):
2116 """Keep track of the indent level."""
2117 """Keep track of the indent level."""
2117
2118
2118 #debugx('line')
2119 #debugx('line')
2119 #debugx('self.indent_current_nsp')
2120 #debugx('self.indent_current_nsp')
2120 if self.autoindent:
2121 if self.autoindent:
2121 if line:
2122 if line:
2122 inisp = num_ini_spaces(line)
2123 inisp = num_ini_spaces(line)
2123 if inisp < self.indent_current_nsp:
2124 if inisp < self.indent_current_nsp:
2124 self.indent_current_nsp = inisp
2125 self.indent_current_nsp = inisp
2125
2126
2126 if line[-1] == ':':
2127 if line[-1] == ':':
2127 self.indent_current_nsp += 4
2128 self.indent_current_nsp += 4
2128 elif dedent_re.match(line):
2129 elif dedent_re.match(line):
2129 self.indent_current_nsp -= 4
2130 self.indent_current_nsp -= 4
2130 else:
2131 else:
2131 self.indent_current_nsp = 0
2132 self.indent_current_nsp = 0
2132
2133
2133 def runlines(self,lines):
2134 def runlines(self,lines):
2134 """Run a string of one or more lines of source.
2135 """Run a string of one or more lines of source.
2135
2136
2136 This method is capable of running a string containing multiple source
2137 This method is capable of running a string containing multiple source
2137 lines, as if they had been entered at the IPython prompt. Since it
2138 lines, as if they had been entered at the IPython prompt. Since it
2138 exposes IPython's processing machinery, the given strings can contain
2139 exposes IPython's processing machinery, the given strings can contain
2139 magic calls (%magic), special shell access (!cmd), etc."""
2140 magic calls (%magic), special shell access (!cmd), etc."""
2140
2141
2141 # We must start with a clean buffer, in case this is run from an
2142 # We must start with a clean buffer, in case this is run from an
2142 # interactive IPython session (via a magic, for example).
2143 # interactive IPython session (via a magic, for example).
2143 self.resetbuffer()
2144 self.resetbuffer()
2144 lines = lines.split('\n')
2145 lines = lines.split('\n')
2145 more = 0
2146 more = 0
2146
2147
2147 for line in lines:
2148 for line in lines:
2148 # skip blank lines so we don't mess up the prompt counter, but do
2149 # skip blank lines so we don't mess up the prompt counter, but do
2149 # NOT skip even a blank line if we are in a code block (more is
2150 # NOT skip even a blank line if we are in a code block (more is
2150 # true)
2151 # true)
2151
2152
2152 if line or more:
2153 if line or more:
2153 # push to raw history, so hist line numbers stay in sync
2154 # push to raw history, so hist line numbers stay in sync
2154 self.input_hist_raw.append("# " + line + "\n")
2155 self.input_hist_raw.append("# " + line + "\n")
2155 more = self.push(self.prefilter(line,more))
2156 more = self.push(self.prefilter(line,more))
2156 # IPython's runsource returns None if there was an error
2157 # IPython's runsource returns None if there was an error
2157 # compiling the code. This allows us to stop processing right
2158 # compiling the code. This allows us to stop processing right
2158 # away, so the user gets the error message at the right place.
2159 # away, so the user gets the error message at the right place.
2159 if more is None:
2160 if more is None:
2160 break
2161 break
2161 else:
2162 else:
2162 self.input_hist_raw.append("\n")
2163 self.input_hist_raw.append("\n")
2163 # final newline in case the input didn't have it, so that the code
2164 # final newline in case the input didn't have it, so that the code
2164 # actually does get executed
2165 # actually does get executed
2165 if more:
2166 if more:
2166 self.push('\n')
2167 self.push('\n')
2167
2168
2168 def runsource(self, source, filename='<input>', symbol='single'):
2169 def runsource(self, source, filename='<input>', symbol='single'):
2169 """Compile and run some source in the interpreter.
2170 """Compile and run some source in the interpreter.
2170
2171
2171 Arguments are as for compile_command().
2172 Arguments are as for compile_command().
2172
2173
2173 One several things can happen:
2174 One several things can happen:
2174
2175
2175 1) The input is incorrect; compile_command() raised an
2176 1) The input is incorrect; compile_command() raised an
2176 exception (SyntaxError or OverflowError). A syntax traceback
2177 exception (SyntaxError or OverflowError). A syntax traceback
2177 will be printed by calling the showsyntaxerror() method.
2178 will be printed by calling the showsyntaxerror() method.
2178
2179
2179 2) The input is incomplete, and more input is required;
2180 2) The input is incomplete, and more input is required;
2180 compile_command() returned None. Nothing happens.
2181 compile_command() returned None. Nothing happens.
2181
2182
2182 3) The input is complete; compile_command() returned a code
2183 3) The input is complete; compile_command() returned a code
2183 object. The code is executed by calling self.runcode() (which
2184 object. The code is executed by calling self.runcode() (which
2184 also handles run-time exceptions, except for SystemExit).
2185 also handles run-time exceptions, except for SystemExit).
2185
2186
2186 The return value is:
2187 The return value is:
2187
2188
2188 - True in case 2
2189 - True in case 2
2189
2190
2190 - False in the other cases, unless an exception is raised, where
2191 - False in the other cases, unless an exception is raised, where
2191 None is returned instead. This can be used by external callers to
2192 None is returned instead. This can be used by external callers to
2192 know whether to continue feeding input or not.
2193 know whether to continue feeding input or not.
2193
2194
2194 The return value can be used to decide whether to use sys.ps1 or
2195 The return value can be used to decide whether to use sys.ps1 or
2195 sys.ps2 to prompt the next line."""
2196 sys.ps2 to prompt the next line."""
2196
2197
2197 # if the source code has leading blanks, add 'if 1:\n' to it
2198 # if the source code has leading blanks, add 'if 1:\n' to it
2198 # this allows execution of indented pasted code. It is tempting
2199 # this allows execution of indented pasted code. It is tempting
2199 # to add '\n' at the end of source to run commands like ' a=1'
2200 # to add '\n' at the end of source to run commands like ' a=1'
2200 # directly, but this fails for more complicated scenarios
2201 # directly, but this fails for more complicated scenarios
2201 source=source.encode(self.stdin_encoding)
2202 source=source.encode(self.stdin_encoding)
2202 if source[:1] in [' ', '\t']:
2203 if source[:1] in [' ', '\t']:
2203 source = 'if 1:\n%s' % source
2204 source = 'if 1:\n%s' % source
2204
2205
2205 try:
2206 try:
2206 code = self.compile(source,filename,symbol)
2207 code = self.compile(source,filename,symbol)
2207 except (OverflowError, SyntaxError, ValueError, TypeError):
2208 except (OverflowError, SyntaxError, ValueError, TypeError):
2208 # Case 1
2209 # Case 1
2209 self.showsyntaxerror(filename)
2210 self.showsyntaxerror(filename)
2210 return None
2211 return None
2211
2212
2212 if code is None:
2213 if code is None:
2213 # Case 2
2214 # Case 2
2214 return True
2215 return True
2215
2216
2216 # Case 3
2217 # Case 3
2217 # We store the code object so that threaded shells and
2218 # We store the code object so that threaded shells and
2218 # custom exception handlers can access all this info if needed.
2219 # custom exception handlers can access all this info if needed.
2219 # The source corresponding to this can be obtained from the
2220 # The source corresponding to this can be obtained from the
2220 # buffer attribute as '\n'.join(self.buffer).
2221 # buffer attribute as '\n'.join(self.buffer).
2221 self.code_to_run = code
2222 self.code_to_run = code
2222 # now actually execute the code object
2223 # now actually execute the code object
2223 if self.runcode(code) == 0:
2224 if self.runcode(code) == 0:
2224 return False
2225 return False
2225 else:
2226 else:
2226 return None
2227 return None
2227
2228
2228 def runcode(self,code_obj):
2229 def runcode(self,code_obj):
2229 """Execute a code object.
2230 """Execute a code object.
2230
2231
2231 When an exception occurs, self.showtraceback() is called to display a
2232 When an exception occurs, self.showtraceback() is called to display a
2232 traceback.
2233 traceback.
2233
2234
2234 Return value: a flag indicating whether the code to be run completed
2235 Return value: a flag indicating whether the code to be run completed
2235 successfully:
2236 successfully:
2236
2237
2237 - 0: successful execution.
2238 - 0: successful execution.
2238 - 1: an error occurred.
2239 - 1: an error occurred.
2239 """
2240 """
2240
2241
2241 # Set our own excepthook in case the user code tries to call it
2242 # Set our own excepthook in case the user code tries to call it
2242 # directly, so that the IPython crash handler doesn't get triggered
2243 # directly, so that the IPython crash handler doesn't get triggered
2243 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2244 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2244
2245
2245 # we save the original sys.excepthook in the instance, in case config
2246 # we save the original sys.excepthook in the instance, in case config
2246 # code (such as magics) needs access to it.
2247 # code (such as magics) needs access to it.
2247 self.sys_excepthook = old_excepthook
2248 self.sys_excepthook = old_excepthook
2248 outflag = 1 # happens in more places, so it's easier as default
2249 outflag = 1 # happens in more places, so it's easier as default
2249 try:
2250 try:
2250 try:
2251 try:
2251 self.hooks.pre_runcode_hook()
2252 self.hooks.pre_runcode_hook()
2252 exec code_obj in self.user_global_ns, self.user_ns
2253 exec code_obj in self.user_global_ns, self.user_ns
2253 finally:
2254 finally:
2254 # Reset our crash handler in place
2255 # Reset our crash handler in place
2255 sys.excepthook = old_excepthook
2256 sys.excepthook = old_excepthook
2256 except SystemExit:
2257 except SystemExit:
2257 self.resetbuffer()
2258 self.resetbuffer()
2258 self.showtraceback()
2259 self.showtraceback()
2259 warn("Type %exit or %quit to exit IPython "
2260 warn("Type %exit or %quit to exit IPython "
2260 "(%Exit or %Quit do so unconditionally).",level=1)
2261 "(%Exit or %Quit do so unconditionally).",level=1)
2261 except self.custom_exceptions:
2262 except self.custom_exceptions:
2262 etype,value,tb = sys.exc_info()
2263 etype,value,tb = sys.exc_info()
2263 self.CustomTB(etype,value,tb)
2264 self.CustomTB(etype,value,tb)
2264 except:
2265 except:
2265 self.showtraceback()
2266 self.showtraceback()
2266 else:
2267 else:
2267 outflag = 0
2268 outflag = 0
2268 if softspace(sys.stdout, 0):
2269 if softspace(sys.stdout, 0):
2269 print
2270 print
2270 # Flush out code object which has been run (and source)
2271 # Flush out code object which has been run (and source)
2271 self.code_to_run = None
2272 self.code_to_run = None
2272 return outflag
2273 return outflag
2273
2274
2274 def push(self, line):
2275 def push(self, line):
2275 """Push a line to the interpreter.
2276 """Push a line to the interpreter.
2276
2277
2277 The line should not have a trailing newline; it may have
2278 The line should not have a trailing newline; it may have
2278 internal newlines. The line is appended to a buffer and the
2279 internal newlines. The line is appended to a buffer and the
2279 interpreter's runsource() method is called with the
2280 interpreter's runsource() method is called with the
2280 concatenated contents of the buffer as source. If this
2281 concatenated contents of the buffer as source. If this
2281 indicates that the command was executed or invalid, the buffer
2282 indicates that the command was executed or invalid, the buffer
2282 is reset; otherwise, the command is incomplete, and the buffer
2283 is reset; otherwise, the command is incomplete, and the buffer
2283 is left as it was after the line was appended. The return
2284 is left as it was after the line was appended. The return
2284 value is 1 if more input is required, 0 if the line was dealt
2285 value is 1 if more input is required, 0 if the line was dealt
2285 with in some way (this is the same as runsource()).
2286 with in some way (this is the same as runsource()).
2286 """
2287 """
2287
2288
2288 # autoindent management should be done here, and not in the
2289 # autoindent management should be done here, and not in the
2289 # interactive loop, since that one is only seen by keyboard input. We
2290 # interactive loop, since that one is only seen by keyboard input. We
2290 # need this done correctly even for code run via runlines (which uses
2291 # need this done correctly even for code run via runlines (which uses
2291 # push).
2292 # push).
2292
2293
2293 #print 'push line: <%s>' % line # dbg
2294 #print 'push line: <%s>' % line # dbg
2294 for subline in line.splitlines():
2295 for subline in line.splitlines():
2295 self.autoindent_update(subline)
2296 self.autoindent_update(subline)
2296 self.buffer.append(line)
2297 self.buffer.append(line)
2297 more = self.runsource('\n'.join(self.buffer), self.filename)
2298 more = self.runsource('\n'.join(self.buffer), self.filename)
2298 if not more:
2299 if not more:
2299 self.resetbuffer()
2300 self.resetbuffer()
2300 return more
2301 return more
2301
2302
2302 def split_user_input(self, line):
2303 def split_user_input(self, line):
2303 # This is really a hold-over to support ipapi and some extensions
2304 # This is really a hold-over to support ipapi and some extensions
2304 return prefilter.splitUserInput(line)
2305 return prefilter.splitUserInput(line)
2305
2306
2306 def resetbuffer(self):
2307 def resetbuffer(self):
2307 """Reset the input buffer."""
2308 """Reset the input buffer."""
2308 self.buffer[:] = []
2309 self.buffer[:] = []
2309
2310
2310 def raw_input(self,prompt='',continue_prompt=False):
2311 def raw_input(self,prompt='',continue_prompt=False):
2311 """Write a prompt and read a line.
2312 """Write a prompt and read a line.
2312
2313
2313 The returned line does not include the trailing newline.
2314 The returned line does not include the trailing newline.
2314 When the user enters the EOF key sequence, EOFError is raised.
2315 When the user enters the EOF key sequence, EOFError is raised.
2315
2316
2316 Optional inputs:
2317 Optional inputs:
2317
2318
2318 - prompt(''): a string to be printed to prompt the user.
2319 - prompt(''): a string to be printed to prompt the user.
2319
2320
2320 - continue_prompt(False): whether this line is the first one or a
2321 - continue_prompt(False): whether this line is the first one or a
2321 continuation in a sequence of inputs.
2322 continuation in a sequence of inputs.
2322 """
2323 """
2323
2324
2324 # Code run by the user may have modified the readline completer state.
2325 # Code run by the user may have modified the readline completer state.
2325 # We must ensure that our completer is back in place.
2326 # We must ensure that our completer is back in place.
2326 if self.has_readline:
2327 if self.has_readline:
2327 self.set_completer()
2328 self.set_completer()
2328
2329
2329 try:
2330 try:
2330 line = raw_input_original(prompt).decode(self.stdin_encoding)
2331 line = raw_input_original(prompt).decode(self.stdin_encoding)
2331 except ValueError:
2332 except ValueError:
2332 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2333 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2333 " or sys.stdout.close()!\nExiting IPython!")
2334 " or sys.stdout.close()!\nExiting IPython!")
2334 self.ask_exit()
2335 self.ask_exit()
2335 return ""
2336 return ""
2336
2337
2337 # Try to be reasonably smart about not re-indenting pasted input more
2338 # Try to be reasonably smart about not re-indenting pasted input more
2338 # than necessary. We do this by trimming out the auto-indent initial
2339 # than necessary. We do this by trimming out the auto-indent initial
2339 # spaces, if the user's actual input started itself with whitespace.
2340 # spaces, if the user's actual input started itself with whitespace.
2340 #debugx('self.buffer[-1]')
2341 #debugx('self.buffer[-1]')
2341
2342
2342 if self.autoindent:
2343 if self.autoindent:
2343 if num_ini_spaces(line) > self.indent_current_nsp:
2344 if num_ini_spaces(line) > self.indent_current_nsp:
2344 line = line[self.indent_current_nsp:]
2345 line = line[self.indent_current_nsp:]
2345 self.indent_current_nsp = 0
2346 self.indent_current_nsp = 0
2346
2347
2347 # store the unfiltered input before the user has any chance to modify
2348 # store the unfiltered input before the user has any chance to modify
2348 # it.
2349 # it.
2349 if line.strip():
2350 if line.strip():
2350 if continue_prompt:
2351 if continue_prompt:
2351 self.input_hist_raw[-1] += '%s\n' % line
2352 self.input_hist_raw[-1] += '%s\n' % line
2352 if self.has_readline: # and some config option is set?
2353 if self.has_readline: # and some config option is set?
2353 try:
2354 try:
2354 histlen = self.readline.get_current_history_length()
2355 histlen = self.readline.get_current_history_length()
2355 if histlen > 1:
2356 if histlen > 1:
2356 newhist = self.input_hist_raw[-1].rstrip()
2357 newhist = self.input_hist_raw[-1].rstrip()
2357 self.readline.remove_history_item(histlen-1)
2358 self.readline.remove_history_item(histlen-1)
2358 self.readline.replace_history_item(histlen-2,
2359 self.readline.replace_history_item(histlen-2,
2359 newhist.encode(self.stdin_encoding))
2360 newhist.encode(self.stdin_encoding))
2360 except AttributeError:
2361 except AttributeError:
2361 pass # re{move,place}_history_item are new in 2.4.
2362 pass # re{move,place}_history_item are new in 2.4.
2362 else:
2363 else:
2363 self.input_hist_raw.append('%s\n' % line)
2364 self.input_hist_raw.append('%s\n' % line)
2364 # only entries starting at first column go to shadow history
2365 # only entries starting at first column go to shadow history
2365 if line.lstrip() == line:
2366 if line.lstrip() == line:
2366 self.shadowhist.add(line.strip())
2367 self.shadowhist.add(line.strip())
2367 elif not continue_prompt:
2368 elif not continue_prompt:
2368 self.input_hist_raw.append('\n')
2369 self.input_hist_raw.append('\n')
2369 try:
2370 try:
2370 lineout = self.prefilter(line,continue_prompt)
2371 lineout = self.prefilter(line,continue_prompt)
2371 except:
2372 except:
2372 # blanket except, in case a user-defined prefilter crashes, so it
2373 # blanket except, in case a user-defined prefilter crashes, so it
2373 # can't take all of ipython with it.
2374 # can't take all of ipython with it.
2374 self.showtraceback()
2375 self.showtraceback()
2375 return ''
2376 return ''
2376 else:
2377 else:
2377 return lineout
2378 return lineout
2378
2379
2379 def _prefilter(self, line, continue_prompt):
2380 def _prefilter(self, line, continue_prompt):
2380 """Calls different preprocessors, depending on the form of line."""
2381 """Calls different preprocessors, depending on the form of line."""
2381
2382
2382 # All handlers *must* return a value, even if it's blank ('').
2383 # All handlers *must* return a value, even if it's blank ('').
2383
2384
2384 # Lines are NOT logged here. Handlers should process the line as
2385 # Lines are NOT logged here. Handlers should process the line as
2385 # needed, update the cache AND log it (so that the input cache array
2386 # needed, update the cache AND log it (so that the input cache array
2386 # stays synced).
2387 # stays synced).
2387
2388
2388 #.....................................................................
2389 #.....................................................................
2389 # Code begins
2390 # Code begins
2390
2391
2391 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2392 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2392
2393
2393 # save the line away in case we crash, so the post-mortem handler can
2394 # save the line away in case we crash, so the post-mortem handler can
2394 # record it
2395 # record it
2395 self._last_input_line = line
2396 self._last_input_line = line
2396
2397
2397 #print '***line: <%s>' % line # dbg
2398 #print '***line: <%s>' % line # dbg
2398
2399
2399 if not line:
2400 if not line:
2400 # Return immediately on purely empty lines, so that if the user
2401 # Return immediately on purely empty lines, so that if the user
2401 # previously typed some whitespace that started a continuation
2402 # previously typed some whitespace that started a continuation
2402 # prompt, he can break out of that loop with just an empty line.
2403 # prompt, he can break out of that loop with just an empty line.
2403 # This is how the default python prompt works.
2404 # This is how the default python prompt works.
2404
2405
2405 # Only return if the accumulated input buffer was just whitespace!
2406 # Only return if the accumulated input buffer was just whitespace!
2406 if ''.join(self.buffer).isspace():
2407 if ''.join(self.buffer).isspace():
2407 self.buffer[:] = []
2408 self.buffer[:] = []
2408 return ''
2409 return ''
2409
2410
2410 line_info = prefilter.LineInfo(line, continue_prompt)
2411 line_info = prefilter.LineInfo(line, continue_prompt)
2411
2412
2412 # the input history needs to track even empty lines
2413 # the input history needs to track even empty lines
2413 stripped = line.strip()
2414 stripped = line.strip()
2414
2415
2415 if not stripped:
2416 if not stripped:
2416 if not continue_prompt:
2417 if not continue_prompt:
2417 self.outputcache.prompt_count -= 1
2418 self.outputcache.prompt_count -= 1
2418 return self.handle_normal(line_info)
2419 return self.handle_normal(line_info)
2419
2420
2420 # print '***cont',continue_prompt # dbg
2421 # print '***cont',continue_prompt # dbg
2421 # special handlers are only allowed for single line statements
2422 # special handlers are only allowed for single line statements
2422 if continue_prompt and not self.rc.multi_line_specials:
2423 if continue_prompt and not self.rc.multi_line_specials:
2423 return self.handle_normal(line_info)
2424 return self.handle_normal(line_info)
2424
2425
2425
2426
2426 # See whether any pre-existing handler can take care of it
2427 # See whether any pre-existing handler can take care of it
2427 rewritten = self.hooks.input_prefilter(stripped)
2428 rewritten = self.hooks.input_prefilter(stripped)
2428 if rewritten != stripped: # ok, some prefilter did something
2429 if rewritten != stripped: # ok, some prefilter did something
2429 rewritten = line_info.pre + rewritten # add indentation
2430 rewritten = line_info.pre + rewritten # add indentation
2430 return self.handle_normal(prefilter.LineInfo(rewritten,
2431 return self.handle_normal(prefilter.LineInfo(rewritten,
2431 continue_prompt))
2432 continue_prompt))
2432
2433
2433 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2434 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2434
2435
2435 return prefilter.prefilter(line_info, self)
2436 return prefilter.prefilter(line_info, self)
2436
2437
2437
2438
2438 def _prefilter_dumb(self, line, continue_prompt):
2439 def _prefilter_dumb(self, line, continue_prompt):
2439 """simple prefilter function, for debugging"""
2440 """simple prefilter function, for debugging"""
2440 return self.handle_normal(line,continue_prompt)
2441 return self.handle_normal(line,continue_prompt)
2441
2442
2442
2443
2443 def multiline_prefilter(self, line, continue_prompt):
2444 def multiline_prefilter(self, line, continue_prompt):
2444 """ Run _prefilter for each line of input
2445 """ Run _prefilter for each line of input
2445
2446
2446 Covers cases where there are multiple lines in the user entry,
2447 Covers cases where there are multiple lines in the user entry,
2447 which is the case when the user goes back to a multiline history
2448 which is the case when the user goes back to a multiline history
2448 entry and presses enter.
2449 entry and presses enter.
2449
2450
2450 """
2451 """
2451 out = []
2452 out = []
2452 for l in line.rstrip('\n').split('\n'):
2453 for l in line.rstrip('\n').split('\n'):
2453 out.append(self._prefilter(l, continue_prompt))
2454 out.append(self._prefilter(l, continue_prompt))
2454 return '\n'.join(out)
2455 return '\n'.join(out)
2455
2456
2456 # Set the default prefilter() function (this can be user-overridden)
2457 # Set the default prefilter() function (this can be user-overridden)
2457 prefilter = multiline_prefilter
2458 prefilter = multiline_prefilter
2458
2459
2459 def handle_normal(self,line_info):
2460 def handle_normal(self,line_info):
2460 """Handle normal input lines. Use as a template for handlers."""
2461 """Handle normal input lines. Use as a template for handlers."""
2461
2462
2462 # With autoindent on, we need some way to exit the input loop, and I
2463 # With autoindent on, we need some way to exit the input loop, and I
2463 # don't want to force the user to have to backspace all the way to
2464 # don't want to force the user to have to backspace all the way to
2464 # clear the line. The rule will be in this case, that either two
2465 # clear the line. The rule will be in this case, that either two
2465 # lines of pure whitespace in a row, or a line of pure whitespace but
2466 # lines of pure whitespace in a row, or a line of pure whitespace but
2466 # of a size different to the indent level, will exit the input loop.
2467 # of a size different to the indent level, will exit the input loop.
2467 line = line_info.line
2468 line = line_info.line
2468 continue_prompt = line_info.continue_prompt
2469 continue_prompt = line_info.continue_prompt
2469
2470
2470 if (continue_prompt and self.autoindent and line.isspace() and
2471 if (continue_prompt and self.autoindent and line.isspace() and
2471 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2472 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2472 (self.buffer[-1]).isspace() )):
2473 (self.buffer[-1]).isspace() )):
2473 line = ''
2474 line = ''
2474
2475
2475 self.log(line,line,continue_prompt)
2476 self.log(line,line,continue_prompt)
2476 return line
2477 return line
2477
2478
2478 def handle_alias(self,line_info):
2479 def handle_alias(self,line_info):
2479 """Handle alias input lines. """
2480 """Handle alias input lines. """
2480 tgt = self.alias_table[line_info.iFun]
2481 tgt = self.alias_table[line_info.iFun]
2481 # print "=>",tgt #dbg
2482 # print "=>",tgt #dbg
2482 if callable(tgt):
2483 if callable(tgt):
2483 if '$' in line_info.line:
2484 if '$' in line_info.line:
2484 call_meth = '(_ip, _ip.itpl(%s))'
2485 call_meth = '(_ip, _ip.itpl(%s))'
2485 else:
2486 else:
2486 call_meth = '(_ip,%s)'
2487 call_meth = '(_ip,%s)'
2487 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2488 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2488 line_info.iFun,
2489 line_info.iFun,
2489 make_quoted_expr(line_info.line))
2490 make_quoted_expr(line_info.line))
2490 else:
2491 else:
2491 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2492 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2492
2493
2493 # pre is needed, because it carries the leading whitespace. Otherwise
2494 # pre is needed, because it carries the leading whitespace. Otherwise
2494 # aliases won't work in indented sections.
2495 # aliases won't work in indented sections.
2495 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2496 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2496 make_quoted_expr( transformed ))
2497 make_quoted_expr( transformed ))
2497
2498
2498 self.log(line_info.line,line_out,line_info.continue_prompt)
2499 self.log(line_info.line,line_out,line_info.continue_prompt)
2499 #print 'line out:',line_out # dbg
2500 #print 'line out:',line_out # dbg
2500 return line_out
2501 return line_out
2501
2502
2502 def handle_shell_escape(self, line_info):
2503 def handle_shell_escape(self, line_info):
2503 """Execute the line in a shell, empty return value"""
2504 """Execute the line in a shell, empty return value"""
2504 #print 'line in :', `line` # dbg
2505 #print 'line in :', `line` # dbg
2505 line = line_info.line
2506 line = line_info.line
2506 if line.lstrip().startswith('!!'):
2507 if line.lstrip().startswith('!!'):
2507 # rewrite LineInfo's line, iFun and theRest to properly hold the
2508 # rewrite LineInfo's line, iFun and theRest to properly hold the
2508 # call to %sx and the actual command to be executed, so
2509 # call to %sx and the actual command to be executed, so
2509 # handle_magic can work correctly. Note that this works even if
2510 # handle_magic can work correctly. Note that this works even if
2510 # the line is indented, so it handles multi_line_specials
2511 # the line is indented, so it handles multi_line_specials
2511 # properly.
2512 # properly.
2512 new_rest = line.lstrip()[2:]
2513 new_rest = line.lstrip()[2:]
2513 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2514 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2514 line_info.iFun = 'sx'
2515 line_info.iFun = 'sx'
2515 line_info.theRest = new_rest
2516 line_info.theRest = new_rest
2516 return self.handle_magic(line_info)
2517 return self.handle_magic(line_info)
2517 else:
2518 else:
2518 cmd = line.lstrip().lstrip('!')
2519 cmd = line.lstrip().lstrip('!')
2519 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2520 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2520 make_quoted_expr(cmd))
2521 make_quoted_expr(cmd))
2521 # update cache/log and return
2522 # update cache/log and return
2522 self.log(line,line_out,line_info.continue_prompt)
2523 self.log(line,line_out,line_info.continue_prompt)
2523 return line_out
2524 return line_out
2524
2525
2525 def handle_magic(self, line_info):
2526 def handle_magic(self, line_info):
2526 """Execute magic functions."""
2527 """Execute magic functions."""
2527 iFun = line_info.iFun
2528 iFun = line_info.iFun
2528 theRest = line_info.theRest
2529 theRest = line_info.theRest
2529 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2530 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2530 make_quoted_expr(iFun + " " + theRest))
2531 make_quoted_expr(iFun + " " + theRest))
2531 self.log(line_info.line,cmd,line_info.continue_prompt)
2532 self.log(line_info.line,cmd,line_info.continue_prompt)
2532 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2533 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2533 return cmd
2534 return cmd
2534
2535
2535 def handle_auto(self, line_info):
2536 def handle_auto(self, line_info):
2536 """Hande lines which can be auto-executed, quoting if requested."""
2537 """Hande lines which can be auto-executed, quoting if requested."""
2537
2538
2538 line = line_info.line
2539 line = line_info.line
2539 iFun = line_info.iFun
2540 iFun = line_info.iFun
2540 theRest = line_info.theRest
2541 theRest = line_info.theRest
2541 pre = line_info.pre
2542 pre = line_info.pre
2542 continue_prompt = line_info.continue_prompt
2543 continue_prompt = line_info.continue_prompt
2543 obj = line_info.ofind(self)['obj']
2544 obj = line_info.ofind(self)['obj']
2544
2545
2545 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2546 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2546
2547
2547 # This should only be active for single-line input!
2548 # This should only be active for single-line input!
2548 if continue_prompt:
2549 if continue_prompt:
2549 self.log(line,line,continue_prompt)
2550 self.log(line,line,continue_prompt)
2550 return line
2551 return line
2551
2552
2552 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2553 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2553 auto_rewrite = True
2554 auto_rewrite = True
2554
2555
2555 if pre == self.ESC_QUOTE:
2556 if pre == self.ESC_QUOTE:
2556 # Auto-quote splitting on whitespace
2557 # Auto-quote splitting on whitespace
2557 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2558 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2558 elif pre == self.ESC_QUOTE2:
2559 elif pre == self.ESC_QUOTE2:
2559 # Auto-quote whole string
2560 # Auto-quote whole string
2560 newcmd = '%s("%s")' % (iFun,theRest)
2561 newcmd = '%s("%s")' % (iFun,theRest)
2561 elif pre == self.ESC_PAREN:
2562 elif pre == self.ESC_PAREN:
2562 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2563 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2563 else:
2564 else:
2564 # Auto-paren.
2565 # Auto-paren.
2565 # We only apply it to argument-less calls if the autocall
2566 # We only apply it to argument-less calls if the autocall
2566 # parameter is set to 2. We only need to check that autocall is <
2567 # parameter is set to 2. We only need to check that autocall is <
2567 # 2, since this function isn't called unless it's at least 1.
2568 # 2, since this function isn't called unless it's at least 1.
2568 if not theRest and (self.rc.autocall < 2) and not force_auto:
2569 if not theRest and (self.rc.autocall < 2) and not force_auto:
2569 newcmd = '%s %s' % (iFun,theRest)
2570 newcmd = '%s %s' % (iFun,theRest)
2570 auto_rewrite = False
2571 auto_rewrite = False
2571 else:
2572 else:
2572 if not force_auto and theRest.startswith('['):
2573 if not force_auto and theRest.startswith('['):
2573 if hasattr(obj,'__getitem__'):
2574 if hasattr(obj,'__getitem__'):
2574 # Don't autocall in this case: item access for an object
2575 # Don't autocall in this case: item access for an object
2575 # which is BOTH callable and implements __getitem__.
2576 # which is BOTH callable and implements __getitem__.
2576 newcmd = '%s %s' % (iFun,theRest)
2577 newcmd = '%s %s' % (iFun,theRest)
2577 auto_rewrite = False
2578 auto_rewrite = False
2578 else:
2579 else:
2579 # if the object doesn't support [] access, go ahead and
2580 # if the object doesn't support [] access, go ahead and
2580 # autocall
2581 # autocall
2581 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2582 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2582 elif theRest.endswith(';'):
2583 elif theRest.endswith(';'):
2583 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2584 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2584 else:
2585 else:
2585 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2586 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2586
2587
2587 if auto_rewrite:
2588 if auto_rewrite:
2588 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2589 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2589
2590
2590 try:
2591 try:
2591 # plain ascii works better w/ pyreadline, on some machines, so
2592 # plain ascii works better w/ pyreadline, on some machines, so
2592 # we use it and only print uncolored rewrite if we have unicode
2593 # we use it and only print uncolored rewrite if we have unicode
2593 rw = str(rw)
2594 rw = str(rw)
2594 print >>Term.cout, rw
2595 print >>Term.cout, rw
2595 except UnicodeEncodeError:
2596 except UnicodeEncodeError:
2596 print "-------------->" + newcmd
2597 print "-------------->" + newcmd
2597
2598
2598 # log what is now valid Python, not the actual user input (without the
2599 # log what is now valid Python, not the actual user input (without the
2599 # final newline)
2600 # final newline)
2600 self.log(line,newcmd,continue_prompt)
2601 self.log(line,newcmd,continue_prompt)
2601 return newcmd
2602 return newcmd
2602
2603
2603 def handle_help(self, line_info):
2604 def handle_help(self, line_info):
2604 """Try to get some help for the object.
2605 """Try to get some help for the object.
2605
2606
2606 obj? or ?obj -> basic information.
2607 obj? or ?obj -> basic information.
2607 obj?? or ??obj -> more details.
2608 obj?? or ??obj -> more details.
2608 """
2609 """
2609
2610
2610 line = line_info.line
2611 line = line_info.line
2611 # We need to make sure that we don't process lines which would be
2612 # We need to make sure that we don't process lines which would be
2612 # otherwise valid python, such as "x=1 # what?"
2613 # otherwise valid python, such as "x=1 # what?"
2613 try:
2614 try:
2614 codeop.compile_command(line)
2615 codeop.compile_command(line)
2615 except SyntaxError:
2616 except SyntaxError:
2616 # We should only handle as help stuff which is NOT valid syntax
2617 # We should only handle as help stuff which is NOT valid syntax
2617 if line[0]==self.ESC_HELP:
2618 if line[0]==self.ESC_HELP:
2618 line = line[1:]
2619 line = line[1:]
2619 elif line[-1]==self.ESC_HELP:
2620 elif line[-1]==self.ESC_HELP:
2620 line = line[:-1]
2621 line = line[:-1]
2621 self.log(line,'#?'+line,line_info.continue_prompt)
2622 self.log(line,'#?'+line,line_info.continue_prompt)
2622 if line:
2623 if line:
2623 #print 'line:<%r>' % line # dbg
2624 #print 'line:<%r>' % line # dbg
2624 self.magic_pinfo(line)
2625 self.magic_pinfo(line)
2625 else:
2626 else:
2626 page(self.usage,screen_lines=self.rc.screen_length)
2627 page(self.usage,screen_lines=self.rc.screen_length)
2627 return '' # Empty string is needed here!
2628 return '' # Empty string is needed here!
2628 except:
2629 except:
2629 # Pass any other exceptions through to the normal handler
2630 # Pass any other exceptions through to the normal handler
2630 return self.handle_normal(line_info)
2631 return self.handle_normal(line_info)
2631 else:
2632 else:
2632 # If the code compiles ok, we should handle it normally
2633 # If the code compiles ok, we should handle it normally
2633 return self.handle_normal(line_info)
2634 return self.handle_normal(line_info)
2634
2635
2635 def getapi(self):
2636 def getapi(self):
2636 """ Get an IPApi object for this shell instance
2637 """ Get an IPApi object for this shell instance
2637
2638
2638 Getting an IPApi object is always preferable to accessing the shell
2639 Getting an IPApi object is always preferable to accessing the shell
2639 directly, but this holds true especially for extensions.
2640 directly, but this holds true especially for extensions.
2640
2641
2641 It should always be possible to implement an extension with IPApi
2642 It should always be possible to implement an extension with IPApi
2642 alone. If not, contact maintainer to request an addition.
2643 alone. If not, contact maintainer to request an addition.
2643
2644
2644 """
2645 """
2645 return self.api
2646 return self.api
2646
2647
2647 def handle_emacs(self, line_info):
2648 def handle_emacs(self, line_info):
2648 """Handle input lines marked by python-mode."""
2649 """Handle input lines marked by python-mode."""
2649
2650
2650 # Currently, nothing is done. Later more functionality can be added
2651 # Currently, nothing is done. Later more functionality can be added
2651 # here if needed.
2652 # here if needed.
2652
2653
2653 # The input cache shouldn't be updated
2654 # The input cache shouldn't be updated
2654 return line_info.line
2655 return line_info.line
2655
2656
2656
2657
2657 def mktempfile(self,data=None):
2658 def mktempfile(self,data=None):
2658 """Make a new tempfile and return its filename.
2659 """Make a new tempfile and return its filename.
2659
2660
2660 This makes a call to tempfile.mktemp, but it registers the created
2661 This makes a call to tempfile.mktemp, but it registers the created
2661 filename internally so ipython cleans it up at exit time.
2662 filename internally so ipython cleans it up at exit time.
2662
2663
2663 Optional inputs:
2664 Optional inputs:
2664
2665
2665 - data(None): if data is given, it gets written out to the temp file
2666 - data(None): if data is given, it gets written out to the temp file
2666 immediately, and the file is closed again."""
2667 immediately, and the file is closed again."""
2667
2668
2668 filename = tempfile.mktemp('.py','ipython_edit_')
2669 filename = tempfile.mktemp('.py','ipython_edit_')
2669 self.tempfiles.append(filename)
2670 self.tempfiles.append(filename)
2670
2671
2671 if data:
2672 if data:
2672 tmp_file = open(filename,'w')
2673 tmp_file = open(filename,'w')
2673 tmp_file.write(data)
2674 tmp_file.write(data)
2674 tmp_file.close()
2675 tmp_file.close()
2675 return filename
2676 return filename
2676
2677
2677 def write(self,data):
2678 def write(self,data):
2678 """Write a string to the default output"""
2679 """Write a string to the default output"""
2679 Term.cout.write(data)
2680 Term.cout.write(data)
2680
2681
2681 def write_err(self,data):
2682 def write_err(self,data):
2682 """Write a string to the default error output"""
2683 """Write a string to the default error output"""
2683 Term.cerr.write(data)
2684 Term.cerr.write(data)
2684
2685
2685 def ask_exit(self):
2686 def ask_exit(self):
2686 """ Call for exiting. Can be overiden and used as a callback. """
2687 """ Call for exiting. Can be overiden and used as a callback. """
2687 self.exit_now = True
2688 self.exit_now = True
2688
2689
2689 def exit(self):
2690 def exit(self):
2690 """Handle interactive exit.
2691 """Handle interactive exit.
2691
2692
2692 This method calls the ask_exit callback."""
2693 This method calls the ask_exit callback."""
2693
2694
2694 if self.rc.confirm_exit:
2695 if self.rc.confirm_exit:
2695 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2696 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2696 self.ask_exit()
2697 self.ask_exit()
2697 else:
2698 else:
2698 self.ask_exit()
2699 self.ask_exit()
2699
2700
2700 def safe_execfile(self,fname,*where,**kw):
2701 def safe_execfile(self,fname,*where,**kw):
2701 """A safe version of the builtin execfile().
2702 """A safe version of the builtin execfile().
2702
2703
2703 This version will never throw an exception, and knows how to handle
2704 This version will never throw an exception, and knows how to handle
2704 ipython logs as well.
2705 ipython logs as well.
2705
2706
2706 :Parameters:
2707 :Parameters:
2707 fname : string
2708 fname : string
2708 Name of the file to be executed.
2709 Name of the file to be executed.
2709
2710
2710 where : tuple
2711 where : tuple
2711 One or two namespaces, passed to execfile() as (globals,locals).
2712 One or two namespaces, passed to execfile() as (globals,locals).
2712 If only one is given, it is passed as both.
2713 If only one is given, it is passed as both.
2713
2714
2714 :Keywords:
2715 :Keywords:
2715 islog : boolean (False)
2716 islog : boolean (False)
2716
2717
2717 quiet : boolean (True)
2718 quiet : boolean (True)
2718
2719
2719 exit_ignore : boolean (False)
2720 exit_ignore : boolean (False)
2720 """
2721 """
2721
2722
2722 def syspath_cleanup():
2723 def syspath_cleanup():
2723 """Internal cleanup routine for sys.path."""
2724 """Internal cleanup routine for sys.path."""
2724 if add_dname:
2725 if add_dname:
2725 try:
2726 try:
2726 sys.path.remove(dname)
2727 sys.path.remove(dname)
2727 except ValueError:
2728 except ValueError:
2728 # For some reason the user has already removed it, ignore.
2729 # For some reason the user has already removed it, ignore.
2729 pass
2730 pass
2730
2731
2731 fname = os.path.expanduser(fname)
2732 fname = os.path.expanduser(fname)
2732
2733
2733 # Find things also in current directory. This is needed to mimic the
2734 # Find things also in current directory. This is needed to mimic the
2734 # behavior of running a script from the system command line, where
2735 # behavior of running a script from the system command line, where
2735 # Python inserts the script's directory into sys.path
2736 # Python inserts the script's directory into sys.path
2736 dname = os.path.dirname(os.path.abspath(fname))
2737 dname = os.path.dirname(os.path.abspath(fname))
2737 add_dname = False
2738 add_dname = False
2738 if dname not in sys.path:
2739 if dname not in sys.path:
2739 sys.path.insert(0,dname)
2740 sys.path.insert(0,dname)
2740 add_dname = True
2741 add_dname = True
2741
2742
2742 try:
2743 try:
2743 xfile = open(fname)
2744 xfile = open(fname)
2744 except:
2745 except:
2745 print >> Term.cerr, \
2746 print >> Term.cerr, \
2746 'Could not open file <%s> for safe execution.' % fname
2747 'Could not open file <%s> for safe execution.' % fname
2747 syspath_cleanup()
2748 syspath_cleanup()
2748 return None
2749 return None
2749
2750
2750 kw.setdefault('islog',0)
2751 kw.setdefault('islog',0)
2751 kw.setdefault('quiet',1)
2752 kw.setdefault('quiet',1)
2752 kw.setdefault('exit_ignore',0)
2753 kw.setdefault('exit_ignore',0)
2753
2754
2754 first = xfile.readline()
2755 first = xfile.readline()
2755 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2756 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2756 xfile.close()
2757 xfile.close()
2757 # line by line execution
2758 # line by line execution
2758 if first.startswith(loghead) or kw['islog']:
2759 if first.startswith(loghead) or kw['islog']:
2759 print 'Loading log file <%s> one line at a time...' % fname
2760 print 'Loading log file <%s> one line at a time...' % fname
2760 if kw['quiet']:
2761 if kw['quiet']:
2761 stdout_save = sys.stdout
2762 stdout_save = sys.stdout
2762 sys.stdout = StringIO.StringIO()
2763 sys.stdout = StringIO.StringIO()
2763 try:
2764 try:
2764 globs,locs = where[0:2]
2765 globs,locs = where[0:2]
2765 except:
2766 except:
2766 try:
2767 try:
2767 globs = locs = where[0]
2768 globs = locs = where[0]
2768 except:
2769 except:
2769 globs = locs = globals()
2770 globs = locs = globals()
2770 badblocks = []
2771 badblocks = []
2771
2772
2772 # we also need to identify indented blocks of code when replaying
2773 # we also need to identify indented blocks of code when replaying
2773 # logs and put them together before passing them to an exec
2774 # logs and put them together before passing them to an exec
2774 # statement. This takes a bit of regexp and look-ahead work in the
2775 # statement. This takes a bit of regexp and look-ahead work in the
2775 # file. It's easiest if we swallow the whole thing in memory
2776 # file. It's easiest if we swallow the whole thing in memory
2776 # first, and manually walk through the lines list moving the
2777 # first, and manually walk through the lines list moving the
2777 # counter ourselves.
2778 # counter ourselves.
2778 indent_re = re.compile('\s+\S')
2779 indent_re = re.compile('\s+\S')
2779 xfile = open(fname)
2780 xfile = open(fname)
2780 filelines = xfile.readlines()
2781 filelines = xfile.readlines()
2781 xfile.close()
2782 xfile.close()
2782 nlines = len(filelines)
2783 nlines = len(filelines)
2783 lnum = 0
2784 lnum = 0
2784 while lnum < nlines:
2785 while lnum < nlines:
2785 line = filelines[lnum]
2786 line = filelines[lnum]
2786 lnum += 1
2787 lnum += 1
2787 # don't re-insert logger status info into cache
2788 # don't re-insert logger status info into cache
2788 if line.startswith('#log#'):
2789 if line.startswith('#log#'):
2789 continue
2790 continue
2790 else:
2791 else:
2791 # build a block of code (maybe a single line) for execution
2792 # build a block of code (maybe a single line) for execution
2792 block = line
2793 block = line
2793 try:
2794 try:
2794 next = filelines[lnum] # lnum has already incremented
2795 next = filelines[lnum] # lnum has already incremented
2795 except:
2796 except:
2796 next = None
2797 next = None
2797 while next and indent_re.match(next):
2798 while next and indent_re.match(next):
2798 block += next
2799 block += next
2799 lnum += 1
2800 lnum += 1
2800 try:
2801 try:
2801 next = filelines[lnum]
2802 next = filelines[lnum]
2802 except:
2803 except:
2803 next = None
2804 next = None
2804 # now execute the block of one or more lines
2805 # now execute the block of one or more lines
2805 try:
2806 try:
2806 exec block in globs,locs
2807 exec block in globs,locs
2807 except SystemExit:
2808 except SystemExit:
2808 pass
2809 pass
2809 except:
2810 except:
2810 badblocks.append(block.rstrip())
2811 badblocks.append(block.rstrip())
2811 if kw['quiet']: # restore stdout
2812 if kw['quiet']: # restore stdout
2812 sys.stdout.close()
2813 sys.stdout.close()
2813 sys.stdout = stdout_save
2814 sys.stdout = stdout_save
2814 print 'Finished replaying log file <%s>' % fname
2815 print 'Finished replaying log file <%s>' % fname
2815 if badblocks:
2816 if badblocks:
2816 print >> sys.stderr, ('\nThe following lines/blocks in file '
2817 print >> sys.stderr, ('\nThe following lines/blocks in file '
2817 '<%s> reported errors:' % fname)
2818 '<%s> reported errors:' % fname)
2818
2819
2819 for badline in badblocks:
2820 for badline in badblocks:
2820 print >> sys.stderr, badline
2821 print >> sys.stderr, badline
2821 else: # regular file execution
2822 else: # regular file execution
2822 try:
2823 try:
2823 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2824 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2824 # Work around a bug in Python for Windows. The bug was
2825 # Work around a bug in Python for Windows. The bug was
2825 # fixed in in Python 2.5 r54159 and 54158, but that's still
2826 # fixed in in Python 2.5 r54159 and 54158, but that's still
2826 # SVN Python as of March/07. For details, see:
2827 # SVN Python as of March/07. For details, see:
2827 # http://projects.scipy.org/ipython/ipython/ticket/123
2828 # http://projects.scipy.org/ipython/ipython/ticket/123
2828 try:
2829 try:
2829 globs,locs = where[0:2]
2830 globs,locs = where[0:2]
2830 except:
2831 except:
2831 try:
2832 try:
2832 globs = locs = where[0]
2833 globs = locs = where[0]
2833 except:
2834 except:
2834 globs = locs = globals()
2835 globs = locs = globals()
2835 exec file(fname) in globs,locs
2836 exec file(fname) in globs,locs
2836 else:
2837 else:
2837 execfile(fname,*where)
2838 execfile(fname,*where)
2838 except SyntaxError:
2839 except SyntaxError:
2839 self.showsyntaxerror()
2840 self.showsyntaxerror()
2840 warn('Failure executing file: <%s>' % fname)
2841 warn('Failure executing file: <%s>' % fname)
2841 except SystemExit,status:
2842 except SystemExit,status:
2842 # Code that correctly sets the exit status flag to success (0)
2843 # Code that correctly sets the exit status flag to success (0)
2843 # shouldn't be bothered with a traceback. Note that a plain
2844 # shouldn't be bothered with a traceback. Note that a plain
2844 # sys.exit() does NOT set the message to 0 (it's empty) so that
2845 # sys.exit() does NOT set the message to 0 (it's empty) so that
2845 # will still get a traceback. Note that the structure of the
2846 # will still get a traceback. Note that the structure of the
2846 # SystemExit exception changed between Python 2.4 and 2.5, so
2847 # SystemExit exception changed between Python 2.4 and 2.5, so
2847 # the checks must be done in a version-dependent way.
2848 # the checks must be done in a version-dependent way.
2848 show = False
2849 show = False
2849
2850
2850 if sys.version_info[:2] > (2,5):
2851 if sys.version_info[:2] > (2,5):
2851 if status.message!=0 and not kw['exit_ignore']:
2852 if status.message!=0 and not kw['exit_ignore']:
2852 show = True
2853 show = True
2853 else:
2854 else:
2854 if status.code and not kw['exit_ignore']:
2855 if status.code and not kw['exit_ignore']:
2855 show = True
2856 show = True
2856 if show:
2857 if show:
2857 self.showtraceback()
2858 self.showtraceback()
2858 warn('Failure executing file: <%s>' % fname)
2859 warn('Failure executing file: <%s>' % fname)
2859 except:
2860 except:
2860 self.showtraceback()
2861 self.showtraceback()
2861 warn('Failure executing file: <%s>' % fname)
2862 warn('Failure executing file: <%s>' % fname)
2862
2863
2863 syspath_cleanup()
2864 syspath_cleanup()
2864
2865
2865 #************************* end of file <iplib.py> *****************************
2866 #************************* end of file <iplib.py> *****************************
General Comments 0
You need to be logged in to leave comments. Login now