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